Поведение BetterFood
BetterFood использует выбор еды с учётом голода вместо простого поедания самого питательного предмета в первую очередь.
Когда срабатывает
BetterFood реагирует на ванильное событие FoodLevelChangeEvent с приоритетом HIGHEST и игнорирует отменённые события, поэтому другой плагин, который отменяет или переписывает изменение голода, получает последнее слово до того, как BetterFood посмотрит на него. Плагин действует только тогда, когда уровень голода игрока падает. У игрока должно быть разрешение betterfood.user, и он не должен был отключить автоматическое поедание через /betterfood toggleEating.
Правила выбора
- Еда упорядочена по убыванию восстановления голода, затем насыщения, затем по возрастанию имени материала. Предвычисленная таблица задаёт начальную позицию поиска для каждого уровня голода.
- Далее поиск идёт к менее питательной еде. Съедается первый имеющийся обычный предмет без персонализации; среди одинаковых стопок выбирается слот с наименьшим индексом.
Восстановление может расходоваться впустую: при голоде 11 кроличье рагу (10) может быть выбрано раньше жареной говядины (8), хотя не хватает только 9. Повторного сравнения для уменьшения избытка нет. Голод ограничивается 20, насыщение — итоговым голодом.
Еда в мисках
Свекольный суп, тушёные грибы и тушёный кролик возвращают пустую миску при автоматическом поедании, как и в ванили:
- если съеденный стак израсходован, миска занимает его место в том же слоте
- иначе миска добавляется в инвентарь, а если места для неё нет — выбрасывается под ноги игроку
Защищённые предметы
BetterFood автоматически употребляет только предмет, который побайтово идентичен нетронутому ванильному стаку того же материала. Всё, что несёт дополнительные данные предмета, пропускается, в том числе:
- пользовательское отображаемое имя
- описание (lore)
- зачарования, пользовательские данные модели (custom model data) и другие компоненты предмета
- постоянные данные, записанные другими плагинами
Проверка сравнивает предмет целиком со свежесозданным ванильным стаком, а не с вручную поддерживаемым списком полей, поэтому данные предмета, добавленные будущими версиями 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: ...), чтобы вы могли с одного взгляда увидеть, какие именно предметы пропускаются на вашей версии сервера. Строка выводится только тогда, когда пропущен хотя бы один предмет, поэтому её отсутствие означает, что список поддерживаемой еды уже покрывает все съедобные предметы этой версии.