/farmingforengineers reload

本 mod 唯一的服务端指令。无别名、无子命令树。

基本信息

属性 值 来源
类 com.guigs44.farmingforengineers.CommandFarmingForEngineers(extends CommandBase) CommandFarmingForEngineers.java:14
指令名 farmingforengineers CommandFarmingForEngineers.java:18
用法字符串 /farmingforengineers reload CommandFarmingForEngineers.java:23
别名 无(getCommandAliases 未覆写)→ /ffe、/market 等均不可用 —
权限等级 0(getRequiredPermissionLevel 未覆写,CommandBase 默认返回 0)→ 任何玩家都能执行,无需 OP —
注册方式 FMLServerStartingEvent → event.registerServerCommand(new CommandFarmingForEngineers()) FarmingForEngineers.java:108
注册时机 服务端启动事件 → 单人存档与专用服务器均可用 —
Tab 补全 getListOfStringsMatchingLastWord(args, "reload") → 第一个参数只有 reload 一个候选 CommandFarmingForEngineers.java:52
远程执行 未覆写 doesCommandSenderUseCommand(默认 true)→ 多人游戏中客户端也会执行一遍 —

参数

用法 行为
/farmingforengineers 抛 WrongUsageException,聊天栏显示 /farmingforengineers reload
/farmingforengineers reload 重载 市场注册表
/farmingforengineers <任意其它字符串> 抛 WrongUsageException(args[0].equals("reload") 的 else 分支)

只支持 reload 一个子命令,没有 add、remove、list、dump 之类的分支。

行为

processCommand 严格三段(CommandFarmingForEngineers.java:27):

步 动作
1 AbstractRegistry.registryErrors.clear() —— 先清空上一次累积的告警列表
2 MarketRegistry.INSTANCE.load(FarmingForEngineers.configDir) —— 重新读 Market.json(缺失键自动补齐并回写)
3 聊天栏输出 commands.farmingforengineers:reload.success = Farming for Engineers registries reloaded.
4 若 registryErrors 非空:先用 EnumChatFormatting.RED 输出 There were errors loading the Farming for Engineers registries:,再逐条以 WHITE 输出 * <错误内容>

MarketRegistry.load → AbstractRegistry.load(registry/AbstractRegistry.java:38)先调 clear() 清空条目列表,再按「读货币 → 注册默认批次 → 应用 blacklist → 应用 custom entries」四步重建。因此热重载是全量替换,不是增量。

效果与边界

项 说明
重载哪个文件 只有 Market.json 一个(本 mod 当前只有 MarketRegistry 一个注册表类)
重载时机要求 必须在服务端调用;FarmingForEngineers.configDir 在 preInit 赋值,指令在 FMLServerStartingEvent 注册,故调用时必然非空
已打开的 GUI 不会自动刷新。ContainerMarket.detectAndSendChanges 只在 !sentItemList 时发一次 MessageMarketList,sentItemList 置位后不再发 → 必须关掉并重开市场界面才能看到新条目
失败保护 解析失败时 refuseSave = true,不会用半成品覆盖用户的 Market.json;但内存里的条目表可能只剩部分内容,需再次 reload 或重启
错误累积 registryErrors 是 public static 列表,跨指令调用共享;每次 reload 先 clear() 不会互相污染

与其他机制的联动

机制 关系
玩家进服告警 FarmingForEngineers.onPlayerLoggedInEvent 用同一个 registryErrors 列表在登录时刷屏(postInit 阶段加载产生的错误会在这里出现)
FarmingForEngineers.cfg Show Registry Warnings 决定 logWarning 产生的条目是否进入 registryErrors,从而决定本指令第 4 步是否输出告警
自定义条目 在 Market.json 的 custom entries 里加物品后用本指令生效,无需重启服务器

相关条目