Перейти к основному содержимому

Поведение BetterFood

BetterFood использует выбор еды с учётом голода вместо простого поедания самого питательного предмета в первую очередь.

Когда срабатывает​

BetterFood реагирует на ванильное событие FoodLevelChangeEvent с приоритетом HIGHEST и игнорирует события, уже отменённые к моменту вызова его обработчика. Он читает значение голода, оставленное предыдущими обработчиками. Порядок относительно других обработчиков с тем же приоритетом не гарантируется. Плагин действует только при снижении уровня голода. Игрок должен иметь разрешение betterfood.user и не отключать автоматическое питание через /betterfood toggleEating.

Правила выбора​

  1. Еда упорядочена по убыванию восстановления голода, затем насыщения, затем по возрастанию имени материала. Предвычисленная таблица задаёт начальную позицию поиска для каждого уровня голода.
  2. Далее поиск идёт к менее питательной еде. Съедается первый имеющийся обычный предмет без персонализации; среди одинаковых стопок выбирается слот с наименьшим индексом.

Восстановление может расходоваться впустую: при голоде 11 кроличье рагу (10) может быть выбрано раньше жареной говядины (8), хотя не хватает только 9. Повторного сравнения для уменьшения избытка нет. Голод ограничивается 20, насыщение — итоговым голодом.

Еда в мисках​

Свекольный суп, тушёные грибы и тушёный кролик возвращают пустую миску при автоматическом поедании, как и в ванили:

  • если съеденный стак израсходован, миска занимает его место в том же слоте
  • иначе миска добавляется в инвентарь, а если места для неё нет — выбрасывается под ноги игроку

Защищённые предметы​

BetterFood сравнивает каждый подходящий предмет с новым ванильным предметом того же материала через Bukkit ItemStack.isSimilar. Количество предметов в стопке не учитывается. Предметы с отличающимися данными пропускаются, в том числе содержащие:

  • пользовательское отображаемое имя
  • описание (lore)
  • зачарования, пользовательские данные модели (custom model data) и другие компоненты предмета
  • постоянные данные, записанные другими плагинами

Проверка сравнивает предмет целиком со свежесозданным ванильным стаком, а не с вручную поддерживаемым списком полей, поэтому данные предмета, добавленные будущими версиями 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: ...), чтобы вы могли с одного взгляда увидеть, какие именно предметы пропускаются на вашей версии сервера. Строка выводится только тогда, когда пропущен хотя бы один предмет, поэтому её отсутствие означает, что список поддерживаемой еды уже покрывает все съедобные предметы этой версии.

Устранение неполадок​

Если еда игрока не съедается, проверьте по порядку:

  • у игрока есть betterfood.user, и он не отключил поедание командой /betterfood toggleEating
  • еда входит в список поддерживаемой еды
  • стопка — обычная ванильная еда без пользовательского названия, описания, зачарования и данных плагинов (см. Защищённые предметы)
  • голод действительно уменьшается. BetterFood — не таймер и съедает еду только тогда, когда полоска голода убывает.
  • никакой другой плагин не отменяет изменение голода. BetterFood игнорирует FoodLevelChangeEvent, которые уже отменены.

Когда просите о помощи, укажите версии BetterFood и сервера, тип еды, является ли стопка обычной ванильной едой, и шаги, воспроизводящие проблему.