在 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 文件