Skip to content

Conditional Data Innate Skills

Sleys edited this page Sep 14, 2026 · 2 revisions

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.


📁 File Locations & Loading Methods

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:

⚙️ Option A: Local Config Folder

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 the modid field inside the JSON when using this folder.

📦 Option B: In-Jar (Bundled Data-Driven)

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 modid field can be safely omitted inside the JSON because the directory's namespace acts as the fallback signer automatically.

📚 Skill Parameters

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

Conditions

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"
      }
    ]
  }
]

📚 Condition Parameters

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

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

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.


Read Data

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.


Condition Evaluation

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.


Example

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.


Tooltip Head

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.


⚠️ Condition Order

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

⚔️ Combat

🗝️ Skill Builder

🛠️ Innate Builder

🗡️ Animation Operations

⚙️ Third-Party

Clone this wiki locally