危险

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

Bukkit

适用于 Bukkit 的 Adventure 平台实现支持 Minecraft 1.7.10 至 1.17.1 的 Paper, Spigot, 以及 Bukkit.

添加这些构件到你的构建文件:

首先, 添加仓库:

<repositories>
    <!-- ... -->
    <repository> <!-- 对于开发构建 -->
      <id>sonatype-oss-snapshots</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </repository>
    <!-- ... -->
</repositories>

声明依赖:

<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-platform-bukkit</artifactId>
<version>4.0.0</version>
</dependency>

用法

你首先应该获得一个 BukkitAudiences 对象通过使用 BukkitAudiences.create(plugin). 该对象是线程安全的, 因此如果需要的话可以被在不同的线程中重用. 从这里开始, Bukkit 的 CommandSenderPlayer 将可以被转换为 Audience 通过在 BukkitAudiences 上使用适当的方法.

为了清理资源以及提高 /reload 成功的可能性, 当一个插件被关闭时, 听众对象也应当被关闭.

public class MyPlugin extends JavaPlugin {

  private BukkitAudiences adventure;

  public @NonNull BukkitAudiences adventure() {
    if(this.adventure == null) {
      throw new IllegalStateException("Tried to access Adventure when the plugin was disabled!");
    }
    return this.adventure;
  }

  @Override
  public void onEnable() {
    // 为插件实例化听众对象
    this.adventure = BukkitAudiences.create(this);
    // 然后进行其他初始化操作
  }

  @Override
  public void onDisable() {
    if(this.adventure != null) {
      this.adventure.close();
      this.adventure = null;
    }
  }
}

该听众提供器应该被直接用做序列化器上, 它将处理跨版本发送消息的兼容性措施.

组件序列化器

对于未覆盖 Audience 接口的领域, Bukkit 平台提供了 MinecraftComponentSerializer (可用于基于 Craftbukkit 的服务器), 和 BungeeComponentSerializer (可用于基于 Spigot 和 Paper 的服务器) 来直接在 Adventure Components 和其他组件类型中作转换. 对于使用那些不直接与原生类型继承的用途, JSON 和旧版风格格式的序列化器在这些运行的服务器版本上也被暴露于 BukkitComponentSerializer.