GregoryTweaksForCrafting

[!INFO] Git Commit: 8f17292 | Updated: 2026-04-27

Gregory Tweaks For Crafting(modid craftingtweaks,GTNH 分支的 CraftingTweaks fork) 是一个纯客户端合成辅助库。它不注册任何方块、物品、实体或配方, 而是给其他模组已有的合成容器挂上一套网格搬运操作:在界面里加三个图标按钮 (旋转 / 均分 / 清空),并提供 6 个可自定义绑定的热键。

属性 值
modid craftingtweaks
@Mod 类 net.blay09.mods.craftingtweaks.CraftingTweaks
根包(现代码) net.blay09.mods.craftingtweaks
根包(Mixin/Core) com.gtnewhorizons.craftingtweaks
作者 BlayTheNinth
硬依赖 gtnhlib@[0.9.24,)
软依赖 NotEnoughItems(仅用于热键屏蔽探测)
Java 文件数 43
登记容器数 22(覆盖 20 个模组 + 原版)
热键数 6
配置项 3(general)+ 每模组 1 个 addons 开关

本 mod 提供的合成机制

它不新增任何合成配方,而是读取 CraftingManager 里已存在的配方来驱动操作。 共 6 类操作,落在两个维度上:

操作 入口 说明
旋转 按钮 / 热键 3×3 顺/逆时针 90°(中心格不动)或 2×2 四格循环
均分 按钮 / 热键 同种物品在网格各槽间平均分配
平铺 按钮 / 热键 + Shift 先摊成每格 1 个,再均分
清空 按钮 / 热键 退回背包;Shift 为强制清空(放不下就丢地上)
压缩 热键 按 CraftingManager 配方把 N 个同种物品合成 1 个(3×3 或 2×2)
拆分 热键 按配方把 1 个物品还原成 N 个材料
W 键投料 按 W + 点击 把背包物品投进合成网格

按钮定位有「网格对齐」(贴着网格左/右/上/下自动排布)与「绝对偏移」两种模式, 逐容器在 容器注册表 中登记。

热键列表

全部 6 个热键默认按键均为 Keyboard.KEY_NONE(未绑定,玩家须自行在 「选项 → 控制」中设置),分类 key.categories.craftingtweaks。

热键 ID 无修饰键 按住 Shift 按住 Ctrl
旋转 key.craftingtweaks.rotate 顺时针旋转 逆时针旋转 —
均分 key.craftingtweaks.balance 均分 平铺 —
清空 key.craftingtweaks.clear 清空(退回背包) 强制清空(丢地上) —
绑定按键 key.craftingtweaks.toggleButtons 切换按钮显示 — —
压缩物品 key.craftingtweaks.compress 压缩 只压缩一组 反转成拆分
拆分物品 key.craftingtweaks.decompress 拆分一组 拆分全部 —

⚠️ 6 个热键在 NEI 物品搜索框聚焦时全部失效 (NEIHotkeyCheck → LayoutManager.getInputFocused() != null)。 ⚠️ 前 3 个受 ModSupportState 门控,后 3 个不受。

游戏设定列表

条目 内容
配置 两个配置文件、3 个选项的类型与默认值、旧配置迁移
模组支持状态 ModSupportState 四值枚举、19 项预置表、按钮/热键门控矩阵
合成网格操作 旋转/均分/平铺/清空的完整算法、三套实现的分工
压缩与拆分 InventoryCrafting 辅助容器、3×3→2×2 回退、前后端差异
容器注册表 22 个容器的 grid start/size/phantomItems/按钮表 + IMC 协议
网络协议 5 个 C→S 封包、离散 ID 0/1/2/5/6、各 handler 校验链
Coremod 与 Mixin CraftingTweaksCore + 3 个 Mixin 的目标类与签名

配置表

config/craftingtweaks-general.cfg(gtnhlib @Config):

选项 类型 默认值 @Config.Sync 门控
hideButtons boolean false 否 隐藏全部 tweak 按钮;由 绑定按键 即时切换并落盘
hideButtonTooltips boolean false 否 跳过 tweak 按钮 tooltip 绘制
compressAnywhere boolean false 是 服务端 HandlerCompress 中放行「未登记的容器」;仅服务端有效

config/craftingtweaks.cfg → addons 分类(每模组一键):

键 类型 默认 合法值
minecraft + 每个已登记模组 String 枚举 enabled enabled / buttons_only / hotkeys_only / disabled
枚举值 按钮 热键
enabled ✅ ✅
buttons_only ✅ ❌
hotkeys_only ❌ ✅
disabled ❌ ❌

⚠️ appliedenergistics2 被 postInit 硬覆盖为 buttons_only, 配置文件改不动。

Coremod / Mixin 摘要

项 值
coreModClass core.CraftingTweaksCore → com.gtnewhorizons.craftingtweaks.core.CraftingTweaksCore
usesMixins true
accessTransformersFile 空 —— 本 mod 没有 Access Transformer
ASM Transformer null(无字节码改写)
Mixin 数量 3,全部只在客户端应用
Mixin 目标类 关键成员
GuiScreenAccessor GuiScreen @Invoker(value = "func_146283_a") void drawHoveringText(List, int, int)
GuiContainerAccessor GuiContainer getXSize/getGuiLeft/getGuiTop、@Accessor("field_146988_G") getDragSplittingButton()、callGetSlotAtPosition
MixinGuiScreen_CraftingTweaks GuiScreen @Inject(method = "handleMouseInput", at = @At("INVOKE_ASSIGN", target = "Lorg/lwjgl/input/Mouse;getEventButton()I", remap = false), cancellable = true)

SRG 名 field_146995_H、field_147007_t、field_146988_G、func_146283_a 在源码中逐字保留,详见 Coremod 与 Mixin。

本 mod 没有的内容(源码 grep 证据)

本分类只建了 keybinding/ 与 setting/ 两个目录,其余 11 个维度 经 grep 确认零内容,未创建空目录:

维度 证据
方块 / 物品 grep -rc "registerBlock|registerItem" src/ 对全部 43 个 Java 文件零命中;无 Block*.java、无 Item*.java、无 extends Block/extends Item
TileEntity grep -rn "TileEntity" src/ 零命中(全文件树无任何 *.md 资源、无方块状态)
多方块结构 grep -rni "multiblock|formation|Controller" src/ 仅命中 PlayerControllerMP / ITooltipProvider.addInformation 等无关标识符;无 multiblock/ 目录
实体 grep -rn "registerEntity|extends Entity|registerModEntity" src/ 零命中
附魔 grep -rn "Enchantment" src/ 零命中
维度 / 世界生成 grep -rn "WorldProvider|DimensionManager|registerDimension|registerWorldGenerator" src/ 零命中;无 WorldProvider 实现
群系 grep -rn "BiomeGen|BiomeProvider" src/ 零命中
结构 grep -rn "StructureStart|MapGenStructure|WorldGen" src/ 零命中
成就 grep -rn "registerAchievement|Achievement" src/ 零命中
Buff / Debuff grep -rn "PotionEffect|registerPotion" src/ 零命中
指令 grep -rn "CommandBase|ICommand|getCommandName|addChatCommand" src/ 零命中 —— 无任何服务端指令
合成配方 grep -rn "addRecipe|CraftingHelper|IRecipe" src/ 零命中;CraftingManager 只被读取(findMatchingRecipe)

也没有 GUI / Container 实现类:src/main/java 下无任何 extends GuiContainer 或 extends Container 的类。Compatibility 登记的 22 个容器全部是外部模组的 类名(以字符串 + Class.forName 反射加载),详见 容器注册表。

因此本分类不存在的目录:block/、item/、entity/、multiblock/、 enchantment/、dimension/、biome/、structure/、achievement/、 potioneffect/、item-effect/。