Geyser 事件
Geyser 有一个强大的事件系统,允许您监听 Geyser 发送的事件。事件是 Geyser 扩展的核心,也可供插件和 mod 使用。
完整文档可在此处找到。
事件类别
要在 Spigot/Paper 插件或 Fabric mod 中使用事件,您需要将 Geyser Event Bus 注册为监听器,然后订阅您想要监听的事件。 扩展可以使用 @Subscribe 注解。
事件分为以下类别:
- Bedrock:为每个连接的 Bedrock 客户端发送的事件, 例如当 Bedrock 玩家使用表情时发送的 ClientEmoteEvent,或当 Bedrock 玩家登录并即将加入服务器时发送的 SessionLoginEvent。
- Java:为 java 服务器发送的事件,例如 ServerDefineCommandsEvent - 当 Java 发送要显示给 Bedrock 玩家的命令时触发。
- Connection:连接相关事件,例如返回自定义 MOTD 的 ping 事件。
- Lifecycle:在 Geyser 生命周期中发送的事件,例如自定义物品、资源包或 Geyser 命令的加载。
要查看相应类别中的所有事件,请点击上面的链接。
使用示例:
每个要订阅事件的方法都需要使用 @Subscribe 注解(GeyserMC 事件包中的)进行注解。
@Subscribe
public void onGeyserLoadResourcePacksEvent(GeyserLoadResourcePacksEvent event) {
logger().info("Loading: " + event.resourcePacks().size() + " resource packs.");
// 您可以使用 event.resourcePacks().add(path-to-pack) 添加资源包
}
如果您想在 Spigot/Paper 插件或 Fabric mod 中监听事件,您需要首先将 Geyser Event Bus 注册为监听器。只要确保在 mod 或插件的主类中实现 EventRegistrar 即可。
扩展不需要这样做 - 它们是自动注册的,所以简单的 @Subscribe 注解就足够了。
Paper/Spigot 插件示例:
- 在您的 plugin.yml 中,添加以下行:
depend: ["Geyser-Spigot"]
这确保您的插件在 Geyser 加载之后再加载,这样 Geyser API 就可用了。
- 在您的主类中,实现 EventRegistrar 接口并在 onEnable 方法中注册事件总线:
public class ExamplePlugin extends JavaPlugin implements EventRegistrar {
@Override
public void onEnable(){
getLogger().info("Registering Geyser event bus!");
GeyserApi.api().eventBus().register(this, this); // 注册您的插件和此类实例作为监听器
}
// 这里是一个事件,我们像往常一样使用 @Subscribe 注解进行订阅
@Subscribe
public void onGeyserPostInitializeEvent(GeyserPostInitializeEvent event) {
getLogger().info("Geyser started!");
}
}
- 如果您想为事件提供 consumer,而不是对其进行注解,您也可以手动将方法订阅到事件总线:
// 在 onEnable 中注册事件注册器后添加此内容
GeyserApi.api().eventBus().subscribe(this, GeyserPostInitializeEvent.class, this::onGeyserPostInitializeEvent);
Fabric mod 示例:
public class ExampleMod implements ModInitializer, EventRegistrar {
public static final Logger LOGGER = LoggerFactory.getLogger("modid");
@Override
public void onInitialize() {
ServerLifecycleEvents.SERVER_STARTING.register((server) -> {
GeyserApi.api().eventBus().register(this, this); // 注册您的 mod 和此类实例作为 监听器
});
LOGGER.info("Geyser is cool!");
}
// 这里是一个事件,我们像往常一样使用 @Subscribe 注解进行订阅
@Subscribe
public void onGeyserPostInitializeEvent(GeyserPostInitializeEvent event) {
LOGGER.info("Geyser started!");
}
}
信息
注意:我们无法直接在 mod 初始化程序中注册事件总线,因为 Geyser API 尚未加载。
因此,我们在 Fabric API 提供的服务器启动事件中注册它。
事件优先级
事件可以具有优先级,用于确定监听器被调用的顺序。默认优先级是 NORMAL。
要(可选)设置事件监听器的优先级,您可以将优先级添加到 @Subscribe 注解中:
@Subscribe(postOrder = PostOrder.EARLY)
如果您不指定优先级,则使用默认优先级。所有可用优先级,请参阅 此处。