/nee
基本信息
| 属性 | 值 |
|---|---|
| 指令名 | nee(NEECommands.java:28) |
| 侧别 | 仅客户端(ClientCommandHandler.instance.registerCommand,ClientProxy.java:22) |
| 权限等级 | 1(getRequiredPermissionLevel,NEECommands.java:133-135) |
| 无参调用 | 抛 WrongUsageException(:116) |
| 配置文件 | NotEnoughEnergistics.cfg |
指令只写运行时内存里的配置字段,不主动保存——真正的落盘靠 ConfigChangedEvent 监听器(config/NEEConfig.java:304-310)。
子命令
| 子命令 | 参数 | 作用 | 源码 |
|---|---|---|---|
help |
无 | 打印用法 | :39-43 |
processor |
无 | 把当前所有 配方处理器 的 id 与标识符打进日志 | :44-50 |
reload |
无 | 重新加载配置文件 | :112-114 |
add blacklist |
无 | 把当前手持物品加入转换黑名单 | :52-92 |
add priorityItem |
无 | 把当前手持物品加入优先转换列表 | :52-92 |
add priorityMod |
<modid> |
把 modid 加入 mod 优先列表 | :93-99 |
add itemCombination |
<identifier> |
把 NEI 标识符加入物品合并白名单 | :100-110 |
Tab 补全(:121-130):一级 help / reload / add / processor,add 之后二级 blacklist / priorityItem / priorityMod / itemCombination。
add blacklist / add priorityItem
读玩家当前主手物品(getCurrentEquippedItem,:53),序列化成 JSON,然后按参数数量补字段(:57-76):
| 参数个数 | 行为 |
|---|---|
| 3 | args[2] 既当 processor id 又当 identifier,各试一次 |
| 4 | args[2] 当 processor id,args[3] 当 identifier |
找不到 processor 时报「Can’t find processor: X」,找不到 identifier 时报「Can’t find identifier: X」,两者都找不到则不写入任何字段。
写入前会遍历旧列表查重,命中就 return(:81-85)——add 是幂等的。
产物形如:
{"modid":"minecraft","name":"iron_ingot","recipeProcessor":"EnderIO","identifier":"EnderIOAlloySmelter"}
blacklist 写 NEEConfig.transformBlacklist,priorityItem 写 NEEConfig.transformPriorityList(:87-91)。
add priorityMod 的判断反了
if (!ItemUtils.hasModId(modid)) { // NEECommands.java:95
... add
}
条件写的是「该 mod 不存在时才加入优先列表」。按 transformPriorityModList 的用途(配置注释:if oredict has this mod’s item, use it first,config/NEEConfig.java:62),本意应是「该 mod 存在时才加」。取反后结果是只有不存在的 modid 会被加进列表,实际功能完全反了。
另外此处没有查重,priorityMod 可以重复添加同一 modid(与 blacklist / priorityItem 分支不同)。
add itemCombination
参数是 NEI 标识符(不是物品)。先用 ItemUtils.hasOverlayIdentifier 验证存在,再查重后追加到 NEEConfig.itemCombinationWhitelist(:100-110)。
/nee processor 的输出位置
结果只写 logger.info,不发给玩家(:46-49)。玩家在游戏里看不到任何反馈,必须去客户端日志里看。
已知注意点
processCommand 全程用 Minecraft.getMinecraft().thePlayer(:53)取玩家。因为指令只注册在 ClientCommandHandler 上,理论上不会在服务端执行;但若被装到服务端环境,getMinecraft() 会返回 null 导致 NPE。