Power Level
A single scalar summarizing a player's overall progress
Overview
Power Level Since 1.5.0 folds combat level, claimed skill-tree stat rewards, unlocked abilities, ability mastery, and claimed achievements into a single clamped scalar per player. The mod computes and caches it; Power Level changes nothing visible by itself.
Power Level exists for a consumer, not for its own sake
mods/mmoskilltree/power-level.jsonServer/MMOSkillTree/PowerLevel/*.jsonThe jar ships Server/MMOSkillTree/PowerLevel/Default.json as the base tuning. A pack can overlay a partial body; the owner file always wins. Every leaf folds independently - a partial file changes only the keys it mentions.
Modes
Power Level is computed under one of three named weight presets. DefaultMode in power-level.json (or a pack's PowerLevel asset) picks which one is active server-wide.
| Mode | Weighting |
|---|---|
COMBAT_ONLY | Weighs combat level and combat-relevant pillars heavily; ignores Achievements |
BALANCED (default) | Combat and stat rewards dominate, with smaller contributions from abilities, mastery, and achievements |
COMPLETIONIST | Spreads weight more evenly, giving achievements and mastery more relative influence |
Pillars
Each pillar contributes provider.contribution(...) * weight(activeMode, pillarId) to the total, which is then clamped. Six pillars are built in; a sibling mod can register additional pillars, which become first-class weight targets in Modes automatically.
| Field | Type | Default | Description |
|---|---|---|---|
Combat | object { Factor } | 1.5 | Scales the player's combat level (the max level across combat skills). |
StatRewards | object { Factors: map } | optional | A generic per-{stat key} factor map (e.g. STAT_HEALTH, DAMAGE_PCT, FLAT_DAMAGE) summing every claimed skill-tree + mastery stat reward. A stat with a gameplay ceiling (defense, crit chance, fall reduction) counts only up to that ceiling, so a pick past the cap earns no power, and STAT_HEALTH ships at 0 because the MaxHealth pillar scores health. Adding a new surfaced stat is a JSON line, not a codec change. |
MaxHealth | object { BaseHealth, Factor } | 100 / 9.0 | Contributes ((maxHealth - BaseHealth) / BaseHealth) * Factor: only health above BaseHealth counts, so a fresh 100-health character earns nothing from it. Health from classes, gear and potions counts too. |
Abilities | object { Factor } | 3.0 | Scales unlocked active abilities. |
Mastery | object { Factor } | 4.5 | Scales claimed ability mastery nodes. |
Achievements | object { Factor } | 3.0 | Scales claimed achievement points. |
Clamp
| Field | Type | Default | Description |
|---|---|---|---|
MinPower | double | 1.0 | Floor of the scale; also the no-skill-data fallback returned by the API. |
MaxPower | double | 200.0 | Ceiling of the scale. |
BaseOffset | double | 0.0 | A flat offset added before clamping. |
The final value is clamp(pillarPower + BaseOffset, MinPower, MaxPower). A consumer mod that maps Power Level onto its own difficulty scale should read the live bounds from MMOSkillTreeAPI.getPowerLevelMin()/getPowerLevelMax() instead of hardcoding 1/200, so the two scales cannot silently drift apart when either config is retuned.
Current Tuning (1.7.0+)
Power was retuned in 1.7.0
power-level.json that re-authors a factor keeps working, but it was tuned against the old sums, so look at it again, and at any mob scaling you tuned by hand.| Build | Power Level (BALANCED) |
|---|---|
| A fresh character | 1 |
| Three skills at level 100 (a specialist) | about 86 to 92 |
| Every skill around level 50 | about 90 to 100 |
| Every skill at level 100, every tree taken | 200 (clamp ceiling) |
Example Owner Override
A partial power-level.json only needs the keys you want to change - every other leaf inherits from the jar default (or a pack overlay under it):
{
"SchemaVersion": 2,
"DefaultMode": "COMPLETIONIST",
"Clamp": { "MaxPower": 250.0 },
"Pillars": {
"Achievements": { "Factor": 4.0 }
}
}This raises the ceiling to 250, switches the server default to COMPLETIONIST weighting, and bumps the Achievements factor - every other pillar and mode weight stays at the jar/pack default.
Pack Authoring
A content pack can ship its own Server/MMOSkillTree/PowerLevel/*.json asset using the same nested Clamp/Pillars/Modes schema as the jar default. Precedence resolves
power-level.json always wins over both. A pack is a folder you zip and drop into Mods/ - see Building the zip.API
For mod developers: a sibling mod reaches a player's power only through MMOSkillTreeAPI - never MMO Skill Tree's internals directly.
| Field | Type | Default | Description |
|---|---|---|---|
getPowerLevel(store, ref) | double | optional | The player's current Power Level, cached and recomputed only after a pillar-input mutation or a config reload. |
getPowerLevelMin() | double | optional | The configured clamp minimum. |
getPowerLevelMax() | double | optional | The configured clamp maximum. |
getCombatLevel(store, ref) | int | optional | The cheap combat sub-input alone (max level across combat skills); returns 0 for a player with no skill data. |
statRewardSum(store, ref, statKey) | double | optional | The sum of a player's skill-tree + mastery stat-reward contributions for one stat key; 0.0 for an unrecognized key. |
Consumers
MMO Mob Scaling
Optional companion mod that scales mob difficulty using a player's Power Level and can cast abilities on non-player mobs through the same ability catalog. Replaces the removed built-in Elite Mobs system. Own CurseForge listing, own version numbers - it is not bundled with MMO Skill Tree or any of its content packs.