# Instance Specification: Forge 1.20.1 Survival Modpack ## 1. Overview & Compose Profile * **Instance ID**: `forge-1.20.1-survival` * **Container Name**: `mc_forge_server` * **Minecraft Version**: `1.20.1` * **Mod Loader**: Forge (`47.4.10`) * **Java Runtime**: OpenJDK 17 (`itzg/minecraft-server:java17`) * **Process User**: Container UID `1000` / GID `1000` (`ubuntu`) > **JVM Flag Rule**: `-XX:+UnlockExperimentalVMOptions` must precede experimental flags in `JVM_OPTS` to avoid JVM start failure on OpenJDK 17. ### `docker-compose.yml` Reference (`runtime/docker-compose.yml`) > **Execution Note**: Always execute compose commands from within the `runtime/` directory (`cd runtime && docker compose up -d`) to ensure `./data` correctly maps to `runtime/data`. ```yaml services: mc: image: itzg/minecraft-server:java17 container_name: mc_forge_server restart: unless-stopped ports: - "25565:25565" - "24454:24454/udp" environment: EULA: "TRUE" TYPE: "FORGE" VERSION: "1.20.1" MEMORY: "12G" # Server Properties Mapping VIEW_DISTANCE: "8" SIMULATION_DISTANCE: "6" NETWORK_COMPRESSION_THRESHOLD: "256" MAX_TICK_TIME: "120000" # Prevents watchdog crashes during heavy worldgen PLAYER_IDLE_TIMEOUT: "0" # Prevents auto-kicking AFK players ALLOW_FLIGHT: "TRUE" # Prevents kicks when using Ad Astra rockets/ships SYNC_CHUNK_WRITES: "FALSE" ENABLE_STATUS: "TRUE" MOTD: "MC SotoHome!" MAX_PLAYERS: "15" DIFFICULTY: "hard" ONLINE_MODE: "FALSE" ENFORCE_SECURE_PROFILE: "FALSE" # JVM Garbage Collection & Network Flags JVM_OPTS: >- -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=15 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 volumes: - ./data:/data ``` --- ## 2. Server Mod Manifest (66 Mods) ```text [forge]ctov-3.4.14.jar ad_astra-forge-1.20.1-1.15.20.jar ad_astra_extra_additions-1.20.1-1.1.1.jar ad_astra_more_structures-1.0.1-forge.jar alexsmobs-1.22.9.jar antixray-forge-1.4.6+1.20.1.jar architectury-9.2.14-forge.jar automodpack-mc1.20.1-forge-4.0.6.jar Botania-1.20.1-454-FORGE.jar botarium-forge-1.20.1-2.3.4.jar Chunky-1.3.146.jar citadel-2.6.3-1.20.1.jar cloth-config-11.1.136-forge.jar Clumps-forge-1.20.1-12.0.0.4.jar collective-1.20.1-8.39.jar corpse-forge-1.20.1-1.0.23.jar create-1.20.1-6.0.8.jar create_ad_astra_recipes-1.0.0-forge-1.20.1.jar createaddition-1.20.1-1.3.3.jar curios-forge-5.14.1+1.20.1.jar decocraft-3.0.4-1.20.1-slim.jar differentdoors-forge-1.20.1-1.1.0.jar doubledoors-1.20.1-7.2.jar FarmersDelight-1.20.1-1.3.2.jar ferritecore-6.0.1-forge.jar fiw-anticheat-forge-1.20.1-2.0.2.jar ftb-chunks-forge-2001.3.8.jar ftb-library-forge-2001.2.13.jar ftb-teams-forge-2001.3.2.jar geckolib-forge-1.20.1-4.8.4.jar ImmersiveEngineering-1.20.1-10.2.0-183.jar improvedmobs-1.20.1-1.13.7-forge.jar irons_lib-1.20.1-2.1.0.jar irons_spellbooks-1.20.1-3.16.2.jar Jade-1.20.1-Forge-11.13.3.jar jei-1.20.1-forge-15.49.0.188.jar journeymap-forge-1.20.1-6.0.1.jar Krypton_Reno-forge-1.20.1-26.1.1-1.20.1.jar lithostitched-forge-1.20.1-1.4.11.jar locks_reforged-1.6.1.jar lts_auth-1.0.1+mc1.20.1.jar LuckPerms-Forge-5.4.102.jar majrusz-library-forge-1.20.1-7.0.8.jar majruszs-difficulty-forge-1.20.1-1.9.10.jar minecraft-comes-alive-7.6.28-beta.10+1.20.1-universal.jar modernfix-forge-5.27.72+mc1.20.1.jar Nullscape_1.20.x_v1.2.8.jar packetfixer-3.3.2-1.18-1.20.4-merged.jar Patchouli-1.20.1-85-FORGE.jar perspatium-1.20.1-1.2.0.jar planets+-bv1.7.5-1.20x.jar player-animation-lib-forge-1.0.2-rc1+1.20.jar resourcefulconfig-forge-1.20.1-2.1.3.jar resourcefullib-forge-1.20.1-2.1.29.jar SimpleBackups-1.20.1-3.1.24.jar sophisticatedbackpacks-1.20.1-3.24.63.2057.jar sophisticatedcore-1.20.1-1.3.78.2249.jar spark-1.10.53-forge.jar tectonic-3.0.17-forge-1.20.1.jar tenshilib-1.20.1-1.7.6-forge.jar Terralith_1.20.x_v2.5.4.jar voicechat-forge-1.20.1-2.6.22.jar YungsApi-1.20-Forge-4.0.6.jar YungsBetterDungeons-1.20-Forge-4.0.4.jar YungsBetterMineshafts-1.20-Forge-4.0.4.jar YungsBetterStrongholds-1.20-Forge-4.0.3.jar ``` --- ## 3. Client Distribution Architecture (AutoModpack) Client modpack synchronization is fully automated via **AutoModpack**. Clients do not need manual mod downloads or multi-file setup zips. ### Minimal Client Requirement * Minecraft **1.20.1** with **Forge** loader. * **1 Mod**: `automodpack-mc1.20.1-forge-4.0.6.jar` in `.minecraft/mods/`. ### Client-Only Host Payload (16 Mods) Located in `runtime/data/automodpack/host-modpack/main/mods/` on the server and pushed to clients automatically: ```text AmbientSounds_FORGE_v6.3.8_mc1.20.1.jar BetterPingDisplay-1.20.1-1.1.jar Connector-1.0.0-beta.49+1.20.1.jar CreativeCore_FORGE_v2.12.39_mc1.20.1.jar FTB-Teams-Offline-Enabler-forge-1.20.1-1.0.0.jar PresenceFootsteps-1.20.1-1.9.1-beta.1.jar TUTORIAL_DISABLE-1.0.0.jar balm-forge-1.20.1-7.3.42.jar continuity-3.0.0+1.20.1.forge.jar embeddium-0.3.31+mc1.20.1.jar entity_model_features-3.2.4-1.20.1-forge.jar entity_texture_features_1.20.1-forge-7.1.jar fabric-api-0.92.6+1.11.15+1.20.1.jar oculus-mc1.20.1-1.8.0.jar rubidium-extra-0.5.4.4+mc1.20.1-build.131.jar sound-physics-remastered-forge-1.20.1-1.4.10.jar ``` ### Server-Side Exclusions (8 Mods) Explicitly excluded from syncing to clients via `syncedFiles` in `automodpack-server.json`: `SimpleBackups`, `spark`, `antixray`, `doubledoors`, `Clumps`, `collective`, `lts_auth`, `improvedmobs`. ### Forced Client Files Automatically written to standard client paths upon connection (`forceCopyFilesToStandardLocation`): * `/options.txt` (Master FOV, VSync, graphics, keybinds, and active resource pack array). * `/servers.dat` (Pre-configured server list pointing to `mc.sotohome.top`). * `/config/**` (Mod configurations, including `oculus.properties` for BSL shaders). --- ## 4. Operational Runbooks & Administration ### Updating Client Master Defaults (`options.txt` / `servers.dat`) From your local client instance terminal: ```bash cd ~/.local/share/PrismLauncher/instances//minecraft scp options.txt servers.dat ubuntu@sotoserver:~/mcserver/instances/forge-1.20.1-survival/runtime/data/automodpack/host-modpack/main/ ssh sotoserver "docker restart mc_forge_server" ``` ### In-House Auth Mod Patch Compilation (`patches/lts-auth/`) To rebuild and hot-swap the custom authentication mod (`lts_auth-1.0.1+mc1.20.1.jar`) from source (`LtsAuthMod.java`, `LoginCommand.java`): 1. Ensure the container `mc_forge_server` is running. 2. Navigate to the patch directory and run the compilation script: ```bash cd patches/lts-auth/ python3 build.py ``` 3. Restart the server container to load the updated JAR: ```bash docker restart mc_forge_server ``` ### World Pre-Generation (Chunky) ```bash docker exec -i mc_forge_server rcon-cli "chunky world minecraft:overworld" docker exec -i mc_forge_server rcon-cli "chunky center 0 0" docker exec -i mc_forge_server rcon-cli "chunky radius 4000" docker exec -i mc_forge_server rcon-cli "chunky quiet 10" docker exec -i mc_forge_server rcon-cli "chunky start" docker exec -i mc_forge_server rcon-cli "chunky progress" ``` ### Performance Profiling (spark) ```bash docker exec -i mc_forge_server rcon-cli "spark profiler --timeout 30" docker exec -i mc_forge_server rcon-cli "spark healthreport" ```