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

Statestream

Радикальная оптимизация производительности за счёт переработки поиска BlockState и обновлений соседних блоков.

FabricNeoForgeForgeQuilt
Загрузчики
FabricNeoForgeForgeQuilt
Скачиваний на Modrinth
1,9 тыс.
Подписчиков на Modrinth
9
версии
3
Обновлён
24 мая 202624 мая
Опубликован
в 2026

Коротко о моде

Работает на Fabric, NeoForge, Forge и Quilt
Для Minecraft 26.1–26.1.2
Нужен на сервере; в игре — по желанию
Последняя версия — 1.0.1 от 24 мая 2026
Лицензия MIT — бесплатно
Где нужен
В игренеобязателенНа сервереобязателен

Нужен на сервере; в игре — по желанию

Версии игры26.1–26.1.2
Описание переведено автоматическиПоказать оригинал (EN)

StateStream

Радикальная оптимизация производительности для Minecraft 26.1.2 — без изменений в геймплее, гарантированно.

StateStream точечно бьёт по трём самым дорогим горячим путям в серверном цикле Minecraft и заменяет их на компактные, дружелюбные к кэшу реализации. Каждую оптимизацию можно включать отдельно, и при ошибке она сама отключается — так что плохой конфиг тихо откатывается к ванилле, а не вызывает баги.


Кратко

Мод Statestream убирает кучу ненужных проверок в игре, что позволяет серверу работать плавнее. Это поднимает ваш TPS, если он ниже 20 (20 — максимум). Так что мод особенно полезен, если вы сталкиваетесь с лагами сервера. Даже если у вас не меньше 20 TPS (20 — максимум), мод всё равно поможет, потому что вашему компьютеру придётся делать меньше вычислений. Поэтому мод крайне полезен при игре в одиночке или при хостинге сервера/мира на своём компьютере — он позволяет ПК использовать больше CPU, чтобы дать вам более высокий FPS.

Улучшения производительности

FPS (кадры в секунду на клиенте)

Оптимизации StateStream работают на стороне сервера, но они косвенно улучшают FPS клиента тремя способами:

1. Меньше лаг-спайков сервера → плавнее интерполяция анимаций Когда сервер пропускает тик (падает ниже 20 TPS), клиент неправильно интерполирует позиции сущностей и блоков. Рывки, заикания и «дёрганое» движение — всё это следствие лагов сервера. StateStream держит сервер на 20 TPS стабильнее, и клиент воспринимает это как заметно более плавную картинку, даже если фактический FPS вашей видеокарты не изменился.

2. Одиночная игра / встроенный сервер (самое важное для одиночных игроков) В одиночке сервер и клиент делят один и тот же CPU. Каждая миллисекунда, сэкономленная в тике сервера, — это миллисекунда, возвращённая потоку рендера. В типичном мире выживания:

  • Кэш BlockState убирает лишние обходы HashMap при расчётах границ чанков во время рендера
  • Реактивный тикинг сокращает время, проводимое в потоке тиков, напрямую снижая время кадра

Оценочное улучшение FPS в одиночке: +3 – 12 FPS при базовых 60 FPS; выигрыш выше там, где сервер использует больше CPU, при большей дальности прорисовки, в мультиплеерных мирах, размещённых на том же ПК, что и клиент.

3. Снижение нагрузки на сборщик мусора Плоский кэш long[] избегает тысяч аллокаций упакованных объектов Boolean и Integer за тик, которые порождает ванильная система свойств. Меньше короткоживущих объектов → меньше пауз GC → меньше просадок кадров.

**NB! Улучшения FPS будут заметны только когда сервер/мир работает на том же компьютере, что и клиент, например при хостинге сервера для себя и друзей локально на своём ПК или через essentials и т.п. Когда мод стоит на сервере, работающем извне, вы почувствуете, что плавнее работает сервер, а не ваш клиент.


Как работает каждая оптимизация

JIT-инлайнинг BlockState

У каждого блока в Minecraft есть одно или несколько BlockState (у травяного блока — snowy: true/false, у бревна — axis: x/y/z и т.д.). Ванилла ищет свойства через обобщённый HashMap внутри StateHolder — гибко, но медленно, когда вызывается миллионы раз за тик.

StateStream заранее запекает пять самых часто запрашиваемых свойств (solid, opaque, hasCollision, isAir, lightEmission) в плоский массив long[] при запуске, по одной записи на ID блока. Поиск превращается в одно чтение из массива вместо обхода мапы. Массив разложен так, чтобы часто запрашиваемые вместе свойства делили одну строку кэша CPU.

Реактивный тикинг блоков

Ванилла сэмплирует random.nextInt(4096) на субчанк за тик. В типичном мире выживания большинство из этих 4096 позиций — воздух или не тикающий камень. StateStream ведёт реестр только тех позиций, где есть тикающие блоки (культуры, трава, ламинария, лёд и т.д.), и переходит сразу к ним.

Частота тиков математически идентична ванильной. Вероятность 1/4096 на блок за тик сохраняется в точности — мы не переходим на круговой или детерминированный график. Скорость роста культур, образование льда, распространение деревьев — всё статистически то же самое, просто плавнее и с меньшей нагрузкой на CPU.

Отсечение обновлений

Когда блок меняется, Minecraft уведомляет до 6 соседних блоков. Многие из этих уведомлений действительно необходимы (Redstone, поток воды, падающий песок). Но некоторые блоки-получатели, вероятно, ничего не делают с уведомлением — они получают его и сразу возвращаются.

StateStream позволяет регистрировать такие «инертные пары» в JSON-файле конфигурации. Перед распространением уведомления соседу он проверяет таблицу и пропускает вызов, если получатель известен как инертный для этого источника. Стандартная конфигурация поставляется пустой — ноль отсечений из коробки, максимальная безопасность.


Команды

Требуется уровень оператора 2.

/statestream stats      — процент попаданий в кэш, отсечённые обновления, отслеживаемые тикающие позиции
/statestream status     — какие модули активны / самоотключились
/statestream reload     — перезагрузить inert_pairs.json без перезапуска
/statestream benchmark  — замер производительности (результаты в логе сервера)

Конфигурация

config/statestream.toml — создаётся автоматически с безопасными значениями по умолчанию при первом запуске:

[general]
jit_inlining_enabled = true
update_culling_enabled = true
reactive_ticking_enabled = true
debug_logging = false

[culling]
inert_pairs_file = "config/statestream/inert_pairs.json"

Все три модуля можно включать и выключать независимо. Отключите любой модуль, конфликтующий с другим модом, одной строкой в конфиге.


FAQ — просто я отвечаю на свои же вопросы — хех :(

Изменит ли это работу моих ферм? Нет. Частота тиков, вероятности роста и всё поведение случайных тиков математически идентичны ванильным. Модель вероятности 1/4096 сохраняется в точности.

Сломает ли это Redstone? По умолчанию нет. Отсечение обновлений поставляется с нулём отсечённых пар. Поведение Redstone полностью не затрагивается, если только вы вручную не добавите инертные пары (и только после проверки их по ванильному исходному коду).

Может ли это повредить мой мир? Нет. StateStream никогда не записывает данные блоков и не изменяет состояние мира. Он меняет только то, как быстро сервер читает свойства блоков, а не какими эти свойства являются.

Что произойдёт, если что-то пойдёт не так? Затронутый модуль запишет предупреждение в лог и молча отключится. Ваш мир продолжит работать на ванильном поведении до конца этой сессии. Ни краша, ни потери данных.

Частые вопросы

Как установить Statestream?

Установите Fabric под свою версию Minecraft, скачайте Statestream под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть Statestream?

У Statestream есть сборки для Minecraft 26.1–26.1.2.

Нужен ли Statestream на сервере?

Нужен на сервере; в игре — по желанию

Лицензия и источник
MIT Licenseможно свободно использовать и распространять с указанием автора
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее