跳到主要内容

Bukkit 事件桥接

Bukkit 桥接只在检测到相应运行环境时注册。普通 Forge 服务端没有 Bukkit API,不能把桥接插件当成普通模组直接使用。

当前桥接范围

Bukkit 事件来源数据
BukkitPlayerKillOnMapEventFPSMatch 的 DeathEvent地图、死者 UUID、可空的击杀者 UUID
BukkitGameWinnerEventFPSMatch 的 VictoryEvent地图、Bukkit 世界

虽然第一个事件名称包含 Kill,当前实现监听的是地图 DeathEvent,并不是最终 KillEvent。它不保证击杀统计已经写入。需要最终击杀奖励时,应在 Forge 的结果事件中实现,或专门扩展桥接。

在插件中监听结算

下面是插件监听器的方法片段:

@EventHandler
public void onWinner(BukkitGameWinnerEvent event) {
if (!event.getMap().getGameType().equals("elimination")) return;
String mapName = event.getMap().getMapName();
Bukkit.getLogger().info("Elimination finished: " + mapName);
}

将所在类实现为 Bukkit Listener,并在插件 onEnable() 中通过插件管理器注册。编译时需要能解析 Bukkit API 与 FPSMatch 桥接事件类型的依赖。

可空玩家与世界

环境死亡可能没有击杀者;玩家断线后,UUID 对应的在线 Bukkit Player 也可能不存在。因此优先保存 UUID,在需要操作在线玩家时再查询。

世界桥接依赖 Forge 世界名称与 Bukkit 世界的匹配,使用 getWorld() 前应处理找不到匹配世界的情况。

事件不承担玩法驱动

目前两个桥接事件都没有 Bukkit Cancellable 契约。它们用于通知与集成,不应被理解为能取消 FPSMatch 的胜负或死亡流程。需要影响规则时使用框架正式扩展点,并保持服务器线程中的状态一致性。