From 2d47aa00d81f1e25666697d00fbfb8b286e0ab16 Mon Sep 17 00:00:00 2001 From: Vidal Date: Tue, 3 Feb 2026 12:32:30 -0300 Subject: [PATCH] - Added standalone min max methods to FieldDef - Increased lightning density and radius minmax on all energy abilities - Made AbilityOrbBarrage interruptible during active state - Renamed AbilityEnergyBeam to AbilityBeam - Updated imports --- .../controllers/data/ability/Ability.java | 2 - .../data/ability/AbilityController.java | 2 +- ...bilityEnergyBeam.java => AbilityBeam.java} | 8 +-- .../data/ability/type/AbilityBeamDual.java | 8 +-- .../data/ability/type/AbilityDisc.java | 4 +- .../data/ability/type/AbilityDiscDual.java | 4 +- .../data/ability/type/AbilityLaserShot.java | 4 +- .../data/ability/type/AbilityOrb.java | 4 +- .../data/ability/type/AbilityOrbBarrage.java | 49 ++++++++++++++----- .../data/ability/type/AbilityOrbDual.java | 4 +- .../npcs/client/gui/builder/FieldDef.java | 10 ++++ 11 files changed, 67 insertions(+), 32 deletions(-) rename src/main/java/kamkeel/npcs/controllers/data/ability/type/{AbilityEnergyBeam.java => AbilityBeam.java} (98%) diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java index 1939304a9..015f6361b 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -2,7 +2,6 @@ package kamkeel.npcs.controllers.data.ability; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import kamkeel.npcs.controllers.data.ability.type.AbilityGuard; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; @@ -36,7 +35,6 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.entity.Entity; -import somehussar.gui.annotationHandling.GuiEditable; public abstract class Ability implements IAbility { diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java index 50e41d45c..f12ebd421 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityController.java @@ -368,7 +368,7 @@ public class AbilityController implements IAbilityHandler { registerType("cnpc:dual_disc", AbilityDisc::new); registerType("cnpc:dual_disc", AbilityDiscDual::new); registerType("cnpc:laser_shot", AbilityLaserShot::new); - registerType("cnpc:beam", AbilityEnergyBeam::new); + registerType("cnpc:beam", AbilityBeam::new); registerType("cnpc:dual_beam", AbilityBeamDual::new); // Movement abilities diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeam.java similarity index 98% rename from src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java rename to src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeam.java index 5c960960a..25a4edf76 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEnergyBeam.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeam.java @@ -30,7 +30,7 @@ import noppes.npcs.entity.EntityNPCInterface; * The beam stays attached to the origin and curves as it homes in on target. * Cannot cross over itself (self-intersection prevention). */ -public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { +public class AbilityBeam extends Ability implements IAbilityEnergyBeam { // Shape properties (standalone) private float beamWidth = 0.4f; @@ -47,7 +47,7 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { // Transient state for beam entity (used during windup charging) private transient EntityAbilityBeam beamEntity = null; - public AbilityEnergyBeam() { + public AbilityBeam() { this.typeId = "ability.cnpc.beam"; this.name = "Beam"; this.targetingMode = TargetingMode.AGGRO_TARGET; @@ -331,9 +331,9 @@ public class AbilityEnergyBeam extends Ability implements IAbilityEnergyBeam { .tab("ability.tab.visual"), FieldDef.row( FieldDef.floatField("gui.density", this::getLightningDensity, this::setLightningDensity) - .range(0.01f, 5.0f).visibleWhen(this::hasLightningEffect), + .range(0.01f, 100f).visibleWhen(this::hasLightningEffect), FieldDef.floatField("gui.radius", this::getLightningRadius, this::setLightningRadius) - .range(0.1f, 10.0f).visibleWhen(this::hasLightningEffect) + .range(0.1f, 100f).visibleWhen(this::hasLightningEffect) ).tab("ability.tab.visual") )); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeamDual.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeamDual.java index 61ba417fa..5cdf297fb 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeamDual.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityBeamDual.java @@ -444,10 +444,10 @@ public class AbilityBeamDual extends Ability { FieldDef.row( FieldDef.floatField("gui.density", () -> getLightningDensity(0), v -> setLightningDensity(0, v)) - .range(0.01f, 5.0f).visibleWhen(() -> hasLightningEffect(0)), + .range(0.01f, 100f).visibleWhen(() -> hasLightningEffect(0)), FieldDef.floatField("gui.radius", () -> getLightningRadius(0), v -> setLightningRadius(0, v)) - .range(0.1f, 10.0f).visibleWhen(() -> hasLightningEffect(0)) + .range(0.1f, 100f).visibleWhen(() -> hasLightningEffect(0)) ).tab("ability.tab.visual"), // Visual tab - Beam 2 FieldDef.enumField("ability.anchorPoint", AnchorPoint.class, @@ -480,10 +480,10 @@ public class AbilityBeamDual extends Ability { FieldDef.row( FieldDef.floatField("gui.density", () -> getLightningDensity(1), v -> setLightningDensity(1, v)) - .range(0.01f, 5.0f).visibleWhen(() -> hasLightningEffect(1)), + .range(0.01f, 100f).visibleWhen(() -> hasLightningEffect(1)), FieldDef.floatField("gui.radius", () -> getLightningRadius(1), v -> setLightningRadius(1, v)) - .range(0.1f, 10.0f).visibleWhen(() -> hasLightningEffect(1)) + .range(0.1f, 100f).visibleWhen(() -> hasLightningEffect(1)) ).tab("ability.tab.visual") )); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java index 4f48c1c90..7ee8a9260 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDisc.java @@ -329,9 +329,9 @@ public class AbilityDisc extends Ability implements IAbilityDisc { .tab("ability.tab.visual"), FieldDef.row( FieldDef.floatField("gui.density", this::getLightningDensity, this::setLightningDensity) - .range(0.01f, 5.0f).visibleWhen(this::hasLightningEffect), + .range(0.01f, 100f).visibleWhen(this::hasLightningEffect), FieldDef.floatField("gui.radius", this::getLightningRadius, this::setLightningRadius) - .range(0.1f, 10.0f).visibleWhen(this::hasLightningEffect) + .range(0.1f, 100f).visibleWhen(this::hasLightningEffect) ).tab("ability.tab.visual") )); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java index 2717da23a..e2e07da15 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityDiscDual.java @@ -490,10 +490,10 @@ public class AbilityDiscDual extends Ability { FieldDef.row( FieldDef.floatField("gui.density", () -> getLightningDensity(1), v -> setLightningDensity(1, v)) - .range(0.01f, 5.0f).visibleWhen(() -> hasLightningEffect(1)), + .range(0.01f, 100f).visibleWhen(() -> hasLightningEffect(1)), FieldDef.floatField("gui.radius", () -> getLightningRadius(1), v -> setLightningRadius(1, v)) - .range(0.1f, 10.0f).visibleWhen(() -> hasLightningEffect(1)) + .range(0.1f, 100f).visibleWhen(() -> hasLightningEffect(1)) ).tab("ability.tab.visual") )); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java index bef721080..031598207 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityLaserShot.java @@ -286,9 +286,9 @@ public class AbilityLaserShot extends Ability implements IAbilityLaserShot { FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect).tab("ability.tab.visual"), FieldDef.row( FieldDef.floatField("gui.density", this::getLightningDensity, this::setLightningDensity) - .range(0.01f, 5.0f).visibleWhen(this::hasLightningEffect), + .range(0.01f, 100f).visibleWhen(this::hasLightningEffect), FieldDef.floatField("gui.radius", this::getLightningRadius, this::setLightningRadius) - .range(0.1f, 10.0f).visibleWhen(this::hasLightningEffect) + .range(0.1f, 100f).visibleWhen(this::hasLightningEffect) ).tab("ability.tab.visual") )); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java index f1553025b..b45bf87af 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrb.java @@ -455,9 +455,9 @@ public class AbilityOrb extends Ability implements IAbilityOrb { FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect).tab("ability.tab.visual"), FieldDef.row( FieldDef.floatField("gui.density", this::getLightningDensity, this::setLightningDensity) - .range(0.01f, 5.0f).visibleWhen(this::hasLightningEffect), + .visibleWhen(this::hasLightningEffect).range(0.01f, 100f), FieldDef.floatField("gui.radius", this::getLightningRadius, this::setLightningRadius) - .range(0.1f, 10.0f).visibleWhen(this::hasLightningEffect) + .range(0.1f, 100f).visibleWhen(this::hasLightningEffect) ).tab("ability.tab.visual") )); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbBarrage.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbBarrage.java index c7f7ecfa5..79641ae41 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbBarrage.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbBarrage.java @@ -16,6 +16,7 @@ import kamkeel.npcs.util.AnchorPointHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; @@ -182,19 +183,36 @@ public class AbilityOrbBarrage extends Ability { currentOrb++; } + @Override + public boolean canInterrupt(DamageSource source) { + // Can be interrupted if the caster is hit when the beam is moving + if (!interruptible) { + return false; + } + + // Only direct physical hits can interrupt, not magic, fire, or other indirect damage + if (source == null) { + return false; + } + + // Reject indirect damage types + if (source.isMagicDamage() || source.isFireDamage() || source.isExplosion()) { + return false; + } + + // Reject damage without a direct attacker entity + if (source.getEntity() == null) { + return false; + } + + // Direct hit from an entity - can interrupt + return true; + } + @Override public void cleanup() { currentOrb = 0; - if (orbEntities != null && !orbEntities.isEmpty()) { - for (EntityAbilityOrb orbEntity : orbEntities) { - if (orbEntity != null && !orbEntity.isDead) { - orbEntity.setDead(); - } - } - orbEntities.clear(); - } - if (chargingEntities != null) { for (int i = 0; i < chargingEntities.length; i++) { if (chargingEntities[i] != null && !chargingEntities[i].isDead) { @@ -204,6 +222,15 @@ public class AbilityOrbBarrage extends Ability { } chargingEntities = null; } + + if (orbEntities != null && !orbEntities.isEmpty()) { + for (EntityAbilityOrb orbEntity : orbEntities) { + if (orbEntity != null && !orbEntity.isDead) { + orbEntity.setDead(); + } + } + orbEntities.clear(); + } } @Override @@ -567,9 +594,9 @@ public class AbilityOrbBarrage extends Ability { FieldDef.boolField("ability.lightning", this::hasLightningEffect, this::setLightningEffect).tab("ability.tab.visual"), FieldDef.row( FieldDef.floatField("gui.density", this::getLightningDensity, this::setLightningDensity) - .range(0.01f, 5.0f).visibleWhen(this::hasLightningEffect), + .range(0.01f, 100f).visibleWhen(this::hasLightningEffect), FieldDef.floatField("gui.radius", this::getLightningRadius, this::setLightningRadius) - .range(0.1f, 10.0f).visibleWhen(this::hasLightningEffect) + .range(0.1f, 100f).visibleWhen(this::hasLightningEffect) ).tab("ability.tab.visual") )); } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbDual.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbDual.java index 487f7ee05..52b5355ea 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbDual.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityOrbDual.java @@ -550,10 +550,10 @@ public class AbilityOrbDual extends Ability { FieldDef.row( FieldDef.floatField("gui.density", () -> getLightningDensity(1), v -> setLightningDensity(1, v)) - .range(0.01f, 5.0f).visibleWhen(() -> hasLightningEffect(1)), + .range(0.01f, 100f).visibleWhen(() -> hasLightningEffect(1)), FieldDef.floatField("gui.radius", () -> getLightningRadius(1), v -> setLightningRadius(1, v)) - .range(0.1f, 10.0f).visibleWhen(() -> hasLightningEffect(1)) + .range(0.1f, 100f).visibleWhen(() -> hasLightningEffect(1)) ).tab("ability.tab.visual") )); } diff --git a/src/main/java/noppes/npcs/client/gui/builder/FieldDef.java b/src/main/java/noppes/npcs/client/gui/builder/FieldDef.java index e013f4cb2..9263cc880 100644 --- a/src/main/java/noppes/npcs/client/gui/builder/FieldDef.java +++ b/src/main/java/noppes/npcs/client/gui/builder/FieldDef.java @@ -220,6 +220,16 @@ public class FieldDef { return this; } + public FieldDef min(float min) { + this.min = min; + return this; + } + + public FieldDef max(float max) { + this.max = max; + return this; + } + public FieldDef visibleWhen(BooleanSupplier condition) { this.visibleWhen = condition; return this;