# Firefrost Gaming: LuckPerms Structure **Version:** 1.0 **Created:** February 8, 2026 **Purpose:** Permission group hierarchy for multi-server Minecraft network **Scope:** 13+ servers (NC1 Charlotte, TX1 Dallas) **Implementation Status:** Planning phase --- ## Overview LuckPerms manages all permission-based perks across the Firefrost Gaming network. This document defines the group hierarchy, inheritance structure, and specific permissions for each subscription tier. --- ## Group Hierarchy ### **Inheritance Tree:** ``` default (no subscription) └── awakened (Tier 1: $1 one-time) ├── fire_elemental (Tier 2 Fire: $5/mo) │ └── fire_knight (Tier 3 Fire: $10/mo) │ └── fire_master (Tier 4 Fire: $15/mo) │ └── fire_legend (Tier 5 Fire: $20/mo) │ └── founder (Tier 6: $499 lifetime) └── frost_elemental (Tier 2 Frost: $5/mo) └── frost_knight (Tier 3 Frost: $10/mo) └── frost_master (Tier 4 Frost: $15/mo) └── frost_legend (Tier 5 Frost: $20/mo) └── founder (Tier 6: $499 lifetime) ``` **Note:** Founder group inherits from BOTH `fire_legend` AND `frost_legend`, gaining all perks from both paths. --- ## Permission Breakdown by Tier ### **Tier 0: Default (No Subscription)** **Group Name:** `default` **Subscription:** None **Server Access:** NONE (not whitelisted) **Permissions:** ```yaml permissions: - essentials.list # Can see who's online - essentials.motd # Can see server MOTD ``` **Purpose:** Placeholder group for unsubscribed users. No actual server access. --- ### **Tier 1: The Awakened ($1 One-Time)** **Group Name:** `awakened` **Subscription:** $1.00 one-time payment **Server Access:** All 13+ servers (whitelisted) **Inherits From:** `default` **Permissions:** ```yaml permissions: # Home Management - ftbessentials.home.limit.1 # 1 home maximum - ftbessentials.sethome # Can set home - ftbessentials.home # Can teleport home # Chunk Claims - ftbchunks.max_claimed.0 # 0 claimed chunks - ftbchunks.max_force_loaded.0 # 0 force-loaded chunks # Random Teleport # NO /rtp access at this tier # Chat Formatting - luckperms.prefix.awakened ``` **Chat Prefix:** ```yaml prefix: "[The Awakened] " color: "#FFFFFF" # White ``` **Purpose:** Basic server access with minimal perks. Users explore and decide if they want to commit to a Path. --- ### **Tier 2: Elemental ($5/month) - FIRE PATH** **Group Name:** `fire_elemental` **Subscription:** $5.00/month (Fire Path) **Server Access:** All 13+ servers **Inherits From:** `awakened` **Permissions:** ```yaml permissions: # Home Management - ftbessentials.home.limit.5 # 5 homes (overrides awakened limit) # Chunk Claims - ftbchunks.max_claimed.25 # 25 claimed chunks - ftbchunks.max_force_loaded.0 # 0 force-loaded chunks # Random Teleport - ftbessentials.rtp # /rtp access - ftbessentials.rtp.cooldown.3600 # 60 minute cooldown (3600 seconds) # Chat Formatting - luckperms.prefix.fire_elemental ``` **Chat Prefix:** ```yaml prefix: "[🔥 Fire Elemental] " color: "#FF3D00" # Deep Orange/Red (Fire Primary) ``` --- ### **Tier 2: Elemental ($5/month) - FROST PATH** **Group Name:** `frost_elemental` **Subscription:** $5.00/month (Frost Path) **Server Access:** All 13+ servers **Inherits From:** `awakened` **Permissions:** ```yaml permissions: # Home Management - ftbessentials.home.limit.5 # 5 homes (overrides awakened limit) # Chunk Claims - ftbchunks.max_claimed.25 # 25 claimed chunks - ftbchunks.max_force_loaded.0 # 0 force-loaded chunks # Random Teleport - ftbessentials.rtp # /rtp access - ftbessentials.rtp.cooldown.3600 # 60 minute cooldown (3600 seconds) # Chat Formatting - luckperms.prefix.frost_elemental ``` **Chat Prefix:** ```yaml prefix: "[❄️ Frost Elemental] " color: "#00E5FF" # Electric Cyan (Frost Primary) ``` **Note:** Fire and Frost Elemental have IDENTICAL mechanical permissions. Only prefix/color differ. --- ### **Tier 3: Knight ($10/month) - FIRE PATH** **Group Name:** `fire_knight` **Subscription:** $10.00/month (Fire Path) **Inherits From:** `fire_elemental` **Permissions:** ```yaml permissions: # Home Management - ftbessentials.home.limit.10 # 10 homes (overrides elemental limit) # Chunk Claims - ftbchunks.max_claimed.49 # 49 claimed chunks - ftbchunks.max_force_loaded.4 # 4 force-loaded chunks # Random Teleport - ftbessentials.rtp.cooldown.1800 # 30 minute cooldown (1800 seconds) # Chat Formatting - luckperms.prefix.fire_knight ``` **Chat Prefix:** ```yaml prefix: "[🔥 Fire Knight] " color: "#FF3D00" ``` --- ### **Tier 3: Knight ($10/month) - FROST PATH** **Group Name:** `frost_knight` **Subscription:** $10.00/month (Frost Path) **Inherits From:** `frost_elemental` **Permissions:** ```yaml permissions: # Home Management - ftbessentials.home.limit.10 # 10 homes # Chunk Claims - ftbchunks.max_claimed.49 # 49 claimed chunks - ftbchunks.max_force_loaded.4 # 4 force-loaded chunks # Random Teleport - ftbessentials.rtp.cooldown.1800 # 30 minute cooldown # Chat Formatting - luckperms.prefix.frost_knight ``` **Chat Prefix:** ```yaml prefix: "[❄️ Frost Knight] " color: "#00E5FF" ``` --- ### **Tier 4: Master ($15/month) - FIRE PATH** **Group Name:** `fire_master` **Subscription:** $15.00/month (Fire Path) **Inherits From:** `fire_knight` **Permissions:** ```yaml permissions: # Home Management - ftbessentials.home.limit.20 # 20 homes # Chunk Claims - ftbchunks.max_claimed.100 # 100 claimed chunks - ftbchunks.max_force_loaded.9 # 9 force-loaded chunks # Random Teleport - ftbessentials.rtp.cooldown.900 # 15 minute cooldown (900 seconds) # Chat Formatting - luckperms.prefix.fire_master ``` **Chat Prefix:** ```yaml prefix: "[🔥 Fire Master] " color: "#FF3D00" ``` --- ### **Tier 4: Master ($15/month) - FROST PATH** **Group Name:** `frost_master` **Subscription:** $15.00/month (Frost Path) **Inherits From:** `frost_knight` **Permissions:** ```yaml permissions: # Home Management - ftbessentials.home.limit.20 # 20 homes # Chunk Claims - ftbchunks.max_claimed.100 # 100 claimed chunks - ftbchunks.max_force_loaded.9 # 9 force-loaded chunks # Random Teleport - ftbessentials.rtp.cooldown.900 # 15 minute cooldown # Chat Formatting - luckperms.prefix.frost_master ``` **Chat Prefix:** ```yaml prefix: "[❄️ Frost Master] " color: "#00E5FF" ``` --- ### **Tier 5: Legend ($20/month) - FIRE PATH** **Group Name:** `fire_legend` **Subscription:** $20.00/month (Fire Path) **Inherits From:** `fire_master` **Permissions:** ```yaml permissions: # Home Management - ftbessentials.home.limit.35 # 35 homes # Chunk Claims - ftbchunks.max_claimed.121 # 121 claimed chunks - ftbchunks.max_force_loaded.16 # 16 force-loaded chunks # Random Teleport - ftbessentials.rtp.cooldown.600 # 10 minute cooldown (600 seconds) # Chat Formatting - luckperms.prefix.fire_legend ``` **Chat Prefix:** ```yaml prefix: "[🔥 Fire Legend] " color: "#FF3D00" ``` --- ### **Tier 5: Legend ($20/month) - FROST PATH** **Group Name:** `frost_legend` **Subscription:** $20.00/month (Frost Path) **Inherits From:** `frost_master` **Permissions:** ```yaml permissions: # Home Management - ftbessentials.home.limit.35 # 35 homes # Chunk Claims - ftbchunks.max_claimed.121 # 121 claimed chunks - ftbchunks.max_force_loaded.16 # 16 force-loaded chunks # Random Teleport - ftbessentials.rtp.cooldown.600 # 10 minute cooldown # Chat Formatting - luckperms.prefix.frost_legend ``` **Chat Prefix:** ```yaml prefix: "[❄️ Frost Legend] " color: "#00E5FF" ``` --- ### **Tier 6: Sovereign (Founder's) ($499 Lifetime)** **Group Name:** `founder` **Subscription:** $499.00 lifetime **Inherits From:** `fire_legend` AND `frost_legend` (both simultaneously) **Permissions:** ```yaml permissions: # Home Management - ftbessentials.home.limit.50 # 50 homes # Chunk Claims - ftbchunks.max_claimed.225 # 225 claimed chunks - ftbchunks.max_force_loaded.81 # 81 force-loaded chunks # Random Teleport - ftbessentials.rtp # /rtp access - ftbessentials.rtp.bypass # NO COOLDOWN (bypass cooldown check) # Chat Formatting - luckperms.prefix.founder ``` **Chat Prefix:** ```yaml prefix: "[⚡ Founder] " color: "#FFD600" # Amber Gold ``` **Special Note:** Founder group inherits ALL permissions from BOTH `fire_legend` AND `frost_legend`, gaining complete access to both paths. --- ## Discord Role → LuckPerms Sync ### **Mapping Table:** | Discord Role | LuckPerms Group | Auto-Assign | |--------------|-----------------|-------------| | 🌅 The Awakened | `awakened` | ✅ | | 🔥 Fire Elemental | `fire_elemental` | ✅ | | 🔥 Fire Knight | `fire_knight` | ✅ | | 🔥 Fire Master | `fire_master` | ✅ | | 🔥 Fire Legend | `fire_legend` | ✅ | | ❄️ Frost Elemental | `frost_elemental` | ✅ | | ❄️ Frost Knight | `frost_knight` | ✅ | | ❄️ Frost Master | `frost_master` | ✅ | | ❄️ Frost Legend | `frost_legend` | ✅ | | ⚡ Founder | `founder` | ✅ | **Implementation Method:** DiscordSRV or custom Discord bot with LuckPerms API integration **Flow:** 1. User subscribes via Paymenter/Ghost CMS 2. Stripe webhook triggers Discord role assignment 3. Discord bot detects role change 4. Bot calls LuckPerms API to assign corresponding group 5. User logs into any server → permissions instantly active --- ## Multi-Server Implementation Strategy ### **Challenge:** 13+ Minecraft servers need identical permission configurations ### **Recommended Solution: LuckPerms MySQL Backend** **Architecture:** ``` [MySQL Database] (Single source of truth) ↓ ┌───┴───┬───────┬───────┐ ↓ ↓ ↓ ↓ [Server1][Server2][Server3]...[Server13+] ``` **Benefits:** - ✅ Single database for all servers - ✅ Update once, applies everywhere instantly - ✅ No config file syncing required - ✅ Centralized management - ✅ Real-time permission changes across network **Setup:** 1. Install MySQL on Command Center (or dedicated database server) 2. Create `firefrost_perms` database 3. Configure each server's LuckPerms to use MySQL storage 4. All servers read/write from same database 5. Manage permissions from any server (or web interface) ### **Alternative: Config File Distribution (Not Recommended)** **If MySQL not viable:** - Use Ansible/scripting to push LuckPerms configs via SSH - Manual updates required - Risk of desync between servers - More maintenance overhead **Recommendation:** Use MySQL backend for production. It's the industry standard for multi-server networks. --- ## FTB Chunks Configuration ### **Per-Server Config File:** `config/ftbchunks/config.snbt` **Key Settings:** ```snbt { max_claimed_chunks: { default: 0, awakened: 0, fire_elemental: 25, frost_elemental: 25, fire_knight: 49, frost_knight: 49, fire_master: 100, frost_master: 100, fire_legend: 121, frost_legend: 121, founder: 225 }, max_force_loaded_chunks: { default: 0, awakened: 0, fire_elemental: 0, frost_elemental: 0, fire_knight: 4, frost_knight: 4, fire_master: 9, frost_master: 9, fire_legend: 16, frost_legend: 16, founder: 81 } } ``` **Note:** FTB Chunks reads LuckPerms groups directly. No separate permission nodes needed. --- ## FTB Essentials Configuration ### **Per-Server Config File:** `config/ftbessentials.snbt` **Key Settings:** ```snbt { homes: { max_homes: { default: 0, awakened: 1, fire_elemental: 5, frost_elemental: 5, fire_knight: 10, frost_knight: 10, fire_master: 20, frost_master: 20, fire_legend: 35, frost_legend: 35, founder: 50 } }, rtp: { enabled: true, cooldown: { awakened: -1, # Disabled (no /rtp access) fire_elemental: 3600, # 60 minutes frost_elemental: 3600, # 60 minutes fire_knight: 1800, # 30 minutes frost_knight: 1800, # 30 minutes fire_master: 900, # 15 minutes frost_master: 900, # 15 minutes fire_legend: 600, # 10 minutes frost_legend: 600, # 10 minutes founder: 0 # No cooldown } } } ``` --- ## Chat Formatting (LuckPerms Prefixes) ### **Per-Group Prefix Configuration:** ```yaml # awakened meta: prefix: "&f[The Awakened] " # White color # fire_elemental meta: prefix: "&#FF3D00[🔥 Fire Elemental] " # Deep Orange/Red # frost_elemental meta: prefix: "�E5FF[❄️ Frost Elemental] " # Electric Cyan # fire_knight meta: prefix: "&#FF3D00[🔥 Fire Knight] " # frost_knight meta: prefix: "�E5FF[❄️ Frost Knight] " # fire_master meta: prefix: "&#FF3D00[🔥 Fire Master] " # frost_master meta: prefix: "�E5FF[❄️ Frost Master] " # fire_legend meta: prefix: "&#FF3D00[🔥 Fire Legend] " # frost_legend meta: prefix: "�E5FF[❄️ Frost Legend] " # founder meta: prefix: "&#FFD600[⚡ Founder] " # Amber Gold ``` **Note:** Hex color codes use `&#RRGGBB` format in LuckPerms. --- ## Implementation Checklist ### **Phase 1: Database Setup** - [ ] Install MySQL on Command Center (or dedicated server) - [ ] Create `firefrost_perms` database - [ ] Create LuckPerms database user with appropriate permissions - [ ] Document database credentials (store securely, not in Git) ### **Phase 2: LuckPerms Configuration** - [ ] Install LuckPerms on all 13+ servers - [ ] Configure each server to use MySQL storage - [ ] Verify all servers connect to same database - [ ] Create all permission groups (awakened → founder) - [ ] Set up group inheritance hierarchy - [ ] Configure chat prefixes and colors ### **Phase 3: FTB Integration** - [ ] Configure FTB Chunks per-server (chunk limits) - [ ] Configure FTB Essentials per-server (homes, /rtp) - [ ] Test chunk claiming at each tier - [ ] Test home limits at each tier - [ ] Test /rtp cooldowns at each tier ### **Phase 4: Discord Integration** - [ ] Set up Discord bot with LuckPerms API access - [ ] Configure Discord role → LuckPerms group mapping - [ ] Test automatic group assignment on subscription - [ ] Test group changes on tier upgrades - [ ] Test Founder dual-inheritance (Fire + Frost) ### **Phase 5: Testing & Validation** - [ ] Create test accounts at each tier - [ ] Verify permissions work correctly per tier - [ ] Test across multiple servers (verify MySQL sync) - [ ] Test tier upgrades (Elemental → Knight → Master) - [ ] Test path switching (if implemented) - [ ] Verify Founder gets all Fire + Frost perks --- ## Troubleshooting ### **Common Issues:** **Problem:** Permissions not syncing across servers **Solution:** Verify all servers connect to same MySQL database. Check `config/luckperms/config.yml` storage settings. **Problem:** User has wrong permissions after subscription **Solution:** Check Discord role assignment. Verify LuckPerms group matches Discord role. Use `/lp user info` to debug. **Problem:** /rtp cooldown not working correctly **Solution:** FTB Essentials reads cooldown from config file, not LuckPerms permissions. Update `ftbessentials.snbt` directly. **Problem:** Chunk claim limits not enforcing **Solution:** FTB Chunks reads group names from LuckPerms. Verify group names match exactly (case-sensitive). **Problem:** Chat prefixes not displaying colors **Solution:** Verify hex color format (`&#RRGGBB`). Ensure chat plugin supports hex colors (MC 1.16+). --- ## Security Considerations ### **MySQL Database:** - Use strong password for `firefrost_perms` user - Restrict database access to Firefrost server IPs only - Regular backups (daily recommended) - Store credentials in `.env` file, NOT in Git ### **LuckPerms Web Editor:** - Enable only if needed - Use strong authentication - Restrict IP access if possible - Disable after bulk edits complete --- ## Maintenance ### **Regular Tasks:** **Weekly:** - Review active groups and user counts - Check for permission conflicts or issues **Monthly:** - Database backup verification - Review group hierarchy for optimization - Update documentation if structure changes **Per-Update:** - Test new Minecraft/mod versions for compatibility - Verify FTB Chunks/Essentials still read LuckPerms correctly - Update permission nodes if mods change --- ## Future Enhancements ### **Potential Additions:** - **Cosmetic perks** - Particle effects, custom skins (when implemented) - **Quality-of-life commands** - `/workbench`, `/hat`, etc. (when approved) - **WorldEdit permissions** - For creative/technical builds (tier-specific limits) - **Flight permissions** - Creative flight in claimed chunks (higher tiers) - **Additional modpack-specific perks** - Per-server customization **Note:** Only add perks that are actually implementable and tested. Don't promise features that don't exist yet. --- ## Revision History | Version | Date | Author | Changes | |---------|------|--------|---------| | **1.0** | 2026-02-08 | Michael | Initial LuckPerms structure documented. MySQL backend recommended. Complete group hierarchy defined. | --- **END OF DOCUMENT**