mcserver/instances/forge-1.20.1-survival/README.md
JaniSoto e3b866b989 fix(automodpack): decouple client options sync and separate keybindings template
- Move default keybindings to config/defaultoptions/keybindings.txt for modern Default Options mod compatibility
- Remove root options.txt from AutoModpack host folder to prevent wiping player audio, graphics, and FOV preferences on boot
- Strip key_ lines from config/defaultoptions/options.txt to leave clean first-launch defaults
- Update instance README, mod-configs matrix, and operations manual to document the two-file default options architecture
2026-08-16 07:04:40 +00:00

9.5 KiB

Instance Specification: Forge 1.20.1 Survival Modpack

1. Player Quick Join Guide

Client Requirements

  • Minecraft Version: 1.20.1
  • Mod Loader: Forge (47.4.10)
  • Required Client Mod: automodpack-mc1.20.1-forge-4.0.6.jar

Installation Steps

  1. Download automodpack-mc1.20.1-forge-4.0.6.jar from the Releases section of this repository.
  2. Place the .jar file into your local .minecraft/mods/ directory.
  3. Launch Minecraft with your Forge 1.20.1 profile.
  4. Select Multiplayer and connect to mc.sotohome.top.

(AutoModpack automatically synchronizes required client mods, configuration files, default option presets, and shader presets upon connection).


2. 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)

JVM Flag Rule: -XX:+UnlockExperimentalVMOptions must precede experimental Garbage Collection flags in JVM_OPTS to prevent JVM initialization failures on OpenJDK 17.

Production docker-compose.yml (runtime/docker-compose.yml)

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

3. Server Mod Manifest (66 Mods)

[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

4. Client Distribution Architecture (AutoModpack & Default Options)

Client modpack synchronization is fully automated via AutoModpack.

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 (17 Mods)

Located in runtime/data/automodpack/host-modpack/main/mods/ on the server and pushed to clients automatically:

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
defaultoptions-forge-1.20.1-18.0.5.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.

Synchronized Client Files & Options Enforcement

  • /config/** (Synchronizes mod configurations, BSL shader settings, and default options template).
  • First-Launch Options Enforcement (Default Options): Settings are delivered via two separate files inside /config/defaultoptions/:
    1. keybindings.txt: Enforces master keybindings (Sneak=Shift, Sprint=Ctrl, FTB Chunks minimap unbound) dynamically on game boot.
    2. options.txt: Delivers initial FOV, audio levels (Master 60%, Music 25%, Hostile 75%, Neutral/Ambient 40%), and active resource packs on first launch only. Note: Root options.txt is intentionally excluded from the AutoModpack server sync repository (automodpack/host-modpack/main/options.txt) so that player sound, graphics, and FOV customizations persist between sessions without being overwritten on boot.

5. Operational Runbooks & Administration

Updating Client Master Defaults (options.txt)

To update master client options or default keybind templates:

cd ~/.local/share/PrismLauncher/instances/<instance_name>/minecraft

# Push master options to Default Options payload directory
# 1. Extract and push updated default keybindings
grep "^key_" options.txt > keybindings.txt
scp keybindings.txt ubuntu@sotoserver:~/mcserver/instances/forge-1.20.1-survival/runtime/data/automodpack/host-modpack/main/config/defaultoptions/

# 2. Extract and push updated first-launch options (stripped of keybinds)
grep -v "^key_" options.txt > options_clean.txt
scp options_clean.txt ubuntu@sotoserver:~/mcserver/instances/forge-1.20.1-survival/runtime/data/automodpack/host-modpack/main/config/defaultoptions/options.txt

# Note: DO NOT place options.txt directly in automodpack/host-modpack/main/options.txt

# Restart server container to update payload manifest
ssh sotoserver "docker restart mc_forge_server"

Interactive Console Dashboard (runtime/console)

To launch live container logs alongside an interactive RCON prompt:

cd instances/forge-1.20.1-survival/runtime
./console
  • Top Window: Live log stream (docker logs -f mc_forge_server).
  • Bottom Window: Interactive RCON shell (MC>).
  • Detach: Press Ctrl+B, then D (leaves container running in background).

In-House Auth Mod 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 container mc_forge_server is running.
  2. Execute the compilation script:
    cd patches/lts-auth/
    python3 build.py
    
  3. Restart the server container to load the compiled JAR:
    docker restart mc_forge_server
    

World Pre-Generation (Chunky)

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)

docker exec -i mc_forge_server rcon-cli "spark profiler --timeout 30"
docker exec -i mc_forge_server rcon-cli "spark healthreport"