/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。