BetterFood 行为
BetterFood 使用考虑饥饿值的食物选择,而不是简单地先吃最有营养的物品。
触发时机
BetterFood 以 HIGHEST 优先级响应原版的 FoodLevelChangeEvent,并且会忽略已被取消的事件,因此如果有其他插件取消或改写了饥饿值变化,它会在 BetterFood 处理之前拥有最终决定权。BetterFood 仅在玩家饥饿值下降时才会动作。玩家必须拥有 betterfood.user 权限,并且没有通过 /betterfood toggleEating 关闭自动进食。
选择规则
- 食物按恢复饥饿值降序排列,相同则按饱和度降序、材料名升序排列。预计算表为每个饥饿值确定搜索起始位置。
- 从该位置向恢复量较低的食物查找,吃掉玩家携带的第一个非自定义食物。同种食物有多组时,使用物品栏编号最小的一组。
恢复量可能浪费:饥饿值为11时,即使只缺9点,也可能先选兔肉煲(10)而不是牛排(8)。不会再做一次比较来减少溢出。饥饿值上限为20,饱和度上限为恢复后的饥饿值。
碗类食物
甜菜根汤、蘑菇煲和兔肉煲在被自动食用时会返还一个空碗,与原版一致:
- 如果被吃掉的堆叠已用尽,碗会在同一槽位上取代它
- 否则碗会被加入背包;若背包没有空间,则掉落在玩家脚下
受保护的物品
BetterFood 只会自动消耗与同种材料的原始原版堆叠逐字节完全一致的物品。任何携带额外物品数据的物品都会被跳过,包括:
- 自定义显示名称
- 描述(lore)
- 附魔、自定义模型数据以及其他物品组件
- 其他插件写入的持久化数据
这项检查是把整个物品与一个全新创建的原版堆叠进行比对,而不是依赖一份手工维护的字段清单,因此未来 Minecraft 版本新增的物品数据也会被自动跳过。这旨在降低误食插件物品或装饰物品的可能性。
支持的食物
BetterFood 会自动食用以下食物:
| 食物 | 恢复饥饿值 | 恢复饱和度 |
|---|---|---|
| 苹果 | 4 | 2.4 |
| 烤马铃薯 | 5 | 6.0 |
| 甜菜根 | 1 | 1.2 |
| 甜菜根汤 | 6 | 7.2 |
| 面包 | 5 | 6.0 |
| 胡萝卜 | 3 | 3.6 |
| 牛排 | 8 | 12.8 |
| 熟鸡肉 | 6 | 7.2 |
| 熟鳕鱼 | 5 | 6.0 |
| 熟羊肉 | 6 | 9.6 |
| 熟猪排 | 8 | 12.8 |
| 熟兔肉 | 5 | 6.0 |
| 熟鲑鱼 | 6 | 9.6 |
| 曲奇 | 2 | 0.4 |
| 干海带 | 1 | 0.6 |
| 发光浆果 | 2 | 0.4 |
| 金胡萝卜 | 6 | 14.4 |
| 西瓜片 | 2 | 1.2 |
| 蘑菇煲 | 6 | 7.2 |
| 马铃薯 | 1 | 0.6 |
| 南瓜派 | 8 | 4.8 |
| 兔肉煲 | 10 | 12.0 |
| 甜浆果 | 2 | 0.4 |
排除的食物
以下可食用物品被刻意排除在自动食用之外。这些是生肉、特殊物品或具有负面或不可预测效果的食物:
- 生牛肉
- 生鸡肉
- 紫颂果
- 生鳕鱼
- 附魔金苹果
- 金苹果
- 蜂蜜瓶
- 生羊肉
- 毒马铃薯
- 生猪排
- 河豚
- 生兔肉
- 腐肉
- 生鲑鱼
- 蜘蛛眼
- 迷之炖菜
- 热带鱼
较新 Minecraft 版本添加的、未出现在上方支持列表中的任何其他可食用材料同样会被跳过,直到它被显式加入该列表为止。
启动时,BetterFood 会执行一次覆盖度审计,并输出一行控制台日志,列出它刻意不自动食用的每一种可食用材料(BetterFood is intentionally not auto-eating these food items: ...),这样你就能一眼看清在你的服务端版本上究竟哪些物品会被跳过。只有在至少存在一个被跳过的物品时才会打印这一行,因此完全没有这行日志就意味着支持列表已经涵盖了该版本上的每一种可食用物品。