Skip to main content

Minecraft Worlds

Quickstart: Bring a World Up

  1. AllocateCreate IP,via SNIWeb Route,Control Plane (https://mc.drheck.dev) or CLI (ipctl):

    • Web UI (Recommended): Open https://mc.drheck.dev, click + New World, style the world name/MOTD and DNS:64×64 icon, preview/reroll the world seed with the live 2D biome map, and click Create & Provision World.
    CLI (ipctl):
    sudo /data/minecraft/ipctl create <name> --dns
    

    (Or /data/minecraft/ipctl create <name> --dns. Allocates backend IPv6 fd77:7777:5010::1337:3c:d00d:<hex>/64 in /etc/systemd/network/20-wired.network.d/minecraft.conf, configures HAProxy SNI routing,routing in /etc/haproxy/conf.d/minecraft_backends.cfg and /etc/haproxy/minecraft_hosts.map, adds <name>.drheck.dev into Unbound/var/unbound/etc/unbound.minecraft.conf on danknasty, using a short-lived 5-minute step-ca SSH user certificate, and syncs public A/AAAA records to deSEC)deSEC.io).

    Configure the backend server: In your backend server's server.properties:

    server-ip=fd77:7777:5010::1337:3c:d00d:<hex>
    server-port=25565
    online-mode=true
    

    (Backend servers run stock vanilla Minecraft,with online-mode=true, listening on standard port 25565) on their dedicated ULA IPv6 address).

    Start the server: LaunchStart yourvia Minecrafthttps://mc.drheck.dev server(Start onbutton UL.or Itautomatic bindsOn-Demand towake-on-join) itsor dedicatedsudo IPv6systemctl address.start minecraft@<slug>.service.

    Connect: Players connect using <name>.drheck.dev (standard port 25565)25565). Microsoft account authentication takes place directly between the client and yourthe backend server.


    Quickstart: Take a World Down

    1. Stop the backend server: RunClick Stop in https://mc.drheck.dev, send stop in the Minecraftlive serverweb consoleconsole, or terminaterun itssudo process.systemctl stop minecraft@<slug>.service.

    2. What Players See When Offline:Offline or Standby (On-Demand): HAProxy monitorsintercepts backendall healthMultiplayer checks.Server IfList thepings server($\text{state} process= is1$) stopped:and offline/standby Login joins ($\text{state} = 2$) via /etc/haproxy/minecraft.lua and mc-manager:

      • In the Multiplayer Server List:List (state = 1): TheReturns pingthe server's configured custom MOTD displays:and 64×64 [Serverserver-icon.png Name](favicon) isimmediately, currentlywith offline.version Pingstatus Lukebadge Standby (Join to Wake) (for ondemand servers) or Offline (for manual servers).
      • When Clicking "Join Server" (state = 2): The
        client
      • ondemand immediatelyStandby: Automatically triggers minecraft@<slug>.service to boot and displays a gold countdown screen (Waking up <Server>... Ready in ~20s!).
    3. manual Offline: Immediately disconnects with a clean red Minecraftscreen disconnect screen: "[(<Server Name]> is currently offline. PingStart Luke"at (Nomc.drheck.dev).
    connection timeouts, hanging, or generic connection refused errors).

    Disable or remove router mapping & DNS (Teardown):

    • Temporary takedown (disable in router only):
      sudo /data/minecraft/ipctl route disable <name>
      
    • Complete teardown (release IP, remove HAProxy route, purge DNS):
      sudo /data/minecraft/ipctl delete <name> --dns
      

    Architecture & Design Details

    1. Unified Endpoint Model

    All public and LAN client connections resolve to the single Minecraft Router endpoint pair:

    • IPv4: 10.0.0.113 (NAT port-forwarded from WAN IPv4 :25565 on danknasty)
    • IPv6: fd77:7777:5010::1337:f1ac:d00d:3c (dynamically mapped to GUA <gua_prefix>:1337:f1ac:d00d:3c in public DNS)

    Whether connecting via pokelovers.drheck.dev, desertworld.drheck.dev, or any other server subdomain, players connect to this exact IP pair on standard port 25565.

    2. Transparent TCP SNI Handshake Routing & OfflineLive FallbackPing Injection (HAProxy)HAProxy + mc-manager)

    Rather than using an application-level proxy (which breaks vanilla Diffie-Hellman encryption and forces online-mode=false), HAProxy performs transparent pre-handshake packet inspection:

    1. HAProxy listens dual-stack on 10.0.0.113:25565 and [fd77:7777:5010::1337:f1ac:d00d:3c]:25565.
    2. When a player connects, HAProxy peeks at the initial unencrypted Minecraft handshake packet (0x00) via /etc/haproxy/minecraft.lua and extracts the requested hostname (txn.mc_host, e.g. pokelovers.drheck.dev) and connectionhandshake state (txn.mc_state: 1 = Status vsPing, Login)2 = Login Join).
    For All Multiplayer Server List Pings ($\text{state} = 1$): Each backend uses the rule:
    tcp-request content use-service lua.mc_offline if { var(txn.mc_state) -m int eq 1 } || !{ nbsrv(<slug>) gt 0 }
    
    lua.mc_offline queries mc-manager (http://127.0.0.1:8095/internal/haproxy with STATUS <slug>). If the backend JVM is running, mc-manager queries the backend's live TCP status (0x00) to obtain real-time online player counts and version metadata, then overlays the latest motd from server.properties and favicon from /data/minecraft/<dir>/server-icon.png. This ensures MOTD styling and 64×64 icon changes saved in mc.drheck.dev appear immediately on client Refresh without restarting a running Minecraft server. For Player Login Joins ($\text{state} = 2$):
    • If the backend server is UP: ItHAProxy splices the raw TCP stream directly to that server's dedicated internal IPv6 address on port [fd77:7777:5010::1337:3c:d00d:<hex>]:25565. The client and backend perform native Microsoft/Mojang online-mode=true authentication directly over the spliced TCP connection.
    • If the backend server is DOWN: HAProxy immediately handles the stream with Lua applet lua.mc_offline sends JOIN <slug> to mc-manager, which craftswakes ondemand servers automatically and sendsreturns a validformatted Minecraft protocol packet:
      • Status Ping: JSON MOTD with red text: <name> is currently offline. Ping Luke
      Login Join: Disconnect packet (0x00 rendering a red bold error screen: <name> is currently offline. Ping Luke).

      3. Backend IPv6 Address Scheme & Active Worlds

      Each backend Minecraft server is isolated on a dedicated Unique Local Address (ULA) on interface eth77 of ul:

      • Prefix: fd77:7777:5010::1337:3c:d00d:<hex>/64
      • Port: Each server binds to standard port 25565 on its assigned IPv6 address.
      • Security:Active Managed Worlds:
      Hex ID Slug / Subdomain Display Name Backend ULA IPv6 addressesAddress areLifecycle completelyMode internal and hiddenbehindthe1 proxypokelovers.drheck.dev router.Poke Lovers fd77:7777:5010::1337:3c:d00d:1/64 ondemand (20G heap) 2 desertworld.drheck.dev ⚔ 𝔇𝔢𝔰𝔢𝔯𝔱 𝔚𝔬𝔯𝔩𝔡 ⚔ fd77:7777:5010::1337:3c:d00d:2/64 ondemand (8G heap)

      4. Web Map (BlueMap) & Authentik Gated HTTPS

      Interactive 3D web mapping for Minecraft 26.3 is powered by BlueMap running in standalone watch mode:

      • Service: bluemap-pokelovers.service running from /data/minecraft/poke lovers/bluemap.
        • Automatically updates the rendered 3D map as chunks change in /data/minecraft/poke lovers/world.
        • Serves live map data & Server-Sent Events (SSE) updates on internal port 8100.8100.
      • Reverse Proxy & Authentication: NGINX terminates SSL on port 443 at /etc/nginx/sites-available/pokelovers and gates access behind Authentik ForwardAuth (/outpost.goauthentik.io/auth/nginx).
        • Serves directly at https://pokelovers.drheck.dev.
        • Unauthenticated visitors are automatically redirected to auth.drheck.dev to log in before viewing the 3D map.

      5. Network & DNS Automation (ipctl) — Externalized Configs & Short-Lived SSH CA

      TheTo toolprevent dynamic Minecraft world provisioning from mutating code-reviewed host and router configuration files (/etc/systemd/network/20-wired.network, /etc/haproxy/haproxy.cfg, and /home/luke/git/router_config/unbound.conf), /data/minecraft/ipctl (symlinked inat /home/luke/bin/ipctl) automatesoperates theexclusively entireon lifecycle:dedicated external drop-in and include files:

        Subsystem Static Code-Reviewed Base Config (Never Modified by ipctl) Dynamic External File Managed by ipctl Mirror in /data/minecraft/.network/ Local Networksystemd-networkd (ul): Appends or removes # <name> and Address=fd77:7777:5010::1337:3c:d00d:<hex>/64 in /etc/systemd/network/20-wired.network and/etc/systemd/network/20-wired.network.d/minecraft.conf triggersminecraft.network.conf networkctl reload. RouterHAProxy ConfigurationMap (ul): Updates/etc/haproxy/haproxy.cfg /etc/haproxy/minecraft_hosts.map andminecraft_hosts.map backend stanzas HAProxy Backends (withul) health checks and offline responder) in /etc/haproxy/haproxy.cfg, then reloads(loads haproxy.service.-f SSH Key Verification: Verifies that key SHA256:7Xr0vCxgfpPhbKE3hN9fE2IC9y4x3Kj+kYmXwzgJY3s (ultra-arikui/etc/haproxy/conf.d) is/etc/haproxy/conf.d/minecraft_backends.cfg loadedminecraft_backends.cfg in theagent before running remote router commands. RouterUnbound DNS (danknasty): When --dns is passed:
          Updates the git working tree at /home/luke/git/router_config/unbound.conf (has include: "/var/unbound/etc/unbound.minecraft.conf") /var/unbound/etc/unbound.minecraft.conf unbound.minecraft.conf

          Programmatic Short-Lived SSH CA Authentication (step-ca $\longrightarrow$ danknasty)

          When /data/minecraft/ipctl is invoked with --dns (either interactively or unattended by mc-manager.service after a reboot when no ssh-agent is active):

            ipctl generates a fresh ephemeral Ed25519 keypair in a mode-0700 temporary directory (atexit-cleaned). Verifiesipctl syntaxrequests a 5-minute (--not-after=5m) SSH user certificate for principal luke from the local step-ca container using the webshell-svc JWK provisioner (the same short-lived CA used by webshell.drheck.dev). danknasty validates the certificate against TrustedUserCAKeys /etc/ssh/drheck_ca_user_key.pub (configured in /etc/sshd_config.d/10-drheck-certs.conf), allowing ipctl to update /var/unbound/etc/unbound.minecraft.conf, run doas unbound-checkconf. Deploys the configuration to /var/unbound/etc/unbound.conf. Restarts Unbound viaand doas rcctl restart unbound., Verifiesand local resolution viainvoke dig @10.0.0.1. Executes python3 /home/luke/git/router_config/dns_danger_sync.py --force to synchronize public A and AAAA records onto deSEC.io. Both update_dns.py and dns_danger_sync.py (as well as verify_dns.sh) on danknasty recursively follow include: directives in unbound.conf, ensuring all external Minecraft subdomains are automatically included during prefix rotations and deSEC.io synchronization.

            Backups & Disaster Recovery

            TheBoth the HAProxy router configurations, Lua scripts, mapping tables, network configurations,layer and the ipctlmc-manager toolcontrol plane (including all external network, proxy, and DNS mirror files) are integrated into the automated backup infrastructure:/home/luke/git/backups/ul/scripts/:

            • Control Plane & External Network Backup: /home/luke/git/backups/ul/scripts/backup/mc_manager
              • Archives /data/minecraft/.manager, /data/minecraft/.network, /data/minecraft/ipctl, /usr/local/bin/{mc-manager,mc-runner,mc-seed-render}, /etc/systemd/system/{mc-manager.service,minecraft@.service}, /etc/systemd/network/20-wired.network.d/minecraft.conf, /etc/nginx/sites-available/mc, /etc/haproxy/minecraft.lua, /etc/haproxy/minecraft_hosts.map, and /etc/haproxy/conf.d/minecraft_backends.cfg with 10% par2 parity into /data/backups/services/current/mc_manager/.
              Control Plane Restore: /home/luke/git/backups/ul/scripts/restore/mc_manager [timestamp] Router Backup Script:& Restore: /home/luke/git/backups/ul/scripts/backup/minecraft_router
                Creates timestamped, ACL/xattr-preserved, par2-verified archives in /data/backups/services/current/minecraft_router/. Automatically invoked during the global daily backup run (run_all_backups). Restore Script:and /home/luke/git/backups/ul/scripts/restore/minecraft_router [timestamp]
                  Verifies PAR2 checksums/parity. Extracts configurations to / and triggers live reloads of systemd-networkd and haproxy.

                  6. Minecraft Server Manager & On-Demand Architecture (DesignProduction Specification)Architecture)

                  DesignProduction Goal:Control Plane: Provide aThe unified web control plane (at https://mc.drheck.dev, gated(bound byto Authentik)[fd77:7777:5010::1337:f1ac:d00d:3c00]:8095 behind Nginx and daemonAuthentik thatForwardAuth) formalizesmanages what aall Minecraft server isworlds on ul, automates ipctl networking and systemd lifecycle management, wakes sleeping servers on-demand via HAProxy when players join, streams live PTY server consoles, and provides an interactiveintegrated seed-previewSeed Preview Studio and modpackText, studioMOTD, whenColor creatingGradient new& worlds.8-Bit Pixel Icon Studio.

                  6.1 Canonical Definition of a "Server"

                  Every managed Minecraft world on ul is a self-contained unit consisting of five standardized components:

                  $$\text{Server}(\text{slug}) = \left\lbrace\text{Directory}, \quad \text{Manifest } (\texttt{server.json}), \quad \text{Network } (\texttt{ipctl}), \quad \text{Units } (\texttt{systemd}), \quad \text{Lifecycle Policy}\right\rbrace$$

                  Component Path / Identifier Description
                  1. Dedicated Directory /data/minecraft/<dir_name>/ Holds server.json, server .jar / libraries, mods/ or plugins/, server.properties, server-icon.png, whitelist.json, ops.json, world/, and optional bluemap/. Existing worlds in /data/minecraft/* arecan be adopted in-place without moving files.
                  2. Declarative Manifest /data/minecraft/<dir_name>/server.json Stores the human display name, DNS slug (<slug>), loader type (paper, vanilla, fabric, neoforge, forge, custom), Minecraft version, JVM path (/usr/lib/jvm/java-26-openjdk/default/bin/java), heap size (-Xmsmemory_min/-Xmxmemory_max), custom modpack reference, seed, and lifecycle modestart_mode (manual, ondemand, always).
                  3. Network & DNS (ipctl) fd77:7777:5010::1337:3c:d00d:<hex>/64 Dedicated internal IPv6 address on eth77 in /etc/systemd/network/20-wired.network.d/minecraft.conf, bound in server.properties (server-ip= and server-port=25565, plus internal RCON on port 25575), mapped in /etc/haproxy/minecraft_hosts.map + /etc/haproxy/conf.d/minecraft_backends.cfg, and published as <slug>.drheck.dev in /var/unbound/etc/unbound.minecraft.conf on danknasty Unbound and deSEC.io.
                  4. Dedicated systemd Service & PTY Wrapper minecraft@<slug>.service (+ optionalvia bluemap@<slug>.service/usr/local/bin/mc-runner) Runs the server underJVM systemdinside viaa managed pseudo-terminal (PTY) with a 1,000-line ring buffer and UNIX domain socket /usr/local/bin/run/mc-launch manager/<slug>.sock., Selectsenabling thereal-time per-serverWebSocket JVMlog binary directly (never mutating the global archlinux-java symlink)streaming and performsconsole command injection (SendRunnerCommand) as well as graceful RCON save-all + stop on shutdown.
                  5. Lifecycle Policy manual | ondemand | always Controls when the server consumes RAM on ul (see Section 6.2).
                  Click to expand example /data/minecraft/poke lovers/desertworld/server.json manifest
                  {
                    "name": "Poke Lovers",
                    "slug": "pokelovers"desertworld",
                    "directory"display_name": "/data/minecraft/poke⚔ lovers"𝔇𝔢𝔰𝔢𝔯𝔱 𝔚𝔬𝔯𝔩𝔡 ⚔",
                    "dir_name": "desertworld",
                    "domain": "pokelovers.desertworld.drheck.dev",
                    "bind_ipv6"ipv6": "fd77:7777:5010::1337:3c:d00d:1"2",
                    "game_port"hex_id": "2",
                    "port": 25565,
                    "rcon_port": 25575,
                    "loader"start_mode": "vanilla"ondemand",
                    "idle_timeout_minutes": 20,
                    "type": "paper",
                    "mc_version": "26.3"1.21.4",
                    "jar_file": "server_26.3.jar",
                    "java_bin": "/usr/lib/jvm/java-26-openjdk/default/bin/java",
                    "memory_min_gb"memory_min": 20,"8G",
                    "memory_max_gb"memory_max": 20,
                    "use_aikars_flags": true,
                    "modpack": null,8G",
                    "seed": "-41829401829401",
                    "lifecycle_mode": "ondemand",
                    "idle_shutdown_minutes": 20,
                    "bluemap_enabled": true,
                    "bluemap_port": 8100,
                    "owner": "luke"4900633019313953717",
                    "admins": ["luke", "ikura"],
                    "sync_ingame_ops"created_at": true"2026-10-10T18:03:46-04:00"
                  }
                  

                  6.2 Resource Management & Server Lifecycle Modes

                  Because each active Minecraft JVM allocates $8\text{--}20\text{ GiB}$ of pinned heap memory (-Xms = -Xmx with +AlwaysPreTouch), running all $25+$ worlds in /data/minecraft simultaneously is impossible. Each server is assigned one of three lifecycle modes:

                  1. manual (Cold / Archived):
                    • minecraft@<slug>.service is disabled and stopped ($0\text{ GiB}$ RAM).
                    • Only starts when explicitly clicked in the Web UI.
                    • When stopped, HAProxy returns:returns <name> is currently offline. PingStart Lukeat mc.drheck.dev.
                  2. ondemand (Wake-on-Join + Idle Auto-Stop):
                    • Stopped by default ($0\text{ GiB}$ RAM).
                    • Automatically started when a player clicks Join Server in Minecraft (intercepted by HAProxy Lua)Lua $\longrightarrow$ mc-manager).
                    • Automatically stopped (save-all $\longrightarrow$ stop) once $0$ players have been online continuously for $T_{\text{idle}}$ minutes (default $20\text{ min}$).
                  3. always (Pinned Production):
                    • minecraft@<slug>.service is enabled and active across host reboots (systemctl enable --now).
                    • Used for primary worlds that should remain online $24/7$ regardless of player count.

                  6.3 HAProxy On-Demand Wake-on-Join & Live Status Ping Architecture

                  The Minecraft protocol sends a Handshake packet (0x00) at the start of every TCP connection containing a Next State VarInt:

                  • $\text{Next State} = 1$ (Status Ping): Sent when a client refreshes their Multiplayer Server List (or when internet bots scan port 25565).List.
                  • $\text{Next State} = 2$ (Login Join): Sent only when a player clicks Join Server.

                  /etc/haproxy/minecraft.lua already extracts both txn.mc_host and txn.mc_state. Extendingand delegates status pings and offline joins to mc_offlinemc-manager enables zero-overhead on-demand activation without waking servers on server-list pings:(http://127.0.0.1:8095/internal/haproxy):

                  $$\text{Client Packet } (\texttt{0x00}) \longrightarrow \begin{cases} \text{state} = 1 \text{ (Status Ping)} & \longrightarrow \text{Return live JSON MOTD + } (\texttt{server-icon.png} \text{Sleeping /from Starting} / Offline})\texttt{mc-manager} \text{ without waking} \\ \text{state} = 2 \text{ (Login Join)} & \longrightarrow \text{If } \texttt{ONLINE}\text{: TCP splice to backend; if } \texttt{ondemand}\text{: trigger } \texttt{mc-manager} \text{ wake socketserver + return countdown packet}countdown} \end{cases}$$

                  State Machine for ondemandManaged Worlds

                  Server State Multiplayer List Ping (state = 1) MOTD & Icon Player Clicks "Join Server" (state = 2)
                  SLEEPING (ondemand) Configured custom MOTD (or §e⚡ e<name> is§7[Standby] sleeping (On-Demand) §7—— §aClick Join to wake!wake server!) + server-icon.png + version badge Standby (Join to Wake) HAProxy Lua sends WAKEJOIN <slug> to /run/mc-manager/wake.sockmanager, transitions server tostarts STARTINGminecraft@<slug>.service, and disconnects client with: "⚡ Waking up <name>... Server willis bestarting readyon-demand. Please reconnect in ~20 seconds!"
                  STARTING Configured custom MOTD + §6⏳server-icon.png <name>+ isversion bootingbadge up.Starting... §7Please wait ~15s Disconnects client with live elapsed timer:with: "⏳ <name> is currently booting (12sup! elapsed)...Please Rejoinwait in~15 aseconds fewand seconds!try connecting again."
                  ONLINE Native backend MOTD + liveLive player count (spliced& directlysample tofrom backend JVM)JVM overlaid with latest custom MOTD (server.properties) and server-icon.png (favicon) Native TCP splice to [fd77:7777:5010::1337:3c:d00d:<hex>]:25565 with full Microsoft online-mode=true auth
                  OFFLINE (manual) Configured custom MOTD + §c<name>server-icon.png is+ currentlyversion offline.badge Ping LukeOffline Disconnects client with: "<name> is currently offline. PingStart Luke"it from https://mc.drheck.dev"

                  Idle Shutdown Timer

                  For any running server in ondemand mode, mc-manager tracks the time since the last player disconnected ($N_{\text{players}} = 0$) after an initial post-boot grace period ($T_{\text{grace}} = 5\text{ min}$ so players have plenty of time to connect after waking the server). When:

                  $$t_{\text{empty}} \ge T_{\text{idle}} \quad (\text{default } 20\text{ min})$$

                  mc-manager issues save-all and stop via RCONthe /run/mc-manager/<slug>.sock PTY socket and stops minecraft@<slug>.service, freeing the JVM heap until the next join request.


                  6.4 Web Control Plane (https://mc.drheck.dev)

                  The web frontend is served over HTTPS behind Nginx + Authentik ForwardAuth and provides two primary workspaces:workspaces designed with a clean, hardware-ops dark interface:

                  1. Existing Servers Dashboard & Live PTY Console

                  • Server FleetSidebar Cards& Status Header:
                    • Displays every registered server with its 64×64 pixel icon, live state badge (ONLINE, STARTING, SLEEPING (ON-DEMAND)STANDBY, OFFLINE), online player list, RAM/CPU usage, Minecraft version, loader typeendpoint (Paper, Vanilla, Fabric, Forge), and <slug>.drheck.dev), endpoint.IPv6 address, heap allocation, and lifecycle mode (On-Demand, Always On, Manual).
                    • One-Click Controls: Start Server, Restart, Stop, Restart, and a dropdown to switch the server between Manual, On-Demand, and Always+ On.
                    Provision
                  • Live Console & Config Drawer: WebSocket log stream (journalctl -u minecraft@<slug>.service -f) with RCON command input, visual server.propertiesNetwork / whitelist.jsonDNS /(if ops.jsonnot editor,yet and BlueMap 3D map toggle.allocated).
                  LegacyLive DirectoryServer AdoptionConsole (mc-runner WebSocket Stream):
                  • ScansConnects via WebSocket (/api/servers/<slug>/console/ws) to /data/minecraft/*run/mc-manager/<slug>.sock, forstreaming directoriesthe without1,000-line aPTY server.jsonring manifestbuffer and real-time server stdout/stderr lines.
                  Allows admins to send console commands (e.g., kochan 26.2say, hermitcraft 9op, Project Sekaiwhitelist, superworldtime 1.20.1set, gamemode, /give, etc.) anddirectly providesto athe one-clickserver's stdin (leading / is automatically stripped because the server console expects bare commands). AdoptConfiguration, Text/MOTD Studio, Icon Studio, Whitelist & ProductionizeOperators Panels: wizard
                  that generatesEdit server.Display Name, MOTD, Start Mode, Idle Timeout, Min/Max Heap, Jar File, Gamemode, Difficulty, Max Players, View Distance, Level Seed, server-icon.png, whitelist.json, provisions anand ipctl IPv6 route + DNS entry, and wires up minecraft@<slug>.serviceops.json.

                  2. CreateMinecraft NewText, ServerMOTD, Color Gradient & 8-Bit Pixel Icon Studio

                  CreatingBuilt adirectly newinto world follows a 3-step guided workflow inboth the Web+ UI:New World screen and the Configuration panel of every existing server:

                    • StepUnicode 1Font —Converter Identity,(Copy/Paste Networking & Resource ProfileSafe):
                      • DisplayConverts Nametext &into Subdomain:Minecraft EnteringJava Edition font variants without resource packs: CreateSmall WorldCaps (ꜱᴍᴘ) auto-suggests slug, createworldGothic / Fraktur (𝔖𝔲𝔯𝔳𝔦𝔳𝔞𝔩), createworld.drheck.devDouble-Struck (𝕊𝕦𝕣𝕧𝕚𝕧𝕒𝕝)), Full-Width (SMP), and Monospace.
                      • Includes one-click LifecycleJava-Safe PolicyDecorative Symbols & Borders: Select On-Demand⚔ (default), Always On◆, or Manual★, plus heap size (4 GiB⚡ –, 24👑, GiB☠), ✦, ❖, », «, and optional⚔ BlueMap... 3D Web Map provisioning.⚔.
                    • Step§ 2Color — Server BinaryGradient & CustomFormatting ModpacksCode Builder:
                      • Interpolates any two RGB colors (Gradient Start $\longrightarrow$ Gradient End) across the input string and maps each character to the nearest native Minecraft color code (§0–§f), combined with optional §l (Bold), §o (Italic), §n (Underline), §m (Strikethrough), or §k (Obfuscated).
                    • Can be applied with one click to either MOTD (server.properties) or Display Name (server.json), with a real-time Minecraft Multiplayer Server EngineList SelectorPreview rendering § codes and the 64×64 icon side-by-side.
                  8-Bit Pixel Icon & Badge Generator (64×64 server-icon.png):
                  • PaperGenerates /crisp Purpur64×64 /pixel-art Vanillaserver / Fabric / NeoForge / Forge: Queries live upstream release APIs (or local cached jarsicons in /data/minecraft/jars/) so you can pick the exactbrowser using 6 Minecraft versionmaterial and build from a dropdown.
                  Automatically pairs the required JVM runtimethemes (/usr/lib/jvm/java-26-openjdkStone, java-21-openjdkDirt & Grass, java-17-openjdkDiamond, Glowstone, Nether, Enchanted Glint), 7 pixel-art stamps (Sword, Pickaxe, Creeper, Crown, Heart, Star, Pokéball), and 1–3 character 8-bit bitmap text with 3D drop shadows, or accepts any custom uploaded PNG/JPG/WebP image (auto-cropped and resampled to java-8-openjdk64×64). Custom Modpack & Mod Library:
                    Local Custom Modpacks (/data/minecraft/modpacks/): Choose from your curated custom modpacks (.zip server packs, .mrpack Modrinth packs, or reusable mods/ + config/ bundles) or upload a new custom pack directly in the browser. Individual Mods & Plugins: Upload .jar files or search Modrinth / Paper Hangar filtered by the selected Minecraft version and loader to drop mods/plugins straight into mods/ or plugins/. Step 3 —

                    3. Interactive Seed Preview & Reroll Studio:

                      Seed Input or Reroll:
                        Enter a specific seed (integer or text string, converted using standard Java String.hashCode() rules) or click 🎲 Roll Random Seed to cycle through candidate seeds. Instant 2D Biome & Structure Map Preview (cubiomes Engine):Native Renderer)
                        • Uses a/usr/local/bin/mc-seed-render headless(compiled nativeagainst cubiomes C renderer) on ul to generaterender a high-resolution 2D biome colour map ($\pm 2048$ blocks around $(0,0)$) and locate nearest structures (Village, Ancient City, Mansion, Monument, Outpost, Stronghold, Ruined Portal) in $< 50\text{ ms}$ per seed, overlaid with exact structure icons (Spawn point, Villages, Ancient Cities, Woodland Mansions, Ocean Monuments, Pillager Outposts, Strongholds, and Nether Fortresses/Bastions).seed.
                        • Lets you clickSupports 🎲 Roll Random Seed repeatedlyand untilinteractive youbiome spotlegend aninspection idealprior spawnto island,provisioning continent,a ornew structure cluster, or bookmark candidate seeds side-by-side before creating the server.world.
                        Post-Creation Seed Swap ("Reroll World"):
                          On any newly created server (for example, if you log in or check its 3D BlueMap render and want a different terrain layout), clicking Swap Seed & Regenerate World in the server dashboard stops minecraft@<slug>.service, writes the new level-seed to server.properties and server.json, clears world/, world_nether/, and world_the_end/, and restarts the server on the new seed.

                          6.5 Authentik Gate, OIDC Role-Based Access Control (RBAC)RBAC & In-GameAutomatic /op Sync(ops.json) Synchronization

                          Access to https://mc.drheck.dev is protected by a two-layer Authentik security model that gates the entire web interfacegated at the Nginx perimeter while using nativevia OpenIDAuthentik ConnectForwardAuth (OAuth2ProviderX-Authentik-Username) claims to grant granular Server Admin privileges both in the web UI, and insidemc-manager themaps Minecraftauthenticated serversidentities themselves.via /data/minecraft/.manager/users.json:

                          $$\text{Authentik SSO } (\texttt{auth.drheck.dev}) \longrightarrow \begin{cases} \text{Layer 1: Nginx ForwardAuth } (\texttt{ProxyProvider}X-Authentik-Username}) & \longrightarrow \text{Blocks unauthenticated requests at perimeter} \\texttt{mc-manager} \text{Layer 2: OIDC JWTRBAC + Scopes } (\texttt{OAuth2Provider}) & \longrightarrow \text{Maps } \texttt{groups}ops.json} \text{ and } \texttt{entitlements} \text{ to RBAC + RCON } \texttt{/op} \end{cases}Sync}$$

                          1. Authentik OIDC Scopes & Claim Evaluation

                          mc-manager authenticates users via OIDC Authorization Code Flow with PKCE against https://auth.drheck.dev/application/o/mc/ (verifying RS256 JWT tokens against https://auth.drheck.dev/application/o/mc/jwks/) and inspects three identity sources on every HTTP request and WebSocket frame:

                          • profileGlobal ScopeAdmins (groupsglobal_admin: true claim): Reads Authentik group memberships (["mc_admins", "mc_server_admins", "ul_ssh", ...]).
                          entitlements Scope (roles claim): Reads application-scoped entitlements attached to the mc Authentik Application (e.g., admin:pokeloversluke): Full access to create servers, provision network/DNS, manage the Users & Operators Registry (with live Mojang API username $\longrightarrow$ UUID lookup), admin:and administer all, creator).worlds. Per-Server Admins (server.json ACLs (owner & admins): AllowsFull control to start/stop/restart, access the live console, and edit configuration/whitelist/icon on their assigned worlds. Automatic ops.json Synchronization: Adding a Superuser as a Global Admin (or the creator of a server) to grant specific Authentik usernames ("admins": ["ikura", "haruka"]) full admin privileges on an individual server directly from the web UI.

                          2. Three-Tier Privilege Matrix

                          Role Tier Authentik Group / Entitlement Match Web UI & Infrastructure Capabilities In-Game Minecraft Privileges 1. Super Admin Group authentik Admins or mc_admins (e.g., luke) Full Control Plane Access: Create/delete any server, run ipctl --dns, adopt legacy /data/minecraft/* folders, configure any heap size or always mode, access all live RCON consoles, and assign per-server admins. Automatic Level 4 Operator (/op) + bypassesPlayerLimit: true on all servers with sync_ingame_ops: true. 2. Server Admin Group mc_server_admins, Entitlement admin:<slug>, or username listed in server.json admins Delegated Server Administration: Can start/stop/restart assigned servers, switch between manual and ondemand, use the Live RCON Console & Log Stream, edit server.properties / whitelist.json, upload/toggle mods, and create new ondemand servers in the Create New Server Studio (capped at 12 GiB heap). Automatic Level 4 Operator (/op) on every server where they hold Server Admin rights. 3. Player / Viewer Any authenticated drheck.dev user Dashboard & Wake Access: View live server status, online players, seeds, and BlueMap 3D maps; click Wake Server on ondemand worlds; download client .mrpack / .zip modpack bundles. Cannot stop servers, view RCON consoles, or alter configs. Standard player (automatically added to whitelist.json if account is linked).

                          3. Automatic OIDC-to-Minecraft /op (ops.json) Synchronization

                          Each authenticated user can linksyncs their Minecraft Java Edition username once in the mc.drheck.dev profile bar (stored in Authentik user attributes user.attributes.mc_username and resolved to an immutable Mojang UUID via https://api.mojang.com/users/profiles/minecraft/<username>):

                            Granting Admin: When a user is added to mc_admins, mc_server_admins, or a server's admins list in server.json, mc-manager automatically writes their UUID and username into /data/minecraft/<dir>/ops.json ("level":Level 4, operator with "bypassesPlayerLimit":bypassesPlayerLimit: true) and whitelist.json. If the server is currently ONLINE, mc-manager immediately sends whitelist add <mc_user> and op <mc_user> over the internal ULA IPv6 RCON socket (25575) so they receive operator privileges in-game without a server restart. Revoking Admin: Removing a user from the Authentik group or the server's admins list immediately removes their entry from ops.json and dispatches deop <mc_user> over RCON.

                            6.6 End-to-End Automated Provisioning Pipeline

                            When Create Server is clicked in the Web UI, the backend executes the following atomic pipeline:

                              Directory & Manifest Creation: Creates /data/minecraft/<slug>/, writes server.json and eula.txt (eula=true), downloads the selected Paper/Vanilla/Fabric/Forge binary, and extracts any selected custom modpack into mods/, plugins/, and config/. Network & DNS Allocation (ipctl): Calls ipctl create <slug> --dns to assign the next available fd77:7777:5010::1337:3c:d00d:<hex>/64 address on eth77, register the HAProxy SNI backend (with mc_offline on-demand wake support), and publish <slug>.drheck.dev on danknasty Unbound and deSEC.io. server.properties Generation: Writes server-ip=fd77:7777:5010::1337:3c:d00d:<hex>, server-port=25565, level-seed=<seed>, online-mode=true, and RCON credentials bound exclusively to the internal ULA IPv6 address. Systemd Activation: Registers minecraft@<slug>.service (and bluemap@<slug>.service if enabled) and either starts the server immediately or places it into SLEEPING (ON-DEMAND) ready for the first player join.