-
Notifications
You must be signed in to change notification settings - Fork 0
11‐2. Holdable Innate Skills
Holdable Innate Skills add support for continuous channeling and multi-stage charge progression. While the skill key remains pressed, the player enters a charging state that advances through configurable charge tiers, enabling combat properties to scale dynamically according to the charge duration.
Each charge tier can independently modify gameplay parameters and animation behavior, including the playback speed of both charging and attack animations, providing precise control over how an ability evolves as it is charged.
💡 Developer Note: This robust system lays the functional for future hybrid systems, such as Conditional Holdable Innates.
Depending on whether you want users to be able to modify categories locally or bundle them inside your mod, choose one of the following paths:
Use this path if you want the setup to be easily accessible/editable by servers or pack devs.
-
Path:
.minecraft/config/epicfight_edp/innate_skill_builder/holdable_innate_skill/*.json ⚠️ Rule: You MUST explicitly declare themodidfield inside the JSON when using this folder.
Use this path to ship categories natively pre-configured inside your mod jar file or data-driven setup.
-
Path:
data_driven/<your_modid>/innate_skill_builder/holdable_innate_skill/*.json - 💡 Rule: The
modidfield can be safely omitted inside the JSON because the directory's namespace acts as the fallback signer automatically.
Holdable skills support both "mono_phase" and "multi_phase" property layouts. In the "multi_phase" configuration shown below, each phase entry ("0", "1", "2") maps to a specific attack phase of the animation. Since a single animation can contain multiple attack phases (hits), each phase may define its own independent set of properties.
{
"modid":"epicfight",
"name": "fatal_whirlwind",
"reduceSpeed": true,
"chargeAnimation": "epicfight:biped/skill/steel_whirlwind_charging",
"maxAllowedCharging": 60,
"maxChargingTicks": 35,
"minChargingTicks": 10,
"animation": "epicfight:biped/skill/steel_whirlwind",
"properties_type": "multi_phase",
"properties": {
"0": {
"max_strikes": 1.0,
"damage_multiplier": 1.2,
"impact": 1.0,
"stun_type": "SHORT"
},
"1": {
"max_strikes": 2.0,
"damage_multiplier": 1.6,
"impact": 1.5,
"stun_type": "SHORT"
},
"2": {
"max_strikes": 3.0,
"damage_multiplier": 2.0,
"armor_negation": 10.0,
"impact": 3.0,
"stun_type": "KNOCKBACK",
"extra_damage": true
}
},
"tooltip": [
{
"argTargetType": "scripted_text",
"translatableKey": "fatal_whirlwind.skill.des",
"colorKey": "dark_purple"
}
]
}| Field | Type | Description |
|---|---|---|
| modid | String | The target mod namespace used to register the skill. |
| name | String | Unique internal identifier for your custom innate skill. |
| reduceSpeed | Boolean | If true, heavily slows down player movement speed while channeling the charge. |
| chargeAnimation | String | The loop animation path played continuously while holding down the skill key. |
| minChargingTicks | Integer | Minimum ticks required to channel before a valid activation release can be triggered. |
| maxChargingTicks | Integer | Hard tick threshold cap used to determine and calculate the highest charge phase tier. |
| maxAllowedCharging | Integer | Maximum ticks a player can sustain a charge before automatic cancellation. |
| animation | String | The resource location path to the final attack animation played upon releasing the key. |
| properties_type | String | Must be set strictly to "multi_phase" to allow consecutive tier evaluation. |
The nested fields inside the properties block control the weapon's direct gameplay mechanics during execution
| Property | Type | Description |
|---|---|---|
| max_strikes | Float | Maximum number of targets/entities that can be hit in a single sweep. |
| damage_multiplier | Float | Raw base attack damage scaling factor. |
| armor_negation | Float | Percentage value of the victim's armor ignored during damage calculations. |
| impact | Float | Stagger intensity and hit-reaction strength forced onto the target. |
| stun_type | String | The visual/mechanical stun state applied on hit (See options below). |
| extra_damage | Boolean | Allows the ability's damage to scale with the Sweeping Edge enchantment. |
When defining your stun_type string value, use any of the following standard identifiers (case-insensitive but lowercase matches conventions):
- short
- long
- hold
- knockback
- neutralize
- fall
- none
The tooltip array defines a list of text components displayed in the skill description. Each entry is resolved independently and can represent a key binding, localized text, or a dynamically calculated numeric value.
Components are rendered in the order they appear in the array.
- key_binding: Displays the currently assigned key for the specified key mapping.
{
"argTargetType": "key_binding",
"translatableKey": "key.mouse.right",
"colorKey": "aqua"
}- scripted_text: Displays a translatable text component.
{
"argTargetType": "scripted_text",
"translatableKey": "example.skill.description",
"colorKey": "gold"
}- damage_operation: Displays a numeric value that can be calculated from either a fixed base value or the attack damage of the held item.
{
"argTargetType": "damage_operation",
"baseValue": 10.0,
"operation": "multiplication",
"modifier": 1.5,
"format": "%.1f",
"colorKey": "red"
}| Property | Required | Description |
|---|---|---|
| argTargetType | Yes | Type of component to render. |
| translatableKey | Depends | Translation key or keybinding identifier used by the component. |
| colorKey | No | Text color applied to the rendered component. |
| baseValue | No | Base numeric value used by damage_operation. |
| operation | No | Mathematical operation applied to the value. |
| modifier | No | Operand used by the selected operation. |
| format | No | Java format string used to display numeric values. |
Supported Operations
The following operations are available for damage_operation
| Operation | Result |
|---|---|
| addition | base + modifier |
| subtract | base - modifier |
| multiplication | base * modifier |
| division | base / modifier |
If baseValue is omitted, the component uses the attack damage of the provided item stack as its starting value. This allows tooltip values to scale dynamically with weapon attributes.