Repository navigation
Conditional Data Innate Skills
Conditional Data Innate Skills allow an innate skill to select and play different animations based on the player's current state and stored data.
Each condition defines an animation, a physical condition, optional data requirements, optional tooltip information, and the properties that will be applied to the animation phases.
Conditions are evaluated in the order in which they are defined. When a condition is valid, its animation is played and the remaining conditions are ignored.
This allows a single innate skill to provide different behaviors depending on data stored by the skill.
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/data_conditional_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/data_conditional_innate_skill/*.json - 💡 Rule: The
modidfield can be safely omitted inside the JSON because the directory's namespace acts as the fallback signer automatically.
| Field | Description |
|---|---|
| name | Name of the innate skill |
| disableTooltipProperties | Disables automatic animation phase properties in the skill tooltip |
| tooltip | Optional custom tooltip components |
| conditions | List of conditional animation definitions |
The conditions field contains a list of conditional animation definitions.
Each entry can define:
- The animation to play
- A physical condition
- Optional data requirements
- Optional tooltip information
- Animation phase properties
"conditions": [
{
"animation": "epicfight:biped/skill/battojutsu",
"physical_condition": "normal",
"read_data": {
"AND": [
{
"type": "int",
"dataId": "wrathful_data_slash.cast.count",
"comparator": "greater_equal",
"value": 3,
"delete": true
}
]
},
"tooltip_head": "Thunder",
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 3.5,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
}
]| Field | Description |
|---|---|
| animation | Animation that will be played when the condition is satisfied |
| physical_condition | Physical condition required by the skill |
| read_data | Optional data packet expression that must evaluate successfully |
| tooltip_head | Optional custom heading used when displaying phase properties |
| properties | Animation phase properties applied to the selected animation |
The animation field specifies the animation that will be played when the condition is satisfied.
"animation": "epicfight:biped/skill/battojutsu"The animation must resolve to a valid animation registered in Epic Fight.
When the condition is selected, the skill plays the animation using the synchronized animation system.
Physical Condition
The physical_condition field determines the physical state required for the condition to be valid.
"physical_condition": "normal"The available values depend on the registered ConditionalType definitions.
The physical condition is evaluated against the player before the animation is played.
For example:
{
"animation": "epicfight:biped/skill/battojutsu",
"physical_condition": "normal"
}will only be selected when the player's physical condition satisfies normal.
The optional read_data field allows the condition to depend on data stored in the Data Packet system.
"read_data": {
"AND": [
{
"type": "int",
"dataId": "wrathful_data_slash.cast.count",
"comparator": "greater_equal",
"value": 3,
"delete": true
}
]
}When present, the data expression must successfully evaluate for the condition to be selected.
This allows skills to change their behavior based on values accumulated during gameplay.
For example, the following condition requires the stored integer value to be at least 3:
{
"type": "int",
"dataId": "wrathful_data_slash.cast.count",
"comparator": "greater_equal",
"value": 3,
"delete": true
}The delete property can be used to remove the evaluated data according to the behavior of the corresponding Data Packet read operation.
💡 Data conditions make it possible to create stateful innate skills without requiring separate skills for every possible state.
Conditions are evaluated sequentially.
Condition 1
│
├── Physical condition ✓
├── Data condition ✓
│
▼
Play Animation
│
X
Condition 2
Condition 3
If a condition fails, the next condition is evaluated.
If all required conditions are satisfied, the corresponding animation is played and evaluation stops.
This means the order of the entries in conditions is significant.
The following skill has two possible outcomes:
If the stored cast.count is at least 3, the first condition is selected. Otherwise, the second condition acts as the fallback.
{
"modid": "epicfight",
"name": "wrathful_data_slash",
"disableTooltipProperties": false,
"tooltip": [
{
"argTargetType": "key_binding",
"translatableKey": "key.sneak",
"colorKey": "aqua"
}
],
"conditions": [
{
"animation": "epicfight:biped/skill/battojutsu",
"physical_condition": "normal",
"tooltip_head": "Thunder",
"read_data": {
"AND": [
{
"type": "int",
"dataId": "wrathful_data_slash.cast.count",
"comparator": "greater_equal",
"value": 3,
"delete": true
}
]
},
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 3.5,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
},
{
"animation": "epicfight:biped/skill/battojutsu",
"physical_condition": "normal",
"properties": [
{
"max_strikes": 1.0,
"damage_multiplier": 2.0,
"armor_negation": 20.0,
"impact": 1.6,
"stun_type": "long"
}
]
}
]
}In this example, the first condition has a higher priority because it appears first.
When wrathful_data_slash.cast.count >= 3, the first condition is selected and the animation receives a damage_multiplier of 3.5.
If the data condition is not satisfied, evaluation proceeds to the second condition, which acts as a fallback and uses a damage_multiplier of 2.0.
The optional tooltip_head field defines a custom heading for the generated animation phase properties.
"tooltip_head": "Thunder"When present, the value is used when generating the phase property tooltip.
If tooltip_head is not specified, the default tooltip heading is used.
Conditions are evaluated from top to bottom.
For this reason, more specific conditions should generally be placed before more general conditions.
For example:
"conditions": [
{
"animation": "special_animation",
"physical_condition": "normal",
"read_data": {
"AND": [
{
"type": "int",
"dataId": "skill.counter",
"comparator": "greater_equal",
"value": 3
}
]
}
},
{
"animation": "default_animation",
"physical_condition": "normal"
}
]The second condition acts as a fallback.
If the default condition is placed first, it may be selected before the more specific condition can be reached.
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