Skip to content

banner-stats

Master stat reference

Status: Working — stat registry, lore rendering, and aggregation from gear/accessories/status effects all active. speed, ferocity, and swing_range wired. /stats [player] opens a 54-slot inventory GUI (rpg-core 1.7.0+): gear column shows equipped items, centre shows stat categories with full lore breakdowns, Trade button visible when viewing another player. magic_find is defined but loot-roll integration is pending audit.

Every stat in the framework. Built-in stats are part of rpg-api's BuiltinStat enum so any addon can reference them. Custom stats can be registered at runtime via StatRegistry.register(new CustomStat(...)).

Stats marked percent display with a % suffix and behave as percentage values (e.g., CRIT_CHANCE: 25 = 25%).

Stats whose owning addon isn't loaded are hidden from menus via per-stat config flags.


⚠ Stat IDs ≠ display names

The ID column is what you write in YAML. The Display column is what players see in item lore. They are often different — use the wrong one and the loader silently drops the stat with a console warning, leaving the player's sheet unchanged.

The two most common mistakes:

❌ Wrong (display name) ✅ Correct (stat ID)
health: 50 max_health: 50
mana: 50 max_mana: 50

How to check: run /rpg item give <id> after reload and watch the console. A line like "item 'X' references unknown stat 'mana'" means the stat ID is wrong.



Combat

ID Display Percent Description
damage Damage no Base weapon damage
strength Strength no % bonus to melee damage
crit_chance Crit Chance yes Chance per hit to crit (caps at 100)
crit_damage Crit Damage yes Crit multiplier
ability_damage Ability Damage no % bonus to ability damage (separate channel from strength)
attack_speed Attack Speed yes Reduces melee swing cooldown
ferocity Ferocity yes % chance per hit for an extra strike (can roll multiple). Each 100 ferocity = 1 guaranteed extra hit; remainder = fractional chance. Extra hits deal the same final damage. Melee only.
lifesteal Lifesteal yes % of dealt damage healed
knockback Knockback no Extra knockback distance applied to hit targets on melee attack
ammo_usage_reduction Ammo Saver yes % chance per shot to not consume ammo from the inventory
projectile_speed Projectile Speed no Multiplier on initial arrow/projectile velocity (e.g. 1.2 = 20% faster)

Survival

ID Display Percent Description
max_health Health no Max HP
health_regen Health Regen no HP/sec out of combat
vitality Vitality yes Reduces in-combat tag duration (caps at 50%)
defense Defense no Reduces non-true damage
true_defense True Defense no Reduces true damage

Caster

ID Display Percent Description
max_mana Mana no Max mana
mana_regen Mana Regen no Mana/sec
intelligence Intelligence no Scales max_mana and ability_damage (configurable scaling)
cooldown_reduction Cooldown Reduction yes % off ability cooldowns (does not bypass hard-floor cooldowns)

Mobility

ID Display Percent Description
speed Speed no Walk speed. Formula: 0.1 × (1 + speed × speedPerPoint / 100) where speedPerPoint defaults to 1.0 (config: stats.speed-per-point). speed: 12 → 12% faster.
swing_range Swing Range no Melee reach in blocks added to the vanilla 3.0 default. Formula: 3.0 + swingRange × blocksPerPoint (config: stats.swing-range-per-point, default 1.0). swing_range: 2 → 5.0 block reach.

Loot

ID Display Percent Description
magic_find Magic Find yes Multiplies rare-loot chance on flagged drops
auto_loot Auto Loot no When > 0, item drops from broken blocks and slain mobs go directly into the player's inventory instead of spawning as entities (used internally by the Telekinesis enchant in rpg-enchanting)

Breaking & gathering — universal

ID Display Percent Description
breaking_power Breaking Power no Gates which custom blocks you can break (vs the block's RequiredPower)

Mining

ID Display Percent Description
mining_speed Mining Speed no HP/second removed from a mineable block's Toughness
mining_fortune Mining Fortune yes Extra rolls / multiplied drops on ores

Foraging

ID Display Percent Description
foraging_speed Foraging Speed no HP/second on choppable blocks
foraging_fortune Foraging Fortune yes Extra log drops

Farming

ID Display Percent Description
farming_fortune Farming Fortune yes Extra crop drops (no farming-speed stat — by design)

Fishing

ID Display Percent Description
fishing_speed Fishing Speed no Time-to-bite multiplier
fishing_fortune Fishing Fortune yes Extra fish / catch quality
sea_creature_chance Sea Creature Chance yes % chance a catch becomes a sea-creature mob

Wisdom (per-skill XP bonuses)

ID Display Percent Description
combat_wisdom Combat Wisdom yes % bonus combat XP
mining_wisdom Mining Wisdom yes % bonus mining XP
foraging_wisdom Foraging Wisdom yes % bonus foraging XP
farming_wisdom Farming Wisdom yes % bonus farming XP
fishing_wisdom Fishing Wisdom yes % bonus fishing XP
cooking_wisdom Cooking Wisdom yes % bonus cooking XP
alchemy_wisdom Alchemy Wisdom yes % bonus alchemy XP
enchanting_wisdom Enchanting Wisdom yes % bonus enchanting XP

Damage formulas

These are the actual formulas used by DamageMath.java. The config YAML can override them — these are the v1 defaults.

Melee damage

after_strength  = base × (1 + strength / 100)
defense_factor  = 1 − defense / (defense + 100)
final           = after_strength × defense_factor

on crit:  final × (1 + crit_damage / 100)

base = weapon's damage stat. defense and true_defense are the victim's stats (true damage uses true_defense instead of defense).

Defense — worked examples

Defense Damage reduction 100 base → dealt
0 0% 100
50 33% 67
100 50% 50
200 67% 33
300 75% 25
500 83% 17

Diminishing returns — each extra point is worth less. No hard cap.

Strength — worked examples

Strength Multiplier 100 base → after strength
0 ×1.0 100
25 ×1.25 125
50 ×1.5 150
100 ×2.0 200
200 ×3.0 300

Linear — every point of strength is worth the same.

Full worked example

Player: strength 80, weapon: damage 120, vs mob: defense 100, crit_damage 50

after_strength  = 120 × (1 + 80/100)  = 120 × 1.80 = 216
defense_factor  = 1 − 100/(100+100)   = 0.50
normal hit      = 216 × 0.50          = 108 damage
crit hit        = 108 × (1 + 50/100)  = 162 damage

Stat budgets per tier

Rough guidelines for authoring balanced gear. Adjust to suit your server's XP curve.

Tier Example zone Weapon damage Player strength Player defense Mob HP
Starter Tutorial area 30–60 0–20 0–30 80–250
Early First content zone 80–150 20–60 30–80 300–800
Mid Mid-game zones 150–350 60–150 80–200 800–3,000
Late Late-game zones 350–800 150–350 200–500 3,000–15,000
End Boss / endgame 800–2,000 350–600 400–800 15,000–100,000

Use the worked example formula to sanity-check any gear set before shipping.


Stat sources

A StatHolder (player or mob) aggregates stats from:

  • Base stats (set by the entity at creation)
  • Equipped items (armor slots, main/off hand)
  • Accessories in the accessory bag (only the highest of each accessory.id counts by default; configurable)
  • Active status effects (positive or negative modifiers, duration-bound)
  • Skill milestones (per-level bonuses)
  • Guild perks
  • Region buffs (set by region flag)

Modifier resolution order (configurable): flat → percent → multiplicative.