/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 里加物品后用本指令生效,无需重启服务器 |
相关条目
- 市场注册表 Market.json - 本指令唯一重载的对象
- FarmingForEngineers.cfg - 控制第 4 步告警条数