Repository navigation
Sequential Innate Skills
Sequential Innate Skills are designed for combat abilities that execute a predefined sequence of animations.
Unlike Simple Innate Skills, which execute a single animation, Sequential Innate Skills contain an ordered list of animations. Each activation advances through the list and executes the corresponding animation.
For example, a skill can define three animations:
Activation 1 → Animation 1
Activation 2 → Animation 2
Activation 3 → Animation 3
This makes Sequential Innate Skills useful for attacks that progressively chain into different animations.
Depending on whether you want users to be able to modify the skills 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 and editable by servers or pack developers.
-
Path:
.minecraft/config/epicfight_edp/innate_skill_builder/sequential_innate_skill/*.json ⚠️ Rule: You MUST explicitly declare themodidfield inside the JSON when using this folder.
Use this path to ship skills natively pre-configured inside your mod jar or data-driven setup.
-
Path:
data_driven/<your_modid>/innate_skill_builder/sequential_innate_skill/*.json - 💡 Rule: The
modidfield can be safely omitted inside the JSON because the directory's namespace acts as the fallback namespace automatically.
{
"modid": "epicfight",
"name": "sequential_impact",
"sequential_list": [
{
"animation": "epicfight:biped/skill/rushing_tempo1",
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 1.2,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
},
{
"animation": "epicfight:biped/skill/rushing_tempo2",
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 1.4,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
},
{
"animation": "epicfight:biped/skill/rushing_tempo3",
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 1.8,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
}
]
}| Field | Type | Description |
|---|---|---|
modid |
String | The target mod namespace used to register the skill. |
name |
String | Unique internal identifier for your custom innate skill. |
sequential_list |
Array | Ordered list of animations executed by the skill. |
disableTooltipProperties |
Boolean | Prevents animation properties from being displayed in the tooltip. |
tooltip |
Array | Optional list of custom tooltip components. |
The sequential_list field contains the animations that make up the skill sequence.
Each entry contains an animation and its corresponding combat properties.
"sequential_list": [
{
"animation": "epicfight:biped/skill/rushing_tempo1",
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 1.2,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
}
]The order of the entries determines the order in which the animations are executed.
For example:
sequential_list
│
├── [0] rushing_tempo1
│
├── [1] rushing_tempo2
│
└── [2] rushing_tempo3
The skill therefore executes:
Activation
│
▼
rushing_tempo1
│
▼
rushing_tempo2
│
▼
rushing_tempo3
The position of an animation inside sequential_list determines its position in the sequence.
The first entry is executed first, followed by the second, third, and so on.
[0] → [1] → [2] → [3] → ...
For example:
"sequential_list": [
{
"animation": "example:attack_1"
},
{
"animation": "example:attack_2"
},
{
"animation": "example:attack_3"
}
]produces:
Activation 1 → attack_1
Activation 2 → attack_2
Activation 3 → attack_3
The sequence is therefore controlled entirely by the order of the JSON entries.
Each animation in the sequence can define its own animation phase properties.
| 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. |
extra_damage |
Boolean | Allows the ability's damage to scale with the Sweeping Edge enchantment. |
swing_sound |
Resource Location | Sound played while swinging. |
hit_sound |
Resource Location | Sound played when hitting an entity. |
particle |
Resource Location | Hit particle spawned on impact. |
Each sequence entry can therefore have different combat properties.
For example:
Animation 1 → Damage × 1.2
Animation 2 → Damage × 1.4
Animation 3 → Damage × 1.8
This allows later attacks in a sequence to become progressively stronger or otherwise behave differently.
When defining your stun_type string value, use any of the following standard identifiers:
shortlongholdknockbackneutralizefallnone
The properties array of each sequence entry corresponds to the phases of that animation.
{
"animation": "epicfight:biped/skill/rushing_tempo1",
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 1.2,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
}For animations containing multiple phases, multiple property entries can be provided:
Animation
│
├── Phase 0 → properties[0]
├── Phase 1 → properties[1]
├── Phase 2 → properties[2]
└── ...
Only as many property entries as there are available animation phases are applied.
This allows every animation in the sequence to define its own phase-specific combat behavior.
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.
Displays the currently assigned key for the specified key mapping.
{
"argTargetType": "key_binding",
"translatableKey": "key.mouse.right",
"colorKey": "aqua"
}Displays a translatable text component.
{
"argTargetType": "scripted_text",
"translatableKey": "example.skill.description",
"colorKey": "gold"
}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. |
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.
The disableTooltipProperties field prevents the automatic animation phase properties from being displayed in the skill tooltip.
"disableTooltipProperties": trueBy default:
"disableTooltipProperties": falseWhen disabled, custom tooltip components can still be used.
This is useful when the skill requires a fully customized tooltip rather than automatically displaying its animation properties.
Sequential Innate Skills are intended to be used as a chain of independent animation executions.
For example, the following configuration:
"sequential_list": [
{
"animation": "example:attack_1"
},
{
"animation": "example:attack_2"
},
{
"animation": "example:attack_3"
}
]can be visualized as:
┌───────────────┐
│ Activation │
└───────┬───────┘
│
▼
┌───────────────┐
│ attack_1 │
└───────┬───────┘
│
next activation
│
▼
┌───────────────┐
│ attack_2 │
└───────┬───────┘
│
next activation
│
▼
┌───────────────┐
│ attack_3 │
└───────────────┘
This makes it possible to construct multi-step attacks while keeping every step independently configurable.
A common use case is an attack sequence where each animation becomes progressively stronger.
{
"modid": "epicfight",
"name": "sequential_impact",
"sequential_list": [
{
"animation": "epicfight:biped/skill/rushing_tempo1",
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 1.2,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
},
{
"animation": "epicfight:biped/skill/rushing_tempo2",
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 1.4,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
},
{
"animation": "epicfight:biped/skill/rushing_tempo3",
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 1.8,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
}
]
}The resulting sequence is:
rushing_tempo1
Damage × 1.2
│
▼
rushing_tempo2
Damage × 1.4
│
▼
rushing_tempo3
Damage × 1.8
EF: Extended Datapacks
📦 Data
🧰 Core
👁️ Visuals
- Zoom Types
- Weapon Models per Style
- Advanced Swing Trails
- Weapons Passive Particles
- Shader Effects I
- Shader Effects II
- Shader Effects III
⚔️ Combat
🗝️ Skill Builder
🛠️ Innate Builder
- Simple Innate Skills
- Holdable Innate Skills
- Conditional Innate Skills
- Conditional Data Innate Skills
- Conditional Holdable Innate Skills
- Sequential Innate Skills
- Per Combo Innate Skills
- Combo Innate Skills
🗡️ Animation Operations
- Animation Operations
- Animation Properties
⚙️ Third-Party