配置文件系统
基本信息
| 属性 | 值 |
|---|---|
| 配置类 | yalter.mousetweaks.config.MTConfig |
| 框架 | GTNHLib(com.gtnewhorizon.gtnhlib.config.Config 注解) |
| modid | MouseTweaks |
| 配置文件 | config/MouseTweaks.cfg |
| 配置界面类 | yalter.mousetweaks.config.MTGuiConfig(继承 SimpleGuiConfig) |
| 界面工厂 | yalter.mousetweaks.config.MTGuiConfigFactory(@Mod.guiFactory) |
| 选项总数 | 7(4 个 boolean + 3 个 int) |
功能
本 mod 是一个纯客户端、纯配置驱动的工具 mod,没有任何方块 / 物品 / 实体 / 热键注册。
它的全部行为都由 MTConfig 里的 7 个静态字段控制,配置文件通过 GTNHLib 的
ConfigurationManager 自动注册与读写。
@Mod 注解声明了 guiFactory,因此在 Minecraft 模组列表中点击「配置」即可打开
MTGuiConfig 界面(标题为 Mouse Tweaks),所有带注解注释的选项都会在界面上直接编辑。
全部配置选项
| 字段名 | 类型 | 默认值 | 取值范围 | 作用 |
|---|---|---|---|---|
RMBTweak |
boolean |
true |
true / false | 替换原版右键拖拽机制 |
LMBTweakWithItem |
boolean |
true |
true / false | 手上拿着物品时的左键拖拽 |
LMBTweakWithoutItem |
boolean |
true |
true / false | 手上没有物品时的 Shift+左键拖拽 |
WheelTweak |
boolean |
true |
true / false | 滚轮快速跨栏位搬运物品 |
WheelSearchOrder |
int |
1 |
@RangeInt(min = 0, max = 1) |
滚轮搜索目标栏位的方向 |
WheelScrollDirection |
int |
0 |
@RangeInt(min = 0, max = 3) |
滚轮「推入 / 拉出」的方向语义 |
ScrollItemScaling |
int |
0 |
@RangeInt(min = 0, max = 1) |
一格滚轮刻度对应几个物品 |
上表所有默认值均取自
MTConfig.java中字段的字段初始值(例如public static boolean RMBTweak = true;), 不是从 README 反推的。
加载与生命周期
MouseTweaksForge 中只有客户端分支会执行配置与初始化逻辑:
| 阶段 | 事件 | 行为 |
|---|---|---|
preinit |
FMLPreInitializationEvent |
仅客户端:调用 Config.handleOldConfig(event.getSuggestedConfigurationFile()) 处理旧配置,然后 ConfigurationManager.registerConfig(MTConfig.class);ConfigException 会被包成 RuntimeException 抛出 |
init |
FMLInitializationEvent |
仅客户端:Main.initialise(),随后把自身注册到 FML 事件总线 |
| 运行期 | TickEvent.RenderTickEvent |
phase == START 时调用 Main.onUpdateInGame();END 阶段不做任何事 |
旧配置迁移(Config.handleOldConfig)
这是从旧版 Mouse Tweaks 迁移到 GTNHLib 配置体系时的一次性清理:
- 目标文件不存在 → 直接返回,不做任何事;
- 存在 → 逐行读取,若没有任何一行包含
general这个子串, 就delete()删除该文件; - 删除失败才会打出
warn日志(Failed to delete outdated config file {}); - 读取过程抛
IOException则打error日志。
也就是说:凡是不含 general 段的残留配置都视为过期格式并被删除,删除后 GTNHLib
会按 MTConfig 的字段默认值重新生成新配置文件。玩家的实际选项设置不会被继承。
访问转换器(Access Transformer)
src/main/resources/META-INF/mousetweaks_at.cfg 把 3 个原版 GuiContainer 成员提升为 public,
这是本 mod 关闭原版右键拖拽的前置条件:
public net.minecraft.client.gui.inventory.GuiContainer field_146995_H
public net.minecraft.client.gui.inventory.GuiContainer field_147007_t
public net.minecraft.client.gui.inventory.GuiContainer func_146981_a(Lnet/minecraft/inventory/Slot;II)Z #isMouseOverSlot
- 前两个是
DeobfuscationLayer.disableVanillaRMBDrag()用来写true/false的两个状态字段 (源码在ClickHandler中以field_147007_t == false // dragSplitting的形式读取其中一个); func_146981_a即isMouseOverSlot,被提升后getSelectedSlot()才能逐槽位调用它来定位鼠标下的栏位。
⚠️ 本 mod 依赖混淆字段名
field_146995_H/field_147007_t,因此只能运行在 1.7.10(acceptedMinecraftVersions = "[1.7.10]"), 换版本需要重新对照映射。
相关条目
- 右键拖拽替换(RMBTweak) -
RMBTweak开关 - 左键拖拽(手持物品) -
LMBTweakWithItem开关 - 左键拖拽(空手 Shift) -
LMBTweakWithoutItem开关 - 滚轮搬运(WheelTweak) -
WheelTweak开关 - 滚轮搜索顺序 -
WheelSearchOrder0/1 - 滚轮方向语义 -
WheelScrollDirection0~3 - 滚轮物品数量缩放 -
ScrollItemScaling0/1 - 容器兼容性 - 哪些界面启用/禁用全部 tweak
- IMTModGuiContainer 接口 - 其他 mod 让自家界面接入的方法
- 输入方案 - 本 mod 不注册热键,用鼠标按钮 + 硬编码 Shift