IceLegends SMP
A vanilla-first Romanian Minecraft SMP built for clean 3–4 month seasons.
The Problem
Running a community SMP means balancing plugin depth against vanilla feel, managing a world-reset cycle, and keeping operations simple enough for a solo admin. IceLegends SMP solves this with 11 carefully chosen plugins, strict feature gating per a "vanilla-first" principle, and fully automated backups and world resets.
My Role
Designed, configured, and deployed solo — server architecture, 11-plugin selection and configuration, LuckPerms permission model, economy and nation design, Docker infrastructure, and Cloudflare Tunnel ingress for Dynmap.
Highlights
- PaperMC 1.21 on Docker with a hard 11-plugin cap — every plugin is justified and none are redundant
- Towny nations with seasonal quests (Quests + Citizens NPCs) and a single manually-spawned MythicMobs boss per season
- AureliumSkills passive bonuses only — active abilities disabled to preserve vanilla combat (P-01)
- DiscordSRV bridge logs every death, join, and chat event to dedicated Discord channels in real time
- Daily automated backups with 7-day retention; resource world resets every Monday at 05:00 via cron
Stack
Constraints
- Solo admin — every operation must complete in under 10 minutes (P-02).
- Vanilla-first (P-01): if any plugin disappeared tomorrow, the game must continue unchanged.
- 11-plugin hard cap — every addition must displace something or prove unique, irreplaceable value.
System Architecture
Key Trade-offs
The decisions worth defending — what I chose, what I turned down, and why.
Plugin count cap
Chose
Hard cap at 11 plugins
Rejected
Unlimited plugin stack
Each plugin is a maintenance surface and a potential conflict point. The cap forces prioritisation and keeps the dependency graph legible for a solo admin.
Public ingress for Dynmap
Chose
Cloudflare Tunnel (no open ports)
Rejected
Expose :8123 directly via UFW
No origin IP exposure, free DDoS protection, and zero firewall rule maintenance — the same pattern used by the IceLegends portfolio site.
AureliumSkills scope
Chose
Passive bonuses only, active abilities disabled
Rejected
Full AureliumSkills feature set including active combat abilities
Active abilities alter vanilla combat — a direct violation of P-01. Passive bonuses reward playtime additively without changing the combat model.
Season lifecycle
Chose
Full world reset every 3–4 months
Rejected
Incremental map expansion with no reset
Resets keep the world fresh, prevent terrain exhaustion, and give every new player an equal start — critical for community health in a small SMP.
What I'd Do Differently
An honest retrospective — the stuff I'd change with more time, more users, or a second pass.
- 1Add a staging compose stack so plugin updates can be tested before touching the live season — one bad update cost several hours of rollback work.
- 2Move backup storage off-site from day one; local-only archives are a single hardware failure away from a full season loss.
- 3Wire Dynmap as a named Docker service rather than relying on the host port, so the Cloudflare Tunnel config survives container IP reassignment on restart.
Technical Deep-Dive
Architecture, specifications, and implementation details.
29 — Jobs System — Profesii cu Progresie pe Nivel
"Jobs Reborn + perks pasive per nivel — mineritul devine o carieră, nu o corvoadă
#Filozofie
Joburile nu înlocuiesc vanilla — le fac mai profunde. Un Miner de nivel 50 simte diferența față de unul de nivel 1: mine mai rapid, primește mai mult, smeltuiește mai repede. Progresia e vizibilă și recompensatoare fără să fie pay-to-win.
Regula de bază: perk-urile sunt bonus, nu obligatorii. Un jucător fără job poate face tot ce face unul cu job — dar mai lent.
#Plugin Stack pentru Jobs
| Plugin | Rol | Cost |
|---|---|---|
| Jobs Reborn | Core — XP, nivele, plată per acțiune | Gratis |
| CMILib | Dependință obligatorie pentru Jobs Reborn | Gratis |
| JobRewards | Recompense custom la fiecare nivel | Gratis |
| LuckPerms | Acordă permisiuni la nivel up (haste, bonusuri) | Gratis |
##Download
Jobs Reborn: spigotmc.org/resources/jobs-reborn.4216
CMILib: zrips.net/cmilib
JobRewards: spigotmc.org (caută JobRewards)
#Joburile disponibile — 8 selectate pentru SMP
| Job | Acțiuni plătite | Temă RO |
|---|---|---|
| Miner | Minerit roci, minereuri | Miner |
| Lumberjack | Tăiat și plantat copaci | Tăietor de lemne |
| Farmer | Recoltat culturi, crescut animale | Fermier |
| Hunter | Omorât mobi, animale | Vânător |
| Fisher | Pescuit | Pescar |
| Builder | Plasat blocuri, construit | Constructor |
| Crafter | Crafted iteme, brewed poțiuni | Meșter |
| Smelter | Topit minereuri, gătit mâncare | Topitor |
"Limită: jucătorul poate avea maxim 2 joburi simultan. Alege-le cu grijă — specializarea creează identitate pe server.
#Sistem de Perks pe Nivel
##🔨 MINER — Perks pe nivel
| Nivel | Perk | Mecanism |
|---|---|---|
| 10 | +10% șansă ore dublu drop | Jobs Reborn bonus |
| 20 | Haste I pasiv (mining mai rapid) | LuckPerms → permisiune efect |
| 30 | +20% income din minereuri | Jobs Reborn multiplier |
| 40 | Haste II pasiv | LuckPerms upgrade |
| 50 | Night Vision pasiv în mine | LuckPerms → CMI effect |
| 75 | +50% drop rate toate minereurile | Jobs Reborn bonus |
| 100 | Haste III + titlu [Maestru Miner] | LuckPerms + prefix |
##🌲 LUMBERJACK — Perks pe nivel
| Nivel | Perk | Mecanism |
|---|---|---|
| 10 | +10% lemn din copaci | Jobs Reborn bonus |
| 20 | Speed I când ții topor în mână | LuckPerms effect |
| 35 | Replant automat după tăiere | Jobs Reborn action |
| 50 | +1 sapling bonus la fiecare copac | Jobs Reborn bonus |
| 75 | Whole-tree chop (taie tot copacul) | LuckPerms permisiune |
| 100 | Titlu [Maestru Tăietor] | LuckPerms prefix |
##🌾 FARMER — Perks pe nivel
| Nivel | Perk | Mecanism |
|---|---|---|
| 10 | +15% recoltă din culturi | Jobs Reborn bonus |
| 20 | Replant automat după recoltare | Jobs Reborn action |
| 35 | +25% șansă semințe bonus | Jobs Reborn bonus |
| 50 | Speed I la fermă | LuckPerms effect |
| 75 | Recoltă instantanee cu Hoe enchanted | LuckPerms permisiune |
| 100 | Titlu [Maestru Fermier] | LuckPerms prefix |
##🏹 HUNTER — Perks pe nivel
| Nivel | Perk | Mecanism |
|---|---|---|
| 10 | +15% drops de la mobi | Jobs Reborn bonus |
| 20 | Strength I la luptă cu mobi | LuckPerms effect |
| 35 | Looting III automat (fără enchant) | LuckPerms permisiune |
| 50 | +30% XP drops de la mobi | Jobs Reborn bonus |
| 75 | Mob heads drop chance 10% | LuckPerms permisiune |
| 100 | Titlu [Maestru Vânător] | LuckPerms prefix |
##🎣 FISHER — Perks pe nivel
| Nivel | Perk | Mecanism |
|---|---|---|
| 10 | +20% treasure din fishing | Jobs Reborn bonus |
| 25 | Luck of the Sea III automat | LuckPerms permisiune |
| 50 | Pești rari drop rate dublu | Jobs Reborn bonus |
| 75 | Treasure chest din fishing 1/20 | Jobs Reborn bonus |
| 100 | Titlu [Maestru Pescar] | LuckPerms prefix |
##🏗 BUILDER — Perks pe nivel
| Nivel | Perk | Mecanism |
|---|---|---|
| 10 | +10% income din blocat plasat | Jobs Reborn bonus |
| 25 | Scaffolding gratuit în inventory | Jobs Reborn kit |
| 50 | /builder fly (zbor limitat în claim) | LuckPerms permisiune |
| 75 | +50% income din build | Jobs Reborn bonus |
| 100 | Titlu [Maestru Constructor] | LuckPerms prefix |
##⚒ CRAFTER — Perks pe nivel
| Nivel | Perk | Mecanism |
|---|---|---|
| 10 | +15% income din crafting | Jobs Reborn bonus |
| 25 | Rețete secrete deblocate | LuckPerms permisiune |
| 50 | Craft în bulk (x4 simultan) | LuckPerms permisiune |
| 75 | +50% income din orice craft | Jobs Reborn bonus |
| 100 | Titlu [Maestru Meșter] | LuckPerms prefix |
##🔥 SMELTER — Perks pe nivel (IDEEA TA!)
| Nivel | Perk | Mecanism |
|---|---|---|
| 10 | Smelting cu 10% mai rapid | Jobs Reborn → furnace speed |
| 20 | +1 output la fiecare 5 iteme smelted | Jobs Reborn bonus |
| 30 | Smelting cu 25% mai rapid | Jobs Reborn upgrade |
| 50 | Auto-smelt în inventar (ore → ingot direct) | LuckPerms permisiune |
| 75 | Smelting cu 50% mai rapid + dublu output | Jobs Reborn bonus |
| 100 | Titlu [Maestru Topitor] + instant smelt | LuckPerms + permisiune |
#Configurare Jobs Reborn
##generalConfig.yml — valori cheie
# Câte joburi poate avea un jucător simultan
max-jobs: 2
# Nivelul maxim per job
max-level: 100
# Pierde XP la leave job?
exp-lost-on-leave: 10 # pierde 10% din XP dacă schimbă jobul
# Income crește cu nivelul — formula
# income = base * (1 + level * 0.02)
# La nivel 50 = base * 2.0 (dublu față de nivel 1)
# Afișare job în chat
display-job-in-chat: true
chat-format: "&8[&a{job}&8] &f{name}&8: &7{message}"
##Miner.yml — exemplu complet
jobName: Miner
shortname: M
description: Minează minereuri și primești coins + XP
ChatColour: GRAY
progressbar:
enable: true
color: GREEN
# Plată per bloc minat
Break:
diamond_ore:
income: 50.0
exp: 20.0
iron_ore:
income: 10.0
exp: 5.0
gold_ore:
income: 20.0
exp: 8.0
coal_ore:
income: 3.0
exp: 2.0
emerald_ore:
income: 80.0
exp: 30.0
ancient_debris:
income: 200.0
exp: 80.0
# Bonus drops per nivel (ideea ta!)
levelBonuses:
10:
income-multiplier: 1.1 # +10% income
20:
income-multiplier: 1.2
cmd-on-levelup:
- "perm user {player} add miner.haste1"
30:
income-multiplier: 1.3
40:
cmd-on-levelup:
- "perm user {player} remove miner.haste1"
- "perm user {player} add miner.haste2"
50:
income-multiplier: 1.5
cmd-on-levelup:
- "perm user {player} add miner.nightvision"
75:
income-multiplier: 1.75
100:
income-multiplier: 2.0
cmd-on-levelup:
- "perm user {player} add miner.haste3"
- "lp user {player} meta setprefix '[Maestru Miner] '"
- "broadcast &6{player} a devenit &lMaestru Miner!"
##Smelter.yml — furnace speed perks
jobName: Smelter
shortname: S
description: Smeltuiești și gătești pentru coins + bonusuri de viteză
Smelt:
iron_ore:
income: 8.0
exp: 4.0
gold_ore:
income: 15.0
exp: 6.0
raw_iron:
income: 8.0
exp: 4.0
# Furnace speed bonuses pe nivel
# Jobs Reborn suportă furnace-speed-multiplier nativ
levelBonuses:
10:
furnace-speed-multiplier: 1.1 # 10% mai rapid
20:
furnace-speed-multiplier: 1.25
output-multiplier: 1.1 # +10% output
30:
furnace-speed-multiplier: 1.5 # 50% mai rapid
50:
furnace-speed-multiplier: 1.75
cmd-on-levelup:
- "perm user {player} add smelter.autosmelt"
75:
furnace-speed-multiplier: 2.0 # dublu de rapid
output-multiplier: 1.5
100:
furnace-speed-multiplier: 3.0 # de 3x mai rapid
output-multiplier: 2.0
cmd-on-levelup:
- "perm user {player} add smelter.instantsmelt"
- "lp user {player} meta setprefix '[Maestru Topitor] '"
- "broadcast &c{player} a devenit &lMaestru Topitor!"
#LuckPerms — Permisiuni per Perk
# Haste efecte (aplicate via CMI sau un plugin de effects)
# Când Jobs acordă permisiunea → pluginul de effects detectează și aplică
# Miner perks
/lp group miner.haste1 → efect Haste I permanent
/lp group miner.haste2 → efect Haste II permanent
/lp group miner.haste3 → efect Haste III permanent
/lp group miner.nightvision → efect Night Vision permanent
# Smelter perks
/lp group smelter.autosmelt → auto-smelt ore în inventar
/lp group smelter.instantsmelt → smelt instant
# Hunter perks
/lp group hunter.looting3 → Looting III bonus automat
/lp group hunter.mobheads → mob head drop enabled
#Titluri la nivel 100 — toate joburile
| Job | Titlu | Culoare |
|---|---|---|
| Miner | [Maestru Miner] | &8 (gri închis) |
| Lumberjack | [Maestru Tăietor] | &2 (verde) |
| Farmer | [Maestru Fermier] | &a (verde deschis) |
| Hunter | [Maestru Vânător] | &4 (roșu) |
| Fisher | [Maestru Pescar] | &b (aqua) |
| Builder | [Maestru Constructor] | &6 (auriu) |
| Crafter | [Maestru Meșter] | &5 (mov) |
| Smelter | [Maestru Topitor] | &c (roșu deschis) |
"La nivel 100, jucătorul primește titlul în chat + broadcast server + 500 coins bonus
#Integrare cu economia
# Venituri echilibrate — nu strică economia
# Formula: income crește gradual, nu exponențial
# Nivel 1: iron_ore = 10 coins
# Nivel 50: iron_ore = 10 * 1.5 = 15 coins
# Nivel 100:iron_ore = 10 * 2.0 = 20 coins
# Jucătorul activ câștigă ~200-500 coins/oră la nivel mediu
# La nivel 100: ~400-800 coins/oră
# Nu depășește quest rewards — echilibru menținut
#Comenzi utile
# Jucători
/jobs join Miner # Alătură-te jobului
/jobs leave Miner # Părăsești jobul
/jobs info Miner # Info + perks pe nivel
/jobs stats # Statisticile tale
/jobs top Miner # Leaderboard job
# Admin
/jobs admin give Miner exp 1000 NumeJucator # XP manual
/jobs admin set Miner level 50 NumeJucator # Setează nivel
/jobs admin reload # Reload config
#Comenzi de setup LuckPerms pentru perks
# Rulat automat de Jobs la level-up via cmd-on-levelup
# Sau manual de Admin:
# Acordă Haste I unui miner de nivel 20+
/lp user NumeJucator permission set miner.haste1 true
# Acordă titlu Maestru
/lp user NumeJucator meta setprefix "[Maestru Miner] "
# Verifică permisiunile unui jucător
/lp user NumeJucator permission check miner.haste2
#Prioritizare setup
1. Instalezi: Jobs Reborn + CMILib
2. Configurezi generalConfig.yml (max-jobs=2, max-level=100)
3. Configurezi câte un .yml per job cu levelBonuses
4. Testezi: creezi un jucător test, dai XP manual, verifici că primește perk-ul
5. Adaugi JobRewards pentru recompense vizuale la level-up
6. Integrezi cu LeaderBoards (Plan Analytics afișează top jobs)
#Related Documents
- Economy (income echilibrat) →
03_economy_design.md - LuckPerms (permisiuni) →
11_permissions_staff.md - AureliumSkills (skills separate de jobs) →
05_skills_progression.md - Leaderboards →
20_plan_analytics.md