Skill Tree Configuration
Customize reward tiers, choices, and combat targeting
Overview
The skill tree config defines the reward tiers players progress through as they level each skill. Each tier has a level requirement, a set of reward choices, and a number of picks the player must make. See the Skill Trees page for the player-facing experience and the Reward Types page for details on each reward type.
The config file mods/mmoskilltree/skill-tree.json uses an override-based system - your customizations are stored separately from defaults and preserved across mod updates.
A server-owner surface
Skill-tree tiers cannot be shipped by a content pack at all - there is no pack asset type for them, and every override lives in skill-tree.json alone. A pack extends progression a different way: through masteries, quests, abilities and bonus drops, each delivered the ordinary way, a folder you zip and drop into Mods/. See Building the zip.
File Structure
{
"schemaVersion": 1,
"overrides": {
"MINING": {
"0": {
"tier": 0,
"levelRequired": 5,
"choicesRequired": 1,
"choices": [
{
"id": "mining_luck_1",
"type": "LUCK",
"value": 5.0,
"displayName": "Lucky Strikes I",
"description": "5% bonus resource chance"
},
{
"id": "mining_stamina_1",
"type": "STAT_STAMINA",
"value": 10.0,
"displayName": "Endurance I",
"description": "+10 max stamina"
}
]
}
}
}
}Each skill has up to 10 tiers (numbered 0-9). Only include tiers you want to customize; missing tiers use defaults automatically.
Default Tiers
Every skill uses the same tier progression by default. The Tier column below is the zero-based JSON key you write in overrides - the same numbering the file structure example above uses (its "0" is the first row here):
| Tier | Level Required | Choices Offered | Picks Required |
|---|---|---|---|
| 0 | 5 | 2 | 1 |
| 1 | 10 | 2 | 1 |
| 2 | 15 | 3 | 1 |
| 3 | 20 | 3 | 1 |
| 4 | 30 | 4 | 2 |
| 5 | 40 | 4 | 2 |
| 6 | 50 | 5 | 2 |
| 7 | 65 | 5 | 2 |
| 8 | 80 | 5 | 3 |
| 9 | 100 | 6 | 3 |
Higher tiers offer more choices and require more picks, creating meaningful build decisions at endgame levels.
Node Fields
Each tier node has the following fields:
| Field | Type | Default | Description |
|---|---|---|---|
tier | int | optional | Tier index (0-9) |
levelRequired | int | optional | Minimum skill level to unlock this tier |
choicesRequired | int | optional | Number of rewards the player must pick from this tier |
choices | array | optional | List of reward options available at this tier |
Reward Fields
Each entry in the choices array has these fields:
| Field | Type | Default | Description |
|---|---|---|---|
id* | - | - | Unique identifier for this reward (e.g., mining_luck_1) |
type* | - | - | Reward type (see table below) |
value* | - | - | Magnitude of the effect (percentage or flat amount depending on type) |
nameKey | - | optional | Localization key for the name shown in the skill tree UI. Preferred over displayName |
descriptionKey | - | optional | Localization key for the description shown in the skill tree UI. Preferred over description |
displayName | - | optional | Untranslated fallback name, read only when nameKey is not set |
description | - | optional | Untranslated fallback description, read only when descriptionKey is not set |
combatTarget | - | optional | Restricts combat rewards to specific weapon types (default: ALL) |
Prefer nameKey/descriptionKey over the raw literals for anything a player sees: content display text is meant to be localized rather than hardcoded. See Localization.
Reward Types
Common type values, with their value format. See Reward Types for the full set of 31 reward types, detailed stacking behavior, and per-skill breakdowns.
| Type | Value Format | Effect |
|---|---|---|
STAT_HEALTH | Flat amount | Increases maximum health |
STAT_DAMAGE | Percentage | Increases damage dealt |
STAT_DEFENSE | Percentage | Reduces damage taken (default ceiling 90%, retunable per server via the DefenseReduction entry in ability-clamps.json) |
STAT_SPEED | Percentage | Increases movement speed |
STAT_STAMINA | Flat amount | Increases maximum stamina |
STAT_MANA | Flat amount | Increases maximum mana |
LUCK | Percentage | Chance to receive bonus resources |
BONUS_XP | Percentage | Increases XP gained from this skill |
CRITICAL_CHANCE | Percentage | Chance to deal critical damage |
LIFESTEAL | Percentage | Restore health when dealing damage |
KNOCKBACK_RESISTANCE | Percentage | Reduces knockback received |
HASTE | Percentage | Increases gathering speed |
FORTUNE | Percentage | Chance for bonus item drops |
VEIN_MINER | Block count | Break connected blocks of the same type |
FALL_DAMAGE_REDUCTION | Percentage | Reduces fall damage taken |
EFFECT_DURATION | Percentage | Entity effects last longer |
COOLDOWN_REDUCTION | Percentage | Reduces ability cooldowns |
SCHOOL_RESIST | Fraction | Permanent resistance to one damage school; stacks across claimed nodes, survives relog/world-hop, removed on respec/full reset |
ABILITY_UNLOCK | Ability id (as id, not value) | Grants an active ability for use via /mmoability; the reward's own id field names the ability, and value is unused |
This table covers the common cases. Several reward types read further leaves this page does not repeat - abilityIdFilter and the selfHpRangeMin/selfHpRangeMax/targetHpRangeMin/targetHpRangeMax HP-range gates among them. See Reward Types for the full field set.
SCHOOL_RESIST value is a fraction, not a whole percent
value (e.g. LUCK at value: 5.0 = 5%, HASTE at value: 5.0 = 5% faster). SCHOOL_RESIST breaks that convention: its value is a native fraction, so 0.05 = 5% resistance. Copying the percentage-reward pattern for a SCHOOL_RESIST node is off by 100x.Combat Targeting
Combat rewards (STAT_DAMAGE, CRITICAL_CHANCE, LIFESTEAL) can be restricted to specific weapon types using the combatTarget field. This lets you create weapon-specific bonuses like "Swords deal +10% damage" instead of a global damage boost.
SCHOOL_RESIST uses the same combatTarget field for a different purpose: instead of a weapon type, it takes one of the 9 damage school names (Fire, Ice, Lightning, Water, Arcane, Void, Poison, Life, Physical; case-insensitive) - the field's meaning flips from "weapon type" to "damage school" for this one reward type. Physical is worth knowing about: it is the school of every plain weapon strike and of any hit that names no school at all, so resistance to it is the broadest node of the set.
| Value | Applies To |
|---|---|
ALL | All combat skills (default) |
MELEE | Swords, Daggers, Polearms, Staves, Axes, Blunt, Unarmed |
RANGED | Archery |
MAGIC | Wands, Spellbooks |
ARTILLERY | Bombs, Guns |
SWORDS | Swords skill only |
DAGGERS | Daggers skill only |
POLEARMS | Polearms skill only |
STAVES | Staves skill only |
AXES | Axes skill only |
BLUNT | Blunt skill only |
ARCHERY | Archery skill only |
UNARMED | Unarmed skill only |
If combatTarget is omitted, the reward defaults to ALL and applies to every combat skill.
Override Semantics
- Missing tiers use defaults automatically - only include tiers you want to change
- Missing skills use defaults - only include skills you want to customize
- Overriding a tier replaces the entire tier (all choices must be specified)
- New defaults added in mod updates propagate without losing your customizations
- Reference file at
mods/mmoskilltree/_reference/defaults-skill-tree.jsonshows all defaults
Admin Editor
The "Edit Skill Tree" button in /mmoadmin provides a visual editor for skill tree configuration. You can browse tiers per skill, modify reward choices, adjust level requirements, and change picks required - all without editing JSON files directly.

Disabling Tiers & Reset
Disable a Tier
Set a tier's choices to an empty array to disable it:
"overrides": {
"MINING": {
"9": {
"tier": 9,
"levelRequired": 100,
"choicesRequired": 0,
"choices": []
}
}
}Players will skip that tier entirely.
Skill Tree Reset
Players can respec their skill tree choices via the reset button in the /skilltree UI. To disable this, toggle "Allow Skill Tree Reset" in /mmoadmin General Settings, or set "allowSkillTreeReset": false in skill-config.json.
Commands
# Reload all configs (including skill tree)
/mmoconfig reload
# Reset all configs to defaults
/mmoconfig reloaddefaults
# Reset a player's skill tree choices (lets them re-pick)
/mmoconfig resetrewards --args=PlayerNameExamples
Custom Tier Override
Make Mining tier 1 (level 10) offer 3 choices instead of 2:
"overrides": {
"MINING": {
"1": {
"tier": 1,
"levelRequired": 10,
"choicesRequired": 1,
"choices": [
{
"id": "mining_luck_2",
"type": "LUCK",
"value": 8.0,
"nameKey": "skilltree.mining.lucky_strikes_2.name",
"descriptionKey": "skilltree.mining.lucky_strikes_2.desc"
},
{
"id": "mining_stamina_2",
"type": "STAT_STAMINA",
"value": 15.0,
"nameKey": "skilltree.mining.endurance_2.name",
"descriptionKey": "skilltree.mining.endurance_2.desc"
},
{
"id": "mining_haste_1",
"type": "HASTE",
"value": 5.0,
"nameKey": "skilltree.mining.quick_hands_1.name",
"descriptionKey": "skilltree.mining.quick_hands_1.desc"
}
]
}
}
}Adding Combat Targeting
Make a Swords damage reward that only applies to swords:
{
"id": "swords_damage_melee",
"type": "STAT_DAMAGE",
"value": 10.0,
"nameKey": "skilltree.swords.blade_mastery.name",
"descriptionKey": "skilltree.swords.blade_mastery.desc",
"combatTarget": "SWORDS"
}Changing Picks Required
Require 3 picks at tier 5 (level 30) for Woodcutting:
"overrides": {
"WOODCUTTING": {
"4": {
"tier": 4,
"levelRequired": 30,
"choicesRequired": 3,
"choices": [
// ... your 4+ choices here
]
}
}
}