Files
firefrost-operations-manual/docs/luckperms-structure.md
Michael Krause 881b2c216f Add Phase 0.5 Planning: Subscription Tiers, Discord Structure, and Multi-Game Vision
- subscription-tiers-final.md: Complete tier structure (-99) with Fire/Frost paths
- discord-structure-complete.md: Full channel/role architecture (approved by Meg)
- path-philosophy.md: Fire vs Frost marketing content for Ghost CMS
- luckperms-structure.md: Permission hierarchy for 13+ server network
- awakened-gateway.md:  Handshake security protocol documentation

Establishes foundation for competitive Fire (Gingerfury) vs Frost (Frostystyle) community model.
2026-02-08 13:30:41 -06:00

705 lines
17 KiB
Markdown

# 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: "&#00E5FF[❄️ Frost Elemental] " # Electric Cyan
# fire_knight
meta:
prefix: "&#FF3D00[🔥 Fire Knight] "
# frost_knight
meta:
prefix: "&#00E5FF[❄️ Frost Knight] "
# fire_master
meta:
prefix: "&#FF3D00[🔥 Fire Master] "
# frost_master
meta:
prefix: "&#00E5FF[❄️ Frost Master] "
# fire_legend
meta:
prefix: "&#FF3D00[🔥 Fire Legend] "
# frost_legend
meta:
prefix: "&#00E5FF[❄️ 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 <name> 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**