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:
parent
78d2ffeb08
commit
550717ebfb
15 changed files with 64 additions and 104 deletions
|
|
@ -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:
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
@ -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"
|
||||
}
|
||||
```
|
||||
|
|
|
|||
|
|
@ -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\''
|
||||
|
|
|
|||
0
instances/forge-1.20.1-survival/runtime/data/.forge-manifest.json
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/.forge-manifest.json
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/.local/share/resourcefullib/README.txt
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/.local/share/resourcefullib/README.txt
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/banned-ips.json
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/banned-ips.json
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/banned-players.json
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/banned-players.json
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/defaultconfigs/ftbchunks/ftbchunks-world.snbt
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/defaultconfigs/ftbchunks/ftbchunks-world.snbt
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/eula.txt
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/eula.txt
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/ops.json
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/ops.json
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/run.bat
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/run.bat
Normal file → Executable file
6
instances/forge-1.20.1-survival/runtime/data/server.properties
Normal file → Executable file
6
instances/forge-1.20.1-survival/runtime/data/server.properties
Normal file → Executable file
|
|
@ -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=
|
||||
|
|
|
|||
0
instances/forge-1.20.1-survival/runtime/data/whitelist.json
Normal file → Executable file
0
instances/forge-1.20.1-survival/runtime/data/whitelist.json
Normal file → Executable file
|
|
@ -25,6 +25,7 @@ services:
|
|||
MAX_PLAYERS: "15"
|
||||
DIFFICULTY: "hard"
|
||||
ONLINE_MODE: "FALSE"
|
||||
ENFORCE_SECURE_PROFILE: "FALSE"
|
||||
|
||||
# JVM Garbage Collection & Network Flags
|
||||
JVM_OPTS: >-
|
||||
|
|
|
|||
Loading…
Reference in a new issue