diff --git a/instances/forge-1.20.1-survival/README.md b/instances/forge-1.20.1-survival/README.md index d3eae36..1ce8030 100644 --- a/instances/forge-1.20.1-survival/README.md +++ b/instances/forge-1.20.1-survival/README.md @@ -6,12 +6,14 @@ * **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` +* **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: @@ -21,7 +23,6 @@ services: ports: - "25565:25565" - "24454:24454/udp" - - "25575:25575" environment: EULA: "TRUE" TYPE: "FORGE" @@ -41,6 +42,7 @@ services: MAX_PLAYERS: "15" DIFFICULTY: "hard" ONLINE_MODE: "FALSE" + ENFORCE_SECURE_PROFILE: "FALSE" # JVM Garbage Collection & Network Flags JVM_OPTS: >- @@ -66,6 +68,8 @@ services: - ./data:/data ``` +> **RCON Network Security Note**: RCON (`enable-rcon=true`, port `25575`) is enabled in `server.properties` for container-internal management (`docker exec -i mc_forge_server rcon-cli`). Port `25575` is intentionally omitted from the host `ports:` block in `docker-compose.yml` to prevent unauthorized external access. + --- ## 2. Server Mod Manifest (65 Mods) @@ -212,7 +216,7 @@ voicechat-forge-1.20.1-2.6.22.jar --- -## 4. Instance Management & Mod RCON Commands +## 4. Instance Management, Patch Compilation & RCON Workflows ### Permissions Fix (Host Mount Access) If Spark or other mods throw `AccessDeniedException` writing temporary files: @@ -221,6 +225,22 @@ sudo chown -R 1000:1000 runtime/data/config/spark chmod -R 775 runtime/data/config/spark ``` +### 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 + ``` + +> `build.py` uses the container's OpenJDK 17 `javac` compiler with classpath resolution against `/data/libraries` and `/data/mods`, repackaging the resulting `.class` files into `runtime/data/mods/lts_auth-1.0.1+mc1.20.1.jar`. + ### World Pre-Generation (Chunky) Use Chunky RCON commands to pre-generate chunks and avoid worldgen tick lag during gameplay: diff --git a/instances/forge-1.20.1-survival/export_modpack.py b/instances/forge-1.20.1-survival/export_modpack.py deleted file mode 100755 index 3975d42..0000000 --- a/instances/forge-1.20.1-survival/export_modpack.py +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env python3 -import os -import zipfile -from datetime import datetime -from pathlib import Path - -# --- CONFIGURATION --- -# Folders to include in the backup zip -INCLUDE_DIRS = [ - "mods", - "config", - "kubejs", - "defaultconfigs", - "resourcepacks", - "shaderpacks", - "fancymenu_data", # Common layout mod folder -] - -# Root files to include -INCLUDE_FILES = [ - "options.txt", - "optionsshaders.txt", - "optionsof.txt", -] - -def create_modpack_zip(): - # Use current working directory where the script is executed - base_dir = Path.cwd() - - # Generate timestamped filename - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - output_filename = f"Modpack_Export_{timestamp}.zip" - output_filepath = base_dir / output_filename - - print("=========================================") - print(f"📦 Packaging Modpack from: {base_dir}") - print("=========================================\n") - - files_added = 0 - - # Create ZIP using DEFLATED compression - with zipfile.ZipFile(output_filepath, 'w', zipfile.ZIP_DEFLATED) as zipf: - - # 1. Process Folders - for folder_name in INCLUDE_DIRS: - folder_path = base_dir / folder_name - if folder_path.is_dir(): - print(f" [+] Adding folder: {folder_name}/") - for root, dirs, files in os.walk(folder_path): - for file in files: - file_path = Path(root) / file - # Preserve relative path inside zip - arcname = file_path.relative_to(base_dir) - zipf.write(file_path, arcname) - files_added += 1 - else: - print(f" [-] Skipping (folder not found): {folder_name}/") - - print() - - # 2. Process Files - for file_name in INCLUDE_FILES: - file_path = base_dir / file_name - if file_path.is_file(): - print(f" [+] Adding file: {file_name}") - zipf.write(file_path, file_name) - files_added += 1 - else: - print(f" [-] Skipping (file not found): {file_name}") - - print("\n=========================================") - if files_added > 0: - file_size_mb = output_filepath.stat().st_size / (1024 * 1024) - print(f"✅ SUCCESS! Packaged {files_added} files.") - print(f"💾 Saved as: {output_filename} ({file_size_mb:.2f} MB)") - else: - print("⚠️ WARNING: No files found to package. Check your execution folder.") - output_filepath.unlink(missing_ok=True) # Remove empty zip - print("=========================================") - -if __name__ == "__main__": - create_modpack_zip() diff --git a/instances/forge-1.20.1-survival/mod-configs.md b/instances/forge-1.20.1-survival/mod-configs.md index a42a254..0865398 100644 --- a/instances/forge-1.20.1-survival/mod-configs.md +++ b/instances/forge-1.20.1-survival/mod-configs.md @@ -6,14 +6,14 @@ | Mod | Config File Path | Key Setting | Value | Purpose | | :--- | :--- | :--- | :--- | :--- | -| **LTS Auth** | `runtime/data/config/lts_auth/messages.yml` | `timeout_kick` | Configured message | Ingame auth, invulnerability lock & auto-kick | -| **Locks Reforged** | `runtime/data/config/locks-common.toml` | `"Lock Generation Chance"` | `1.0` | Controls world generation probability of locked containers | -| **Improved Mobs** | `runtime/data/config/improvedmobs/common.toml` | `"Enable difficulty scaling"` | `false` | Disables time-based difficulty scaling & HUD banner | -| **Majrusz Difficulty** | `runtime/data/config/majruszsdifficulty.json` | `is_per_player_difficulty_enabled` | `true` | Isolated per-player milestone progression | -| **Create Addition** | `runtime/data/config/createaddition-common.toml` | `generator_efficiency` | `0.5` | Tech power generation rebalance | +| **LTS Auth** | `runtime/data/config/lts_auth/messages.yml` | `timeout_kick` | Configured message | In-game auth, invulnerability lock & auto-kick (`players.json` credential store) | +| **Locks Reforged** | `runtime/data/config/locks-common.toml` | `"Enable Loot-Scaled Locks"` | `true` | Loot-value-based container lock tier selection | +| **Improved Mobs** | `runtime/data/config/improvedmobs/common.toml` | `"Breaker Chance"` / `"Stealer Chance"` | `0.0` / `0.3` | Disables block breaking; item stealing from chests enabled (30%); unused mod integrations set to OFF | +| **Majrusz Difficulty** | `runtime/data/config/majruszsdifficulty.json` | `is_per_player_difficulty_enabled` | `true` | Isolated per-player milestone progression (`normal`, `expert`, `master` stages) | +| **Create Addition** | `runtime/data/config/createaddition-common.toml` | `[alternator].generator_efficiency` | `0.5` | Tech power generation rebalance | | **Sophisticated Core** | `runtime/data/config/sophisticatedcore-common.toml` | `enabledItems` | Tier 3/4 upgrades = `false` | Cap portable storage capacity | -| **AntiXray** | `runtime/data/config/antixray.toml` | `[overworld].engineMode` | `3` | Anti-xray tile entity & ore obfuscation | -| **JourneyMap** | `runtime/data/journeymap/server/6.0/*.config` | `radarEnabled` | `"Disabled"` | Server-enforced radar disablement | +| **AntiXray** | `runtime/data/config/antixray.toml` | `enabled` / `[overworld].engineMode` | `false` / `3` | Global default disabled (prevents space/orbit bugs); Overworld Mode 3 & Nether Mode 1 active | +| **JourneyMap** | `runtime/data/journeymap/server/6.0/` | `playerRadarEnabled` / `caveMapping` | `"false"` / `"NONE"` | Server-enforced entity radar restrictions (player, mob, animal, villager radars = false) & universe-wide cave mapping disabled | --- @@ -25,6 +25,10 @@ "Generation Enchant Chance" = 0.4 "Generated Locks" = ["locks:wood_lock", "locks:copper_lock", "locks:iron_lock", "locks:steel_lock", "locks:gold_lock", "locks:diamond_lock", "locks:netherite_lock"] "Generated Lock Chances" = [3, 3, 3, 2, 2, 1, 1] + +["Loot-Scaled Locks"] +"Enable Loot-Scaled Locks" = true +"Loot Value Tiers" = [3.0, 6.0, 10.0, 16.0, 24.0, 40.0, 60.0] ``` ### 2. Improved Mobs (`runtime/data/config/improvedmobs/common.toml`) @@ -35,13 +39,19 @@ [ai] "Breaker Chance" = 0.0 "Break BlockEntities" = false +"Stealer Chance" = 0.3 + +[integration] +"Use Scaling Health Mod" = "OFF" +"Use Player EX Mod" = "OFF" +"Use LevelZ Mod" = "OFF" ``` ### 3. Create Addition (`runtime/data/config/createaddition-common.toml`) ```toml -[general] - # FE/t generator efficiency modifier - # Range: 0.0 ~ 1.0 +[alternator] + # Alternator efficiency relative to base conversion rate + # Range: 0.01 ~ 1.0 generator_efficiency = 0.5 ``` @@ -61,6 +71,10 @@ "game_stages": { "is_per_player_difficulty_enabled": true, "list": [ + { + "id": "normal", + "triggers": { "dimensions": [], "entities": [] } + }, { "id": "expert", "triggers": { "dimensions": ["minecraft:the_nether"] } @@ -76,6 +90,9 @@ ### 6. AntiXray (`runtime/data/config/antixray.toml`) ```toml +# Global default fallback +enabled = false + [overworld] enabled = true engineMode = 3 @@ -94,11 +111,15 @@ lavaObscures = true hiddenBlocks = ["ancient_debris", "nether_quartz_ore", "nether_gold_ore", "gold_block", "gilded_blackstone"] ``` -### 7. JourneyMap Server Enforced Radar (`runtime/data/journeymap/server/6.0/journeymap.server.global.config` & `journeymap.server.default.config`) +### 7. JourneyMap Server Enforced Radar (`runtime/data/journeymap/server/6.0/journeymap.server.global.config`) ```json { - "radarEnabled": "Disabled", - "caveMappingEnabled": "Disabled", - "surfaceMappingEnabled": "Enabled" + "surfaceMapping": "ALL", + "caveMapping": "NONE", + "radarEnabled": "ALL", + "playerRadarEnabled": "false", + "mobRadarEnabled": "false", + "animalRadarEnabled": "false", + "villagerRadarEnabled": "false" } ``` diff --git a/instances/forge-1.20.1-survival/patches/lts-auth/build.py b/instances/forge-1.20.1-survival/patches/lts-auth/build.py index 9721f46..5a25eb5 100644 --- a/instances/forge-1.20.1-survival/patches/lts-auth/build.py +++ b/instances/forge-1.20.1-survival/patches/lts-auth/build.py @@ -51,8 +51,8 @@ if os.path.exists(JAR_HOST_PATH): os.makedirs(target_dir, exist_ok=True) shutil.copyfile(filepath, os.path.join(target_dir, file)) - run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} apt-get update >/dev/null 2>&1") - run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} apt-get install -y openjdk-17-jdk-headless >/dev/null 2>&1") + # run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} apt-get update >/dev/null 2>&1") + # run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} apt-get install -y openjdk-17-jdk-headless >/dev/null 2>&1") run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} chmod -R 777 {TMP_CONTAINER_DIR}") compile_cmd = f'docker exec -i {CONTAINER_NAME} bash -c \'CP=$(find /data/libraries /data/mods -name "*.jar" | tr "\\n" ":"); javac -cp "$CP:{TMP_CONTAINER_DIR}" -d {TMP_CONTAINER_DIR} {TMP_CONTAINER_DIR}/src/com/rtxbb/lts_auth/LtsAuthMod.java {TMP_CONTAINER_DIR}/src/com/rtxbb/lts_auth/command/LoginCommand.java\'' diff --git a/instances/forge-1.20.1-survival/runtime/data/.forge-manifest.json b/instances/forge-1.20.1-survival/runtime/data/.forge-manifest.json old mode 100644 new mode 100755 diff --git a/instances/forge-1.20.1-survival/runtime/data/.local/share/resourcefullib/README.txt b/instances/forge-1.20.1-survival/runtime/data/.local/share/resourcefullib/README.txt old mode 100644 new mode 100755 diff --git a/instances/forge-1.20.1-survival/runtime/data/banned-ips.json b/instances/forge-1.20.1-survival/runtime/data/banned-ips.json old mode 100644 new mode 100755 diff --git a/instances/forge-1.20.1-survival/runtime/data/banned-players.json b/instances/forge-1.20.1-survival/runtime/data/banned-players.json old mode 100644 new mode 100755 diff --git a/instances/forge-1.20.1-survival/runtime/data/defaultconfigs/ftbchunks/ftbchunks-world.snbt b/instances/forge-1.20.1-survival/runtime/data/defaultconfigs/ftbchunks/ftbchunks-world.snbt old mode 100644 new mode 100755 diff --git a/instances/forge-1.20.1-survival/runtime/data/eula.txt b/instances/forge-1.20.1-survival/runtime/data/eula.txt old mode 100644 new mode 100755 diff --git a/instances/forge-1.20.1-survival/runtime/data/ops.json b/instances/forge-1.20.1-survival/runtime/data/ops.json old mode 100644 new mode 100755 diff --git a/instances/forge-1.20.1-survival/runtime/data/run.bat b/instances/forge-1.20.1-survival/runtime/data/run.bat old mode 100644 new mode 100755 diff --git a/instances/forge-1.20.1-survival/runtime/data/server.properties b/instances/forge-1.20.1-survival/runtime/data/server.properties old mode 100644 new mode 100755 index 5aa790d..2e16028 --- a/instances/forge-1.20.1-survival/runtime/data/server.properties +++ b/instances/forge-1.20.1-survival/runtime/data/server.properties @@ -1,5 +1,5 @@ #Minecraft server properties -#Sat Aug 15 06:56:57 UTC 2026 +#Sat Aug 15 13:40:05 UTC 2026 allow-flight=true allow-nether=true broadcast-console-to-ops=true @@ -10,7 +10,7 @@ enable-jmx-monitoring=false enable-query=false enable-rcon=true enable-status=true -enforce-secure-profile=true +enforce-secure-profile=false enforce-whitelist=false entity-broadcast-range-percentage=100 force-gamemode=false @@ -38,7 +38,7 @@ prevent-proxy-connections=false pvp=true query.port=25565 rate-limit=0 -rcon.password=9e7f666fba721c3e4f6ac254 +rcon.password=4ad253b0b1e9bc8442a15f30 rcon.port=25575 require-resource-pack=false resource-pack= diff --git a/instances/forge-1.20.1-survival/runtime/data/whitelist.json b/instances/forge-1.20.1-survival/runtime/data/whitelist.json old mode 100644 new mode 100755 diff --git a/instances/forge-1.20.1-survival/runtime/docker-compose.yml b/instances/forge-1.20.1-survival/runtime/docker-compose.yml index 0ed9d9c..6940184 100644 --- a/instances/forge-1.20.1-survival/runtime/docker-compose.yml +++ b/instances/forge-1.20.1-survival/runtime/docker-compose.yml @@ -25,6 +25,7 @@ services: MAX_PLAYERS: "15" DIFFICULTY: "hard" ONLINE_MODE: "FALSE" + ENFORCE_SECURE_PROFILE: "FALSE" # JVM Garbage Collection & Network Flags JVM_OPTS: >-