01Что происходит за один расчёт
Сначала у предмета есть базовое время, затем среда меняет температуру и скорость порчи, а сервер рассчитывает оставшееся время.
Температурные кривые регулируют скорость порчи; подстраница «Эффекты» регулирует эффекты при употреблении. Это независимые списки: настройка эффекта не меняет срок годности автоматически.
durationMinutes берутся целые минуты. Встроенные предметы могут переопределять начальную температуру класса 10℃; не считайте значение класса начальной температурой всей еды.ShelfDurationUnit, S2ShelfConfig, ShelfTemperatureCurve.effectiveRate.02Восемь подвкладок редактора
Восемь вкладок ниже совпадают с порядком редактора «Срок годности» в игре. Выберите вкладку, чтобы увидеть поля, назначение и границы; веб-страница не сохраняет настройки.
Срок годности
Задаёт базовое время хранения нового предмета и базовый множитель порчи. Кнопки единиц переключают минуты, часы, дни и игровые дни; ввод может содержать дробь, при сохранении переводится в целые минуты. Без множителя для измерения используется ×1.
| Поле | Назначение |
|---|---|
| Срок годности / базовый множитель порчи | Определяют начальное время и базовую скорость порчи; 0 означает отсутствие базового снижения. |
| Продукт истечения / наследование температуры | Заменяет предмет при истечении; minecraft:air означает исчезновение. При наследовании продукт получает только температуру момента истечения, его срок годности начинается заново. |
| Команда истечения | Выполняется от контекста держателя, когда предмет истекает в руке; пустое значение отключает. В контейнере или у выпавшего предмета не срабатывает. |
| Множители по измерениям | Множитель порчи по ID измерения, например Нижний мир может отличаться от Верхнего мира; это не смещение температуры. |
ItemConfigEditScreenV2.buildShelfEditor, S2ShelfConfig.durationMinutes, ShelfDimensionMultiplier.Основное
Определяет верхнюю и нижнюю границы температуры предмета, начальную температуру первого запуска и допустимый диапазон употребления; множитель порчи напрямую не меняется. Текущая температура существующих предметов не сбрасывается сразу после изменения начальной.
ItemConfigEditScreenV2.SHELF_COMMON_LABELS, S2ShelfConfig.Common.Температурные кривые
Каждая кривая задаёт начальную/конечную температуру и множители на концах, линейно меняясь внутри; необязательные буферы до начала и после конца плавно возвращают множитель к ×1. Без буфера и вне диапазона одна кривая даёт ×1.
temperatureCurves регулирует расход оставшегося срока, а не эффекты зелий при употреблении.ShelfTemperatureCurve.multiplierAt, multiplier, ItemConfigEditScreenV2.buildShelfCurveRows.Эффекты
Добавляет пользовательские температурные зоны: ID эффекта, диапазон, включение концов, начальный/конечный уровень и время, частицы. Только при употреблении с текущей температурой внутри диапазона уровень и время интерполируются между концами.
temperatureEffectCurves; эффекты не создаются автоматически по названиям зон.ShelfTemperatureEffectCurve, ShelfTemperatureEffectMigration, ItemConfigEditScreenV2.buildShelfZoneEffectRows.Природная среда
Предмет стремится к температуре среды; базовое изменение и интервал задают скорость. Чем больше разница, тем сильнее ускорение по шагам охлаждения/нагрева, порогу и пределу множителя; также есть поправки скорости по температурным зонам.
Целевая температура зависит от мира и правил сервера; подстраница управляет только параметрами этой еды и не задаёт текущую температуру предмета напрямую.
S2ShelfConfig.NaturalEnvironment, S2Environment, ItemConfigEditScreenV2.SHELF_NATURAL_DISPLAY_FIELDS.Холодильник
У холодильника и морозильника есть свои изменение температуры и интервал, определяющие базовую скорость приближения к целевой температуре. Здесь же задаются поправки скорости для четырёх температурных зон.
fridgeTemperatureChangeC и fridgeTemperatureChangeMinutes.freezerTemperatureChangeC и freezerTemperatureChangeMinutes.S2ShelfConfig.FridgeTemperature, ItemConfigEditScreenV2.SHELF_FRIDGE_DISPLAY_FIELDS.Холодная свежесть
Задаёт точку замерзания, точку заморозки, точку холодной свежести, точку высокой температуры и сохранность при 50% холодной свежести. Ниже точки свежести прогресс начинается, на точке заморозки — 50%, на точке замерзания и ниже — 100%; доля защиты меняется с прогрессом.
S2ShelfConfig.Common, protectionFraction, S2Environment.mapNaturalColdFreshProgress.Холодоёмкость
После включения coldRetention в полностью замороженном состоянии расход останавливается и время восстанавливается с заданной скоростью; вне полной заморозки расход обычный. После накопленной потери предела восстановление навсегда снижается и не возвращается при повторной заморозке.
S2ShelfConfig.coldRetention, coldRecoveryRate, coldDegradationRate, S2Engine.03Время вне инвентаря и защита в мультиплеере
Еда использует разные часы у игрока, в контейнере и на земле; сервер выполняет расчёт, клиент лишь показывает присланную скорость.
Два вида часов и авторитет сервера
Еда в инвентаре, слотах экипировки, второй руке и на курсоре идёт по времени игры игрока и не движется вне сети. Сундуки, холодильники, другие контейнеры, выпавшие предметы и размещённая еда используют мировое время, которое идёт, пока сервер работает. Еда в творческом инвентаре и JEI не учитывается.
Порча, температура и свежесть рассчитываются сервером; клиент видит только снимок. Числа в подсказке идут по текущей скорости, присланной сервером, но истинное значение всегда на сервере; изменение клиента не создаёт свежую еду. Текст и цвета подсказки также определяются файлами схем сервера.
Смена владельца, вход и смена измерения
При передаче еда продолжает считаться с момента получения новым владельцем; длительное время в сети прежнего владельца не заставляет её мгновенно испортиться. Вход игрока и смена измерения также пересчитывают время; офлайн-период не добавляется предметам в инвентаре.
Инвентарь и выпавшие предметы обновляются примерно каждые 20 секунд; нажатие S сразу выполняет расчёт. Открытие контейнера, начало еды и доступ к терминалу Tom также обновляют инвентарь, не дожидаясь следующего цикла.
Кто владелец предмета
Еда со сроком годности получает метку владельца в момент помещения в контейнер. Другие игроки видят красную рамку и не могут забрать; защищённую еду на земле тоже нельзя подобрать. Холодильники и терминалы Tom подчиняются тем же правилам.
Только «помещение в контейнер» создаёт владельца: если взять половину из сундука в мире, остаток не становится вашим от прикосновения, другие могут забрать его. Наоборот, еда, никогда не бывшая в контейнере, не имеет владельца: только что созданную или подобранную еду можно свободно отдать. После метки владелец следует за предметом, и возврат из своего сундука в инвентарь сохраняет владельца.
Удерживайте S: если владелец не вы, внизу появится строка «Владелец предмета». Одинаковая еда разных владельцев не стакается и делится на два стака, чтобы метки не перезаписывались.
Список доверия и передача владения
/hdtrust управляет списком доверия для ваших защищённых предметов, OP не нужен:
| Команда | Действие |
|---|---|
/hdtrust add <игрок> | Добавляет игрока в сети в текущий список; он может брать вашу защищённую еду. |
/hdtrust remove <игрок> | Убирает из текущего списка, но сохраняет историю «ранее доверял»; уже взятые и не возвращённые предметы переходят ему. |
/hdtrust forget <игрок> | Удаляет текущий список и историю, далее считается, что доверия не было. |
/hdtrust list | Показывает текущий и прошлый списки; нажатие на имя удаляет или снова доверяет. |
Доверие всегда относится к первоначальному владельцу: если друг забрал вашу еду и положил в свой сундук, владельцем остаётесь вы. Если вы сами выбросили еду, это считается подарком и метка снимается; если друг забрал и выбросил — тоже.
Смерть не считается подарком: еда без владельца получает вашу метку в момент смерти, уже помеченная сохраняет прежнего владельца; посторонние не подберут, вы и доверенные друзья можете подобрать после возрождения. Если на сервере включено removeOwnerOnDeathDrop (для PvP), защита смерти снимается и подобрать может любой.
ejectIllegalProtectedItems, чтобы выбрасывать такие предметы под ноги; по умолчанию выключено, чтобы не терять предметы при повреждении файла доверия.Когда все в офлайне, еда в контейнерах не портится
Пока владелец защищённой еды и все текущие доверенные игроки не в сети, время в сундуках, холодильниках и других контейнерах не учитывается; если хоть один имеющий право игрок в сети, расчёт идёт обычном порядке.
Сервер записывает периоды «все не в сети» в офлайн-реестр; сундук рассчитывается при открытии, поэтому списание происходит, когда кто-то возвращается. Реестр хранит только периоды после включения; более раннее офлайн-время не восстанавливается. Защищённая еда на земле не получает эту защиту и портится.
Контейнеры, добыча и выпавшие предметы
Закрытые сундуки не сканируются постоянно; еда хранит время последнего расчёта, и при открытии промежуток рассчитывается по прошлой температуре. Изменения погоды внутри не пересчитываются посегментно, результат немного отличается от непрерывной симуляции, но близок и почти не влияет на производительность.
Открытие сундука, нажатие на предмет или S сразу выполняет расчёт. Еда, ещё не начавшая отсчёт (вставленная командой или другим модом, старая до настройки срока), получает метку и начинает отсчёт при открытии или S. При разрушении сундука время сначала выравнивается, состояние холодильника очищается, затем предметы выпадают; воронки и трубы подчиняются правилам объединения, при слиянии берётся худшая часть.
Еда из сундуков добычи и дропа мобов получает метку в момент создания и начинает с нуля; это относится и к модам, складывающим урожай в свой инвентарь. Созданная, приготовленная или обработанная вами еда не получает метку до первого появления у игрока или в контейнере.
Выпавшие предметы выравниваются по 20-секундным слотам; одинаковая еда из одного слота имеет одинаковые данные и стакается на земле. Первый короткий период после падения не учитывается, погрешность в пользу игрока. Выгруженные чанки не считаются; при загрузке промежуток добавляется сразу.
Размещённая еда вроде торта использует мировое время: при загрузке чанка расчёт один раз, один чанк не чаще раза в 3 минуты; принудительно загруженные чанки (FTB Chunks) — раз в минуту. Испорченный торт исчезает или выдаёт продукт; уже испорченный торт при установке сразу становится продуктом. Нетронутый торт можно сломать и получить с прежним сроком, надкушенный — нельзя.
С Jade при наведении на выпавшую еду в HUD добавляется строка срока с точностью до секунды и процентом с одним знаком; данные также с сервера. Еда в сундуках и руке по-прежнему использует подсказку предмета.
Пороги стака и объединения
| Условие | Порог по умолчанию |
|---|---|
| Разница оставшегося срока | Не более 5 минут |
| Разница температуры | Не более 10℃ |
| Разница холодной свежести | Не более 20 (шкала 0–100) |
Нужны все три условия; после объединения берётся худшая часть, свежая еда не «отмывает» испорченную. Пороги настраиваются в разделе shelfMerge файла config/healthy_diet/server.json. Выпавшие предметы стакаются только при полном совпадении данных; два предмета с разным пределом холодоёмкости тоже не объединяются.
Команда и продукт истечения
Команда истечения выполняется только когда еда портится в руках игрока или при укусе уже испорченного торта; в контейнере или на земле не выполняется. Продукт — новый предмет без исходного NBT, количество сохраняется; если не помещается, возвращается в инвентарь, при полном инвентаре падает на землю.
S2Engine, S2Handler, S2OfflineLedger, S2StackMerge, TrustManager, HDTrustCommand, PlacedFoodRefresh.