From d8b18d7058a9c5b766e04f533b2aafa7d84c8163 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 9 Mar 2026 17:47:13 -0400 Subject: [PATCH] Allow Null Owners in Energy --- .../java/kamkeel/npcs/entity/EntityAbilityZone.java | 6 +++--- .../java/kamkeel/npcs/entity/EntityEnergyDome.java | 2 +- .../java/kamkeel/npcs/entity/EntityEnergyPanel.java | 2 +- .../kamkeel/npcs/entity/EntityEnergyProjectile.java | 2 +- .../java/kamkeel/npcs/entity/EntityEnergySweeper.java | 10 ++++++---- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityZone.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityZone.java index 25e56cbd8..7913386c6 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityZone.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityZone.java @@ -201,7 +201,7 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD double x, double y, double z) { this(world); this.zoneType = type; - this.ownerEntityId = owner.getEntityId(); + this.ownerEntityId = owner != null ? owner.getEntityId() : -1; // Snap to ground with tiny offset to prevent z-clipping double groundY = Ability.findGroundLevel(world, x, y, z) + GROUND_OFFSET; this.setPosition(x, groundY, z); @@ -213,7 +213,7 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD */ public void initAsHazard(Entity owner, double x, double y, double z) { this.zoneType = ZoneType.HAZARD; - this.ownerEntityId = owner.getEntityId(); + this.ownerEntityId = owner != null ? owner.getEntityId() : -1; double groundY = Ability.findGroundLevel(worldObj, x, y, z) + GROUND_OFFSET; this.setPosition(x, groundY, z); this.ticksSinceDamage = damageInterval; @@ -225,7 +225,7 @@ public class EntityAbilityZone extends Entity implements IEntityAdditionalSpawnD */ public void initAsTrap(Entity owner, double x, double y, double z) { this.zoneType = ZoneType.TRAP; - this.ownerEntityId = owner.getEntityId(); + this.ownerEntityId = owner != null ? owner.getEntityId() : -1; double groundY = Ability.findGroundLevel(worldObj, x, y, z) + GROUND_OFFSET; this.setPosition(x, groundY, z); this.ticksSinceLastTrigger = triggerCooldown; diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java index aa3e71759..697fa4c16 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java @@ -51,7 +51,7 @@ public class EntityEnergyDome extends EntityEnergyBarrier { this(world); this.noClip = true; this.stepHeight = 0.0F; - this.ownerEntityId = owner.getEntityId(); + this.ownerEntityId = owner != null ? owner.getEntityId() : -1; this.setDomeRadius(domeRadius); // Defensive copy: entities must never share data objects with the source ability. this.displayData = display != null ? display.copy() : new EnergyDisplayData(); diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java index 77c5c680d..96949bbd4 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java @@ -55,7 +55,7 @@ public class EntityEnergyPanel extends EntityEnergyBarrier { EnergyBarrierData barrier, EnergyPanelData panel) { this(world); this.setPosition(x, y + panel.heightOffset, z); - this.ownerEntityId = owner.getEntityId(); + this.ownerEntityId = owner != null ? owner.getEntityId() : -1; this.panelYaw = yaw; this.prevPanelYaw = yaw; this.mode = mode; diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java index c51949386..1527f644d 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java @@ -184,7 +184,7 @@ public abstract class EntityEnergyProjectile extends EntityEnergyAbility { this.startY = y; this.startZ = z; - this.ownerEntityId = owner.getEntityId(); + this.ownerEntityId = owner != null ? owner.getEntityId() : -1; this.targetEntityId = target != null ? target.getEntityId() : -1; // Visual diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergySweeper.java b/src/main/java/kamkeel/npcs/entity/EntityEnergySweeper.java index 0c5c48c23..263ecd36c 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergySweeper.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergySweeper.java @@ -78,7 +78,7 @@ public class EntityEnergySweeper extends EntityEnergyAbility { boolean lockOnTarget) { this(world); - this.ownerEntityId = owner.getEntityId(); + this.ownerEntityId = owner != null ? owner.getEntityId() : -1; this.targetEntityId = target != null ? target.getEntityId() : -1; this.beamLength = beamLength; this.beamWidth = beamWidth; @@ -95,16 +95,18 @@ public class EntityEnergySweeper extends EntityEnergyAbility { this.maxTicks = (int) ((360.0f * numberOfRotations) / sweepSpeed) + 10; // Calculate base yaw - if (lockOnTarget && target != null) { + if (lockOnTarget && target != null && owner != null) { double dx = target.posX - owner.posX; double dz = target.posZ - owner.posZ; this.baseYaw = (float) Math.toDegrees(Math.atan2(-dx, dz)); - } else { + } else if (owner != null) { this.baseYaw = owner.rotationYaw; } // Position at beam center (bottom at feet, top at feet + beamHeight) - this.setPosition(owner.posX, owner.posY + beamHeight / 2.0, owner.posZ); + if (owner != null) { + this.setPosition(owner.posX, owner.posY + beamHeight / 2.0, owner.posZ); + } // Ready to deal damage immediately this.ticksSinceDamage = damageInterval;