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, questing, bounties, NPC dialogue, 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 around 200 default achievements across combat, gathering, crafting, leveling, quests, and misc categories (each split into subcategories) plus five point milestones.

Achievements can also ship in a content pack, and can be feature-gated so they only appear when a system like mastery is enabled.

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

Any objective trigger can drive an achievement. Post-1.2.0 additions include TALK_TO_NPC, ABILITY_CAST, GAIN_XP, CONSUME_ITEM, SPEND_CURRENCY, REACH_LOCATION, COMPLETE_BOUNTY, and BOUNTY_STREAK.

TriggerFires onQualifier
BREAK_BLOCKBreak blocks-
PLACE_BLOCKPlace blocks-
CRAFT_ITEMCraft items-
KILL_ENTITYKill entities-
DEAL_DAMAGEDeal damage-
PICKUP_ITEMPick up items-
REACH_LEVELReach a skill level-
TALK_TO_NPCTalk to an NPC-
CATCH_FISHCatch fish-
TURN_INTurn in / deliver items-
COMPLETE_QUESTComplete quests-
TAKE_FALL_DAMAGETake fall damage-
PLAYER_DEATHDie-
GAIN_XPGain XP-
SPRINT_DISTANCESprint a distance-
SWIM_DISTANCESwim a distance-
ABILITY_CASTCast abilities-
EARN_CURRENCYEarn currency-
BREED_ANIMALBreed animals-
FEED_ANIMALFeed animals-
HARVEST_ANIMALHarvest from animals-
COMPANION_COMBATFight with a companion-
COMPLETE_BOUNTYComplete bountiesBoard id (target) and difficulty
BOUNTY_STREAKReach a bounty streak-
REACH_LOCATIONReach a location-
CONSUME_ITEMConsume items-
SPEND_CURRENCYSpend currency-

The matchMode field controls how target is matched: EXACT, CONTAINS, or PREFIX.

KILL_ENTITY / DEAL_DAMAGE qualifiers are currently inert

Both triggers accept a qualifier field in their schema, but the built-in Elite Mobs system that used to populate it was removed in 1.5.0 (see Elite Mobs). A criterion authored with a tier qualifier today (e.g. "Legendary") can never match - the field is reserved for a future rarity qualifier from the optional MMO Mob Scaling companion mod. Leave qualifier unset on these two triggers until that integration ships.

Rewards

Achievements use the same reward structure as quests. Each reward has a type and type-specific fields:

  • XP - skill, amount
  • BOOST_TOKEN - skill, multiplier, durationMinutes
  • CURRENCY - amount
  • COMMAND - command, runAs (CONSOLE or PLAYER), delayTicks
  • ABILITY_MOD - modId (grants a standalone ability improvement, the same reward kind quests use)

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": 500,   "displayName": "Bronze Achiever",   "rewards": [ ... ] },
    { "threshold": 3000,  "displayName": "Silver Achiever",   "rewards": [ ... ] },
    { "threshold": 7500,  "displayName": "Gold Achiever",     "rewards": [ ... ] },
    { "threshold": 14000, "displayName": "Platinum Achiever", "rewards": [ ... ] },
    { "threshold": 24000, "displayName": "Diamond Achiever",  "rewards": [ ... ] }
  ]
}

Default milestones hand out a Defense XP token at 500, escalating to a 3x All Skills boost at 24000.

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.

KeyWhat it counts
mob_killsTotal mob kills (plus per-mob breakdown)
blocks_brokenTotal blocks broken (plus per-block breakdown)
blocks_placedTotal blocks placed (plus per-block breakdown)
items_craftedTotal items crafted (plus per-item breakdown)
items_pickedupTotal items picked up (plus per-item breakdown)
damage_dealtTotal damage dealt to mobs and players
damage_takenTotal damage taken
deathsPlayer deaths
fish_caughtFish caught (with HyFishing)
xp_earnedTotal skill XP earned (plus per-skill breakdown)
playtime_secondsTime 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/ and backups/) - 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.

CommandEffect
/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=reloadReload 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.