初始化代理的实现模式

此示例向你展示如何为你的 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);
}