Introduction
Stats are values that affect all kinds of mechanics across Players, Mobs, Items, Skills, and more. While Stats system can be complicated to learn at first, its versatility will enable you to do very advanced things, such as combat changes, technical utilities, and the creation of new game design elements.
Stats are defined in thestats.yml
file. This file can exist in the root directory of MythicMobs (/plugins/MythicMobs/
) or in a Pack folder.
Custom Stat Options
Options that can be used in the Stat in order to better customize it
Option | Description |
---|---|
Enabled | If the stat is currently enabled |
AlwaysActive | If the stat is forcefully applied to every registry of every entity |
Type | The Type of the stat |
Display | The name with which the stat is displayed |
Tooltips | How the stat is shown on items. Depends on the Modifier used |
Priority | The priority with which the stat will take effect, compared to others |
MinValue | Minimum value for the stat |
MaxValue | Max value for the stat |
Triggers | What triggers the stat effect. Can be any MythicMobs trigger, minus the "on" bit. (For instance: to use onAttack , one needs to write ATTACK as a trigger) |
ParentStats | A list of other stats that this stat relies on |
Formula | A formula for the base value if this stat has parent stats |
FormulaKey | A key you can use in formulas, when this stat is the parent of another |
BaseValue | A static base value if it doesn't have parents |
ExecutionPoint | For stats that modify a trigger, can be PRE or POST . determines whether the stat is evaluated before or after any mechanics |
Skills | The skills that get executed when the stat is activated |
Custom Stat Types
The values that the Type
Option can be set to
Type | Description |
---|---|
STATIC |
A static value. Does nothing on its own, but can be referenced via placeholders |
DAMAGE_BONUS |
This stat adds a flat amount of bonus damage |
DAMAGE_MODIFIER |
Modifies the damage using a formula |
PROC |
A chance to execute skills |
Specific Type Options
A list of options only available if the specified type is used in the stat
DAMAGE_MODIFIER
Option | Description |
---|---|
DamageType | Specify a custom damage type |
Conditions | Specify conditions which can affect the Modifier |
DamageFormula | Define a formula for how the damage is modified. See HERE for an example of this |
DAMAGE_BONUS
Option | Description |
---|---|
DamageType | Specify a custom damage type |
Tooltips Formatting
Formatting | Description |
---|---|
Additive | The tooltip to show for additive modifiers |
Multiply | The tooltip to show for multiply modifiers |
Compound | The tooltip to show for compound modifiers |
Setter | The tooltip to show for setter modifiers |
Rounding | The amount of numbers after the point in the value of the stat |
EXAMPLE_STAT:
Enabled: true
AlwaysActive: false
Type: STATIC
FormulaKey: 'SPD'
Tooltips:
Additive: '+<value> Speed'
Multiply: '+<value>% Speed'
Compound: 'x<value>% Speed'
Static: `Force <value> <display>`
Rounding: 2
Modifiers
Modifiers can be used to adjust stats after their base value is defined.
Modifier | Description |
---|---|
ADDITIVE |
Adds to the base value of a stat |
ADDITIVE_MULTIPLIER |
Adds a multiplier the base value of a stat |
COMPOUND_MULTIPLIER |
Multiplies the base value of a stat, then adds it to the base value |
SETTER |
Overrides all modifiers and base values, and forces the stat to be what is defined |
Note that stat modifiers can be applied to and by mobs, players, items, enchants, and auras. For example, an item may add to or multiply its wielder's attack speed, while an attack may temporarily apply a COMPOUND MULTIPLIER to half a target's attack speed.
ADDITIVE
The ADDITIVE
modifiers are straightforward: they add to the base stat.
ADDITIVE_MULTIPLIER
The ADDITIVE_MULTIPLIER
multiply the value of the base stat by the specified value.
They all pool together (i.e. additive multipliers of 2 and 3 becoming a multiplier of 5, NOT 6) to then multiply the base stat after additives.
COMPOUND_MULTIPLIER
Finally, the COMPOUND_MULTIPLIER
multiplies all the ADDITIVE results afterwards - this is a great place for to apply effect changes such as debuffs, since they would typically be calculated after additive stat additions and multipliers.
Application
The two ADDITIVE_MULTIPLIER
and COMPOUND_MULTIPLIER
modifiers can be easy to mix up; however, this example should make it a bit more clear:
Lets say you have these modifiers:
8 base value
10 additive
2 additive
5 multiply
3 multiply
2 compound (effectively x2)
0.4 compound (effectively -60%)
...the resulting math MythicMobs would calculate this is as follows:
(8 + 10 + 2) * (5 + 3) * (2 * 0.4) = 128
(base + additive + additive) * (additive_multiplier + additive_multiplier) * (compound_multiplier * compound_multiplier) = final stat
Regular multipliers are additive, and compound multipliers are multiplicative. You can think of it as "+10%" for Additive Multipliers vs. "x10%" for Compound Multipliers.
Built-In Stats
These stats are inherently supported by MythicMobs, and can be configured in the stats.yml
file in the plugin's root directory (/plugins/MythicMobs/
) or inside Pack folders. (/plugins/MythicMobs/Packs/CoolPack/
)
The player inherits the BaseValue
of these stats; Mobs also inherit them as defaults, unless overrides are specified in the Stats:
sub-section of their config.
Stat | Description |
---|---|
ATTACK_DAMAGE | Base Damage Output |
ATTACK_SPEED | Attack cooldown frequency. Typically only used for Players. |
BONUS_DAMAGE | Additional Modifier for dealing extra damage |
CRITICAL_STRIKE_CHANCE | Chance to land a Critical Strike (Chance-based Crit) |
CRITICAL_STRIKE_DAMAGE | Damage dealt via Critical Strike |
CRITICAL_STRIKE_RESILIENCE | Resistance to Critical Strike |
DAMAGE_REDUCTION | Generic damage reduction |
DEFENSE | Defense |
DODGE_CHANCE | Chance for an attack to fail when attempting to damage. Reduced by opponent's DODGE_NEGATION. |
DODGE_NEGATION | Chance for an attack to land damage. Reduces opponent's DODGE_CHANCE. |
HEALTH | Health values |
HEALTH_REGENERATION | Rate of Health Regeneration |
LIFESTEAL_CHANCE | Chance for damage dealt to heal the attacker |
LIFESTEAL_POWER | How much healing LifeSteal does. |
MOVEMENT_SPEED | Movement Speed. |
PARRY_CHANCE | Chance to mitigate and reflect damage from sources that melee you from the front. |
PARRY_COUNTERATTACK | How much damage is returned to the opponent when parrying. |
PARRY_POWER | How much damage is mitigated by Parry. |
PARRY_NEGATION | Affects and lowers the PARRY_CHANCE of the opponent. Reduced by opponent's PARRY_NEGATION. |
Built-in Stats Breakdown
This is a detailed breakdown of the built-in stats provided by MythicMobs. For custom stats, see Custom Stat Examples.
DODGE_NEGATION
Chance for an attack to land damage. Reduces opponent's DODGE_CHANCE. As shown below, the displayed name and lore elements of a stat can be customized, such as 'Accuracy' instead of 'Dodge Negation'
DODGE_NEGATION:
Enabled: false
AlwaysActive: false
Display: 'Accuracy'
Tooltips:
Additive: '+<value> Accuracy'
Multiply: '+<value> Accuracy'
Compound: 'x<value> Accuracy'
BaseValue: 0
ATTACK_DAMAGE
Base Damage Output
ATTACK_DAMAGE:
Enabled: true
AlwaysActive: false
Display: 'Damage'
Tooltips:
Additive: '+<value> Damage'
Multiply: '+<value> Damage'
Compound: 'x<value> Damage'
BaseValue: 1
ATTACK_SPEED
Attack cooldown frequency. Typically only used for Players.
ATTACK_SPEED:
Enabled: true
AlwaysActive: false
Display: 'Attack Speed'
Tooltips:
Additive: '+<value> Attack Speed'
Multiply: '+<value> Attack Speed'
Compound: 'x<value> Attack Speed'
BaseValue: 4.0
BONUS_DAMAGE
Additional Modifier for dealing extra damage
BONUS_DAMAGE:
Enabled: false
AlwaysActive: false
Display: 'Bonus Damage'
Tooltips:
Additive: '+<value> Bonus Damage'
Multiply: '+<value> Bonus Damage'
Compound: 'x<value> Bonus Damage'
BaseValue: 0
CRITICAL_STRIKE_CHANCE
Chance to land a Critical Strike (Chance-based Crit)
CRITICAL_STRIKE_CHANCE:
Enabled: false
AlwaysActive: false
Display: 'Critical Strike'
Tooltips:
Additive: '+<value> Critical Strike'
Multiply: '+<value> Critical Strike'
Compound: 'x<value> Critical Strike'
BaseValue: 0
MinValue: 0
Skills:
- particles{p=crit;a=50;hS=1;y=1;s=1} @trigger
CRITICAL_STRIKE_DAMAGE
Damage dealt via Critical Strike
CRITICAL_STRIKE_DAMAGE:
Enabled: false
AlwaysActive: true
Display: 'Critical Damage'
Tooltips:
Additive: '+<value> Critical Damage'
Multiply: '+<value> Critical Damage'
Compound: 'x<value> Critical Damage'
BaseValue: 1
CRITICAL_STRIKE_RESILIENCE
Resistance to Critical Strike
CRITICAL_STRIKE_RESILIENCE:
Enabled: false
Display: 'Resilience'
AlwaysActive: false
Tooltips:
Additive: '+<value> Resilience'
Multiply: '+<value> Resilience'
Compound: 'x<value> Resilience'
BaseValue: 0
DAMAGE_REDUCTION
Generic damage reduction
DAMAGE_REDUCTION:
Enabled: false
AlwaysActive: false
Display: 'Damage Reduction'
Tooltips:
Additive: '+<value> Damage Reduction'
Multiply: '+<value> Damage Reduction'
Compound: 'x<value> Damage Reduction'
BaseValue: 0
DEFENSE
Defense
DEFENSE:
Enabled: false
AlwaysActive: false
Display: 'Defense'
Tooltips:
Additive: '+<value> Defense'
Multiply: '+<value> Defense'
Compound: 'x<value> Defense'
BaseValue: 0
DODGE_CHANCE
Chance for an attack to fail when attempting to damage. Reduces opponent's ACCURACY.
DODGE_CHANCE:
Enabled: false
AlwaysActive: false
Display: 'Dodge'
Tooltips:
Additive: '+<value> Dodge Chance'
Multiply: '+<value> Dodge Chance'
Compound: 'x<value> Dodge Chance'
BaseValue: 0
Skills: []
HEALTH
Health values
HEALTH:
Enabled: false
AlwaysActive: true
Display: 'Health'
Tooltips:
Additive: '+<value> Health'
Multiply: '+<value> Health'
Compound: 'x<value> Health'
BaseValue: 20
MinValue: 1
HEALTH_REGENERATION
Rate of Health Regeneration
HEALTH_REGENERATION:
Enabled: false
AlwaysActive: false
Display: 'Health Regeneration'
Tooltips:
Additive: '+<value> Regeneration'
Multiply: '+<value> Regeneration'
Compound: 'x<value> Regeneration'
BaseValue: 0
MaxValue: 1000000
MinValue: 0
Frequency: 60
LIFESTEAL_CHANCE
Chance for damage dealt to heal the attacker
LIFESTEAL_CHANCE:
Enabled: false
AlwaysActive: false
Display: 'Lifesteal Chance'
Tooltips:
Additive: '+<value> Lifesteal Chance'
Multiply: '+<value> Lifesteal Chance'
Compound: 'x<value> Lifesteal Chance'
BaseValue: 0
LIFESTEAL_POWER
How much healing LifeSteal does.
LIFESTEAL_POWER:
Enabled: true
AlwaysActive: false
Display: 'Lifesteal Power'
Tooltips:
Additive: '+<value> Lifesteal Power'
Multiply: '+<value> Lifesteal Power'
Compound: 'x<value> Lifesteal Power'
BaseValue: 0.1
MOVEMENT_SPEED
Movement Speed.
MOVEMENT_SPEED:
Enabled: false
AlwaysActive: true
Display: 'Movement Speed'
Tooltips:
Additive: '+<value> Movement Speed'
Multiply: '+<value>% Movement Speed'
Compound: 'x<value>% Movement Speed'
ParentStats:
- SPEED
Formula: '0.2 + (0.2 / (1 + e^(-0.005 * (SPD - 1000))))'
PARRY_CHANCE
Chance to mitigate and reflect damage from sources that melee you from the front.
PARRY_CHANCE:
Enabled: false
AlwaysActive: false
Display: 'Parry Chance'
BaseValue: 0
Priority: 0
Tooltips:
Additive: '+<value> Parry Chance'
Multiply: '+<value> Parry Chance'
Compound: 'x<value> Parry Chance'
FrontAngle: 180
UsableMaterials:
- WOODEN_SWORD
- STONE_SWORD
- GOLDEN_SWORD
- IRON_SWORD
- DIAMOND_SWORD
- NETHERITE_SWORD
Skills: []
PARRY_COUNTERATTACK
How much damage is returned to the opponent when parrying.
PARRY_COUNTERATTACK:
Enabled: false
AlwaysActive: false
Display: 'Parry Counterattack'
BaseValue: 1
Tooltips:
Additive: '+<value> Parry Counterattack'
Multiply: '+<value> Parry Counterattack'
Compound: 'x<value> Parry Counterattack'
PARRY_NEGATION
Affects and lowers the PARRY_CHANCE of the opponent. As shown below, the displayed name and lore elements of a stat can be customized, such as 'Expertise' instead of 'Parry Negation'
PARRY_NEGATION:
Enabled: false
AlwaysActive: false
Display: 'Expertise'
Tooltips:
Additive: '+<value> Expertise'
Multiply: '+<value> Expertise'
Compound: 'x<value> Expertise'
BaseValue: 0
PARRY_POWER
How much damage is mitigated by Parry.
PARRY_POWER:
Enabled: false
AlwaysActive: false
Display: 'Parry Power'
BaseValue: 0.5
Tooltips:
Additive: '+<value> Parry Power'
Multiply: '+<value> Parry Power'
Compound: 'x<value> Parry Power'
Implementations with Configurations
It's important to be aware that players get all of their base stat values from the stats.yml
file, while mobs get only some of their base values from the stats.yml
file: if another value is specified as one of their stats, that is applied.
Mobs
This example features Some_Mob
and three configured stats: CRITICAL_STRIKE_CHANCE
as configured in the Stats:
section, but also its Health
and Damage
.
The Health and Damage stat types are natively handled in the typical format of a mob's configuration. Other stats that are configured on the mob are: ATTACK_DAMAGE
, ATTACK_SPEED
, and MOVEMENT_SPEED
.
Some_Mob:
Health: 50
Damage: 10
Stats:
- CRITICAL_STRIKE_CHANCE 0.2
Examples
Example Custom Stats
These stats are created by the end user. Included are some examples.
ARMOR_GENERIC
Generic Armor based damage reduction. can be applied to gear.
ARMOR_GENERIC:
Enabled: false
AlwaysActive: false
Type: DAMAGE_MODIFIER
Triggers:
- DAMAGED
ExecutionPoint: PRE
Display: 'Generic Armor'
DamageFormula: 'd - v'
BaseValue: 0
Tooltips:
Additive: '+<value> Generic Armor'
Multiply: '+<value> Generic Armor'
Compound: 'x<value> Generic Armor'
ARMOR_BLUNT
Armor based damage reduction based on the BLUNT
DamageType.
ARMOR_BLUNT:
Enabled: false
AlwaysActive: false
Type: DAMAGE_MODIFIER
Triggers:
- DAMAGED
ExecutionPoint: PRE
Display: 'Blunt Armor'
DamageType: BLUNT
DamageFormula: 'd - v'
BaseValue: 0
Tooltips:
Additive: '+<value> Blunt Armor'
Multiply: '+<value> Blunt Armor'
Compound: 'x<value> Blunt Armor'
ARMOR_SHARP
Armor based damage reduction based on the SHARP
DamageType.
ARMOR_SHARP:
Enabled: false
AlwaysActive: false
Type: DAMAGE_MODIFIER
Triggers:
- DAMAGED
ExecutionPoint: PRE
Display: 'Sharp Armor'
DamageType: SHARP
DamageFormula: 'd - v'
BaseValue: 0
Tooltips:
Additive: '+<value> Sharp Armor'
Multiply: '+<value> Sharp Armor'
Compound: 'x<value> Sharp Armor'
DAMAGE_BLUNT
Damage Output for the BLUNT
DamageType.
DAMAGE_BLUNT:
Enabled: false
AlwaysActive: false
Type: DAMAGE_BONUS
Priority: 1
Triggers:
- ATTACK
ExecutionPoint: PRE
Display: 'Blunt Damage'
DamageType: BLUNT
BaseValue: 0
Tooltips:
Additive: '+<value> Blunt Damage'
Multiply: '+<value> Blunt Damage'
Compound: 'x<value> Blunt Damage'
DAMAGE_SHARP
Damage Output for the SHARP
DamageType.
DAMAGE_SHARP:
Enabled: false
AlwaysActive: false
Type: DAMAGE_BONUS
Priority: 2
Triggers:
- ATTACK
ExecutionPoint: PRE
Display: 'Sharp Damage'
DamageType: SHARP
BaseValue: 0
Tooltips:
Additive: '+<value> Sharp Damage'
Multiply: '+<value> Sharp Damage'
Compound: 'x<value> Sharp Damage'
FIRE_RESISTANCE
Configured to grant resistance to the FIRE, FIRE_TICK DamageCause.
FIRE_RESISTANCE:
Enabled: false
AlwaysActive: false
Display: 'Fire Resistance'
Tooltips:
Additive: '+<value> Fire Resistance'
Multiply: '+<value> Fire Resistance'
Compound: 'x<value> Fire Resistance'
Type: DAMAGE_MODIFIER
Triggers:
- DAMAGED
Conditions:
- (damageCause FIRE || damageCause FIRE_TICK)
ExecutionPoint: PRE
DamageFormula: 'd * (1 - v)'
MaxValue: 1
MinValue: 0
SPEED
May be used in the MOVEMENT_SPEED stat calculation to affect speed with a formula.
SPEED:
Enabled: true
AlwaysActive: false
Type: STATIC
FormulaKey: 'SPD'
Tooltips:
Additive: '+<value> Speed'
Multiply: '+<value>% Speed'
Compound: 'x<value>% Speed'