初始化代理的實現模式

此示例向你展示如何為你的 Minecraft Mod 應用程式實現代理類,這些代理類用於初始化你的 mod。

首先,你需要實現基本 CommonProxy.java 類,其中包含 3 個主要使用的方法:

public class CommonProxy {
    public void preInit(FMLPreInitializationEvent e) {}
    public void init(FMLInitializationEvent e) {}
    public void postInit(FMLPostInitializationEvent e) {}
}

通常,你的 mod 有兩個不同的客戶端和伺服器程式碼包,因此你需要在每個包中使用 CommonProxy.java 的子類,如:

public class ClientProxy extends CommonProxy {    
    @Override
    public void preInit(FMLPreInitializationEvent e) {
        super.preInit(e);
    }

    @Override
    public void init(FMLInitializationEvent e) {
        super.init(e);    
    }

    @Override
    public void postInit(FMLPostInitializationEvent e) {
        super.postInit(e);
    }
}

併為伺服器:

public class ServerProxy extends CommonProxy {
    @Override
    public void preInit(FMLPreInitializationEvent e) {
        super.preInit(e);
    }

    @Override
    public void init(FMLInitializationEvent e) {
        super.init(e);
    }

    @Override
    public void postInit(FMLPostInitializationEvent e) {
        super.postInit(e);
    }
}

建立此類之後,你可以通過必須僅在客戶端或伺服器端執行的方法擴充套件它們,但如果你在 base 類中呼叫方法,也可以將它們附加到兩者。

最後,你必須定義在執行時採用哪個代理。你必須使用 @Mod 註釋擴充套件主 mod 類,方法是:

private static final String CLIENTPROXY = "com.yourpackage.client.ClientProxy";
private static final String SERVERPROXY = "com.yourpackage.client.ServerProxy";    

@SidedProxy(clientSide = CLIENTPROXY, serverSide = SERVERPROXY)
public static CommonProxy PROXY;

這將使 Forge 能夠檢測在執行時應該採用哪個類。在 Mod 的初始化方法中,你現在可以使用此靜態 PROXY 屬性。

@EventHandler
public void init(FMLInitializationEvent event) {
    PROXY.init(event);
}

@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
    PROXY.preInit(event);
}

@EventHandler
public void postInit(FMLPostInitializationEvent event) {
    PROXY.postInit(event);
}