BetterFood の動作
BetterFoodは、最も栄養価の高いアイテムを単純に最初に食べるのではなく、空腹度を考慮した食料選択を使用します。
トリガー条件
BetterFoodはバニラのFoodLevelChangeEventにHIGHEST優先度で反応し、キャンセルされたイベントは無視します。そのため、空腹度の変化をキャンセルまたは書き換える他のプラグインが、BetterFoodが見る前に最終的な決定権を持ちます。動作するのはプレイヤーの空腹度が減少しているときだけです。プレイヤーはbetterfood.user権限を持っている必要があり、また/betterfood toggleEatingによって自動食事をオフにしていない状態である必要があります。
選択ルール
- 食品は回復する空腹値の降順、同値なら隠し満腹度の降順、さらに素材名の昇順に並びます。事前計算した表で、各空腹値に対応する検索開始位置を決めます。
- そこから回復量の少ない食品へ順に探し、所持しているカスタム品ではない最初の食品を食べます。同じ食品のスタックが複数ある場合は、インベントリ番号が最も小さいものを使います。
回復量が余ることがあります。空腹値11では不足が9でも、ステーキ(8)よりウサギシチュー(10)が先に選ばれます。無駄を減らすための再比較はありません。空腹値は20、隠し満腹度は回復後の空腹値を上限とします。
ボウル系の食料
ビートルートスープ、キノコシチュー、ウサギシチューは、自動で食べられた際にバニラと同じく空のボウルを返します:
- 食べたスタックが使い切られた場合は、同じスロットでボウルが置き換わります
- そうでない場合はボウルがインベントリに追加され、空きがない場合はプレイヤーの足元にドロップされます
保護されたアイテム
BetterFoodが自動消費するのは、同じマテリアルの手つかずのバニラスタックとバイト単位で一致するアイテムだけです。追加のアイテムデータを持つものはすべてスキップされます。たとえば:
- カスタム表示名
- ロア
- エンチャント、カスタムモデルデータ、その他のアイテムコンポーネント
- 他のプラグインが書き込んだ永続データ
このチェックは、手作業で維持されるフィールドのリストではなく、新規に作成したバニラスタックとアイテム全体を比較します。そのため、将来の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は起動時にカバレッジ監査を実行し、意図的に自動消費しないすべての食用素材を列挙する1行をコンソールに出力します(BetterFood is intentionally not auto-eating these food items: ...)。これにより、お使いのサーバーバージョンでどのアイテムがスキップされるかを一目で確認できます。この行はスキップ対象のアイテムが1つ以上ある場合にのみ出力されるため、行がまったく表示されないときは、そのバージョンのすべての食用アイテムがすでに対応リストでカバーされていることを意味します。