我的世界Bukkit服务器插件开发教程(十一)粒子、药水效果与音效
十一、粒子、药水效果与音效
太简单了吧!
1.粒子效果
1.1.基本操作
播放粒子,首先需要确定粒子需要播放的位置。需要注意,我们一次只能播放一个粒子,如果需要播放多个粒子的话……也不麻烦。
播放粒子的方法是spawnParticle
方法,它有许多重载,最为简单的一种是:
void spawnParticle(@NotNull Particle var1, @NotNull Location var2, int var3);
Particle
类是一个枚举类,它决定了粒子的形状。比如HEART
就是爱心的形状,我们就以HEART
为实例。
Location
顾名思义,就是粒子的位置,最后一个参数表示播放的次数。
player.spawnParticle(Particle.HEART, player.getLocation(), 10);
如上,我们播放在玩家的位置10次爱心粒子。
1.2.我需要美观!
上面的虽然播放了粒子,却总感觉不够的逼格。
假如此刻有个拥有主角光环的玩家,TA 的周围应有一圈粒子,玩家和粒子在同一平面内,我们应该怎么播放这一堆粒子。
建立一个平面直角坐标系 x O y xOy xOy,任取一点 A ( x , y ) A(x,y) A(x,y),将玩家看成点 A A A,作以 A A A 为圆心,半径为 3 3 3 的圆,圆上任意一点 P ( x 1 , y 1 ) P(x1,y1) P(x1,y1),求 P P P 点坐标。设圆的步长为 3 3 3。(本题 150 150 150 分)
解:
x 1 = x + 3 × sin ( 3 × 3.14 ÷ 180 ) , x1=x+3 \times \sin(3 \times 3.14 \div 180), x1=x+3×sin(3×3.14÷180),
y 1 = y + 3 × cos ( 3 × 3.14 ÷ 180 ) y1=y+3 \times \cos(3 \times 3.14 \div 180) y1=y+3×cos(3×3.14÷180)
答:我不会。
但是,在 Minecraft 坐标系中, y y y 轴是竖轴,这点很坑人。
private void drawCircle(double ao, double r, Player player) {Location location = player.getLocation();double x = location.getX();double y = location.getY();double z = location.getZ();for(int i = 0; i <= 360; i += ao) {double x1 = x + r * Math.sin((double)i * Math.PI / 180.0);//y轴是竖轴,z才是纵轴!double z1 = z + r * Math.cos((double)i * Math.PI / 180.0);player.spawnParticle(Particle.HEART, new Location(player.getWorld(), x1, y, z1), 10);}
}
效果图:
2.药水效果
自己添加一个新的药水效果是不可能的,亲这边建议你转 Mod 开发,插件开发也要看服务器心情呢。
2.1.原版药水效果
某个人犯了大错,腐竹为了惩罚 TA 而想给予 TA 无限的 中毒效果。
public PotionEffect(@NotNull PotionEffectType type, int duration, int amplifier);
可以看出,这是一个构造方法,PotionEffect
类的构造方法还有着许多重载。这里是其中一种,我们看一看参数:
type
表示效果的类型,是一个枚举类。duration
是持续时间,单位为tick
。amplifier
指效果倍率,可以加快效率。
如上,我们可以为玩家加入一个药水效果。我们可以使用Player
类中的addPotionEffect
方法为玩家添加药水效果。
//给予玩家 100ticks 中毒效果,1x倍率
player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 1));
自定义药水效果
原版的药水效果不满足,我们还可以自定义药水效果,好比我们之前自定义实体一样(哎呀就是上一章,时间久了都不知道了),我们需要继承PotionEffect
类。
public class GoodLuckEffect extends PotionEffect {public GoodLuckEffect(@NotNull PotionEffectType type, int duration, int amplifier) {super(type, duration, amplifier);}
}
整个PotionEffect
类中也就只有apply
方法值得我们重载了罢。它尝试添加此效果到指定的生物上,这里我们当然要添加成功:
@Override
public boolean apply(LivingEntity entity) {return true;
}
给予我们的参数居然是个活性实体,我们可以设置该实体免受伤害的时间:
entity.setMaximumNoDamageTicks(getDuration() * 5);
完整代码:
public class GoodLuckEffect extends PotionEffect {public GoodLuckEffect(@NotNull PotionEffectType type, int duration, int amplifier) {super(type, duration, amplifier);}@Overridepublic boolean apply(LivingEntity entity) {entity.sendMessage("幸运之人免受伤害!");entity.setMaximumNoDamageTicks(getDuration() * 5);return true;}
}
3.音效
当我们右键傻子村民时,村民会发出“哼啊”的声音,这就是在村民所在位置播放音效。
3.1.指定位置播放音效
播放音效需要指定播放的位置,这样 Bukkit 可以计算声音传播的距离及其传播过程中的衰减。
凡是涉及到「位置」的都要提及World
,于是乎我们应获取相应的世界和位置,才能播放音效。
void playSound(@NotNull Location var1, @NotNull Sound var2, float var3, float var4);
第一个参数var1
表示播放的位置,后一个表示播放何种音效。
其后两个单浮点数中,第一个表示音量,只能小于等于 1,否则会被强制控制为 1,它表示了玩家使用的客户端音量的百分比是多少。第二个参数则是播放倍速。
player.getWorld().playSound(player.getLocation(), Sound.MUSIC_DISC_11, 1, 1);
如上,我们给player
本身播放11
号唱片,这样所有靠近该玩家的实体都可以听到11
号唱片。
上一篇:我的世界Bukkit服务器插件开发教程(十)实体
下一篇:我的世界Bukkit服务器插件开发教程(十二)物品与监听事件
我的世界Bukkit服务器插件开发教程(十一)粒子、药水效果与音效相关推荐
- 我的世界Bukkit服务器插件开发教程(七)计分板
七.计分板 写在前面 对于计分板,相信大部分人会认为这是一个计分的玩意.但不然,它的用处远远不止计分那样简单,计分板在服务器中起着重要的作用,在大部分插件中都有着它的身影. 另注:本章节有大量干货,请 ...
- 我的世界Bukkit服务器插件开发教程(五)方块Blocks
五.方块Blocks 我怕不更新会被骂,所以更了. 坐标系 小伙纸,求一下∑i=0∞i2\sum_{i=0}^\infty i^2∑i=0∞i2(bushi 是的,你没猜错,我们要涉及到史上最NB超 ...
- 我的世界Bukkit服务器插件开发教程(十五)世界生成器
十五.世界生成器 如果你仔细观察,会发现有个叫saves的文件夹,这个文件夹是用来存放存档的,即我们平常说的世界. 显然,服务器承担了创建世界.加载世界的任务.Bukkit 中也有专门生成世界的生成器 ...
- 我的世界Bukkit服务器插件开发教程(一)第一个插件
一.第一个插件 这一章节,我们会开发第一个属于自己的插件 在这之前,我们还需了解plugin.yml和config.yml,并大概了解插件的原理 plugin.yml 这个文件必须存在,否则读不出来. ...
- 我的世界Bukkit服务器插件开发教程(八)进度条与自定义合成表
八.进度条与自定义合成表 写在前面 本来我想将进度放入本章节当中,但无奈进度牵扯到json文件,估计我又要叽叽喳喳讲一堆json,出于人最基本的性格,这章节暂且不讲. 进度条 说起进度条,打个最简单的 ...
- 我的世界Bukkit服务器插件开发教程(十三)资源包与玩家资料
十三.资源包与玩家资料 1.资源包(Resource Pack) 早期的 Minecraft 并没有资源包一说,而是被叫做材质包.有些服务器为了让玩家拥有更好的游戏体验,一般会在自己特制的客户端中存放 ...
- 我的世界bukkit服务器开发教程第一章——开发环境
提示:如果图片看不见或者文字有乱码,请到我的网站:www.xiaoguaimao.cn 前言: 本教程共分为两个部分: 1.服务器插件开发 2.服务器专属启动器开发 如果你学过编程,那你会很轻松,如果 ...
- 我的世界虚拟服务器架设,我的世界Minecraft服务器架设教程_服务器怎么建立
[导读]我的世界Minecraft服务器架设教程. 下面给大家带来<我的世界>Minecraft服务器的架设教程,让大家对我的世界服务器建立有一个不错的认识,从怎么建立,到怎么维护做一个系 ...
- 伤害世界怎么自建服务器,伤害世界Hurtworld服务器架设教程
<伤害世界(Hurtworld)>虽然支持国内直连,不过还是会出现不稳定的情况,自建服务器的好处在于可以有一个稳定的游戏环境,那么本作该如何架设服务器呢,下面带来Hurtworld服务器架 ...
最新文章
- 福利 | NVIDIA英伟达免费直播课:带你选择、搭建AI服务器!
- [公告]我的Live Spaces - 读书空间
- python自学书籍推荐豆瓣-入门python有什么好的书籍推荐?
- Win64 驱动内核编程-6.内核里操作注册表
- 网络爬虫:URL去重策略之布隆过滤器(BloomFilter)的使用
- SAP CRM user参数CRM_UI_PROFILE是在哪行ABAP代码里读取的
- 使用Robolectric对android程序实现自动化测试
- Linux基础知识整理
- Java交流|面试最后一问:你有什么问题想问我吗?
- 13 计算机组成原理第七章 输入/输出系统 I/O方式 I/O接口
- html文字和下划线怎么分开,HTML css样式怎样才能像下图那样把文字分开,还有下划线,请帮我补写下 ,谢谢!!...
- 【2021山东大学数字逻辑实验7】异步模8加1计数器
- 手把手教你用Python操纵Word自动编写离职报告!
- PHP实现图片加文字/图案水印
- RabbitMQ入门 -- 阿里云服务器安装RabbitMQ
- 【Twitter 舆论分析】Twitter 爬虫绕过API限制
- 《2022年 Android 中高级面试题汇总》及答案整理(备战金九银十)
- 大连海事大学计算机20考研(计算机应用 技术)专硕410+经验贴
- linux+gunzip解压命令,Linux gunzip命令解析 gunzip解压文件的方法
- VS2005 制作安装程序