diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyDome.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDome.java similarity index 96% rename from src/main/java/kamkeel/npcs/client/renderer/RenderEnergyDome.java rename to src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDome.java index 3e05168d9..beebe98f3 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyDome.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityDome.java @@ -2,7 +2,7 @@ package kamkeel.npcs.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import kamkeel.npcs.entity.EntityEnergyDome; +import kamkeel.npcs.entity.EntityAbilityDome; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; import org.lwjgl.opengl.GL11; @@ -13,11 +13,11 @@ import org.lwjgl.opengl.GL11; * Optional skybox texture rendered on the interior surface. */ @SideOnly(Side.CLIENT) -public class RenderEnergyDome extends RenderEnergyBarrier { +public class RenderAbilityDome extends RenderEnergyBarrier { @Override public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { - EntityEnergyDome dome = (EntityEnergyDome) entity; + EntityAbilityDome dome = (EntityAbilityDome) entity; float radius = dome.getDomeRadius(); float healthPercent = dome.getHealthPercent(); diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyPanel.java b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityPanel.java similarity index 96% rename from src/main/java/kamkeel/npcs/client/renderer/RenderEnergyPanel.java rename to src/main/java/kamkeel/npcs/client/renderer/RenderAbilityPanel.java index 24c9ea241..1261aaf1e 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyPanel.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderAbilityPanel.java @@ -2,7 +2,7 @@ package kamkeel.npcs.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import kamkeel.npcs.entity.EntityEnergyPanel; +import kamkeel.npcs.entity.EntityAbilityPanel; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; import org.lwjgl.opengl.GL11; @@ -13,11 +13,11 @@ import org.lwjgl.opengl.GL11; * Voxel-blocky style with inner/outer layers. */ @SideOnly(Side.CLIENT) -public class RenderEnergyPanel extends RenderEnergyBarrier { +public class RenderAbilityPanel extends RenderEnergyBarrier { @Override public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTicks) { - EntityEnergyPanel panel = (EntityEnergyPanel) entity; + EntityAbilityPanel panel = (EntityAbilityPanel) entity; float width = panel.getPanelData().panelWidth; float height = panel.getPanelData().panelHeight; diff --git a/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyBarrier.java b/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyBarrier.java index 6f4e1e89f..676440035 100644 --- a/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyBarrier.java +++ b/src/main/java/kamkeel/npcs/client/renderer/RenderEnergyBarrier.java @@ -2,7 +2,7 @@ package kamkeel.npcs.client.renderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import kamkeel.npcs.entity.EntityEnergyBarrier; +import kamkeel.npcs.entity.EntityAbilityBarrier; /** * Intermediate renderer base for energy barrier entities (Dome, Panel). @@ -15,7 +15,7 @@ public abstract class RenderEnergyBarrier extends RenderEnergyAbility { * Compute the alpha boost from a hit flash effect. * Flash value decays from 4 to 0, producing alpha from 0.3 to 0. */ - protected float computeFlashAlpha(EntityEnergyBarrier barrier) { + protected float computeFlashAlpha(EntityAbilityBarrier barrier) { byte flash = barrier.getHitFlash(); if (flash <= 0) return 0.0f; return flash / 4.0f * 0.3f; diff --git a/src/main/java/kamkeel/npcs/controllers/AbilityController.java b/src/main/java/kamkeel/npcs/controllers/AbilityController.java index 02c438e62..a908e77f2 100644 --- a/src/main/java/kamkeel/npcs/controllers/AbilityController.java +++ b/src/main/java/kamkeel/npcs/controllers/AbilityController.java @@ -1002,6 +1002,29 @@ public class AbilityController implements IAbilityHandler { return damage; } + /** + * Fire modifyBarrierHealth on all extenders. Cumulative — each extender's output feeds the next. + */ + public float fireModifyBarrierHealth(Ability ability, EntityLivingBase caster, float baseHealth) { + float health = baseHealth; + for (IAbilityExtender ext : extenders) { + health = ext.modifyBarrierHealth(ability, caster, health); + } + return health; + } + + /** + * Fire onAbilityHeal on all extenders. Chain of responsibility — first true wins. + */ + public boolean fireOnAbilityHeal(Ability ability, EntityLivingBase caster, EntityLivingBase target, float healAmount) { + for (IAbilityExtender ext : extenders) { + if (ext.onAbilityHeal(ability, caster, target, healAmount)) { + return true; + } + } + return false; + } + // ═══════════════════════════════════════════════════════════════════════════ // IAbilityHandler // ═══════════════════════════════════════════════════════════════════════════ 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 d7ca77eac..9d61188c5 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/Ability.java @@ -7,6 +7,9 @@ import kamkeel.npcs.controllers.data.ability.conditions.AbilityCondition; import kamkeel.npcs.controllers.data.telegraph.Telegraph; import kamkeel.npcs.controllers.data.telegraph.TelegraphInstance; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; +import kamkeel.npcs.entity.EntityAbilityBarrier; +import kamkeel.npcs.entity.EntityAbilityDome; +import kamkeel.npcs.entity.EntityAbilityPanel; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -20,9 +23,6 @@ import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.StatCollector; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import kamkeel.npcs.entity.EntityEnergyBarrier; -import kamkeel.npcs.entity.EntityEnergyDome; -import kamkeel.npcs.entity.EntityEnergyPanel; import noppes.npcs.DataAbilities; import noppes.npcs.NpcDamageSource; import noppes.npcs.api.INbt; @@ -2264,9 +2264,9 @@ public abstract class Ability implements IAbility, IAbilityAction { double maxZ = Math.max(caster.posZ, target.posZ) + searchRange; AxisAlignedBB searchBox = AxisAlignedBB.getBoundingBox(minX, minY, minZ, maxX, maxY, maxZ); - List barriers = world.getEntitiesWithinAABB(EntityEnergyBarrier.class, searchBox); + List barriers = world.getEntitiesWithinAABB(EntityAbilityBarrier.class, searchBox); - for (EntityEnergyBarrier barrier : barriers) { + for (EntityAbilityBarrier barrier : barriers) { if (barrier.isDead) continue; if (barrier.isCharging()) continue; @@ -2277,10 +2277,10 @@ public abstract class Ability implements IAbility, IAbilityAction { if (AbilityTargetHelper.isAlly(caster, (EntityLivingBase) barrierOwner)) continue; } - if (barrier instanceof EntityEnergyDome) { - if (isDomeBlocking((EntityEnergyDome) barrier, caster, target)) return true; - } else if (barrier instanceof EntityEnergyPanel) { - if (isPanelBlocking((EntityEnergyPanel) barrier, caster, target)) return true; + if (barrier instanceof EntityAbilityDome) { + if (isDomeBlocking((EntityAbilityDome) barrier, caster, target)) return true; + } else if (barrier instanceof EntityAbilityPanel) { + if (isPanelBlocking((EntityAbilityPanel) barrier, caster, target)) return true; } } @@ -2291,7 +2291,7 @@ public abstract class Ability implements IAbility, IAbilityAction { * Check if a dome blocks an attack from caster to target. * Blocks when caster is outside and target is inside the dome. */ - private static boolean isDomeBlocking(EntityEnergyDome dome, EntityLivingBase caster, EntityLivingBase target) { + private static boolean isDomeBlocking(EntityAbilityDome dome, EntityLivingBase caster, EntityLivingBase target) { float radius = dome.getDomeRadius(); double cdx = caster.posX - dome.posX; @@ -2312,7 +2312,7 @@ public abstract class Ability implements IAbility, IAbilityAction { * Check if a panel blocks an attack from caster to target. * Checks if the line from caster to target crosses through the panel bounds. */ - private static boolean isPanelBlocking(EntityEnergyPanel panel, EntityLivingBase caster, EntityLivingBase target) { + private static boolean isPanelBlocking(EntityAbilityPanel panel, EntityLivingBase caster, EntityLivingBase target) { float halfW = panel.getPanelData().panelWidth * 0.5f; float halfH = panel.getPanelData().panelHeight * 0.5f; diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAction.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAction.java index 77370b58c..60a64369d 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAction.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilityAction.java @@ -5,7 +5,7 @@ import net.minecraft.nbt.NBTTagCompound; /** * Unified slot for storing any combat action: inline ability, ability reference, or chain reference. - * Replaces {@link AbilitySlot} with support for all {@link IAbilityAction} types. + * Support for all {@link IAbilityAction} types. *

* References are lazy-resolved via their respective controllers and cached until * the controller revision changes. diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java b/src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java deleted file mode 100644 index 1afbf0906..000000000 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/AbilitySlot.java +++ /dev/null @@ -1,163 +0,0 @@ -package kamkeel.npcs.controllers.data.ability; - -import kamkeel.npcs.controllers.AbilityController; -import net.minecraft.nbt.NBTTagCompound; - -/** - * Wrapper that stores either an inline ability (full NBT) or a reference - * to a built-in/custom ability (by name or UUID). - *

- * References are lazy-resolved via {@link AbilityController#resolveAbility(String)} - * and cached until the controller version changes. - * - * @deprecated Use {@link AbilityAction} instead, which supports abilities and chained abilities. - */ -@Deprecated -public class AbilitySlot { - - private Ability inlineAbility; - private String referenceId; - - /** - * Per-slot enabled override for reference slots (null = use master's default). - */ - private Boolean enabledOverride; - - private transient Ability cachedAbility; - private transient int cachedVersion = -1; - - private AbilitySlot() { - } - - /** - * Create a slot with an inline (embedded) ability. - */ - public static AbilitySlot inline(Ability ability) { - AbilitySlot slot = new AbilitySlot(); - slot.inlineAbility = ability; - slot.referenceId = null; - return slot; - } - - /** - * Create a slot that references a built-in ability (by name) or custom ability (by name). - */ - public static AbilitySlot reference(String referenceId) { - AbilitySlot slot = new AbilitySlot(); - slot.inlineAbility = null; - slot.referenceId = referenceId; - return slot; - } - - public boolean isReference() { - return referenceId != null; - } - - public String getReferenceId() { - return referenceId; - } - - /** - * Get the resolved ability. For inline slots, returns the ability directly. - * For reference slots, lazily resolves from AbilityController and caches. - * Returns null if the reference cannot be resolved (broken ref). - */ - public Ability getAbility() { - if (!isReference()) { - return inlineAbility; - } - - // Lazy resolve with version-based cache invalidation - AbilityController controller = AbilityController.Instance; - if (controller == null) return null; - - int currentVersion = controller.getCustomAbilityRevision(); - if (cachedAbility != null && cachedVersion == currentVersion) { - return cachedAbility; - } - - cachedAbility = controller.resolveAbility(referenceId); - // Apply per-slot enabled override so NPC-specific enable/disable persists - if (cachedAbility != null && enabledOverride != null) { - cachedAbility.setEnabled(enabledOverride); - } - cachedVersion = currentVersion; - return cachedAbility; - } - - /** - * Set the per-slot enabled override for reference slots. - * For inline slots, delegates directly to the ability. - */ - public void setEnabled(boolean enabled) { - if (!isReference()) { - if (inlineAbility != null) { - inlineAbility.setEnabled(enabled); - } - } else { - this.enabledOverride = enabled; - // Also update the cached ability immediately if present - if (cachedAbility != null) { - cachedAbility.setEnabled(enabled); - } - } - } - - /** - * Get the inline ability directly (null for reference slots). - */ - public Ability getInlineAbility() { - return inlineAbility; - } - - /** - * Convert this reference slot to an inline slot by copying the resolved ability. - * No-op if already inline. Returns false if resolution fails. - */ - public boolean convertToInline() { - if (!isReference()) return true; - - Ability resolved = getAbility(); - if (resolved == null) return false; - - // Deep copy via NBT round-trip - inlineAbility = AbilityController.Instance.fromNBT(resolved.writeNBT()); - referenceId = null; - cachedAbility = null; - cachedVersion = -1; - return true; - } - - // ═══════════════════════════════════════════════════════════════════ - // NBT - // ═══════════════════════════════════════════════════════════════════ - - public NBTTagCompound writeNBT() { - if (isReference()) { - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setString("Reference", referenceId); - if (enabledOverride != null) { - nbt.setBoolean("RefEnabled", enabledOverride); - } - return nbt; - } - return inlineAbility != null ? inlineAbility.writeNBT() : new NBTTagCompound(); - } - - public static AbilitySlot fromNBT(NBTTagCompound nbt) { - if (nbt == null) return null; - - if (nbt.hasKey("Reference")) { - AbilitySlot slot = reference(nbt.getString("Reference")); - if (nbt.hasKey("RefEnabled")) { - slot.enabledOverride = nbt.getBoolean("RefEnabled"); - } - return slot; - } - - // Inline ability - Ability ability = AbilityController.Instance.fromNBT(nbt); - if (ability == null) return null; - return inline(ability); - } -} diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/IAbilityExtender.java b/src/main/java/kamkeel/npcs/controllers/data/ability/IAbilityExtender.java index 2bb179cc2..f3e7ccfd8 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/IAbilityExtender.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/IAbilityExtender.java @@ -87,4 +87,32 @@ public interface IAbilityExtender { default float modifyProjectileDamage(Ability ability, EntityLivingBase caster, float baseDamage) { return baseDamage; } + + /** + * Called when a barrier entity is about to be created, allowing extenders to modify its max health. + * Cumulative: all extenders apply in sequence, each receiving the previous output. + * + * @param ability The barrier ability being executed + * @param caster The entity creating the barrier + * @param baseHealth The base max health from EnergyBarrierData.maxHealth + * @return The modified max health value + */ + default float modifyBarrierHealth(Ability ability, EntityLivingBase caster, float baseHealth) { + return baseHealth; + } + + /** + * Called when an ability is about to heal an entity. + * Return true to handle the healing (skip default entity.heal()). + * Chain of responsibility: first returning true wins. + * + * @param ability The ability performing the heal + * @param caster The entity casting the ability + * @param target The entity being healed + * @param healAmount The heal amount calculated by the ability + * @return true if healing was handled (skip default), false to pass to next extender or default + */ + default boolean onAbilityHeal(Ability ability, EntityLivingBase caster, EntityLivingBase target, float healAmount) { + return false; + } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEffect.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEffect.java index c81e97ced..d4f9c474b 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEffect.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/AbilityEffect.java @@ -131,7 +131,7 @@ public class AbilityEffect extends Ability implements IAbilityEffect { if (instantHeal) { for (EntityLivingBase entity : getAffectedEntities()) { - healEntity(entity); + healEntity(caster, entity); applyAllEffects(caster, entity); spawnHealParticles(caster.worldObj, entity); } @@ -159,7 +159,9 @@ public class AbilityEffect extends Ability implements IAbilityEffect { } if (totalTickHeal > 0) { - entity.heal(totalTickHeal); + if (!AbilityController.Instance.fireOnAbilityHeal(this, caster, entity, totalTickHeal)) { + entity.heal(totalTickHeal); + } } if (tick % 20 == 0) { @@ -226,13 +228,15 @@ public class AbilityEffect extends Ability implements IAbilityEffect { } } - private void healEntity(EntityLivingBase entity) { + private void healEntity(EntityLivingBase caster, EntityLivingBase entity) { float totalHeal = healAmount; if (healPercent > 0) { totalHeal += entity.getMaxHealth() * healPercent; } if (totalHeal > 0) { - entity.heal(totalHeal); + if (!AbilityController.Instance.fireOnAbilityHeal(this, caster, entity, totalHeal)) { + entity.heal(totalHeal); + } } } diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyBarrier.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityBarrier.java similarity index 90% rename from src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyBarrier.java rename to src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityBarrier.java index 3366290e9..841750d1c 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityEnergyBarrier.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityBarrier.java @@ -2,9 +2,10 @@ package kamkeel.npcs.controllers.data.ability.type.energy; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import kamkeel.npcs.controllers.AbilityController; import kamkeel.npcs.controllers.data.ability.data.EnergyBarrierData; import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; -import kamkeel.npcs.entity.EntityEnergyBarrier; +import kamkeel.npcs.entity.EntityAbilityBarrier; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; @@ -16,14 +17,14 @@ import java.util.List; * Abstract base for energy barrier abilities (Dome, Wall, Shield). * Handles shared visual data, barrier configuration, and lifecycle management. */ -public abstract class AbilityEnergyBarrier extends AbilityEnergy { +public abstract class AbilityBarrier extends AbilityEnergy { protected final EnergyBarrierData barrierData; // Runtime entity tracking - protected transient EntityEnergyBarrier barrierEntity; + protected transient EntityAbilityBarrier barrierEntity; - protected AbilityEnergyBarrier(EnergyDisplayData displayData, EnergyBarrierData barrierData) { + protected AbilityBarrier(EnergyDisplayData displayData, EnergyBarrierData barrierData) { super(displayData); this.barrierData = barrierData; } @@ -33,7 +34,7 @@ public abstract class AbilityEnergyBarrier extends AbilityEnergy { /** * Create and spawn the barrier entity during execution. */ - protected abstract EntityEnergyBarrier createBarrierEntity(EntityLivingBase caster, EntityLivingBase target); + protected abstract EntityAbilityBarrier createBarrierEntity(EntityLivingBase caster, EntityLivingBase target); /** * Add type-specific GUI field definitions. @@ -80,6 +81,7 @@ public abstract class AbilityEnergyBarrier extends AbilityEnergy { if (tick == 1) { barrierEntity = createBarrierEntity(caster, target); if (barrierEntity != null) { + applyBarrierHealthModifiers(caster); barrierEntity.setupCharging(getWindUpTicks()); spawnAbilityEntity(barrierEntity); } @@ -95,6 +97,7 @@ public abstract class AbilityEnergyBarrier extends AbilityEnergy { // No windup or entity died — create fresh barrierEntity = createBarrierEntity(caster, target); if (barrierEntity != null) { + applyBarrierHealthModifiers(caster); spawnAbilityEntity(barrierEntity); } } @@ -124,6 +127,16 @@ public abstract class AbilityEnergyBarrier extends AbilityEnergy { public void onComplete(EntityLivingBase caster, EntityLivingBase target) { } + /** + * Allow extenders to modify the barrier's max health at spawn time. + */ + private void applyBarrierHealthModifiers(EntityLivingBase caster) { + float modHealth = AbilityController.Instance.fireModifyBarrierHealth(this, caster, barrierData.maxHealth); + if (modHealth != barrierData.maxHealth) { + barrierEntity.setBarrierMaxHealth(modHealth); + } + } + @Override public void onInterrupt(EntityLivingBase caster, DamageSource source, float damage) { cleanup(); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDome.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDome.java index 78a317cc2..1663f2447 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDome.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityDome.java @@ -8,8 +8,8 @@ import kamkeel.npcs.controllers.data.ability.TargetingMode; import kamkeel.npcs.controllers.data.ability.data.EnergyBarrierData; import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; -import kamkeel.npcs.entity.EntityEnergyBarrier; -import kamkeel.npcs.entity.EntityEnergyDome; +import kamkeel.npcs.entity.EntityAbilityBarrier; +import kamkeel.npcs.entity.EntityAbilityDome; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.client.gui.builder.FieldDef; @@ -22,7 +22,7 @@ import java.util.List; * Blocks incoming energy projectiles with configurable damage multipliers. * Duration and/or HP based. */ -public class AbilityDome extends AbilityEnergyBarrier { +public class AbilityDome extends AbilityBarrier { private float domeRadius = 5.0f; private boolean followCaster = false; @@ -47,8 +47,8 @@ public class AbilityDome extends AbilityEnergyBarrier { // ==================== ABSTRACT IMPLEMENTATIONS ==================== @Override - protected EntityEnergyBarrier createBarrierEntity(EntityLivingBase caster, EntityLivingBase target) { - EntityEnergyDome dome = new EntityEnergyDome( + protected EntityAbilityBarrier createBarrierEntity(EntityLivingBase caster, EntityLivingBase target) { + EntityAbilityDome dome = new EntityAbilityDome( caster.worldObj, caster, caster.posX, caster.posY, caster.posZ, domeRadius, displayData.copy(), lightningData.copy(), barrierData.copy() diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityShield.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityShield.java index f19f9844f..2d9c515a4 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityShield.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityShield.java @@ -10,8 +10,8 @@ import kamkeel.npcs.controllers.data.ability.data.EnergyBarrierData; import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; import kamkeel.npcs.controllers.data.ability.data.EnergyPanelData; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; -import kamkeel.npcs.entity.EntityEnergyBarrier; -import kamkeel.npcs.entity.EntityEnergyPanel; +import kamkeel.npcs.entity.EntityAbilityBarrier; +import kamkeel.npcs.entity.EntityAbilityPanel; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.client.gui.builder.FieldDef; @@ -24,7 +24,7 @@ import java.util.List; * The shield follows the caster's position and rotates with their look direction. * Cannot be placed — it's always held. */ -public class AbilityShield extends AbilityEnergyBarrier { +public class AbilityShield extends AbilityBarrier { private float shieldWidth = 2.5f; private float shieldHeight = 2.5f; @@ -50,7 +50,7 @@ public class AbilityShield extends AbilityEnergyBarrier { // ==================== ABSTRACT IMPLEMENTATIONS ==================== @Override - protected EntityEnergyBarrier createBarrierEntity(EntityLivingBase caster, EntityLivingBase target) { + protected EntityAbilityBarrier createBarrierEntity(EntityLivingBase caster, EntityLivingBase target) { EnergyPanelData panelData = new EnergyPanelData(shieldWidth, shieldHeight, 0.0f); float frontDist = 1.5f; @@ -59,10 +59,10 @@ public class AbilityShield extends AbilityEnergyBarrier { double spawnY = caster.posY + (caster.height * 0.5f); double spawnZ = caster.posZ + (Math.cos(yawRad) * frontDist); - EntityEnergyPanel panel = new EntityEnergyPanel( + EntityAbilityPanel panel = new EntityAbilityPanel( caster.worldObj, caster, spawnX, spawnY, spawnZ, caster.rotationYaw, - EntityEnergyPanel.PanelMode.HELD, + EntityAbilityPanel.PanelMode.HELD, displayData.copy(), lightningData.copy(), barrierData.copy(), panelData ); panel.setSourceAbility(this); diff --git a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityWall.java b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityWall.java index 4320177c1..5237485b8 100644 --- a/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityWall.java +++ b/src/main/java/kamkeel/npcs/controllers/data/ability/type/energy/AbilityWall.java @@ -9,8 +9,8 @@ import kamkeel.npcs.controllers.data.ability.data.EnergyBarrierData; import kamkeel.npcs.controllers.data.ability.data.EnergyDisplayData; import kamkeel.npcs.controllers.data.ability.data.EnergyPanelData; import kamkeel.npcs.controllers.data.telegraph.TelegraphType; -import kamkeel.npcs.entity.EntityEnergyBarrier; -import kamkeel.npcs.entity.EntityEnergyPanel; +import kamkeel.npcs.entity.EntityAbilityBarrier; +import kamkeel.npcs.entity.EntityAbilityPanel; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.client.gui.builder.FieldDef; @@ -23,7 +23,7 @@ import java.util.List; * Can float above ground (configurable height offset). * Optional launching mode fires the wall forward with damage/knockback. */ -public class AbilityWall extends AbilityEnergyBarrier { +public class AbilityWall extends AbilityBarrier { private final EnergyPanelData panelData; @@ -55,7 +55,7 @@ public class AbilityWall extends AbilityEnergyBarrier { // ==================== ABSTRACT IMPLEMENTATIONS ==================== @Override - protected EntityEnergyBarrier createBarrierEntity(EntityLivingBase caster, EntityLivingBase target) { + protected EntityAbilityBarrier createBarrierEntity(EntityLivingBase caster, EntityLivingBase target) { // Place wall between caster and target double placeX, placeY, placeZ; float yaw; @@ -87,11 +87,11 @@ public class AbilityWall extends AbilityEnergyBarrier { yaw = caster.rotationYaw; } - EntityEnergyPanel.PanelMode mode = panelData.launching - ? EntityEnergyPanel.PanelMode.LAUNCHED - : EntityEnergyPanel.PanelMode.PLACED; + EntityAbilityPanel.PanelMode mode = panelData.launching + ? EntityAbilityPanel.PanelMode.LAUNCHED + : EntityAbilityPanel.PanelMode.PLACED; - EntityEnergyPanel panel = new EntityEnergyPanel( + EntityAbilityPanel panel = new EntityAbilityPanel( caster.worldObj, caster, placeX, placeY, placeZ, yaw, mode, displayData.copy(), lightningData.copy(), barrierData.copy(), panelData.copy() diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityBarrier.java similarity index 92% rename from src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java rename to src/main/java/kamkeel/npcs/entity/EntityAbilityBarrier.java index 2db51fd14..02fbbdc4e 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyBarrier.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityBarrier.java @@ -22,24 +22,24 @@ import java.util.List; * and barrier lifecycle management. * Extends EntityEnergyAbility for shared visual/owner/charging state. */ -public abstract class EntityEnergyBarrier extends EntityEnergyAbility { +public abstract class EntityAbilityBarrier extends EntityEnergyAbility { // ==================== ACTIVE BARRIER REGISTRY ==================== - private static final List> activeBarriers = new ArrayList<>(); + private static final List> activeBarriers = new ArrayList<>(); private boolean tracked = false; - public static void trackBarrier(EntityEnergyBarrier barrier) { + public static void trackBarrier(EntityAbilityBarrier barrier) { activeBarriers.add(new WeakReference<>(barrier)); } /** * Get all living barriers in the given world. Auto-cleans dead refs. */ - public static List getActiveBarriers(World world) { - List result = new ArrayList<>(); - Iterator> it = activeBarriers.iterator(); + public static List getActiveBarriers(World world) { + List result = new ArrayList<>(); + Iterator> it = activeBarriers.iterator(); while (it.hasNext()) { - EntityEnergyBarrier b = it.next().get(); + EntityAbilityBarrier b = it.next().get(); if (b == null || b.isDead) { it.remove(); } else if (b.worldObj == world) { @@ -62,7 +62,7 @@ public abstract class EntityEnergyBarrier extends EntityEnergyAbility { protected static final int DW_HEALTH_PERCENT = 21; protected static final int DW_HIT_FLASH = 22; - public EntityEnergyBarrier(World world) { + public EntityAbilityBarrier(World world) { super(world); this.noClip = true; } @@ -358,10 +358,10 @@ public abstract class EntityEnergyBarrier extends EntityEnergyAbility { * Find a barrier that would absorb damage for the given entity (its caster). * Returns the barrier if: absorbing is enabled AND entity is the barrier's owner. */ - public static EntityEnergyBarrier getAbsorbingBarrier(Entity entity) { + public static EntityAbilityBarrier getAbsorbingBarrier(Entity entity) { if (entity == null || entity.worldObj == null) return null; - List barriers = getActiveBarriers(entity.worldObj); - for (EntityEnergyBarrier barrier : barriers) { + List barriers = getActiveBarriers(entity.worldObj); + for (EntityAbilityBarrier barrier : barriers) { if (barrier.isDead) continue; if (!barrier.barrierData.absorbing) continue; if (barrier.ownerEntityId == entity.getEntityId()) { @@ -425,6 +425,16 @@ public abstract class EntityEnergyBarrier extends EntityEnergyAbility { syncHealthPercent(); } + /** + * Override the barrier's max health and set current health to match. + * Used by extenders (e.g., DBC scaling) to dynamically set barrier HP at spawn time. + */ + public void setBarrierMaxHealth(float maxHealth) { + this.barrierData.setMaxHealth(maxHealth); + this.currentHealth = maxHealth; + syncHealthPercent(); + } + public int getTicksAlive() { return ticksAlive; } diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityDome.java similarity index 98% rename from src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java rename to src/main/java/kamkeel/npcs/entity/EntityAbilityDome.java index 68fa9ec8b..149475d0d 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyDome.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityDome.java @@ -22,9 +22,9 @@ import java.util.List; * Energy Dome entity - a spherical barrier that blocks incoming energy projectiles. * Centered on the caster's position at time of casting. * Only blocks incoming attacks (not outgoing from allies inside). - * Extends EntityEnergyBarrier for shared barrier logic. + * Extends EntityAbilityBarrier for shared barrier logic. */ -public class EntityEnergyDome extends EntityEnergyBarrier { +public class EntityAbilityDome extends EntityAbilityBarrier { // ==================== DOME-SPECIFIC PROPERTIES ==================== protected float domeRadius = 5.0f; @@ -35,16 +35,16 @@ public class EntityEnergyDome extends EntityEnergyBarrier { private boolean inTickMelee = false; private final HashSet processedMeleeSwings = new HashSet<>(); - public EntityEnergyDome(World world) { + public EntityAbilityDome(World world) { super(world); this.noClip = true; this.stepHeight = 0.0F; this.setSize(1.0f, 1.0f); } - public EntityEnergyDome(World world, EntityLivingBase owner, double x, double y, double z, - float domeRadius, EnergyDisplayData display, EnergyLightningData lightning, - EnergyBarrierData barrier) { + public EntityAbilityDome(World world, EntityLivingBase owner, double x, double y, double z, + float domeRadius, EnergyDisplayData display, EnergyLightningData lightning, + EnergyBarrierData barrier) { this(world); this.noClip = true; this.stepHeight = 0.0F; diff --git a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java index 8f9df2bb5..6a568a89d 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityLaser.java @@ -382,8 +382,8 @@ public class EntityAbilityLaser extends EntityEnergyProjectile { protected boolean checkBarrierCollision() { if (currentLength <= 0 || fullyExtended) return false; - List barriers = EntityEnergyBarrier.getActiveBarriers(worldObj); - for (EntityEnergyBarrier barrier : barriers) { + List barriers = EntityAbilityBarrier.getActiveBarriers(worldObj); + for (EntityAbilityBarrier barrier : barriers) { if (barrier.isDead || barrier.isCharging()) continue; if (barrier.getOwnerEntityId() == this.ownerEntityId) continue; @@ -396,8 +396,8 @@ public class EntityAbilityLaser extends EntityEnergyProjectile { } } - if (barrier instanceof EntityEnergyDome) { - EntityEnergyDome dome = (EntityEnergyDome) barrier; + if (barrier instanceof EntityAbilityDome) { + EntityAbilityDome dome = (EntityAbilityDome) barrier; float intersectDist = getLineSphereIntersection(dome); if (intersectDist >= 0) { // Truncate laser at dome surface @@ -431,7 +431,7 @@ public class EntityAbilityLaser extends EntityEnergyProjectile { * Returns the distance along the laser direction to the first entry point, * or -1 if no intersection from outside. */ - private float getLineSphereIntersection(EntityEnergyDome dome) { + private float getLineSphereIntersection(EntityAbilityDome dome) { double cx = dome.posX; double cy = dome.posY; double cz = dome.posZ; diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java b/src/main/java/kamkeel/npcs/entity/EntityAbilityPanel.java similarity index 97% rename from src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java rename to src/main/java/kamkeel/npcs/entity/EntityAbilityPanel.java index 1afc1f2bc..f1a89012e 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyPanel.java +++ b/src/main/java/kamkeel/npcs/entity/EntityAbilityPanel.java @@ -22,9 +22,9 @@ import java.util.List; /** * Energy Panel entity - a flat rectangular barrier used by Wall and Shield abilities. * Supports three modes: PLACED (stationary), HELD (tracks caster), LAUNCHED (moves forward). - * Extends EntityEnergyBarrier for shared barrier logic. + * Extends EntityAbilityBarrier for shared barrier logic. */ -public class EntityEnergyPanel extends EntityEnergyBarrier { +public class EntityAbilityPanel extends EntityAbilityBarrier { public enum PanelMode { PLACED, // Stationary wall @@ -42,15 +42,15 @@ public class EntityEnergyPanel extends EntityEnergyBarrier { protected float targetPanelWidth; protected float targetPanelHeight; - public EntityEnergyPanel(World world) { + public EntityAbilityPanel(World world) { super(world); this.setSize(0.5f, 0.5f); } - public EntityEnergyPanel(World world, EntityLivingBase owner, double x, double y, double z, - float yaw, PanelMode mode, - EnergyDisplayData display, EnergyLightningData lightning, - EnergyBarrierData barrier, EnergyPanelData panel) { + public EntityAbilityPanel(World world, EntityLivingBase owner, double x, double y, double z, + float yaw, PanelMode mode, + EnergyDisplayData display, EnergyLightningData lightning, + EnergyBarrierData barrier, EnergyPanelData panel) { this(world); this.setPosition(x, y + panel.heightOffset, z); this.ownerEntityId = owner.getEntityId(); diff --git a/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java b/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java index f3a203001..5e48a468f 100644 --- a/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java +++ b/src/main/java/kamkeel/npcs/entity/EntityEnergyProjectile.java @@ -318,8 +318,8 @@ public abstract class EntityEnergyProjectile extends EntityEnergyAbility { * @return true if projectile was absorbed (caller should stop processing) */ protected boolean checkBarrierCollision() { - List barriers = EntityEnergyBarrier.getActiveBarriers(worldObj); - for (EntityEnergyBarrier barrier : barriers) { + List barriers = EntityAbilityBarrier.getActiveBarriers(worldObj); + for (EntityAbilityBarrier barrier : barriers) { if (barrier.isDead) continue; // Quick distance pre-filter diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 5cdd71bff..d7f951b1e 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -28,14 +28,15 @@ import kamkeel.npcs.controllers.SyncController; import kamkeel.npcs.controllers.TelegraphController; import kamkeel.npcs.controllers.data.profile.CNPCData; import kamkeel.npcs.developer.Developer; +import kamkeel.npcs.entity.EntityAbilityBarrier; import kamkeel.npcs.entity.EntityAbilityBeam; import kamkeel.npcs.entity.EntityAbilityDisc; import kamkeel.npcs.entity.EntityAbilityLaser; import kamkeel.npcs.entity.EntityAbilityOrb; +import kamkeel.npcs.entity.EntityAbilityPanel; import kamkeel.npcs.entity.EntityAbilitySweeper; import kamkeel.npcs.entity.EntityAbilityZone; -import kamkeel.npcs.entity.EntityEnergyDome; -import kamkeel.npcs.entity.EntityEnergyPanel; +import kamkeel.npcs.entity.EntityAbilityDome; import kamkeel.npcs.entity.EntityEnergySlicer; import kamkeel.npcs.network.PacketHandler; import kamkeel.npcs.util.BukkitUtil; @@ -297,8 +298,8 @@ public class CustomNpcs { registerNewEntity(EntityAbilityBeam.class, "abilitybeam", 64, 3, true); registerNewEntity(EntityAbilitySweeper.class, "abilitysweeper", 64, 3, true); registerNewEntity(EntityAbilityZone.class, "abilityzone", 64, 3, true); - registerNewEntity(EntityEnergyDome.class, "energydome", 64, 3, true); - registerNewEntity(EntityEnergyPanel.class, "energypanel", 64, 3, true); + registerNewEntity(EntityAbilityDome.class, "energydome", 64, 3, true); + registerNewEntity(EntityAbilityPanel.class, "energypanel", 64, 3, true); registerNewEntity(EntityEnergySlicer.class, "energyslicer", 64, 3, true); new RecipeController(); @@ -430,7 +431,7 @@ public class CustomNpcs { } kamkeel.npcs.entity.EntityEnergyProjectile.clearAllProjectiles(); - kamkeel.npcs.entity.EntityEnergyBarrier.clearAllBarriers(); + EntityAbilityBarrier.clearAllBarriers(); if (FMLCommonHandler.instance().getSide().isClient()) clientJaninoCompiler = null; diff --git a/src/main/java/noppes/npcs/ServerEventsHandler.java b/src/main/java/noppes/npcs/ServerEventsHandler.java index a13384ada..0f9fa1d3e 100644 --- a/src/main/java/noppes/npcs/ServerEventsHandler.java +++ b/src/main/java/noppes/npcs/ServerEventsHandler.java @@ -4,6 +4,8 @@ import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.relauncher.Side; import kamkeel.npcs.controllers.SyncController; +import kamkeel.npcs.entity.EntityAbilityBarrier; +import kamkeel.npcs.entity.EntityAbilityDome; import kamkeel.npcs.network.PacketHandler; import kamkeel.npcs.network.enums.EnumSoundOperation; import kamkeel.npcs.network.enums.EnumSyncAction; @@ -30,7 +32,6 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.village.MerchantRecipeList; import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import kamkeel.npcs.entity.EntityEnergyBarrier; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingEvent; @@ -157,7 +158,7 @@ public class ServerEventsHandler { if (event.entityLiving == null || event.entityLiving.worldObj == null || event.entityLiving.worldObj.isRemote) return; - EntityEnergyBarrier barrier = EntityEnergyBarrier.getAbsorbingBarrier(event.entityLiving); + EntityAbilityBarrier barrier = EntityAbilityBarrier.getAbsorbingBarrier(event.entityLiving); if (barrier != null) { // Redirect the caster's damage to their barrier barrier.absorbDamage(event.ammount); @@ -189,9 +190,9 @@ public class ServerEventsHandler { } if (!blacklisted) return; - List barriers = EntityEnergyBarrier.getActiveBarriers(player.worldObj); - for (EntityEnergyBarrier barrier : barriers) { - if (barrier instanceof kamkeel.npcs.entity.EntityEnergyDome && barrier.isEntityInside(player)) { + List barriers = EntityAbilityBarrier.getActiveBarriers(player.worldObj); + for (EntityAbilityBarrier barrier : barriers) { + if (barrier instanceof EntityAbilityDome && barrier.isEntityInside(player)) { event.setCanceled(true); return; } diff --git a/src/main/java/noppes/npcs/client/ClientProxy.java b/src/main/java/noppes/npcs/client/ClientProxy.java index c0a113a96..a221e35ae 100644 --- a/src/main/java/noppes/npcs/client/ClientProxy.java +++ b/src/main/java/noppes/npcs/client/ClientProxy.java @@ -12,8 +12,8 @@ import kamkeel.npcs.client.renderer.RenderAbilityLaser; import kamkeel.npcs.client.renderer.RenderAbilityOrb; import kamkeel.npcs.client.renderer.RenderAbilitySweeper; import kamkeel.npcs.client.renderer.RenderAbilityZone; -import kamkeel.npcs.client.renderer.RenderEnergyDome; -import kamkeel.npcs.client.renderer.RenderEnergyPanel; +import kamkeel.npcs.client.renderer.RenderAbilityDome; +import kamkeel.npcs.client.renderer.RenderAbilityPanel; import kamkeel.npcs.client.renderer.RenderEnergySlicer; import kamkeel.npcs.client.renderer.TelegraphRenderer; import kamkeel.npcs.client.renderer.lightning.LightningHandler; @@ -24,8 +24,8 @@ import kamkeel.npcs.entity.EntityAbilityLaser; import kamkeel.npcs.entity.EntityAbilityOrb; import kamkeel.npcs.entity.EntityAbilitySweeper; import kamkeel.npcs.entity.EntityAbilityZone; -import kamkeel.npcs.entity.EntityEnergyDome; -import kamkeel.npcs.entity.EntityEnergyPanel; +import kamkeel.npcs.entity.EntityAbilityDome; +import kamkeel.npcs.entity.EntityAbilityPanel; import kamkeel.npcs.entity.EntityEnergySlicer; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; @@ -278,8 +278,8 @@ public class ClientProxy extends CommonProxy { RenderingRegistry.registerEntityRenderingHandler(EntityAbilityBeam.class, new RenderAbilityBeam()); RenderingRegistry.registerEntityRenderingHandler(EntityAbilitySweeper.class, new RenderAbilitySweeper()); RenderingRegistry.registerEntityRenderingHandler(EntityAbilityZone.class, new RenderAbilityZone()); - RenderingRegistry.registerEntityRenderingHandler(EntityEnergyDome.class, new RenderEnergyDome()); - RenderingRegistry.registerEntityRenderingHandler(EntityEnergyPanel.class, new RenderEnergyPanel()); + RenderingRegistry.registerEntityRenderingHandler(EntityAbilityDome.class, new RenderAbilityDome()); + RenderingRegistry.registerEntityRenderingHandler(EntityAbilityPanel.class, new RenderAbilityPanel()); RenderingRegistry.registerEntityRenderingHandler(EntityEnergySlicer.class, new RenderEnergySlicer()); RenderingRegistry.registerEntityRenderingHandler(EntityCustomNpc.class, new RenderCustomNpc()); diff --git a/src/main/java/noppes/npcs/scripted/NpcAPI.java b/src/main/java/noppes/npcs/scripted/NpcAPI.java index aebc9321d..8cb554c3e 100644 --- a/src/main/java/noppes/npcs/scripted/NpcAPI.java +++ b/src/main/java/noppes/npcs/scripted/NpcAPI.java @@ -9,9 +9,13 @@ import kamkeel.npcs.controllers.ProfileController; import kamkeel.npcs.controllers.TelegraphController; import kamkeel.npcs.entity.EntityAbilityBeam; import kamkeel.npcs.entity.EntityAbilityDisc; +import kamkeel.npcs.entity.EntityAbilityDome; import kamkeel.npcs.entity.EntityAbilityLaser; import kamkeel.npcs.entity.EntityAbilityOrb; +import kamkeel.npcs.entity.EntityAbilityPanel; +import kamkeel.npcs.entity.EntityAbilitySweeper; import kamkeel.npcs.entity.EntityEnergyProjectile; +import kamkeel.npcs.entity.EntityEnergySlicer; import net.minecraft.block.Block; import net.minecraft.command.CommandHandler; import net.minecraft.entity.Entity; @@ -126,9 +130,13 @@ import noppes.npcs.scripted.entity.ScriptArrow; import noppes.npcs.scripted.entity.ScriptDBCPlayer; import noppes.npcs.scripted.entity.ScriptEnergyBeam; import noppes.npcs.scripted.entity.ScriptEnergyDisc; +import noppes.npcs.scripted.entity.ScriptEnergyDome; import noppes.npcs.scripted.entity.ScriptEnergyLaser; import noppes.npcs.scripted.entity.ScriptEnergyOrb; +import noppes.npcs.scripted.entity.ScriptEnergyPanel; import noppes.npcs.scripted.entity.ScriptEnergyProjectile; +import noppes.npcs.scripted.entity.ScriptEnergySlicer; +import noppes.npcs.scripted.entity.ScriptEnergySweeper; import noppes.npcs.scripted.entity.ScriptEntity; import noppes.npcs.scripted.entity.ScriptEntityItem; import noppes.npcs.scripted.entity.ScriptFishHook; @@ -472,16 +480,16 @@ public class NpcAPI extends AbstractNpcAPI { data = new ScriptEntityData(new ScriptEnergyDisc<>((EntityAbilityDisc) entity)); else if (entity instanceof EntityAbilityLaser) data = new ScriptEntityData(new ScriptEnergyLaser<>((EntityAbilityLaser) entity)); - else if (entity instanceof kamkeel.npcs.entity.EntityEnergySlicer) - data = new ScriptEntityData(new noppes.npcs.scripted.entity.ScriptEnergySlicer<>((kamkeel.npcs.entity.EntityEnergySlicer) entity)); + else if (entity instanceof EntityEnergySlicer) + data = new ScriptEntityData(new ScriptEnergySlicer<>((EntityEnergySlicer) entity)); else if (entity instanceof EntityEnergyProjectile) data = new ScriptEntityData(new ScriptEnergyProjectile((EntityEnergyProjectile) entity)); - else if (entity instanceof kamkeel.npcs.entity.EntityEnergyDome) - data = new ScriptEntityData(new noppes.npcs.scripted.entity.ScriptEnergyDome<>((kamkeel.npcs.entity.EntityEnergyDome) entity)); - else if (entity instanceof kamkeel.npcs.entity.EntityEnergyPanel) - data = new ScriptEntityData(new noppes.npcs.scripted.entity.ScriptEnergyPanel<>((kamkeel.npcs.entity.EntityEnergyPanel) entity)); - else if (entity instanceof kamkeel.npcs.entity.EntityAbilitySweeper) - data = new ScriptEntityData(new noppes.npcs.scripted.entity.ScriptEnergySweeper<>((kamkeel.npcs.entity.EntityAbilitySweeper) entity)); + else if (entity instanceof EntityAbilityDome) + data = new ScriptEntityData(new ScriptEnergyDome<>((EntityAbilityDome) entity)); + else if (entity instanceof EntityAbilityPanel) + data = new ScriptEntityData(new ScriptEnergyPanel<>((EntityAbilityPanel) entity)); + else if (entity instanceof EntityAbilitySweeper) + data = new ScriptEntityData(new ScriptEnergySweeper<>((EntityAbilitySweeper) entity)); else data = new ScriptEntityData(new ScriptEntity<>(entity)); entity.registerExtendedProperties("ScriptedObject", data); diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBarrier.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBarrier.java index 6669bde50..a015a06ad 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBarrier.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyBarrier.java @@ -1,15 +1,15 @@ package noppes.npcs.scripted.entity; -import kamkeel.npcs.entity.EntityEnergyBarrier; -import kamkeel.npcs.entity.EntityEnergyDome; +import kamkeel.npcs.entity.EntityAbilityBarrier; +import kamkeel.npcs.entity.EntityAbilityDome; import noppes.npcs.api.entity.IEnergyBarrier; import noppes.npcs.scripted.constants.EntityType; /** * Base script wrapper for energy barrier entities (Dome, Panel). - * All shared methods delegate directly to EntityEnergyBarrier base. + * All shared methods delegate directly to EntityAbilityBarrier base. */ -public class ScriptEnergyBarrier extends ScriptEnergyAbility implements IEnergyBarrier { +public class ScriptEnergyBarrier extends ScriptEnergyAbility implements IEnergyBarrier { public ScriptEnergyBarrier(T entity) { super(entity); @@ -122,6 +122,6 @@ public class ScriptEnergyBarrier extends ScriptEn } public int getBarrierType() { - return entity instanceof EntityEnergyDome ? 0 : 1; + return entity instanceof EntityAbilityDome ? 0 : 1; } } diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDome.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDome.java index e022118f7..9bcceefbc 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDome.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyDome.java @@ -1,10 +1,10 @@ package noppes.npcs.scripted.entity; -import kamkeel.npcs.entity.EntityEnergyDome; +import kamkeel.npcs.entity.EntityAbilityDome; import noppes.npcs.api.entity.IEnergyDome; import noppes.npcs.scripted.constants.EntityType; -public class ScriptEnergyDome extends ScriptEnergyBarrier implements IEnergyDome { +public class ScriptEnergyDome extends ScriptEnergyBarrier implements IEnergyDome { public ScriptEnergyDome(T entity) { super(entity); diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyPanel.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyPanel.java index 04c730fad..fa929b4a8 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyPanel.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEnergyPanel.java @@ -1,10 +1,10 @@ package noppes.npcs.scripted.entity; -import kamkeel.npcs.entity.EntityEnergyPanel; +import kamkeel.npcs.entity.EntityAbilityPanel; import noppes.npcs.api.entity.IEnergyPanel; import noppes.npcs.scripted.constants.EntityType; -public class ScriptEnergyPanel extends ScriptEnergyBarrier implements IEnergyPanel { +public class ScriptEnergyPanel extends ScriptEnergyBarrier implements IEnergyPanel { public ScriptEnergyPanel(T entity) { super(entity); @@ -52,6 +52,6 @@ public class ScriptEnergyPanel extends ScriptEnergy } public boolean isLaunched() { - return entity.getMode() == EntityEnergyPanel.PanelMode.LAUNCHED; + return entity.getMode() == EntityAbilityPanel.PanelMode.LAUNCHED; } }