Files
minecraft-lab/README.md
T
2026-10-04 00:30:09 +07:00

7.6 KiB
Raw Blame History

minecraft-lab

Платформа для пользовательских сборок NeoForge/Forge без обязательных аккаунтов. Подтверждённая основа: Minecraft 1.21.1 + NeoForge 21.1.252, Sophisticated Backpacks/Core и client-only Mouse Tweaks. Forge пока требует отдельного spike. Текущий source release — 0.0.5.

Сборка

Нужны Linux x86_64, Bash, Node.js 22+, npm, Git, curl, bsdtar и sha256sum. Docker daemon для build не нужен. Bootstrap загружает закреплённые packwiz и Compose в .tools/; npm parsers закреплены lockfile.

После clone из корня репозитория:

npm ci --ignore-scripts
scripts/spike-tools.sh
./mcpack build

Результат:

dist/minecraft-lab-neoforge-spike-0.0.5/
├── minecraft-lab-neoforge-spike-0.0.5.mrpack
├── server/
├── manifest.json
└── SHA256SUMS

Build читает platform/config.yaml, работает в копии source и не меняет исходники. Готовый релиз не перезаписывается. Для изменения source выбрать новую pack version и явно выполнить refresh перед сборкой:

cd pack
../.tools/packwiz/packwiz refresh
cd ..
./mcpack build

Development build допускает dirty worktree и отмечает его в manifest. ./mcpack build --release требует чистого Git state. Подробности: docs/build.md. Тесты: npm test.

Моды

./mcpack add <modrinth-slug|ID|URL>
./mcpack remove <mod>
./mcpack update <mod>
./mcpack update --all

Команды работают с source через packwiz, сохраняют prompts и сообщения. Для автоматического ответа добавить --yes. Перед следующим build выбрать новую pack version. Подробности: docs/mods.md.

Клиент

Prism → Add Instance → Import: выбрать готовый .mrpack. В текущем WSL путь:

\\wsl.localhost\archlinux\root\Projects\minecraft-lab\dist\minecraft-lab-neoforge-spike-0.0.5\minecraft-lab-neoforge-spike-0.0.5.mrpack

Можно запускать с offline-аккаунтом/Launch Offline. Адрес локального сервера 127.0.0.1:25565: localhost может разрешиться в IPv6 ::1, тогда как локальный Phase 0 Compose публикует только IPv4 loopback. Удалённый сервер доступен напрямую по 192.168.1.61:25565.

Сервер

Server Compose внутри полного релиза использует pinned image, offline authentication и абсолютные MC_ROOT/MC_RELEASE_DIR. Настройки из server/config/ релиза имеют приоритет над pack defaults. Локальные secrets и EULA acceptance в артефакт не попадают; .env.example содержит EULA=FALSE. Команда build сервер не запускает и runtime не меняет.

Для lifecycle готового релиза добавлен scripts/server.sh с проверкой checksums, локальной EULA/UID/GID и привязкой runtime к релизу. Первоначальная настройка и start/restart/recreate — docs/runtime.md.

scripts/server.sh up --wait --wait-timeout 120 ожидает Minecraft status query и стабильную работу. scripts/server.sh health проверяет уже созданный контейнер. Crash, restart loop и timeout возвращают non-zero с report/logs: docs/health.md.

Для проверки Compose нового релиза:

MC_ROOT="$PWD" MC_RELEASE_DIR="$PWD/dist/minecraft-lab-neoforge-spike-0.0.5" \
  .tools/docker-compose --project-name minecraft-lab-spike \
  --env-file dist/minecraft-lab-neoforge-spike-0.0.5/server/.env.example \
  -f dist/minecraft-lab-neoforge-spike-0.0.5/server/compose.yaml config --quiet

Текущий Phase 0 сервер остаётся на 0.0.1 и управляется прежним wrapper:

scripts/spike-server.sh ps
scripts/spike-server.sh logs --tail 100

Пользователь принял EULA для этого эксперимента. На новом host принятие требуется отдельно. Готовый релиз хранится целиком; SSH deployment и rollback используют его без повторной сборки.

Backup и восстановление

Для runtime с full-release binding:

MC_ROOT=/absolute/server-root MC_RELEASE_DIR=/absolute/full-release ./mcpack backup
./mcpack restore --backup /absolute/snapshot --destination /absolute/new-server-root

Backup останавливает сервер, проверяет архив всего runtime и сохраняет копию исходного релиза. После успеха ранее запущенный сервер возвращается в работу. Restore разрешён только в новый каталог; запуск выполняется отдельно. Нужны GNU tar, zstd и права на чтение/сохранение владельцев данных. Подробности и recovery procedure — docs/backups.md.

SSH deployment

./mcpack deploy --artifact /absolute/full-release

SSH target задаётся в platform/config.yaml, host .env готовится отдельно. Deployment принимает clean releases, передаёт payload через rsync, проверяет конфликты, создаёт backup и обновляет active/previous только после healthcheck. Тот же healthy release повторно не перезапускается. Порт и Node из nvm можно задать через --ssh-config и --remote-node. Bind interface задаётся host .env: MC_BIND_ADDRESS=0.0.0.0 для remote LAN, 127.0.0.1 для локального запуска. Настроенный host и команды подключения — docs/deploy.md.

Структура

platform/ — config, compatibility record и build orchestration; pack/ — источник модпака; server/ — Compose и settings; scripts/ — CLI entry и spike-утилиты. docs/, examples/, testdata/, tests/ содержат результаты и материалы проверок. Runtime, dist, tools, node_modules, backups и local secrets исключены из Git, кроме placeholders.

Результаты: Phase 0, Phase 1, Phase 2, Phase 3, Phase 4, Phase 5, Phase 6, Phase 7, Phase 8, Phase 9.

Выпуск из чистого Git worktree: ./mcpack release 0.0.6. Команда обновляет версию, проверяет сборку, коммитит pack.toml, собирает финальный release и создаёт annotated tag. Workflow и recovery. Fabric-эксперимент архивирован в examples/fabric-spike/ и fabric-spike-results.md.