Add damage type tag for knockdown bypass

This commit is contained in:
2026-01-13 08:49:11 +01:00
parent a1e1192b43
commit 97f19fcf34
4 changed files with 32 additions and 30 deletions
@@ -0,0 +1,16 @@
package net.fretux.knockedback;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.damagesource.DamageType;
public final class KnockedBackDamageTags {
public static final TagKey<DamageType> BYPASS_KNOCKDOWN = TagKey.create(
Registries.DAMAGE_TYPE,
new ResourceLocation(KnockedBack.MOD_ID, "bypass_knockdown")
);
private KnockedBackDamageTags() {
}
}
@@ -167,22 +167,9 @@ public class KnockedManager {
}
return;
}
String damageType = src.getMsgId();
boolean isFatal = player.getHealth() - event.getAmount() <= 0;
if (isFatal) {
if (Config.COMMON.explosionsBypassKnockdown.get() &&
(damageType.contains("explosion") || damageType.contains("fireworks"))) {
killAndRemove(player);
return;
}
if (Config.COMMON.fallDamageBypassesKnockdown.get() && damageType.contains("fall")) {
killAndRemove(player);
return;
}
if (Config.COMMON.lavaBypassesKnockdown.get() &&
(damageType.contains("lava") || damageType.contains("inFire") ||
damageType.contains("fire") || damageType.contains("onFire") ||
damageType.contains("fireball") || damageType.contains("hotFloor"))) {
if (src.is(KnockedBackDamageTags.BYPASS_KNOCKDOWN)) {
killAndRemove(player);
return;
}
@@ -16,9 +16,6 @@ public class Config {
public final ForgeConfigSpec.IntValue knockedDuration;
public final ForgeConfigSpec.IntValue executionTime;
public final ForgeConfigSpec.BooleanValue totemPreventsKnockdown;
public final ForgeConfigSpec.BooleanValue explosionsBypassKnockdown;
public final ForgeConfigSpec.BooleanValue fallDamageBypassesKnockdown;
public final ForgeConfigSpec.BooleanValue lavaBypassesKnockdown;
public Common(ForgeConfigSpec.Builder builder) {
builder.push("general");
@@ -37,19 +34,7 @@ public class Config {
.comment("If true, Totems of Undying prevent entering the knocked state. Default: true.")
.define("totemPreventsKnockdown", true);
explosionsBypassKnockdown = builder
.comment("If true, explosions immediately kill instead of knocking down. Default: true.")
.define("explosionsBypassKnockdown", true);
fallDamageBypassesKnockdown = builder
.comment("If true, fatal fall damage kills instead of knocking down. Default: true.")
.define("fallDamageBypassesKnockdown", true);
lavaBypassesKnockdown = builder
.comment("If true, lava or fire damage kills instead of knocking down. Default: true.")
.define("lavaBypassesKnockdown", true);
builder.pop();
}
}
}
}
@@ -0,0 +1,14 @@
{
"replace": false,
"values": [
"minecraft:explosion",
"minecraft:player_explosion",
"minecraft:fireworks",
"minecraft:fall",
"minecraft:lava",
"minecraft:in_fire",
"minecraft:on_fire",
"minecraft:hot_floor",
"minecraft:fireball"
]
}