Combat & damage
Immunities, damage reactions, dodges and on-hit effects.
Fields every power accepts (name, hidden, power_condition, …) are on Power basics. See also: Power basics, Events.
Types on this page: invulnerability · prevent_death · projectile_immunity · projectile_vulnerability · effect_immunity · dodge_chance · no_projectile_divergence · thorns_on_hit · action_on_hit · self_action_on_hit · light_level_effect · low_hp_threshold · ender_gaze_immunity · burn.
neoorigins:invulnerability
Native invulnerability power: cancels incoming damage whose source matches any configured filter. If every filter list is empty, blocks all incoming damage. Replaces the lossy 1.x translation that only covered FIRE.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
damage_types | list of string | no | [] | Damage type IDs (e.g. minecraft:fall), matched by ID |
damage_tags | list of string | no | [] | Damage type tag IDs (e.g. minecraft:is_fire) |
msg_ids | list of string | no | [] | Vanilla damage msgId strings (e.g. inFire, fall), covers loose Origins-style names |
Filters combine with OR: a damage source is cancelled if it matches any entry in any list. If all three lists are empty, all damage is cancelled (matching Origins’ behaviour when damage_condition is omitted).
Example: fire and lava immunity
{
"type": "neoorigins:invulnerability",
"damage_tags": ["minecraft:is_fire"],
"name": "Inferno Blood",
"description": "Immune to fire and lava."
}
Example: block everything
{
"type": "neoorigins:invulnerability",
"name": "Adamant",
"description": "Cannot be harmed."
}
neoorigins:prevent_death
Cancels the lethal blow instead of letting the player die. Faithful to Origins’ prevent_death, with first-class condition and damage-type gating.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
condition | object | no | (always) | Standard entity condition; the power only saves the player while it is true. |
damage_types | string | no | (all) | Damage-type filter (comma-separated, #tags, msgIds, or registry keys). When set, only matching killing blows are prevented. |
invert | bool | no | false | Flips damage_types into a blacklist: prevent all deaths except the listed types. |
set_health | float | no | 1.0 | Health the player is left at after a save (minimum 1). |
cooldown_ticks | int | no | 0 | After a save, the power is inert for N ticks. 0 = unlimited (Origins behavior). |
entity_action | object | no | — | Optional action run on the player each time a death is prevented. |
Example: survive lethal fire once every 30 s, then drop to 4 hearts
{
"type": "neoorigins:prevent_death",
"damage_types": "#minecraft:is_fire,lava",
"set_health": 8.0,
"cooldown_ticks": 600,
"name": "Fireproof Soul",
"description": "Cannot burn to death — but only so often."
}
Example: immortal except to the void, only while sneaking
{
"type": "neoorigins:prevent_death",
"damage_types": "fell_out_of_world",
"invert": true,
"condition": { "type": "neoorigins:sneaking" },
"name": "Guarded Stance",
"description": "Death cannot touch a braced body — the void still can."
}
Caveat (same as Origins): this only cancels the lethal event; it does not clear the damage source. For recurring damage-over-time (fire, lava, poison) pair it with a condition or an entity_action that removes the source, otherwise the player is re-killed on the next damage tick.
neoorigins:projectile_immunity
Negates incoming projectile damage (arrows, tridents, fireballs, etc.). Which projectiles are blocked, and how reliably, are both configurable; the defaults block every arrow.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
projectile_types | list of strings | no | ["arrow"] | Projectiles blocked: arrow (every arrow-type projectile, which includes thrown tridents), fireball, trident, all, or an entity id. |
chance | double (0.0–1.0) | no | 1.0 | Probability an incoming matching projectile is negated. |
teleport | bool | no | false | When true a successful dodge triggers a short random teleport. |
teleport_range | int | no | 16 | Max teleport distance in blocks on a dodge, when teleport is enabled. |
Example:
{
"type": "neoorigins:projectile_immunity",
"projectile_types": ["all"],
"name": "Arrow Deflection",
"description": "Immune to all projectile damage."
}
neoorigins:projectile_vulnerability
The holder takes extra damage from the listed projectiles, including ones that normally deal a player no damage at all, such as snowballs and eggs. The bonus is added to the projectile’s own damage when it has some, and dealt on its own, credited to the projectile’s thrower, when it has none. Origins’ Blazeborn takes 3 from snowballs this way.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
projectiles | list of string | yes | — | Projectile entity ids or #tags, e.g. minecraft:snowball. |
amount | float | no | 3.0 | Extra damage per hit. |
Example:
{
"type": "neoorigins:projectile_vulnerability",
"projectiles": ["minecraft:snowball"],
"amount": 3.0,
"name": "Melting Point",
"description": "Snowballs hurt you."
}
neoorigins:effect_immunity
Prevents listed potion effects from being applied to the player. Uses NeoForge’s MobEffectEvent.Applicable to cancel before application.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
effects | list of string | no | [] | Effect IDs to block, e.g. ["minecraft:poison"]. Supply it unless inverted is true: an empty list on its own grants no immunity at all |
inverted | bool | no | false | Flips the list into an exception list (Apoli semantics): immune to every effect except those listed. true with an empty list = immune to all effects. |
Example:
{
"type": "neoorigins:effect_immunity",
"effects": ["minecraft:poison", "minecraft:wither"],
"name": "Toxin Resistance",
"description": "Immune to poison and wither effects."
}
Example: immune to everything except regeneration
{
"type": "neoorigins:effect_immunity",
"effects": ["minecraft:regeneration"],
"inverted": true
}
Pair
inverted: truewith an emptyeffectslist and apower_conditionfor a temporary blanket immunity (e.g. an immunity-shot buff gated on a resource).
neoorigins:dodge_chance
Percentage chance to completely dodge incoming damage. When triggered, the damage event is cancelled entirely. Applied via CombatPowerEvents.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
chance | float | no | 0.15 | Dodge probability (0.0–1.0). 0.15 = 15% dodge. |
Example:
{
"type": "neoorigins:dodge_chance",
"chance": 0.2,
"name": "Evasion",
"description": "20% chance to dodge incoming attacks."
}
neoorigins:no_projectile_divergence
Removes projectile divergence (perfect accuracy) for projectiles shot by the player. Every projectile the player owns is re-aimed along the look direction at its original speed when it spawns, so multishot volleys collapse into one line and projectiles fired by other powers are redirected too. Handled via EntityJoinLevelEvent.
No fields beyond name / description.
Example:
{
"type": "neoorigins:no_projectile_divergence",
"name": "Dead Eye",
"description": "Arrows and projectiles fly true."
}
neoorigins:thorns_on_hit
Passive thorns — when the player takes damage from a living attacker (including the owner of a projectile), the attacker takes damage back. Optionally sets the attacker on fire. Applied via CombatPowerEvents.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
damage | float | no | 2.0 | Thorns damage dealt to the attacker. |
fire_ticks | int | no | 0 | Fire ticks applied to the attacker (0 = no fire). |
Example:
{
"type": "neoorigins:thorns_on_hit",
"damage": 3.0,
"fire_ticks": 40,
"name": "Ember Thorns",
"description": "Melee attackers take 3 damage and catch fire."
}
neoorigins:action_on_hit
Triggers an action each time the player deals damage to any living entity: mobs, animals, and other players. Optionally restricted by target entity group, target entity type, or damage type. There are two ways to express the effect: the simple flat action string (self or victim), or a full Apoli-style bientity_action (alias entity_action) that runs against the (attacker, victim) pair. Both may be present — the flat action runs first, then the parsed bientity action.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
action | string | no | restore_health (none when entity_action or bientity_action is set) | One of restore_health, restore_hunger, grant_effect (self), target_effect (victim), or none / nothing |
amount | float | no | 2.0 | Health or hunger amount (for the restore actions) |
effect | Identifier | no | — | Effect to apply for grant_effect / target_effect |
duration | int | no | 100 | Effect duration in ticks |
amplifier | int | no | 0 | Effect level |
min_damage | float | no | 0.0 | Only fires when outgoing damage ≥ this |
chance | float | no | 1.0 | Probability to fire, from 0.0 to 1.0 |
target_group | string | no | (any) | Restrict to targets in group: undead, arthropod, illager, aquatic (vanilla minecraft:<group> entity-type tag) |
target_type | Identifier | no | (any) | Restrict to a specific entity type, e.g. minecraft:zombie |
damage_type | string | no | (all) | Restrict to a specific vanilla damage type, e.g. mob_attack, magic |
bientity_action | entity action (object or array) | no | noop | Parsed action run against the pair: actor = the attacker (you), target = the entity you hit. A bare verb (e.g. apply_effect) runs against the victim; wrap in actor_action / target_action to route explicitly. See Caster & target actions: bientity actions. |
entity_action | entity action (object or array) | no | noop | Alias for bientity_action: the field name a pack copying the ACTIONS.md example uses. |
Filters are combined with AND: every configured filter must match for the action to fire. The chance roll happens last. The same filter gates (min_damage, damage_type, target_group, target_type, chance) govern the bientity_action too.
Example: heal 0.5 hearts on striking any undead
{
"type": "neoorigins:action_on_hit",
"action": "restore_health",
"amount": 1.0,
"target_group": "undead",
"name": "Smite Vigor",
"description": "Drains life from the undead with each blow."
}
Example: mark the victim with Glowing when striking undead
{
"type": "neoorigins:action_on_hit",
"action": "target_effect",
"effect": "minecraft:glowing",
"duration": 60,
"target_group": "undead",
"name": "Holy Mark",
"description": "Hit undead are illuminated briefly."
}
Example: 20% chance to gain Strength I on hitting a zombie, on melee only
{
"type": "neoorigins:action_on_hit",
"action": "grant_effect",
"effect": "minecraft:strength",
"duration": 60,
"chance": 0.2,
"damage_type": "mob_attack",
"target_type": "minecraft:zombie",
"name": "Adrenal Surge",
"description": "Sometimes empowered when you melee a zombie."
}
Example: poison whatever you hit (bientity form)
{
"type": "neoorigins:action_on_hit",
"hidden": true,
"entity_action": { "type": "neoorigins:apply_effect", "effect": "minecraft:poison", "duration": 60 },
"name": "Venom Strike",
"description": "Your blows leave a lingering poison."
}
The bare apply_effect runs against the victim: hitting a mob poisons it. To affect yourself instead, wrap it in actor_action; to be explicit about targeting the victim, wrap it in target_action.
neoorigins:self_action_on_hit
Fires when the holder deals damage to a living entity. Apoli compat (Route B), riding the same player-as-attacker seam in CombatPowerEvents.onLivingDamage that the native action_on_hit uses; the victim is passed straight through, so a paired action resolves against it instead of silently doing nothing.
entity_action runs on the holder. bientity_action runs with actor = the holder and target = the entity that was hit. Both may be present: the holder’s action runs first.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
entity_action | object / array | no | — | Action run on the holder |
bientity_action | object / array | no | — | Action run as (actor = holder, target = the entity hit). A bare verb runs against the target; wrap in actor_action / target_action to route explicitly. See Caster & target actions: bientity actions. |
cooldown | int | no | 0 | Ticks before the power can fire again. 0 fires on every hit. |
condition | object / array | no | always | Entity condition on the holder, tested at hit time |
Every spelling lands here: neoorigins:self_action_on_hit (recognized since 2.2.6), origins: / apace: / apoli: / apugli:self_action_on_hit, and origins:action_on_hit / apace:action_on_hit. Mind the namespace on that last pair: neoorigins:action_on_hit is the native type with the filter surface, while origins:action_on_hit is Apoli’s and loads as this one.
The type carries no min_damage, chance or victim filters: every hit fires it, subject only to cooldown and the holder-side condition. For a damage threshold, a chance roll or target-group / target-type gates, write the native neoorigins:action_on_hit instead.
Example: lifesteal that poisons what you hit
{
"type": "neoorigins:self_action_on_hit",
"cooldown": 20,
"entity_action": { "type": "neoorigins:heal", "amount": 1.0 },
"bientity_action": { "type": "neoorigins:apply_effect", "effect": "minecraft:poison", "duration": 60 },
"name": "Sanguine Edge",
"description": "Your blows draw life and leave venom."
}
neoorigins:light_level_effect
Applies a status effect when the player is at or below a certain light level. Removes the effect when they move to brighter light, including the same effect from any other source (a potion, a beacon).
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
max_light_level | int | no | 4 | Light level threshold (inclusive). |
effect | resource location | yes | — | Status effect to apply. |
amplifier | int | no | 0 | Effect amplifier. |
ambient | boolean | no | true | Ambient effect flag. |
show_particles | boolean | no | false | Show effect particles. |
show_icon | boolean | no | false | Show effect icon on HUD. |
Example: invisibility in darkness
{
"type": "neoorigins:light_level_effect",
"max_light_level": 4,
"effect": "minecraft:invisibility",
"name": "Shadow Meld",
"description": "Become invisible in darkness."
}
neoorigins:low_hp_threshold
Applies one or more status effects when the player’s HP drops below a percentage threshold. Effects are removed when HP rises above the threshold, including the same effects from any other source (a potion, a beacon).
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
threshold | float | no | 0.5 | HP fraction (0.0–1.0). 0.5 = below 50%. |
effects | list of { effect, amplifier } | yes | — | Effects to apply while below threshold. |
Example: berserker rage below 25% HP
{
"type": "neoorigins:low_hp_threshold",
"threshold": 0.25,
"effects": [
{ "effect": "minecraft:strength", "amplifier": 1 },
{ "effect": "minecraft:speed", "amplifier": 0 }
],
"name": "Death's Embrace",
"description": "Gain Strength II and Speed below 25% HP."
}
neoorigins:ender_gaze_immunity
Endermen do not aggro when the player looks at them. Emits the ender_gaze capability tag; EnderManLookMixin reads it and makes the Enderman’s is-looking-at-me check return false.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| (no fields) | — | — | — | Marker power. |
Example:
{
"type": "neoorigins:ender_gaze_immunity",
"name": "Void Gaze",
"description": "Endermen ignore your gaze."
}
neoorigins:burn
Sets the player on fire at a configurable interval. Used for origins that are perpetually burning or catch fire under certain conditions (pair with a condition on the power JSON to gate on daylight, biome, etc.).
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
interval | int | no | 20 | Ticks between fire applications. |
burn_duration | int | no | 100 | Fire duration in ticks per application. |
Origins compat: translates origins:burn.
Example: smoulder in sunlight
{
"type": "neoorigins:burn",
"interval": 40,
"burn_duration": 60,
"condition": { "type": "neoorigins:exposed_to_sun" },
"name": "Sun Scorch",
"description": "Burns when exposed to direct sunlight."
}