/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 匹配)