/nutrition 命令

基本信息

属性 值
命令名 nutrition
注册方式 BrigadierApi.getCommandDispatcher().register(...) 在 Nutrition.serverAboutToStart 阶段
触发器类 ca.wescook.nutrition.command.NutritionCommand
状态 静态注册(register() 由 FMLServerAboutToStartEvent 调用)

功能

通过 Brigadier(不是 Forge CommandBase 体系)注册的命令树,提供对玩家 Nutrient 值的完整 CRUD 接口。所有玩家选择都支持 tab completion(getPlayerSuggestions 扫描 event.world.playerEntities)。

子命令

子命令 参数 权限等级 功能
help — 0 输出 7 行本地化帮助文本(command.nutrition:help.1….7)
get <player> player 0 无 nutrient 时列出该玩家全部 Nutrient;有 nutrient 时只列指定
get <player> <nutrient> player + nutrient 0 单个 Nutrient 值(保留 2 位小数)
set <player> <nutrient> <value> player + nutrient + float(0-100) 2 直接覆盖
add <player> <nutrient> <value> player + nutrient + float(0-100) 2 累加
subtract <player> <nutrient> <value> player + nutrient + float(0-100) 2 累减
reset <player> player 2 无 nutrient 时重置全部;有 nutrient 时只重置一个
reset <player> <nutrient> player + nutrient 2 重置单个 Nutrient
reload — 3 重新解析 nutrient JSON 并迁移所有在线玩家的 Nutrient 数据

数值精度

所有数值通过 FloatArgumentType.floatArg(0, 100) 限制范围到 0-100;输出 String.format("%.2f", value) 保留两位小数(get 系列),set/add/subtract 输出成功消息时保留两位小数。

使用示例

/nutrition help
/nutrition get Steve
/nutrition get Steve grain
/nutrition set Steve protein 75
/nutrition add Steve fruit 10
/nutrition subtract Steve dairy 5
/nutrition reset Steve
/nutrition reset Steve grain
/nutrition reload

内部实现

  • executeSet 根据 Action 枚举(SET / ADD / SUBTRACT)分发到 NutritionManager 的对应方法
  • executeResetAll 调用 manager.reset(player)(无 Nutrient 参数版本)
  • executeReload 调用 DataImporter.reload() 重新读 JSON,然后 DataImporter.updatePlayerCapabilitiesOnServer(MinecraftServer.getServer()) 把旧 Nutrient 对象的值迁移到新对象(按 name 匹配)

相关条目