Achievements
Points, meta-chains, server-first claims, and lifetime statistics
Overview
Achievements reward players for long-running play patterns — first kill of a monster type, a thousand mined blocks, reaching level 100, or claiming a server-first bragging right. The system tracks progress automatically from combat, gathering, crafting, and level events, awards points on completion, and can trigger skill XP, boosts, currency, or console commands as rewards.
Players open the Achievements page with /mmoachievements (aliases: /mmoach, /achievements). The plugin ships with 22 default achievements across six categories plus four point milestones.
The Achievements UI
The page uses the standard three-column menu layout. The left nav mirrors the other menu pages; the middle panel shows the achievement list filtered by category and subcategory; the side panel shows your current points, milestone progress, and a summary of your lifetime statistics.
- Categories & subcategories tab along the top of the list
- Search and sort controls to narrow down the list
- Pinning — up to 5 achievements (
MAX_PINNED = 5) can be pinned. Pinned achievements appear in the side panel for quick progress checking - Progress bars for single- and multi-criteria achievements; multi-criteria show one bar per criterion
Achievement Types
Single-criterion
A trigger type, a target, and a required amount. Progress ticks up each time the trigger fires with a matching target.
{
"id": "trork_slayer",
"displayName": "Trork Slayer",
"description": "Defeat 50 Trorks",
"triggerType": "KILL_ENTITY",
"target": "Trork",
"matchMode": "CONTAINS",
"requiredAmount": 50,
"category": "combat",
"subcategory": "melee",
"points": 10,
"rewards": [
{ "type": "XP", "skill": "DEFENSE", "amount": 500 }
]
}Multi-criteria
Use criteria instead of top-level trigger fields. Every criterion must individually hit its required amount before the achievement unlocks. Each criterion can have its own displayText.
{
"id": "well_rounded_hunter",
"displayName": "Well-Rounded Hunter",
"category": "combat",
"subcategory": "melee",
"points": 25,
"criteria": [
{ "triggerType": "KILL_ENTITY", "target": "Skeleton", "requiredAmount": 50, "displayText": "50 Skeletons" },
{ "triggerType": "KILL_ENTITY", "target": "Trork", "requiredAmount": 50, "displayText": "50 Trorks" },
{ "triggerType": "KILL_ENTITY", "target": "Wraith", "requiredAmount": 50, "displayText": "50 Wraiths" }
]
}Progress keys use the composite format "<id>#<criterionIndex>" internally — you don't write these by hand, but it's visible in /mmoconfig achievement progress.
Meta
A meta-achievement unlocks when all its listed children are unlocked. Use it to gate mastery-style accolades behind a group of smaller achievements.
{
"id": "combat_master",
"displayName": "Combat Master",
"description": "Complete 5 combat achievements",
"metaChildren": ["first_blood", "trork_slayer", "skeleton_hunter", "wraith_bane", "goblin_cleaver"],
"category": "combat",
"points": 150,
"rewards": [
{ "type": "BOOST_TOKEN", "skill": "SWORDS", "multiplier": 2.5, "durationMinutes": 30 }
]
}Meta completions cascade — unlocking the last child triggers the meta unlock automatically.
Server-First
Set "serverFirst": true to lock the achievement to the first player on the server who clears it. The claim is recorded in mods/mmoskilltree/achievements/server-first-claims.json and all other players see the achievement as locked once someone has claimed it.
Feat of Strength
Set "featOfStrength": true to exclude the achievement from point totals and milestone tracking. Useful for retired event rewards or admin-granted commemorative unlocks. Feats appear in their own filter on the UI.
Trigger Types
| Trigger | Fires on | Qualifier |
|---|---|---|
KILL_ENTITY | Defeating a mob | Elite tier name (Rare, Elite, Legendary) — see Elite Mobs |
DEAL_DAMAGE | Dealing damage (counts damage amount) | Elite tier, weapon class |
BREAK_BLOCK | Breaking a block | — |
PLACE_BLOCK | Placing a block | — |
CRAFT_ITEM | Crafting an item | — |
PICKUP_ITEM | Picking up an item | — |
CATCH_FISH | Catching a fish (with HyFishing installed) | — |
REACH_LEVEL | Reaching a skill level | — |
The matchMode field controls how target is matched: EXACT, CONTAINS, or PREFIX.
Rewards
Achievements use the same reward structure as quests. Each reward has a type and type-specific fields:
XP—skill,amountBOOST_TOKEN—skill,multiplier,durationMinutesCURRENCY—amountCOMMAND—command,runAs(CONSOLEorPLAYER),delayTicks
An optional announcementCommand runs when the achievement unlocks — typically used to broadcast a title card to all players via an event-title command.
Points & Milestones
Each non-Feat achievement is worth its points value. Cumulative points trigger milestone rewards defined in mods/mmoskilltree/achievements/point-milestones.json.
{
"schemaVersion": 1,
"milestones": [
{ "threshold": 100, "displayName": "Bronze Achiever", "rewards": [ ... ] },
{ "threshold": 500, "displayName": "Silver Achiever", "rewards": [ ... ] },
{ "threshold": 1500, "displayName": "Gold Achiever", "rewards": [ ... ] },
{ "threshold": 5000, "displayName": "Platinum Achiever", "rewards": [ ... ] }
]
}Default milestones hand out Defense XP shards at 100, escalating to a 3x All Skills boost at 5000.
Statistics
Alongside achievements, the plugin maintains per-player lifetime statistics. The counters update inline on the world thread as events fire, and show on the Achievements side panel with top-3 breakdowns per category.
| Key | What it counts |
|---|---|
mob_kills | Total mob kills (plus per-mob breakdown) |
blocks_broken | Total blocks broken (plus per-block breakdown) |
blocks_placed | Total blocks placed (plus per-block breakdown) |
items_crafted | Total items crafted (plus per-item breakdown) |
items_pickedup | Total items picked up (plus per-item breakdown) |
damage_dealt | Total damage dealt to mobs and players |
damage_taken | Total damage taken |
deaths | Player deaths |
fish_caught | Fish caught (with HyFishing) |
xp_earned | Total skill XP earned (plus per-skill breakdown) |
playtime_seconds | Time online |
File Layout
Achievement configs live under mods/mmoskilltree/achievements/:
_defaults/— auto-regenerated reference files. Never edit; changes are overwritten on startup.*.json(any file outside_defaults/andbackups/) — your achievement definitions. Loaded recursively.point-milestones.json— point milestone overrides.server-first-claims.json— auto-managed; records who claimed each server-first.
If you have any achievement JSON outside _defaults/, the defaults stop loading — your files are the whole set. Copy _defaults/default-achievements.json out if you want to extend the shipped set rather than replace it.
Admin Commands
All achievement admin subcommands run under /mmoconfig achievement. The | delimiter separates fields inside --args.
| Command | Effect |
|---|---|
/mmoconfig achievement --args=award|<player>|<id> | Grant an achievement. Add --force to override a server-first lock. |
/mmoconfig achievement --args=revoke|<player>|<id> | Remove an achievement and its progress; cascades to parent metas. |
/mmoconfig achievement --args=reset|<player>|<id|all> | Clear one achievement or all achievements for a player. |
/mmoconfig achievement --args=progress|<player>|<id>|<amount>[|<criterionIndex>] | Set progress on a criterion (default index 0). |
/mmoconfig achievement --args=reload | Reload achievement config from disk; re-hydrate online players. |
/mmoconfig achievement --args=list|[category|all] | List achievements (40 per page). Flags: [meta], [server-first], [feat], [disabled]. |
/mmoconfig achievement --args=pin|<player>|<id> | Pin an achievement for a player (max 5). |
/mmoconfig achievement --args=unpin|<player>|<id> | Remove a pinned achievement. |
The admin dashboard also has an Achievements panel that wraps these operations in a UI.