MekDefender
Мод защиты сервера на NeoForge для Minecraft 1.21.1 + Mekanism. Один проект mekdefender и один JAR обеспечивают:загрузку чанков с учётом владельца для машин с Anchor Upgrade и Dimensional Stabilizer;ограниченную синхронизацию последнего состояния для четырёх проверенно безопасных
- Загрузчики
- NeoForge
- Скачиваний на Modrinth
- 115
- Подписчиков на Modrinth
- 0
- версия
- 1
- Обновлён
- 27 июля 202627 июл.
- Опубликован
- в 2026
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
MekDefender
Мод защиты сервера для NeoForge для Minecraft 1.21.1 + Mekanism. Один проект mekdefender и один JAR предоставляют:
- загрузку чанков с учётом владельца для машин с Anchor Upgrade и Dimensional Stabilizer;
- ограниченную синхронизацию последнего состояния для четырёх проверенных безопасных S2C-payload'ов Mekanism.
Политика загрузки чанков
Когда владелец выходит из игры, Mekanism освобождает его тикеты загрузчика немедленно или после настроенного льготного периода. Восстановление при входе ограничено по частоте. Загрузчик без владельца по умолчанию отключён; Dimensional Stabilizer без владельца/офлайн также пропускает расход энергии. MekDefender не владеет контроллером тикетов или форматом сохранения Mekanism. Изменения тикетов по-прежнему используют код Mekanism. Единственный изолированный сохранённый кэш — world/data/mekdefender_loaders.dat (владелец → позиции загрузчиков). Удаление этого мода удаляет его миксины, и Mekanism возвращается к обычному поведению; осиротевший кэш игнорируется.
Граница безопасности синхронизации Mekanism
Объединять можно только эти заменяемые каналы абсолютного состояния:
mekanism:update_tilemekanism:network_scalemekanism:fluid_networkmekanism:chemical_networkQIO, транспортер, GUI/контейнер/инвентарь, конфигурация, безопасность, экипировка, данные игрока, C2S, ванильные, неизвестные payload'ы и смешанные пакеты проходят без изменений. Классификация payload'ов, контракты вызовов Mixin Mekanism, точки инъекции, повторная валидация отслеживания, разрешение живых объектов и поведение fail-open — это фиксированные правила безопасности, а не конфигурация администратора. Байтовые бюджеты обучаются на фактических размерах S2C-пакетов, создаваемых кодировщиком пакетов Minecraft до сжатия, фрейминга и шифрования. Каждый канал ведёт EWMA;initialEstimatedBytesиспользуется только до поступления реальных образцов. Если обученный размер превышает настроенный burst, начисление бюджета ограничивается этим burst, чтобы последнее состояние не могло откладываться бесконечно. Диагностика сохраняет сырую EWMA. Байтовая телеметрия опциональна и никогда не участвует в решении об отмене оригинальной отправки Mekanism. Режим синхронизации по умолчанию —OBSERVE, который записывает статистику без отмены отправок Mekanism. Используйте/mekdefender mode enforceдля переопределения в памяти во время выполнения после проверки совместимости и статистики. Уже принятые финальные состояния безопасно сливаются при отключении режима или канала.
Единая конфигурация
Единственный файл конфигурации генерируется для игрового/серверного инстанса по пути:
config/mekdefender-server.tomlОн использует schemaVersion = 2 и содержит:
chunkLoading.*: политика владельца, льготный период, бюджет перезагрузки при входе и отладочное логирование;- `sync.channels..*`: независимое включение, интервал, дедлайн и оценка байтов;
sync.budget.*: бюджеты токенов payload'ов и оценочных байтов на игрока/глобальные;sync.scheduler.*: лимиты очереди, пакетов, исходной работы, эпохи, интервала и просрочки;sync.pressure.*: пороги мягкого/критического давления и восстановления;sync.circuitBreaker.*: ограниченное окно внутренних сбоев и безопасный резервный режим;sync.metrics.*: окна hotspot/таймингов, EWMA фактических закодированных байтов и значения по умолчанию для A/B с реальными клиентами;logging.*иpermissions.*: логирование cooldown/переходов и уровни OP для чтения/администрирования. Загрузка и перезагрузка атомарны. Неизвестные секции или ключи, дублирующиеся объявления, неверные типы, значения вне диапазона, неправильная схема и противоречивые значения между полями отклоняют всю перезагрузку с ошибкой с указанием номера строки; предыдущий живой снимок остаётся активным.
Игровые команды
/mekdefender status [compact|verbose]
/mekdefender compatibility
/mekdefender top [seconds] [limit]
/mekdefender channel <tile|scale|fluid|chemical>
/mekdefender player <name>
/mekdefender config <show|validate>
/mekdefender ab <status|start <seconds>|cancel>
/mekdefender mode <off|observe|enforce>
/mekdefender reload
/mekdefender resetstatsВывод status и channel разделяет исходные запросы/замены/материализацию от единиц постановки в очередь/замены/отправки получателям. Отображаемые проценты сокращения источника и получателя, таким образом, являются отношениями однотипных единиц. configuredMode и runtimeMode в памяти показываются отдельно. Уровни OP для чтения и изменения настраиваются независимо. `/mekdefender ab start ` требует настроенного числа реальных клиентов, не FakePlayer (по умолчанию два). Он прогревает и измеряет равные окна OBSERVE и ENFORCE, затем восстанавливает предыдущий режим выполнения. Отчёт сравнивает фактические закодированные S2C-байты и пакеты до сжатия, средний/p95 MSPT, производный TPS и среднюю/p95 задержку игрока. Трафик во время прогрева исключается; число клиентов ниже настроенного минимума или фаза без безопасного трафика Mekanism помечает сравнение как недействительное. Для 30-минутного окна на фазу (около часа плюс прогревы) держите оба клиента на одном репрезентативном маршруте и запустите:
/mekdefender ab start 1800Если настроенное число внутренних сбоев планировщика/хуков происходит внутри окна circuit breaker во время enforcement, оптимизатор переключается на настроенный безопасный режим и перестаёт принимать новую работу. Уже принятые финальные состояния всё равно сливаются. Администратор должен явно выполнить команду режима, чтобы сбросить breaker и снова включить enforcement. При устойчивом давлении сокета обновления абсолютного состояния жидкости и химии сохраняют приоритет, а обновления tile и scale остаются ограниченными и подчиняются принципу последней записи. Они возобновляются с новейшим состоянием после восстановления; это защищает сервер, но не является строгой гарантией доставки в реальном времени.
Измеренный эффект оптимизации
Финальный интеграционный JAR был протестирован на Youer 1.21.1-4a57297f с NeoForge 21.1.241, Mekanism 10.7.19.85, миром с живыми буферизованными сетями Mekanism и двумя фиксированными получателями FakePlayer:
sourceRequested=25005
sourceReplaced=24981
payloadMaterialized=24
recipientSent=48
players=24/24
schedulerP95Ms=0.1887
networkIndexRebuilds=7
networkIndexScanned=21
networkIndexHits=72
failOpen=0Это 99.904% коэффициент объединения источника: 24,981 / 25,005 = 99.904%. С ровно двумя получателями та же контролируемая нагрузка
было отправлено 50 010 несгруппированных сообщений получателям; MekDefender отправил 48 — это тоже снижение на 99,904% для той фиксированной тестовой топологии. Результат демонстрирует путь оптимизации при нагрузке сети с большим числом повторов; это не универсальная гарантия снижения. Реальная экономия в продакшене зависит от частоты обновлений, настроенных интервалов, отслеживания игроков и фактической активности машины и сети. Используйте команду A/B с реальным клиентом выше, чтобы измерить конкретный сервер.
Сборка и тесты
Требуется JDK 21:
./gradlew test build integrationTestJarАртефакт релиза — build/libs/mekdefender-1.2.0.jar. mekdefender-1.2.0-integration-test.jar — отдельный тестовый вариант с одноразовым миром, и он никогда не включается в релизный JAR. При сборке скачивается mekanism:Mekanism:1.21.1-10.7.19.85 с ModMaven как воспроизводимая базовая версия для компиляции и тестов. Этот артефакт не ограничивает совместимость во время выполнения, и Mekanism не входит в состав MekDefender. Для дополнительного запуска сервера разработки нужна тестируемая сборка Mekanism в run/mods/. Тестовые обвязки, включаемые свойствами:
-Dmekdefender.integrationTest=true: вход/выход владельца, энергия и восстановление при входе;-Dmekdefender.syncIntegrationTest=true: стресс-тест планировщика синхронизации Mek с двумя FakePlayer.
Совместимость
- Minecraft 1.21.1
- NeoForge 21.1.194 или новее в линейке 1.21.1
- Сборка Mekanism для Minecraft 1.21.1, сохраняющая необходимые контракты Mixin
- Java 21 Общий плагин совместимости проверяет только методы, поля и места вызовов, преобразуемые Mixin'ами загрузки чанков и синхронизации. Несвязанные изменения байткода Mekanism остаются совместимыми. Совместимость сообщается по каждой функции: отсутствующий контракт преобразования отключает только эту функцию и оставляет её в режиме сквозного прохождения. Эталонная сборка была протестирована с Mekanism 10.7.19.85, а также прошла дымовой тест в чистом сервере разработки NeoForge 21.1.241, не только в Youer; формальная приёмка в продакшене всё ещё требует релизного JAR и реальных клиентов под репрезентативной нагрузкой.
Частые вопросы
Как установить MekDefender?
Установите NeoForge под свою версию Minecraft, скачайте MekDefender под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть MekDefender?
У MekDefender есть сборки для Minecraft 1.21.1.
Нужен ли MekDefender на сервере?
Ставится только на сервер; игрокам ставить не нужно