跳到主要内容

BetterFood 行为

BetterFood 使用考虑饥饿值的食物选择,而不是简单地先吃最有营养的物品。

触发时机​

BetterFood 以 HIGHEST 优先级响应原版的 FoodLevelChangeEvent,并且会忽略监听器运行时已经取消的事件。它读取较早监听器留下的饥饿值;这并不保证与同一优先级的其他监听器之间的顺序。BetterFood 仅在玩家饥饿值下降时才会动作。玩家必须拥有 betterfood.user 权限,并且没有通过 /betterfood toggleEating 关闭自动进食。

选择规则​

  1. 支持的食物按恢复饥饿值降序排列;饥饿值恢复量相同时,按恢复饱和度降序排列;两者都相同时,再按材料名升序排列。预计算表为每个饥饿值确定搜索起始位置。
  2. 从该位置向恢复量较低的食物查找,吃掉玩家实际携带的第一个非自定义食物。同种食物有多组时,使用物品栏编号最小的一组。找到匹配项后立即食用并停止搜索。

恢复量可能浪费:饥饿值为11时,即使只缺9点,也可能先选兔肉煲(10)而不是牛排(8)。不会再做一次比较来减少溢出。饥饿值上限为20,饱和度上限为恢复后的饥饿值。

碗类食物​

甜菜根汤、蘑菇煲和兔肉煲在被自动食用时会返还一个空碗,与原版一致:

  • 如果被吃掉的堆叠已用尽,碗会在同一槽位上取代它
  • 否则碗会被加入背包;若背包没有空间,则掉落在玩家脚下

受保护的物品​

BetterFood 使用 Bukkit 的 ItemStack.isSimilar,将候选物品与同种材料的新建原版物品比较。比较会忽略堆叠数量。任何携带额外物品数据的物品都会被跳过,包括:

  • 自定义显示名称
  • 描述(lore)
  • 附魔、自定义模型数据以及其他物品组件
  • 其他插件写入的持久化数据

这项检查是把整个物品与一个全新创建的原版堆叠进行比对,而不是依赖一份手工维护的字段清单,因此未来 Minecraft 版本新增的物品数据也会被自动跳过。这旨在降低误食插件物品或装饰物品的可能性。

支持的食物​

BetterFood 会自动食用以下食物:

食物恢复饥饿值恢复饱和度
苹果42.4
烤马铃薯56.0
甜菜根11.2
甜菜根汤67.2
面包56.0
胡萝卜33.6
牛排812.8
熟鸡肉67.2
熟鳕鱼56.0
熟羊肉69.6
熟猪排812.8
熟兔肉56.0
熟鲑鱼69.6
曲奇20.4
干海带10.6
发光浆果20.4
金胡萝卜614.4
西瓜片21.2
蘑菇煲67.2
马铃薯10.6
南瓜派84.8
兔肉煲1012.0
甜浆果20.4

排除的食物​

以下可食用物品被刻意排除在自动食用之外。这些是生肉、特殊物品或具有负面或不可预测效果的食物:

  • 生牛肉
  • 生鸡肉
  • 紫颂果
  • 生鳕鱼
  • 附魔金苹果
  • 金苹果
  • 蜂蜜瓶
  • 生羊肉
  • 毒马铃薯
  • 生猪排
  • 河豚
  • 生兔肉
  • 腐肉
  • 生鲑鱼
  • 蜘蛛眼
  • 迷之炖菜
  • 热带鱼

较新 Minecraft 版本添加的、未出现在上方支持列表中的任何其他可食用材料同样会被跳过,直到它被显式加入该列表为止。

启动时,BetterFood 会执行一次覆盖度审计,并输出一行控制台日志,列出它刻意不自动食用的每一种可食用材料(BetterFood is intentionally not auto-eating these food items: ...),这样你就能一眼看清在你的服务端版本上究竟哪些物品会被跳过。只有在至少存在一个被跳过的物品时才会打印这一行,因此完全没有这行日志就意味着支持列表已经涵盖了该版本上的每一种可食用物品。