营养

营养

Nutritional添加了一个饮食系统,其中每种食物都计入五个类别:乳制品、水果、谷物、蛋白质和蔬菜。保持这些类别的平衡以提升饮食等级,并获得生命值、速度和护甲加成。饮食不当则要付出代价。由数据包驱动。

食物

营养系统

营养系统为 Minecraft 添加了饮食系统。你吃的食物会计入五个食物组,保持它们的平衡会让你更强大,而长期只吃单一食物则会对你产生不利影响。这是对 WesCook 的 Nutrition 的 NeoForge 1.21.1 重制版。

模组中的一切内容都旨在让整合包作者无需编写代码即可重新调整。请参阅下方的整合包作者与开发者部分。

工作原理

每种食物都属于五个食物组中的一个或多个:乳制品、水果、谷物、蛋白质和蔬菜。进食会提升该食物所属食物组的水平,而随着你感到饥饿,每个食物组的水平会随时间缓慢下降。目标是让所有五个食物组都保持相当充足的水平,而不是只盯着一种食物吃。

你的整体饮食平衡会被评定为饮食等级,从最差到最好:

starving(饥饿), malnourished(营养不良), surviving(维持生存), nourished(营养良好), gourmand(美食家)

糟糕的饮食会让你处于低等级并受到负面效果。多样化且营养充足的饮食会将你推向高等级,为你提供最大生命值、移动速度和护甲等方面的增益。吃得好还会让未来的餐食更有营养,并减缓食物组水平的下降速度,因此良好的习惯会相互促进。

除了等级之外:

  • 状态效果。跨越某些营养素水平可以为你带来状态效果,吃得好会获得增益效果,吃得太差则会受到负面效果。
  • 长期奖励。连续几天保持良好饮食(以游戏内天数计算)可以获得永久性奖励。它会一直持续到你死亡或饮食水平下滑太多。
  • 更严酷的维度。默认情况下,下界和末地对你更不友好:你的食物组水平消耗得更快,食物在那里提供的营养也更少。

查看你的饮食

  • 按 N 键可打开一个界面,其中显示每个食物组的进度条和当前饮食等级。
  • 屏幕右上角的一个小组件会显示你当前的等级。你可以通过饮食界面上的一个按钮来切换它的显示。
  • 将鼠标悬停在食物上会显示它属于哪个食物组以及增加多少水平。
  • 如果你使用 JEI,查询食物时会显示一个"提供营养素"条目,其中包含相同的信息。

进度

该模组附带了一个小型进度树,涉及食用每个食物组的食物、多样化饮食以及达到更高的饮食等级和获得奖励。

配置

大部分行为可以通过两个配置文件进行修改:

  • nutritional-client.toml 用于个人显示选项,如物品提示、HUD 组件和饮食界面按钮。
  • nutritional-server.toml 用于世界规则,如食物组水平消耗速度、死亡惩罚和整体难度倍率。

整合包作者可以通过数据包更改比这多得多的内容,具体见下文。

整合包作者与开发者

营养系统是数据驱动的。食物组、其中的物品、饮食等级、状态效果规则、奖励以及每个维度的难度都在数据包中定义,因此无需编写 Java 代码即可添加、重新平衡或移除这些内容。

数据模型

六个一等数据包注册表:

注册表 路径
nutritional:nutrient data/<pack>/nutritional/nutrient/<id>.json
nutritional:effect data/<pack>/nutritional/effect/<id>.json
nutritional:food_hint data/<pack>/nutritional/food_hint/<id>.json
nutritional:diet_tier data/<pack>/nutritional/diet_tier/<id>.json
nutritional:sustained_reward data/<pack>/nutritional/sustained_reward/<id>.json
nutritional:dimension_modifier data/<pack>/nutritional/dimension_modifier/<dim_namespace>/<dim_path>.json

效果支持四种检测模式:any(任意)、average(平均)、all(全部)和 cumulative(累积)。nourished(营养良好)、malnourished(营养不良)和 toughness(坚韧)生物效果是默认自带的。

物品与缩放

一个物品属于哪个食物组由标签(#nutritional:nutrient/<id>)决定。单独物品的数值倍率覆盖来自 NeoForge DataMap(minecraft:item 注册表上的 nutritional:nutrient_scales)。大多数食物只需要一个标签条目即可。

自定义属性

添加了两个属性,可以通过装备、生物效果和其他模组进行修改:

  • nutritional:nutrient_absorption,食物提供的营养量。越高意味着餐食越有营养。
  • nutritional:nutrient_decay_rate,食物组水平下降的速度。越低意味着消耗得越慢。

命令

  • /nutritional get|set|add|subtract|reset <player> <nutrient> [<value>]
  • /nutritional reload 重新加载数据包
  • /nutritional-food 打印当前手持物品的营养素产出

进度触发器

两个自定义标准触发器,nutritional:tier_reached(达到等级)和 nutritional:reward_earned(获得奖励),可供数据包用于构建自己的进度树。

致谢

  • WesCook,原版 Nutrition 的作者。原版 1.12 模组启发了这次重制版的核心概念:营养素、阈值以及与饥饿值挂钩的衰减机制。
  • 原版 1.12 的贡献者列于本仓库的 git 历史中,保存在 1.12 分支上。