这里的「音效」指的是 Minecraft 原版音效。
?> 插件的局限?
有时候我们不得不面对一个现实:有些东西,即使我们拼尽全力也无法做到。
比如,这里音效的限制。虽然我们可以通过建议玩家使用资源包来替换服务器内的一些音效,但却无法添加单独的音效。同样,也无法在没有 Mod 支持的情况下进行自定义点歌。
笔者不准备讲述 Mod 与插件联合开发的方法,因为那样感觉就失去了插件的意义……既然你都用 Mod 了,还用插件做什么呢?
嗯,就说这么多吧,总之,我们在插件开发时拼尽全力,如果做不到,也不要强求。
播放音效和播放粒子效果很像,只不过这次使用的是 World
接口的 playSound
方法。
下面我们演示如何播放凋灵生成的音效:
World overworld = Bukkit.getWorlds().get(0);
// 主世界
Player player = Objects.requireNonNull(Bukkit.getPlayer("ThatRarityEG"));
// 随便找个玩家
overworld.playSound(
player.getLocation(), // Location 对象确定位置
Sound.ENTITY_WITHER_SPAWN, // 音效
SoundCategory.HOSTILE, // 可选,音效分类
1, // 音量,参考下面的说明
1 // 播放速度
);
这里有五个参数。
-
Location
是音源,表示这个声音是从哪里传来的,Bukkit 用它来计算声音的衰减 -
Sound.ENTITY_WITHER_SPAWNED
是音效,只能取Sound
枚举中的一个值,可以参考Sound
枚举中的内容(查 JavaDocs 或者反编译) -
SoundCategory.HOSTILE
是音效分类,是可选的,这可能影响 Bukkit 如何处理该音效,如果不填,Bukkit 将会自动选择合适的分类 -
第一个
1
是音量,该音量值乘上玩家客户端的音量值即为最终音量,如果该值(这里设定的音量)超过了 1,音量将被限制在 1 * 「玩家客户端音量值」但这个值还会影响音量衰减,例如,设置为 1 和 10 都可以让客户端播放玩家允许的最大声音,但设置为 1 的声音在 15 格之外就听不到了,而设置为 10 的在 150 格之内仍然可以被听见,这个距离是与音源的距离
-
第二个
1
是播放速度,0.5
为减速至一半,2
为加速一倍,如果不是1
听上去会有点奇怪,因此不建议修改
那么怎么查到所有的 Sound
呢?除了查 JavaDocs 就没有更好的方法吗?
当然有!如果你还在 IDEA 中,可以这样做:
-
先输入
Sound
,按 Tab 自动补全,IDEA 即自动为你导入Sound
枚举 -
输入一个点(
.
),IDEA 便会弹出所有可能的值,用上下键选择,按 Tab 接受 -
如果要进行查找,可以输入值的一部分,例如,如果我想查找凋灵的音效,就应该像这样:
Bukkit 对音效的命名很规范,全大写,都是 <类别>_<主体>_<行为>
,例如 ENTITY_WITHER_SPAWN
就是「实体 - 凋灵生成」音效。这样应该很方便就能找到需要的声音。
此外,你还可以通过将第三个参数设置为 SoundCategory.MUSIC
来告知客户端:「正在播放背景音乐哦」。
这样,客户端应当会暂停原先的背景音乐播放,转而先播放指定的声音。(说「应当」是因为有时候这个参数能够生效,有时候不行)
而如果没有指定这一点,那么客户端会认为「这是个很短的音效」,就不会暂停。
我们可以利用资源包来替换 Minecraft 的原版声音。早就该这样了
资源包的制作并不是本教程的一部分,因此我们不详细说明,你可以在 Wiki 上的教程 中找到相关的内容。
!> 请尊重玩家!
声音也许很适合用来渲染环境,但绝对不适合用于传递信息!
很多玩家的游戏环境也许不适合打开声音,玩家的声卡可能没有正常驱动,这都是要考虑到的问题。(我玩 Minecraft 从来都不开声音的)
另外,过大的资源包可能会被客户端(自动)拒绝下载。
总而言之,声音只是点缀。有做声音的功夫还不如改进游戏内容呢