注册辅助系统 - Junye-666/RideBattleLib_NeoForge_1.21.1 GitHub Wiki

IRiderPack

IRiderPack 是辅助注册系统核心。

目的是分离不同骑士的注册进程,防止眼花缭乱并提供更高的整洁性

每个骑士模组实现一个“打包骑士” IRiderPack:

public interface IRiderPack {
    ResourceLocation riderId();

    // 双端都会调用一次(在 FMLCommonSetupEvent 中)
    default void registerCommon() {}

    // 仅物理客户端调用(FMLClientSetupEvent)
    default void registerClient() {}
}

实现此接口并传入riderId即可创建特定骑士的注册包:

public class FaizPack implements IRiderPack {
    @Override
    public ResourceLocation riderId() {
        return RiderIds.FAIZ_ID;
    }

    @Override
    public void registerCommon() {
        // 音效注册
        FaizSounds.init();

        // 服务端 Handler *
        ServerRiderDispatcher.register(new FaizServerHandler());
    }

    @Override
    public void registerClient() {
        // 客户端 Handler *
        ClientRiderDispatcher.register(new FaizClientHandler());
    }
}

其中在 registerCommon() 中注册服务端处理器和任何Config类,在 registerClient() 中注册客户端处理器。

然后,在你的模组总线:

@Mod(MyRiderMod.MODID)
public class MyRiderMod{
    public MyRiderMod(IEventBus modEventBus, ModContainer modContainer) {
        // 就在自己的 mod 构造器里注册
        // 使用API快捷方法
        RideBattleAPI.registerRiderPack(new FaizPack());

        // 或者
        RiderPackRegistry.register(new BladePack());
    }
}

最后所有被注册的骑士包会自动被RiderPackRegistry 打包注册进游戏,无需其它操心

*Handler类见 分发系统