常见陷阱
虽然我们努力使 API 使用起来令人愉快,但偶尔也会有一些棘手的问题,你应该注意这些问题。
在构造时访问 API
在 Velocity 中,插件加载分为两个步骤:构造和初始化。你的插件构造函数中的代码是构造阶段的一部分。 在构造期间你能安全做的事情很少,特别是因为 API 没有指定在构造期间哪些操作是安全的。 值得注意的是,你不能在构造函数中注册事件监听器,因为你需要有一个有效的插件注册, 但 Velocity 在插件构造完成之前无法注册插件。
要打破这个循环,你应该始终等待初始化,当 Velocity 触发 ProxyInitializeEvent 时就表示初始化完成。
我们可以通过为这个事件添加一个监听器来在初始化时执行操作,如下所示。
注意,Velocity 会自动将你的插件主类注册为监听器。
@Subscribe
public void onProxyInitialization(ProxyInitializeEvent event) {
// 在这里执行需要访问 Velocity API 的操作。
// 例如,我们可以注册一个事件:
server.getEventManager().register(this, new PluginListener());
}
受众操作不完全支持
Velocity 目前不支持 Adventure API 的所有受众操作,所以这些操作应该在后端处理。 此外,播放声音之前被认为是不可行的,因为对于 1.19.3 以下的版本,需要一个硬编码的声音 ID 注册表。
| 操作 | 是否支持 |
|---|---|
| 聊天消息 | 是 |
| 动作栏消息 | 是 |
| 标题 | 是 |
| Boss 栏 | 是 |
| 标签列表头部和底部 | 是 |
| 资源包 | 是 |
| 声音 | 否 |
| 书本 | 否 |