第三方模组集成
基本信息
| 属性 | 值 |
|---|---|
@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 改写取块行为 |
合成配方
无。集成不产生配方。
相关条目
- Little Chisel - ModularUI 2 的唯一使用者
- 凿子面板 - ModularUI 2 界面
- 合成配方总表 - NEI 中可见的 6 条配方