fix(config): synchronize runtime setup with modpack documentation

- Config: Disable unused Improved Mobs integrations (Scaling Health, PlayerEX, LevelZ)
- Config: Enforce 'caveMapping: NONE' across all JourneyMap dimension configs
- Permissions: Reset 'runtime/data/' ownership to 'ubuntu:ubuntu' (UID 1000)
- Docs: Add ENFORCE_SECURE_PROFILE="FALSE" and compose working dir note to README.md
- Docs: Update mod-configs.md with LTS Auth, Improved Mobs, Majrusz, and JourneyMap changes
This commit is contained in:
JaniSoto 2026-08-15 13:42:17 +00:00
parent 78d2ffeb08
commit 550717ebfb
15 changed files with 64 additions and 104 deletions

View file

@ -6,12 +6,14 @@
* **Minecraft Version**: `1.20.1` * **Minecraft Version**: `1.20.1`
* **Mod Loader**: Forge (`47.4.10`) * **Mod Loader**: Forge (`47.4.10`)
* **Java Runtime**: OpenJDK 17 (`itzg/minecraft-server:java17`) * **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. > **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`) ### `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 ```yaml
services: services:
mc: mc:
@ -21,7 +23,6 @@ services:
ports: ports:
- "25565:25565" - "25565:25565"
- "24454:24454/udp" - "24454:24454/udp"
- "25575:25575"
environment: environment:
EULA: "TRUE" EULA: "TRUE"
TYPE: "FORGE" TYPE: "FORGE"
@ -41,6 +42,7 @@ services:
MAX_PLAYERS: "15" MAX_PLAYERS: "15"
DIFFICULTY: "hard" DIFFICULTY: "hard"
ONLINE_MODE: "FALSE" ONLINE_MODE: "FALSE"
ENFORCE_SECURE_PROFILE: "FALSE"
# JVM Garbage Collection & Network Flags # JVM Garbage Collection & Network Flags
JVM_OPTS: >- JVM_OPTS: >-
@ -66,6 +68,8 @@ services:
- ./data:/data - ./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) ## 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) ### Permissions Fix (Host Mount Access)
If Spark or other mods throw `AccessDeniedException` writing temporary files: 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 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) ### World Pre-Generation (Chunky)
Use Chunky RCON commands to pre-generate chunks and avoid worldgen tick lag during gameplay: Use Chunky RCON commands to pre-generate chunks and avoid worldgen tick lag during gameplay:

View file

@ -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()

View file

@ -6,14 +6,14 @@
| Mod | Config File Path | Key Setting | Value | Purpose | | 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 | | **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` | `"Lock Generation Chance"` | `1.0` | Controls world generation probability of locked containers | | **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` | `"Enable difficulty scaling"` | `false` | Disables time-based difficulty scaling & HUD banner | | **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 | | **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` | `generator_efficiency` | `0.5` | Tech power generation rebalance | | **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 | | **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 | | **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/*.config` | `radarEnabled` | `"Disabled"` | Server-enforced radar disablement | | **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 "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 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] "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`) ### 2. Improved Mobs (`runtime/data/config/improvedmobs/common.toml`)
@ -35,13 +39,19 @@
[ai] [ai]
"Breaker Chance" = 0.0 "Breaker Chance" = 0.0
"Break BlockEntities" = false "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`) ### 3. Create Addition (`runtime/data/config/createaddition-common.toml`)
```toml ```toml
[general] [alternator]
# FE/t generator efficiency modifier # Alternator efficiency relative to base conversion rate
# Range: 0.0 ~ 1.0 # Range: 0.01 ~ 1.0
generator_efficiency = 0.5 generator_efficiency = 0.5
``` ```
@ -61,6 +71,10 @@
"game_stages": { "game_stages": {
"is_per_player_difficulty_enabled": true, "is_per_player_difficulty_enabled": true,
"list": [ "list": [
{
"id": "normal",
"triggers": { "dimensions": [], "entities": [] }
},
{ {
"id": "expert", "id": "expert",
"triggers": { "dimensions": ["minecraft:the_nether"] } "triggers": { "dimensions": ["minecraft:the_nether"] }
@ -76,6 +90,9 @@
### 6. AntiXray (`runtime/data/config/antixray.toml`) ### 6. AntiXray (`runtime/data/config/antixray.toml`)
```toml ```toml
# Global default fallback
enabled = false
[overworld] [overworld]
enabled = true enabled = true
engineMode = 3 engineMode = 3
@ -94,11 +111,15 @@ lavaObscures = true
hiddenBlocks = ["ancient_debris", "nether_quartz_ore", "nether_gold_ore", "gold_block", "gilded_blackstone"] 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 ```json
{ {
"radarEnabled": "Disabled", "surfaceMapping": "ALL",
"caveMappingEnabled": "Disabled", "caveMapping": "NONE",
"surfaceMappingEnabled": "Enabled" "radarEnabled": "ALL",
"playerRadarEnabled": "false",
"mobRadarEnabled": "false",
"animalRadarEnabled": "false",
"villagerRadarEnabled": "false"
} }
``` ```

View file

@ -51,8 +51,8 @@ if os.path.exists(JAR_HOST_PATH):
os.makedirs(target_dir, exist_ok=True) os.makedirs(target_dir, exist_ok=True)
shutil.copyfile(filepath, os.path.join(target_dir, file)) 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 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 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}") 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\'' 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\''

View file

View file

View file

0
instances/forge-1.20.1-survival/runtime/data/eula.txt Normal file → Executable file
View file

0
instances/forge-1.20.1-survival/runtime/data/ops.json Normal file → Executable file
View file

0
instances/forge-1.20.1-survival/runtime/data/run.bat Normal file → Executable file
View file

View file

@ -1,5 +1,5 @@
#Minecraft server properties #Minecraft server properties
#Sat Aug 15 06:56:57 UTC 2026 #Sat Aug 15 13:40:05 UTC 2026
allow-flight=true allow-flight=true
allow-nether=true allow-nether=true
broadcast-console-to-ops=true broadcast-console-to-ops=true
@ -10,7 +10,7 @@ enable-jmx-monitoring=false
enable-query=false enable-query=false
enable-rcon=true enable-rcon=true
enable-status=true enable-status=true
enforce-secure-profile=true enforce-secure-profile=false
enforce-whitelist=false enforce-whitelist=false
entity-broadcast-range-percentage=100 entity-broadcast-range-percentage=100
force-gamemode=false force-gamemode=false
@ -38,7 +38,7 @@ prevent-proxy-connections=false
pvp=true pvp=true
query.port=25565 query.port=25565
rate-limit=0 rate-limit=0
rcon.password=9e7f666fba721c3e4f6ac254 rcon.password=4ad253b0b1e9bc8442a15f30
rcon.port=25575 rcon.port=25575
require-resource-pack=false require-resource-pack=false
resource-pack= resource-pack=

View file

View file

@ -25,6 +25,7 @@ services:
MAX_PLAYERS: "15" MAX_PLAYERS: "15"
DIFFICULTY: "hard" DIFFICULTY: "hard"
ONLINE_MODE: "FALSE" ONLINE_MODE: "FALSE"
ENFORCE_SECURE_PROFILE: "FALSE"
# JVM Garbage Collection & Network Flags # JVM Garbage Collection & Network Flags
JVM_OPTS: >- JVM_OPTS: >-