docs: Gemini consultation — MC versioning overhaul + wild ideas for modpack installer

This commit is contained in:
Claude
2026-04-16 07:22:31 +00:00
parent 10ad80c282
commit d8342d1fcc

View File

@@ -0,0 +1,133 @@
# Gemini Consultation: Modpack Installer — MC Versioning Overhaul + Wild Ideas
**Date:** April 16, 2026
**From:** Michael (The Wizard) + Claude (Chronicler #93)
**To:** Gemini (Architectural Partner)
**Re:** Minecraft's new calendar versioning breaks our installer — architecture fix needed + 20 wild ideas
---
## Hey Gemini! 👋
Long night over here — we've been building hard. We just deployed a full Modpack Installer into Trinity Console and hit our first real architectural wall: Minecraft changed their versioning scheme and our entire version detection system is broken before it's even been used in anger. Before we ask Code to fix it, we want your brain on the right approach.
But first — let us tell you what we've built, because we also want your wildest ideas for making it better.
---
## What We've Built — The Firefrost Modpack Installer
Firefrost Gaming is a subscription-based modded Minecraft community. We run 18+ servers across two nodes (TX1 Dallas, NC1 Charlotte) on Pterodactyl Panel. Our backend is Arbiter — a Node.js/Express Discord bot + admin panel called Trinity Console.
Tonight we shipped a full **Modpack Installer** inside Trinity Console. Here's what it does:
### The Flow
1. **Choose a provider** — CurseForge, Modrinth (live), FTB/ATLauncher/Technic/VoidsWrath (stubbed)
2. **Search packs** — live search with mod loader and MC version filters
3. **Configure install** — pack selected, then:
- Version dropdown (defaults to latest)
- Short name → becomes Discord channel prefix + Cloudflare subdomain + DB key
- Node selector (shows live RAM/disk usage from Pterodactyl API)
- Port auto-assigned (queries DB for highest used port, assigns next)
- RAM allocation (pre-filled from pack size estimate)
- Disk allocation
- Java version (auto-selected from MC version: 1.16.x=8, 1.17.x=17, 1.18-1.20.x=17, 1.21.x=21)
- JVM args (Aikar G1GC flags, pre-filled, editable)
- Spawn type: Vanilla / Standard (Bitch Bot) / Skyblock / Has Lobby
- server.properties configurator (difficulty, gamemode, PvP, max-players, MOTD, etc.)
### The Install Worker (pg-boss queue, concurrency 2)
1. Pre-flight: node RAM/disk check, Java version → correct egg
2. Pterodactyl server provisioned
3. Download pack mods via provider API (scrub client-only mods)
4. Inject Firefrost Standard Mod Stack from NextCloud (`standard-mods/{mc_version}/`)
5. Drop `provision.json` + BitchBot jar (if Standard spawn type)
6. Stream to Pterodactyl via Wings SFTP
7. Cloudflare A + SRV records
8. Discord category + 5 channels
9. Add to status poller
10. Power on → Holly's pending-spawns queue → staff Discord ping
### Vanilla/Paper Path
We also built a parallel install path for vanilla/Paper servers:
- Paper API to get latest build for selected MC version
- Plugins instead of mods (EssentialsX, LuckPerms, Spark, Vault, WorldEdit, WorldGuard, CoreProtect)
- server.properties written via Pterodactyl File API before first boot
- No Bitch Bot, no schematic
### Bitch Bot
A compiled NeoForge mod that runs ONCE on first server boot:
- Reads `provision.json` Arbiter dropped in the server folder
- Downloads and pastes Holly's spawn building schematic at fixed coords
- Reads `level.dat` for original spawn XYZ, places 4 command blocks with `/tp @p` baked into NBT
- Sets worldspawn to center of the building
- Sets doFireTick false
- Writes YAWP spawn protection config
- Self-destructs (renames jar to `.jar.disabled`)
---
## The Problem — Minecraft's New Versioning
Minecraft recently changed their versioning scheme from `1.X.X` (e.g. `1.21.1`) to a calendar-based scheme: `YY.WW.X` (year.week.patch). The current version is `26.1.2`, not `1.21.4`.
This breaks several things in our installer:
1. **Hardcoded version lists** — our vanilla form has `1.21.1` hardcoded as "latest". Wrong.
2. **Java version detection** — we map `1.21.x → Java 21`, `1.18-1.20 → Java 17`, etc. The new scheme doesn't map cleanly.
3. **Provider API compatibility** — CurseForge and Modrinth may list packs under old scheme, new scheme, or both. We don't know.
4. **Paper API** — does Paper support the new versioning? Does their API return `26.1.2` or `1.21.x`?
5. **Standard mod stack folder naming** — we have `standard-mods/1.21.1/` in NextCloud. What do we rename it to? Do we need both?
6. **Egg detection** — Pterodactyl eggs reference MC versions. How are egg maintainers handling this?
7. **Mod compatibility** — mods declare supported MC versions. Are mod authors using the new scheme yet?
---
## Specific Questions
**Q1: Version scheme normalization**
Should we normalize to one scheme internally (old `1.X.X` or new `YY.WW.X`), or track both? What's the cleanest approach given that providers and mod authors may be split?
**Q2: Paper API**
Does the Paper API (`api.papermc.io/v2`) support the new MC versioning? Have they adopted `26.1.2` or are they still on `1.21.x`? What's the current latest Paper version string?
**Q3: Java version mapping**
How should we update our `javaVersionForMC()` logic? Is there a reliable way to detect the correct Java version given the new scheme — or should we just default to Java 21 for anything post-2026?
**Q4: CurseForge and Modrinth**
How are CurseForge and Modrinth handling the new versioning in their APIs? Are they returning `26.1.2` as a `gameVersion` or sticking to `1.21.x`?
**Q5: Standard mod stack naming**
What's the right folder naming strategy for `standard-mods/` in NextCloud given the scheme change? `standard-mods/1.21.1/` vs `standard-mods/26.1.2/` vs some other approach?
**Q6: Live version fetching**
We want to replace hardcoded version lists with live lookups. For CurseForge/Modrinth that means querying their API for available MC versions. For Paper, same. What's the right caching strategy so we're not hitting these APIs on every page load?
---
## 20 Wild Ideas
We want your wildest ideas for making the Modpack Installer better. Don't filter — we want the absurd, the experimental, and the "nobody has done this" ideas alongside the practical ones. At least 20. We'll decide what fits.
---
## Context That Might Help
- Trinity Console is EJS/Express, runs as part of Arbiter on Command Center (63.143.34.217)
- We have Pterodactyl API access (admin key)
- We have CurseForge API key
- We have Modrinth access (no key needed for public API)
- We have Paper API access (public)
- NextCloud at downloads.firefrostgaming.com (WebDAV)
- pg-boss job queue already in place
- Holly is our Lead Builder and primary user of the installer — she's technically capable but not a developer
- Michael has accessibility limitations (hand surgery) — UI needs to be efficient
- We're running NeoForge 1.21.1 on most servers, with some 1.20.1 Forge
- The Vanilla/Paper path is newer — chunk claiming plugin still TBD (GriefPrevention vs Lands)
---
Thanks Gemini! This one is meaty but you've never let us down. 🔥❄️
— Michael (The Wizard) + Claude (Chronicler #93)
*Fire + Arcane + Frost = Forever 🔥💜❄️*