在 Forge 中创建一个事件监听器

在 Forge 中创建事件监听器与在 Bukket 中创建事件监听器非常相似。

创建监听器类需要的少得多。没有可实现的接口或其他导入。

public class ListenerClass { } //perfectly valid event listener class

注册它需要将实例传递给 Forge 事件总线:

MinecraftForge.EVENT_BUS.register(new ListenerClass());

根据活动情况,有几种不同的活动巴士。例如,矿石生成事件是在 ORE_GEN_BUS 上发生的。你可以从任何地方调用此注册,但建议你从主 mod 类(使用 @Mod 注释)或从代理类调用它(某些事件仅在客户端,并且只能调用客户端事件处理程序)从客户端代理,否则专用服务器将崩溃!)

要侦听侦听器类中的任何给定事件,必须在方法上创建一个带有 @SubscribeEvent 批注的方法。事件类型由方法唯一参数中的 Type 指定。该方法可以根据你的意愿命名。

请注意,某些事件类型是子类型(应该通过它们的封闭类型引用,例如 CropGrowEvent.Pre),并且某些事件可能具有 Phase,因为它在多个位置被触发(例如所有 TickEvents 在之前和之后都被触发)香草代码)。作为一个 modder,你应该始终检查这两件事,并且只在需要时运行你的代码。

public class ListenerClass {
    @SubscribeEvent
    public void onPlayerLogin(PlayerLoggedInEvent event) {
        event.player.addChatMessage(new TextComponentString("Welcome to the server!"));
    }
}

由于 Forge mods 直接与 Minecraft 内部交互,因此 modder 有很多权力能够影响事物,但类似地,代码必须遵循 vanilla 框架:没有用于发送消息的快捷方式,消息必须由 ITextComponents 手动,但操作这些对象(如应用颜色格式)的能力要容易得多。例如:

TextComponentString txt = new TextComponentString(
    TextFormatting.LIGHT_PURPLE + "Welcome to the server!");
txt.appendSibling(new TextComponentString(
    TextFormatting.AQUA + "Server has been online for " + x + " days"));
event.player.addChatMessage(txt);

这给出了以下结果: StackOverflow 文档