Built a custom profession plugin for Paper 1.21 from scratch WoW-style skill system, cooking + alchemy, droppable recipe scrolls. Here's how it works technically.
Hey r/admincraft,
I've been building a custom MMORPG server and couldn't find a profession plugin that did what I needed, so I wrote one from scratch in Java for Paper 1.21. Sharing the technical breakdown in case it's useful or anyone has feedback on the approach.
The skill system
Instead of XP levels I went with a WoW-style flat skill cap (0–350). Skill gain is probabilistic based on recipe tier vs current skill:
- Orange (100% gain chance) recipe is challenging at your skill level
- Yellow (50%) moderate challenge
- Green (20%) nearly mastered
- Grey (0%) trivial, no gain
Tier I is orange from 0–75, yellow 76–110, green 111–125, grey after that. Each tier has its own range. At skill milestones (125, 225, 285, 350) ingredient requirements for lower tiers get halved.
Cooking: 7 food lines, 4 tiers each
Crafted at a campfire: sneak + right-click with a bowl in offhand. Lines: Meat, Potato, Fish, Carrot, Wheat, Blaze, Honey. Each line has T1–T3 craftable recipes and a T4 locked behind a droppable recipe scroll. All items are PDC-tagged so they work with Auction House plugins.
Alchemy: 7 schools, Elixirs vs Flasks
Crafted at a brewing stand: sneak + right-click with a glass bottle in offhand. Schools: Blood, Frost, Void, Stone, Ember, Arcane, Life.
Two item types:
- Elixirs: 30s to 2min combat bursts, usually with a tradeoff (e.g. Strength IV but also Wither III, or +20 attack damage but health drops to near 1 HP)
- Flasks: stable 30min buffs, no drawbacks, higher ingredient cost
Special effects on some elixirs use the Attribute API directly: SCALE for size changes, STEP_HEIGHT for walking up walls, KNOCKBACK_RESISTANCE, ATTACK_KNOCKBACK, FALL_DAMAGE_MULTIPLIER. Arcane school has things like 300% size + full knockback immunity, or a random buff/debuff on a BukkitRunnable every 5 seconds.
T4 droppable recipe scrolls
MythicMobs hook via EntityDeathEvent checks entity name or scoreboard tags against a config map. On a configurable drop chance, adds a PDC-tagged scroll to the drops. Right-clicking the scroll at skill 280+ consumes it and permanently unlocks that recipe for the player, saved to per-player YAML data. Scrolls can also be sold on AH since they're just PDC-tagged items.
GUI
54-slot inventory with two tabs (Cooking / Alchemy). Each tab uses a row-per-school layout col 0 is the school label, cols 1–4 are T1–T4 recipes showing skill color coding, locked/unlocked status, effective ingredient counts after halving, and estimated skill gap to unlock.
Happy to share more on any part of the implementation :>
The attribute modifier cleanup on timer expiry was probably the trickiest part to get right.
Anyone else built custom profession systems?
Curious how others handled the GUI tab switching without title comparison being unreliable across Paper builds.