第三方模组集成

基本信息

属性 值
@Mod 依赖声明 dependencies = "after:angelica;required-after:modularui2"(LittleTiles.java:59)
硬依赖 1(ModularUI 2)
软依赖 4(Angelica、Waila、NotEnoughItems、InventoryBogoSorter)
Mixin 数 2(均 client 侧)

依赖表

dependencies.gradle 是编译期依赖的权威来源:

modid Gradle 作用域 声明版本 运行时判定
ModularUI 2 api 2.3.89-1.7.10 必需(required-after:modularui2)
Angelica compileOnly 2.2.13 Loader.isModLoaded("angelica")
Waila compileOnly(transitive = false) 1.19.34 Loader.isModLoaded("Waila")
NotEnoughItems devOnlyNonPublishable 2.8.139-GTNH Loader.isModLoaded("NotEnoughItems")
InventoryBogoSorter compileOnly 1.3.51-GTNH Loader.isModLoaded("bogosorter")
earcut4j shadowImplementation 2.2.2 打包进 jar,无 modid

⚠️ 版本号不可作为运行时版本引用:compileOnly / devOnlyNonPublishable 作用域下的版本号是开发时用于编译的版本,@Mod 注解中的 required-after:modularui2 没有版本区间。玩家实际安装的版本可能与上表不同。

各集成内容

ModularUI 2(硬依赖)

提供 Little Chisel 的 凿子面板。这是唯一 required-after 的依赖——Little Chisel 的 IGuiHolder<PlayerInventoryGuiData> 实现直接依赖 ModularUI 2 的类型,缺它无法加载。

Waila

LittleTiles 不向 Waila 添加任何内容,只注册一个 body provider(Waila.java:13):

registrar.registerBodyProvider(new WailaLittleTileHandler(), TileEntityLittleTiles.class);

注册方式为 FMLInterModComms.sendMessage("Waila", "register", ...),LittleTiles.java:173-175 在 Loader.isModLoaded("Waila") 时调用。

WailaLittleTileHandler 实现 IWailaDataProvider 的 5 个方法,其中 4 个是空实现(直接 return currenttip 或 null),只有 getWailaBody 有效:加载被指向的微砖后,取其 getDrops() 的第一个 ItemStack,把 getDisplayName() 追加到 tooltip。也就是说,WAILA 悬停小砖方块时会显示该微砖代表方块的名称。

注意:getWailaStack 返回 null,因此 WAILA 不会把该方块识别为 Little Tile 物品。

NotEnoughItems

NEICompat(common/utils/NEICompat.java)只有 2 个方法,都只是读取 NEI 状态:getStackMouseOver(GuiContainer) 与 isNEIHidden()。不注册任何 recipe handler,不添加任何物品,因此 NEI 中显示的配方就是上表的 6 条原版合成配方。

Angelica

AngelicaCompat(client/render/AngelicaCompat.java)包装 Iris 的着色器材质覆盖:

  • setShaderMaterialOverride(Block, int meta) → Iris.setShaderMaterialOverride(...)
  • resetShaderMaterialOverride() → Iris.resetShaderMaterialOverride()

用于让微砖在光影着色器下正确取色。

InventoryBogoSorter

BogoCompat(common/utils/BogoCompat.java)在 Loader.isModLoaded("bogosorter") 时注册到 MinecraftForge.EVENT_BUS(LittleTiles.java:141)。它不是让微砖进入自动分类,而是取消一次 Bogo 排序:监听 BeforeSortEvent,当排序由中键(MOUSE_MIDDLE = -98)触发、且光标物品或手持物是 ItemLittleChisel 时调用 event.setCanceled(true)。

源码注释给出的理由:Bogo 的排序通常绑在中键上,持有 Chisel 时按中键会误触发排序,影响体验(拾取/放置微砖的过程中)。因此这是一个体验保护钩子,不为 LittleTiles 追加任何 Bogo 分类规则。

Mixin

mixins.littletiles.json 声明 target = "@env(DEFAULT)",compatibilityLevel = JAVA_8,mixins 为空数组,只有 2 个 client mixin:

Mixin 目标 作用
MixinForgeHooks_PickBlock net.minecraftforge.common.ForgeHooks 用 @WrapOperation 包住 onPickBlock 中对 Block.getPickBlock 的调用
MixinGuiContainer_PickBlock net.minecraft.client.gui.inventory.GuiContainer 同上,GUI 内的选取路径

MixinForgeHooks_PickBlock 的逻辑:当玩家手持物是 LittleTiles.chisel 且 BlockValidator.isBlockValid(instance) 时,拦截原版取方块行为,改为 new LittleToolHandler(stack).setBlock(block, meta) 并返回 null(阻止原版把方块放进物品栏)。若指向的是 Little Tile 方块,则取其内部微砖的 block / meta。改动通过 LittleItemUpdatePacket 同步服务端。

网络封包

6 个封包在 LittleTiles.java:133-138 经 CreativeCorePacket.registerPacket 注册:

封包类 通道名
LittlePlacePacket LittlePlace
LittleBlockPacket LittleBlock
LittleRotatePacket LittleRotate
LittleFlipPacket LittleFlip
LittleItemUpdatePacket LittleItemUpdate
LittleCursorBlockUpdatePacket LittleCursorItemUpdate

LittleBlockPacket.Action 枚举 6 个动作(LittleBlockPacket.java:40-52):ACTIVATE、DESTROY、SAW、COLOR、SPLIT、TOGGLE_COLLISION。get(int) 对越界 ordinal 回退为 ACTIVATE。

客户端指令

DumpMeshCommand 继承 CommandBase,由 ClientCommandHandler.instance.registerCommand(...) 注册(LittleTilesClient.java:68):

项 值
指令名 ltdumpmesh
用法 /ltdumpmesh
所需权限等级 0(getRequiredPermissionLevel() 返回 0)
服务端可用 否(client 侧 ClientCommandHandler)
成功提示 littletiles.command.dumpmesh.success = Mesh dumped to %s
失败提示 littletiles.command.dumpmesh.error = No mesh under cursor.

它把光标所指微砖的 Mesh3d 导出为 OBJ 文件(Mesh3dObjLoader 按 assets/<modid>/models/<name>.obj 读取)。属于开发者调试工具,无游戏内用途。

数值

数值名 值
硬依赖 1(ModularUI 2)
软依赖 4
Mixin 2(均 client)
网络封包 6
封包动作 6
指令 1(/ltdumpmesh,client-side,权限等级 0)

交互

触发 行为
安装 Waila 自动注册 body provider
安装 NEI 仅读取状态,不改配方
安装 Angelica 启用着色器材质覆盖
安装 BogoSorter 微砖进入自动分类
手持 Chisel 左键方块 Mixin 改写取块行为

合成配方

无。集成不产生配方。

相关条目