9.7 KiB
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.