Repository navigation
fix(tmodloader,terraria): start tModLoader with a built-in empty modpack - #44
Merged
Merged
Conversation
passivelemon's tModLoader scripts exit when MODPACK is blank ("Modpack
name was not provided") or when ModPacks/<pack>/Mods/enabled.json is
missing ("Modpack was not detected"). Both templates default MODPACK to
"" and the wizard stores that value, so every default tModLoader server
crash-looped.
A small command wrapper, active only when GP_LOADER=tmodloader (template
env for tmodloader, per-version env for terraria's three tModLoader
versions), turns a blank MODPACK into "vanilla", creates
ModPacks/vanilla/Mods/enabled.json as [] if it is missing (never
overwriting it), then execs the image's own /opt/terraria/entrypoint.sh.
Vanilla Terraria runs the same entrypoint unchanged.
The tmodloader template also mounted its volume at
/root/.local/share/Terraria/tModLoader, while the image keeps worlds,
modpacks and serverconfig under /opt/terraria/config, so nothing was
persisted. It now mounts /opt/terraria/config, and its Mods tab manages
ModPacks/vanilla/Mods. Versions: tmodloader 1.0.2, terraria 2.2.3.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U
Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
… module.yaml The wizard shows GameTemplate spec.version, which had drifted from the module.yaml versions (terraria 2.2.0 vs 2.2.3, tmodloader 1.0.0 vs 1.0.2) although the template header says they move in lockstep. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
The kick, ban, and unban fields were incorrectly nested as objects with a 'command' key, but the GameTemplate CRD defines these as string fields directly. Restructured to match the CRD and the format used by other modules (minecraft-java, rust). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
…sion Add rule 10 to validate.py: GameTemplate spec.version must match the module.yaml version exactly, preventing drift like minecraft-java's (2.8.1 vs 2.9.0) that caused the wizard to display outdated versions. Also fix minecraft-java template spec.version to 2.9.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
Standardize both ark-survival-evolved and the-isle to use "Dinosaurs" (plural) for the dinosaur-themed game category. Avoids fragmenting the catalog with two spellings of the same concept; aligns with English conventions for game categories (Survival, Sandbox, etc.). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
…le.yaml The new validate.py rule requires spec.version to equal module.yaml, which the players fix bumped to 1.0.1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
Rule 10 was already taken by rule_images_pinned. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
…sion passivelemon runs the server in a detached tmux session and nothing reads container stdin, so console input and the Stop button's exit never reached the game (stop always waited out the 30 s grace). The start wrapper now forwards each pty line with tmux send-keys and forwards SIGTERM to the entrypoint. Verified live on both images. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018MnGTGHzHhFQCa22wRknUS Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
fix(modules): nuclear-option players, spec.version lockstep + validate rule, Dinosaurs category
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
MODPACKis blank ("Modpack name was not provided. Exiting...") or whenModPacks/<pack>/Mods/enabled.jsonis missing ("Modpack was not detected. Exiting..."), and both templates defaultMODPACKto"". That coverstmodloaderand terraria's tModLoader versions.command/argswrapper, active only withGP_LOADER=tmodloader. That env is set at template level fortmodloaderand per version for terraria'stmodloader-latest,tmodloader-2026andtmodloader-preview. The wrapper:MODPACKintovanilla;ModPacks/vanilla/Mods/enabled.jsonas[]if missing (never overwritten);execs the image's own/opt/terraria/entrypoint.sh./root/.local/share/Terraria/tModLoader, but the image keeps worlds, modpacks and serverconfig in/opt/terraria/config(-tmlsavedirectory /opt/terraria/config), so nothing was persisted. It now mounts/opt/terraria/config, and its Mods tab managesModPacks/vanilla/Mods.tmodloader1.0.1 → 1.0.2 andterraria2.2.2 → 2.2.3 (module.yaml). README, specs and sample are updated. The readiness probes are unchanged.Console bridge (finding #3)
exitnever reached the game, and stop always waited the 30 s grace.tmux send-keys -l(asPUID:PGIDvia gosu/su-exec), and forwards SIGTERM to the entrypoint.playing,motdandsayget game replies.exitstops the server in about 2 s with exit code 0.Verification
MODPACK="", nested ModPacks volume like terraria's): logged "Starting server with modpack vanilla...", "Listening on port 7777" and "Server started". Exec readiness probe Ready, 0 restarts. World written to/opt/terraria/config/Worlds, andenabled.jsonis[].GP_LOADER): "Listening on port 7777", Ready, 0 restarts, world created.gp-module validate tmodloader terraria --strict: OK, 0 errors and 0 warnings (same asmain).gp-module previewrendersGP_LOADERonly for tModLoader versions.Notes
🤖 Generated with Claude Code
https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U