Files
2026-10-04 00:30:09 +07:00

9.7 KiB
Raw Permalink Blame History

Phase 0: NeoForge, Minecraft 1.21.1

Целевая сборка работает без онлайн-проверки аккаунта. Пользователь выбрал NeoForge на Minecraft 1.21.1; EULA принята для локального эксперимента. Phase 0 завершена для NeoForge 21.1.252 на Minecraft 1.21.1. Импорт и вход клиента пользователь подтвердил; оставшиеся серверные сценарии проверены на том же loader. Это не подтверждает поддержку Forge.

Закреплённая сборка

  • Minecraft 1.21.1, NeoForge 21.1.252.
  • Sophisticated Backpacks 3.26.7.2182 и Sophisticated Core 1.5.5.2363: обе стороны.
  • Mouse Tweaks 2.26.1: только клиент.
  • Source: pack/; версии и download hashes находятся в packwiz metadata.
  • Инструменты и digest Docker image закреплены в toolchain.lock.env.
  • Артефакт: dist/minecraft-lab-neoforge-spike-0.0.1/minecraft-lab-neoforge-spike-0.0.1.mrpack.
  • SHA256: 67d6802ae30a1d42413dc44d76f3cc7f0a77885dbbea5329ab9c2e288bda2d4e.

Подтверждённые результаты

scripts/spike-build.sh экспортировал .mrpack. В modrinth.index.json указаны зависимости Minecraft 1.21.1 и NeoForge 21.1.252; для Mouse Tweaks записано server: unsupported.

scripts/spike-server.sh up -d --wait --wait-timeout 600 успешно запустил сервер. Первый запуск закончился таймаутом загрузки Maven-зависимостей; повторный запуск того же артефакта завершился успешно. Это внешняя ошибка загрузки, воспроизводимость установки без сети пока не подтверждена.

Сервер стал healthy; mc-health ответил с версией Minecraft 1.21.1. Лог подтвердил NeoForge 21.1.252 и загрузку Backpacks/Core. В runtime/mods/ ровно два соответствующих JAR: клиентский Mouse Tweaks исключён.

В runtime/server.properties подтверждены online-mode=false и enforce-secure-profile=false. Порт привязан к 127.0.0.1:25565. Windows TCP-проверка 127.0.0.1:25565 успешна. При первой попытке клиент разрешил localhost в IPv6 ::1 и получил Connection refused; для текущей публикации порта подключаться к 127.0.0.1:25565. После смены адреса пользователь подтвердил успешный вход в мир. Импорт в Prism, запуск клиента с NeoForge и подключение без проверки аккаунта пройдены. Мир, моды и сгенерированные конфиги доступны как обычные файлы в bind-mounted runtime/.

Сгенерированные серверные конфиги NeoForge и Backpacks находятся в runtime/config/, включая neoforge-server.toml и sophisticatedbackpacks-server.toml. Нельзя предполагать, что серверный конфиг обязательно создаётся в world/serverconfig/; политика конфигов должна учитывать выбранную версию loader.

Локальные свидетельства (не коммитятся):

  • .tools/neoforge-evidence/mrpack-index.json;
  • .tools/neoforge-evidence/first-start.log;
  • .tools/neoforge-evidence/healthy-start.log.

Оставшиеся серверные сценарии: пройдены

Перед тестами сервер остановлен. Полный runtime/ сохранён в backups/phase0-neoforge-baseline.tar.zst; архив проверен чтением и SHA256. Backup содержит мир после подтверждённого пользовательского входа. Часть файлов мира принадлежит UID контейнера и недоступна в sandbox; backup и чтение этих файлов выполнены с разрешённым повышением доступа. Ошибка чтения файла должна прерывать backup, а не оставлять частичный архив как успешный результат.

Проверка Результат
Recreate create --force-recreate не изменил SHA256 world/level.dat до запуска; затем сервер healthy.
Смена версии Релиз 0.0.2 заменил Backpacks 3.26.7.2182 на 3.26.6.2174; старый JAR отсутствовал, новая версия загружена. Это проверка замены версии, включая downgrade.
Удаление модов Релиз 0.0.3 без модов запустился healthy; runtime/mods/ пуст.
Pack config Ручной manual-runtime-edit в управляемом config/spike-marker.txt заменён на neoforge-pack-v2 при смене релиза.
Server override С дополнительным Compose marker стал server-override-v1, несмотря на pack default и ручную правку.
Неуправляемые файлы config/unmanaged-probe.txt сохранил preserve-me после смены релиза и удаления модов.
Defaultconfigs Шаблон removeErroringEntities=true не заменил существующий config/neoforge-server.toml со значением false. После переноса текущего конфига вне runtime и запуска 0.0.2 на том же мире новый конфиг получил true.
Datapack Добавленный в 0.0.2 world/datapacks/phase0 выполнил load-функцию на существующем мире: в логе есть [Phase0] datapack-v2-loaded. В 0.0.3 управляемые файлы datapack удалены.
Startup failure Отсутствующий missing-neoforge-phase0.mrpack привёл к exit 1; SHA256 остановленного level.dat до/после совпал.
Restore Backup извлечён в отдельную директорию. Все 28 файлов мира совпали по путям и SHA256 с архивом до запуска; восстановленный level.dat совпал с исходным. Возвращён релиз 0.0.1, сервер healthy.

Тестовые варианты воспроизводятся bash scripts/spike-neoforge-variants.sh из корня на чистом checkout после bootstrap. Скрипт не меняет canonical pack/, не запускает сервер и отказывается перезаписывать готовые релизы.

Артефакты проверки:

  • 0.0.2 SHA256: 4f26f91f7b6e2db80caf522d370db37607ab46de5951e9cd8178f709b9e12ffd.
  • 0.0.3 SHA256: ba0e2476ac7f095f13f5feed73584f38042f93457563dd00920c0211422494a2.
  • .tools/neoforge-evidence/v2-start.log, v2-override-start.log, v3-start.log.
  • .tools/neoforge-evidence/config-results.txt, controlled-failure.log.
  • .tools/neoforge-evidence/baseline-level.sha256, before-failure-level.sha256.
  • .tools/neoforge-evidence/restored-world-manifest.json, restore-verification.txt, restored-start.log.

После тестов сохранённое исходное состояние вновь находится в runtime/, промежуточное — в .tools/neoforge-runtime-after-tests. Активен 0.0.1 с Backpacks 3.26.7.2182 и Core 1.5.5.2363, marker neoforge-pack-v1, online-mode=false, enforce-secure-profile=false. Подключение: 127.0.0.1:25565; повторный импорт instance не требуется.

Выводы для следующих фаз

Управляемые pack-конфиги заменяются при смене релиза, поэтому ручные правки не являются устойчивым источником настроек. Серверные overrides должны быть явными. Defaultconfigs в проверенной версии служат seed, а не механизмом обновления существующего конфига. Runtime-generated конфиги сохраняются, пока явно не включены в управляемые пути.

Политики replace/seed-only/preserve и ownership manifest пока не реализованы в CLI: spike подтвердил поведение закреплённых компонентов. Контролируемая ошибка проверена до старта игры; сохранность мира при произвольном сбое мода или миграции формата мира этим тестом не подтверждается.

Предварительный Fabric-эксперимент

Результаты предыдущего эксперимента сохранены в fabric-spike-results.md, source — в examples/fabric-spike/. Они не заменяют проверки NeoForge/Forge. Перед сменой loader Fabric-сервер остановлен, создан и проверен архив backups/phase0-fabric-before-neoforge.tar.zst; старый runtime сохранён в .tools/fabric-runtime. NeoForge запущен с новым миром. Forge требует отдельного integration spike.