危险

Adventure 文档目前仍为 尚在施工 状态,并且作为 Javadocs 的补充. 一些地方可能覆盖面有限,或可能不是完全最新的. 所有你有任何问题,欢迎加入我们的 Discord.

音效 (Sound)

Adventure 包含一个 API 以播放任何内建或资源包提供的音效. 注意不是所有的平台都实现了播放音效.

构造一个音效

音效由以下内容组成:
  • 一个 Key (更广为人知的说法是 Identifier 或者 ResourceLocation), 被用作决定要播放的音效. 可以使用任何从资源包自定义的音效. 如果客户端不理解这个音效, 则将会被忽略 (客户端日志将会打印一个警告提示).

  • 一个音效来源, 被用作告诉客户端听到的音效的类型. 客户端的音效设定也归因于来源.

  • 一个数字, 被用作决定音效可被听到的半径.

  • 一个从 0 到 2 的数字, 被用作决定要播放音效的音高。

示例:

// 使用标准的音量和音高创建一个内建的音效
Sound musicDisc = Sound.sound(Key.key("music_disc.13"), Sound.Source.MUSIC, 1f, 1f);

// 从我们的资源包创建一个拥有更高音高的音效
Sound myCustomSound = Sound.sound(Key.key("adventure", "rawr"), Sound.Source.AMBIENT, 1f, 1.1f);

播放一个音效

警告

客户端可以同时播放多个音效, 但是从 1.16 开始被限制为只能同时播放 8 个音效.

因为 MC-138832, 使用发射器 (emitter) 播放的音效的音量和升高可能被忽略.

MC-146721 所述, 任何立体声音效都将不会在一个指定位置或跟随一个实体播放 , 因此, 位置和发射器参数将会忽略.

一旦你创建了一个音效, 便可以使用多种方法向一个听众播放:

// 在听众所在的位置播放一个音效
audience.playSound(sound);

// 在指定位置播放一个音效
audience.playSound(sound, 100, 0, 150);

// 播放一个跟随听众成员的音效
audience.playSound(sound, Sound.Emitter.self());

// 播放一个跟随其他发射器 (通常是一个实体) 的音效
audience.playSound(sound, someEntity);

停止一个音效

一个音效停止 (sound stop) 将可以停止选定的音效 – 从客户端正在播放的所有音效, 到特定名称的音效.

 public void stopMySound(final @NonNull Audience target) {
  // 为目标停止一个音效
  target.stopSound(SoundStop.named(Key.key("music_disc.13"));
  // 为目标停止所有天气音效
  target.stopSound(SoundStop.source(Sound.Source.WEATHER));
  // 为目标停止所有音效
  target.stopSound(SoundStop.all());
}

音效停止也可以通过使用下面示例块中的方法被构造. 或者,他们也可以被直接从一个音效中构造.

// 获得一个能够停止特性音效的音效停止对象
mySound.asStop();

// 音效也可以通过使用 stopSound 方法被直接停止
audience.stopSound(mySound);

创建一个自定义音效

使用 sounds.json 来在一个资源包中定义音效. 进一步了解有关内容可阅读 Minecraft Wiki