ModularUI

[!INFO] Minecraft 1.7.10 / Forge 10.13.4.1614 | modid modularui

ModularUI(GTNewHorizons 开发)是 1.7.10 上的声明式 GUI 界面库,供其他模组构建 统一风格的容器界面。定性为「界面库」成立,但需补充两点:它有一个仅开发环境可见的方块, 并且不提供任何多方块结构。

  • modid:modularui(ModularUI.MODID)
  • 类:com.gtnewhorizons.modularui.ModularUI
  • @Mod:acceptedMinecraftVersions = "[1.7.10]"、 guiFactory = com.gtnewhorizons.modularui.config.GuiFactory
  • 依赖:required-after:gtnhmixins@[2.0.1,);required-after:NotEnoughItems@[2.3.50-GTNH,);after:hodgepodge@[2.0.0,);after:gtnhlib@[0.2.7,);before:gregtech

游戏内容

[!IMPORTANT] 默认配置下 ModularUI 注册 0 个方块、0 个物品、0 个实体。

源码中唯一的 GameRegistry.registerBlock / registerTileEntity 位于 CommonProxy.preInit,被条件包住:

if (ModularUI.isDevEnv || Config.forceEnableDebugBlock) {
    testBlock = new TestBlock(Material.rock)...;
    GameRegistry.registerBlock(testBlock, "testBlock");
    GameRegistry.registerTileEntity(TestTile.class, "TestTileEntity");
}

isDevEnv 取自 Launch.blackboard.get("fml.deobfuscatedEnvironment"),正式 GTNH 客户端为 false;forceEnableDebugBlock 默认为 false。两条都不成立时该方块不存在, 因此不为其建立方块条目——否则会把一个开发用占位方块写成正式内容。

多方块结构

本 mod 无多方块结构。 全仓 IMultiblock / multiblock 零命中。

设置列表

  • 配置文件 - 6 个分类共 13 个配置项(config/modularui.cfg)

界面 API

api/widget/ 下共 12 个顶层类型,构成库的公开接口:

Widget(基类)、IWidgetBuilder、IWidgetDrawable、IWidgetParent、IDraggable、 IDragAndDropHandler、IHasStackUnderMouse、ISyncedWidget、IVanillaSlot、 Interactable、FluidInteractionUtil,以及 api/widget/scroll 子包。

配套能力包:api/drawable(含 shapes)、api/animation、api/math、api/screen、 api/fluids、api/forge。

容器与窗口构建入口为静态方法: ModularUI.createContainer(EntityPlayer, Function<UIBuildContext, ModularWindow>, Runnable) 与客户端版 ModularUI.createGuiScreen(...)。

网络

NetworkHandler 使用 newSimpleChannel("modularui"),共注册 2 个包:

方向 包 Handler
S2C SWidgetUpdate S2CHandler
C2S CWidgetUpdate C2SHandler

包 ID 由 private static int packetId 自增分配(S2C=0,C2S=1)。 提供 sendToServer / sendToWorld(按维度 ID)/sendToPlayer 三个发送方法。

NEI 集成

integration/nei/ModularUIContainerObjectHandler.java 为 NEI 提供容器对象处理。 NEI 在 @Mod 声明中是 required-after 硬依赖。

相关分类

[!NOTE] 另一硬依赖 required-after:NotEnoughItems@[2.3.50-GTNH,)(NEI 本体)不在本 wiki 收录范围: relation.md 只登记了 NEI 的附属(nei-integration、neiaddons、nei-custom-diagram、 nei-recipe-panels),没有 NEI 本体的分类。