diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java index af6766b15..a5d263075 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java @@ -1,5 +1,6 @@ package kamkeel.npcs.entity; +import kamkeel.npcs.controllers.data.ability.AbilityTargetHelper; import kamkeel.npcs.controllers.data.ability.data.EnergyBarrierData; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -236,6 +237,16 @@ public abstract class EntityEnergyBarrier extends EntityEnergyAbility { } } + /** + * Check if an entity is an ally of this barrier's owner. + * Allies should not be knocked back by barriers. + */ + protected boolean isAllyOfOwner(EntityLivingBase entity) { + Entity owner = getOwnerEntity(); + if (owner == null || !(owner instanceof EntityLivingBase)) return false; + return AbilityTargetHelper.isAlly((EntityLivingBase) owner, entity); + } + // ==================== GETTERS ==================== public EnergyBarrierData getBarrierData() { diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java index 782413435..dbe8d4db6 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java @@ -58,6 +58,10 @@ public class EntityEnergyDome extends EntityEnergyBarrier { Entity owner = ownerEntityId >= 0 ? worldObj.getEntityByID(ownerEntityId) : null; if (owner != null) { this.setPosition(owner.posX, owner.posY, owner.posZ); + // Sync prevPos with owner's prevPos for smooth interpolation + this.prevPosX = owner.prevPosX; + this.prevPosY = owner.prevPosY; + this.prevPosZ = owner.prevPosZ; } } @@ -162,6 +166,7 @@ public class EntityEnergyDome extends EntityEnergyBarrier { for (EntityLivingBase ent : entities) { if (ent.getEntityId() == ownerEntityId) continue; if (!isKnockbackTarget(ent)) continue; + if (isAllyOfOwner(ent)) continue; double dx = ent.posX - posX; double dy = (ent.posY + ent.height * 0.5) - posY; diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java index d3665e319..19bc1f136 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java @@ -130,6 +130,12 @@ public class EntityEnergyPanel extends EntityEnergyBarrier { double newZ = owner.posZ + (Math.cos(yawRad) * frontDist); this.setPosition(newX, newY, newZ); + + // Sync prevPos with owner's prevPos for smooth interpolation + float prevYawRad = (float) Math.toRadians(owner.prevRotationYaw); + this.prevPosX = owner.prevPosX + (-Math.sin(prevYawRad) * frontDist); + this.prevPosY = owner.prevPosY + panelData.heightOffset + (owner.height * 0.5f); + this.prevPosZ = owner.prevPosZ + (Math.cos(prevYawRad) * frontDist); } private void updateLaunched() { @@ -296,6 +302,7 @@ public class EntityEnergyPanel extends EntityEnergyBarrier { for (EntityLivingBase ent : entities) { if (ent.getEntityId() == ownerEntityId) continue; if (!isKnockbackTarget(ent)) continue; + if (isAllyOfOwner(ent)) continue; // Transform entity position to panel-local space double dx = ent.posX - posX;