← Back to mod overview

Release notes

LeanCore Changelog

Active

Hytale • Latest version 1.7.0

Changelog version 1.7.0 1.6.1 → 1.7.0 • June 23, 2026

Добавлено

  • Спячка зон с учётом содержимого: LeanCore теперь измеряет плотность построенного содержимого по зонам (сундуки, верстаки и другие block entities) и смещает таймеры спячки и порядок выгрузки в сторону того, чтобы дольше держать загруженными зоны, богатые содержимым, даже если они простаивают. Включено по умолчанию
  • Управление горячим/симуляционным радиусом: под давлением кучи LeanCore может урезать серверный радиус тиков, отдельный от клиентского радиуса обзора, чтобы не было подгрузки в кадре, снижая стоимость симуляции поверх уже имеющихся урезаний обзора. Включено по умолчанию, с тем же окном grace, что и у регулятора обзора
  • Точный учёт выгрузки по чанкам: выгрузка чанков движком теперь считается точно в потоке мира, а не выводится из чистой разницы загруженных чанков, благодаря чему сигнал обучения «эта выгрузка удержалась» становится гораздо чище. Включено по умолчанию

Изменено

  • Чтения по миру (горячие зоны, diff набора чанков, скан содержимого) объединены в один dispatch потока мира за тик, что снижает накладные расходы на dispatch
  • Изменения горячего радиуса теперь логируются, так что регулятор радиуса тиков сообщает свою цель так же, как это уже делает регулятор обзора
  • Схема персистентности обучения поднята до v9 (добавляет content score по зоне); старые снимки v7 и v8 читаются и обновляются автоматически

Исправлено

  • Статистика повторного использования зон теперь неизменяема для безопасного чтения между потоками, счётчики false-cut атомарны, а трекер набора чанков по миру больше не удерживает снимки исчезнувших миров
  • Старение спячки больше не продвигает свои часы, когда fan-out по мирам завершается лишь частично под нагрузкой, так что простаивающие зоны по-прежнему остывают вовремя
  • Завершение работы рантайма защищено от двойного выполнения, так что перезапуск не запускает путь сохранения и разборки дважды
  • Задачи потока мира, бросающие исключение, теперь логируются, а не проглатываются молча
  • Богатые содержимым зоны теперь сохраняются даже до достижения обычного порога посещений

Примечания

  • Новые ключи LeanCore.json добавляются при первом запуске: точный учёт выгрузки по чанкам, модель содержимого и управление горячим радиусом включены по умолчанию. Установите их в false, чтобы сохранить поведение 1.6.x
  • Существующие LeanCore.json и learning.state.gz сохраняются и обновляются на месте; без ручной миграции
Changelog version 1.6.1 1.6.0 → 1.6.1 • June 20, 2026

Изменено

  • Внутренняя чистка: удалён мёртвый код (неиспользуемый тип снимка, неиспользуемые помощники dormancy/profile, устаревшие писатели персистентности). Без изменения поведения

Исправлено

  • Потокобезопасность: выборка разброса кучи, региональное давление сущностей, опрос выгрузки движка, насыщение чанков, позиции игроков dormancy и одиночное движение теперь повторно используют позицию, снятую в потоке мира, или выполняются внутри диспетчеризации мира, вместо чтения трансформаций игрока или хранилищ чанков вне потока мира
  • Тайм-ауты диспетчеризации учитываются: задача мира, превысившая время, больше не продвигает состояние политики и не завышает число выгруженных чанков; действие просто повторяется на следующем тике
  • Админ-инструменты работают при выключенном HUD: /leancore heatmap и /leancore zone pin|unpin|pins больше не требуют hudFeatureEnabled, поэтому админы могут использовать их с отключённым HUD (по умолчанию)

Примечания

  • Никаких изменений конфигурации, команд или API с версии 1.6.0; существующие LeanCore.json и learning.state.gz сохраняются как есть
  • Обновление без миграции с 1.6.0; по-прежнему требуется сервер Hytale >=0.5.6
Changelog version 1.6.0 1.5.0 → 1.6.0 • June 20, 2026

Добавлено

  • Модель движения игрока (motionModelEnabled, включена по умолчанию): скорость и уверенность на игрока с прогнозом позиции на коротком горизонте
  • Предиктивное удержание зон: unload чанков смещается в сторону от направления игрока; зоны в текущем или прогнозируемом view никогда не становятся кандидатами на unload (защищённый конус)
  • Модель reuse-distance + выживаемости (zoneReuseModelEnabled, включена по умолчанию): учится, какие зоны посещаются повторно, и подстраивает пороги dormancy для каждой зоны; сохраняется с prune/TTL
  • Диагностика всегда включена (diagnosticLogEnabled, включена по умолчанию): сводки старта/остановки и логи решений [diag] для каждого профиля, так что один лог сервера объясняет, что сделал мод и почему
  • Кинематографичный буст view (motionViewRadiusBoostEnabled, opt-in / выключен по умолчанию): плавно поднимает дистанцию обзора для быстро движущихся
  • Schema снимка v8: добавляет features движения игрока и статистику reuse зон; читает снимки v7

Изменено

  • Ранжирование unload в dormancy измеряет дистанцию до ближайшего чанка зоны (край AABB), а не до центра, для более точного unload
  • Persistence learning выполняется в выделенном потоке единственного писателя, отдельно от tick runtime
  • Новый LeanCore.json с defaults 1.6.0: модель движения и модель reuse включены; кинематографичный буст выключен

Исправлено

  • Безопасность multi-world: fan-out по миру делает merge только при успехе и соблюдает бюджет на tick; аффинность world thread исправлена, чтобы один мир никогда не старил и не выгружал зоны другого
  • Persistence без race: flush единственного писателя с уникальными temp-файлами; thread-safe features движения и классификатор активности; симметричные лимиты чтения/записи в codec
  • Плавность стриминга чанков: кинематографичный буст остаётся выключенным по умолчанию, потому что перезапись client view radius каждый tick вызывает churn чанков и stutter в текущем engine

Удалено

  • Публичная поверхность LeanCoreAPI (теперь только внутренняя)

Примечания

  • Требует сервер Hytale >=0.5.6
  • Defaults solo/LITE остаются плавными: модели движения и reuse сами по себе не меняют view radius или скорость чанков; кинематографичный буст это opt-in
  • Остаточный stutter загрузки чанков при быстром движении это сторона engine (pre-load hooks) и вне досягаемости мода
Changelog version 1.5.0 1.4.1 → 1.5.0 • June 15, 2026

Добавлено

  • LITE губернатор памяти в embedded solo (liteMemoryGovernorEnabled, включён по умолчанию): масштаб view, понижение зон и unload sweeps без governEnabled
  • Адаптивный view-radius в LITE (liteViewRadiusEnabled): COMFORT 100% до давления чанков или heap; мягкие срезы в WATCH; агрессивно только в TIGHT/CRITICAL
  • AFK unload в LITE (liteUnloadEnabled): reclaim дальних dormant/frozen зон в idle; probe gate всё ещё нужен; unloadEnabled в соло не требуется
  • LITE learning (liteLearningEnabled, по умолчанию вкл.): demand model + gzip persistence в соло; без bandit и holdout в LITE
  • Ключи lite: liteViewPressureThreshold, liteViewComfortCapScale, liteViewWatchScale, liteViewTightScale, liteViewCriticalScale, liteMinClientViewRadius, liteViewRadiusLoginGraceSeconds, liteUnloadIdleSeconds, liteUnloadMaxChunksPerSweep
  • Двойные сигналы давления в LITE: tier heap JVM + насыщение чанков (loaded / view budget)
  • /leancore savings: блок lite губернатора (preset, tier, lite flags, счётчики зон/чанков)
  • /leancore status: lite flags govern/view/learning/unload и строка lite unload gate
  • /leancore learn: подпись LITE поясняет demand-only learning в соло

Изменено

  • Профиль solo LITE теперь выполняет полный tick lite губернатора на world thread (не только sampling dormancy)
  • Новый LeanCore.json с defaults 1.5.0 (lite*Enabled=true; STANDARD/FULL пути off, пока не включите)
  • Интервал persistence STANDARD/FULL консервативный; LITE flush по своему пути при включённом liteLearningEnabled

Исправлено

  • World-thread dispatch с областью по миру (GovernorWorldContext); inline dispatch только для нужного мира
  • Tick LITE губернатора полностью внутри world.execute
  • Усиление загрузки learning: невалидный learning.state.gz в карантин; валидация codec при чтении
  • Санитизация LeanCore.json: невалидный JSON в карантин, атомарная запись, лимиты на ключи view/unload

Примечания

  • LITE unload всё ещё требует /leancore probe при unloadProbeGateEnabled (по умолчанию)
  • LITE sweeps только при tier heap WATCH или хуже и distant dormant зонах; COMFORT + низкий spread с unload 0 это норма
  • STANDARD/FULL без изменений: governEnabled, learningEnabled, unloadEnabled как раньше
  • embeddedStandardProfile: true только для dev dogfood STANDARD в соло
Changelog version 1.4.1 1.4.0 → 1.4.1 • June 14, 2026

Добавлено

  • Шлюз probe для unload (unloadProbeGateEnabled, по умолчанию вкл.): policy unload чанков блокируется, пока /leancore probe не пройдёт; строка шлюза в /leancore status; probePassedAtMs сохраняется в LeanCore.json
  • Метрики сессии gcHint в /leancore savings при gcHintEnabled (число hints и возраст последнего hint)

Изменено

  • /leancore status показывает solo LITE диагностику (adaptive tick, флаги govern/learning/unload, строка unload gate)
  • /leancore probe сохраняет время успеха и подтверждает открытие unload gate
  • /leancore learn показывает статус flush learning (flushErr, время последнего flush); ошибки IO v7 при load/flush пишутся в серверный лог

Исправлено

  • Governor откладывает unload, view-radius и regional pressure, если primary world отсутствует (heap sampling и learning продолжаются)

Примечания

  • Unload на STANDARD/FULL по-прежнему требует governEnabled + unloadEnabled + успешный probe при включённом шлюзе
  • unloadProbeGateEnabled: false только если намеренно отключаете защитный шлюз
  • View-radius на embedded solo без изменений: нужен dedicatedServerMode: true
Changelog version 1.4.0 1.3.0 → 1.4.0 • June 10, 2026

Добавлено

  • Снимок learning v7 (learning.state.gz): gzip binary; миграция legacy learning.state при первом flush

  • Ограничение профилей: learningMaxPersistedPlayers (по умолчанию 512) и learningPlayerTtlDays (по умолчанию 90)

  • embeddedStandardProfile: встроенный solo на STANDARD (15s) без dedicatedServerMode / FULL tick 5s

  • Слой dispatch на world thread: WorldDispatch, GovernorWorldContext, RuntimeGuard для семантики TickingThread Hytale

  • gcHintEnabled: экспериментальный GC hint в LITE idle (выключен по умолчанию)

Изменено

  • Daemon scheduler LeanCore-runtime; ранний shutdown на ShutdownEvent

  • Тики губернатора: coalesced world.execute (не более одного pending tick; scheduler больше не блокируется до 5s)

  • Policy apply + unload чанков inline при world.isInThread()

  • HUD снимается при shutdown; webhook HttpClient на daemon executor

Исправлено

  • Zombie java.exe после закрытия embedded Hytale с dedicated-style config (вложенный world.execute + блокирующее ожидание оставляли задачи в очереди world; TickingThread держал JVM живой после Shutdown completed!)

  • View-radius на embedded solo по-прежнему требует dedicatedServerMode: true (намеренное правило)

Примечания

  • Включайте unloadEnabled только после baseline в /leancore probe
Changelog version 1.3.0 1.2.2 → 1.3.0 • June 9, 2026

Добавлено

  • /leancore savings: пик/baseline/delta heap JVM сессии, состояние губернатора и кумулятивные действия зон/чанков (измерено vs оценка)

  • DedicatedBootstrap: одноразовый preset при первом boot выделенного хоста (governEnabled, viewRadiusGovernanceEnabled, learningEnabled; unloadEnabled остаётся off)

  • 10-минутная grace для view-radius после старта выделенного runtime

Изменено

  • ZoneDormancyMap: инкрементальный refresh без полного rebuild карты; prune устаревших зон

  • OnlineLinearDemandModel: weight decay (0.9995) на update для смены стиля игры

  • chunkUnloadEventTracking: подсчёт unload engine через polling на world thread (без ECS-слушателя ChunkUnloadEvent)

  • Tick губернатора STANDARD/FULL выполняется на world thread

Исправлено

  • Краш на preset FULL / выделенном (Assert not in thread при unload чанков engine) из-за доступа к ChunkStore не с world thread и небезопасной регистрации unload-события

  • Региональный зонд давления (S4) больше не читает ChunkStore с thread планировщика

Заметки

  • /leancore savings показывает только JVM heap — не RAM VPS/OS

  • dedicatedBootstrapEnabled: false отключает автоматический preset

  • JAR на CurseForge должен включать коммиты thread-safety в main после 53c801f

Changelog version 1.2.1 1.2.0 → 1.2.1 • June 8, 2026

Добавлено

  • Кэш классификации break/place и кэш gather type по предмету
  • Окно недавней активности для быстрого переключения MINER / LUMBERJACK / BUILDER
  • Dirty flush learning.state при включённом learning

Изменено

  • Период полураспада EMA активности 20s с перекрёстным подавлением при смене role
  • Обучение ML с throttle; профиль LITE без chunk probe на тике dormancy
  • Hatchet и деревянные блоки Hytale раньше эвристик кирки

Исправлено

  • Медленная смена role при переходе с добычи на рубку дерева
  • Decay EMA на solo LITE во время событий блоков
  • Stutter от classify + train ML на каждом ломании в ECS thread

Заметки

  • Тот же schema v4 learning.state, что и в 1.2.0
  • Главный KPI по-прежнему JVM heap сервера
Changelog version 1.2.0 1.1.0 → 1.2.0 • June 8, 2026

Добавлено

  • Activity Sense (ML): онлайн мультиклассовый softmax-классификатор, обучаемый на живых ECS-событиях
  • Классификатор блока/инструмента: id предмета, gather type и группа блока помечают ломание/установку (MINE, CHOP, FARM, BUILD)
  • Новые стили игры: MINER, LUMBERJACK, FARMER вместе с существующими поведениями
  • EMA по активности: mine, wood, farm, build, craft, combat в скользящих окнах
  • Слушатель боя: FIGHTER только от событий урона, не от обычного ломания блоков
  • Сигнал крафта: CraftRecipeEvent.Pre питает активность крафта
  • Схема признаков v2 (demandDim=11) с EMA по конкретным активностям
  • /leancore learn player: EMA активности и статус activityModel=SOFTMAX
  • Юнит-тесты для классификатора блоков, модели активности и posterior

Изменено

  • Поведенческий posterior использует ML softmax как основной путь; EMA fallback до прогрева
  • learning.state schema v4: сохраняет классификатор активности + EMA по игрокам
  • /leancore learn сообщает featureSchema=v2, когда demand model активен

Исправлено

  • Добыча киркой больше не помечается как FIGHTER — ломание взвешивается по контексту инструмента/блока

Заметки

  • ML активности работает in-process на JVM сервера (без клиентского мода)
  • Эвристика выступает teacher, пока softmax не прогреется (updates >= 8)
  • Главный KPI по-прежнему JVM heap сервера, не FPS клиента
Changelog version 1.1.0 1.0.0 → 1.1.0 • June 8, 2026

Добавлено

  • Масштабируемые профили runtime на встроенном хосте: LITE (solo), STANDARD (друзья), FULL (выделенный)

  • localHostMode AUTO (по умолчанию): лёгкий dormancy в solo; усиление при входе друзей

  • Региональный зонд сущностей (S4): подсчёт по зонам через EntityChunk в /leancore probe

  • Отслеживание ChunkUnloadEvent (опционально): счётчики policy vs engine в /leancore learn

  • OnlineLinearDemandModel: обучаемый спрос на retention с activity features (schema v1)

  • LeanCoreAPI: tier, pin/unpin зон, снимки игрока для других модов

  • Holdout cohort (10%): bandit учится на treatment; holdout без view-radius cuts

  • Юнит-тесты профилей runtime, политики активации, нормализации и demand model

Изменено

  • Runtime использует HytaleServer.SCHEDULED_EXECUTOR с начальной задержкой 30s на локальных мирах

  • Безопасные defaults: governEnabled=false, viewRadiusGovernanceEnabled=false, HUD/learning выкл.

  • View-radius governance отключена в embedded solo даже при включённом governor

  • Policy applier меняет view-radius только при реальной смене policy (throttle)

  • /leancore status показывает активный profile (LITE / STANDARD / FULL)

  • /leancore learn показывает featureSchema=v1, demand model и unload attribution

Исправлено

  • Локальные миры больше не лагают от тяжёлого tick каждые 5s + HUD + learning

  • Отслеживание chunk unload выкл. по умолчанию (избегает assert потока engine)

Примечания

  • Главный KPI — heap JVM сервера, не FPS или GPU клиента

  • Solo: localHostMode: AUTO. Выделенный: dedicatedServerMode: true, затем настройка governor

Changelog version 1.0.0 0.5.0-SNAPSHOT → 1.0.0 • June 7, 2026

Добавлено

  • Первый стабильный публичный релиз (1.0.0)
  • Губернатор памяти с уровнями COMFORT → CRITICAL, rollback и контекстным обучением
  • Карта пространственной дремоты (HOT / WARM / DORMANT / FROZEN) и unload чанков
  • Спрос удержания по игрокам из живой активности
  • Квантили heap сервера и персистентность learning.state (schema v3)
  • Admin HUD (/leancore hud on|off|status) — opt-in, группы и права
  • Heatmap зон (/leancore heatmap [limit])
  • Zone pin (/leancore zone pin|unpin|pins)
  • Опциональный CRITICAL webhook (criticalWebhookUrl, generic JSON)
  • Серверный asset pack для HUD UI

Заметки

  • Основной KPI — JVM heap сервера, не FPS клиента