Skip to content

Latest commit

 

History

History
76 lines (42 loc) · 4.45 KB

5-5.md

File metadata and controls

76 lines (42 loc) · 4.45 KB

5-5 音效

这里的「音效」指的是 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 中,可以这样做:

  1. 先输入 Sound,按 Tab 自动补全,IDEA 即自动为你导入 Sound 枚举

  2. 输入一个点(.),IDEA 便会弹出所有可能的值,用上下键选择,按 Tab 接受

  3. 如果要进行查找,可以输入值的一部分,例如,如果我想查找凋灵的音效,就应该像这样:

    FINDSOUND.png

Bukkit 对音效的命名很规范,全大写,都是 <类别>_<主体>_<行为>,例如 ENTITY_WITHER_SPAWN 就是「实体 - 凋灵生成」音效。这样应该很方便就能找到需要的声音。

此外,你还可以通过将第三个参数设置为 SoundCategory.MUSIC 来告知客户端:「正在播放背景音乐哦」。

这样,客户端应当会暂停原先的背景音乐播放,转而先播放指定的声音。(说「应当」是因为有时候这个参数能够生效,有时候不行)

而如果没有指定这一点,那么客户端会认为「这是个很短的音效」,就不会暂停。

借助资源包

我们可以利用资源包来替换 Minecraft 的原版声音。早就该这样了

资源包的制作并不是本教程的一部分,因此我们不详细说明,你可以在 Wiki 上的教程 中找到相关的内容。

不要依赖声音

!> 请尊重玩家
声音也许很适合用来渲染环境,但绝对不适合用于传递信息!
很多玩家的游戏环境也许不适合打开声音,玩家的声卡可能没有正常驱动,这都是要考虑到的问题。(我玩 Minecraft 从来都不开声音的)
另外,过大的资源包可能会被客户端(自动)拒绝下载。

总而言之,声音只是点缀有做声音的功夫还不如改进游戏内容呢