package noppes.npcs.api.entity; import net.minecraft.entity.Entity; /** * Base interface for energy barrier entities (Dome, Panel). * Barriers are defensive structures that block incoming energy projectiles. * Extends IEnergyAbility for shared display/lightning/owner/charging methods. */ public interface IEnergyBarrier extends IEnergyAbility { // ==================== HEALTH ==================== float getCurrentHealth(); void setCurrentHealth(float health); float getHealthPercent(); float getMaxHealth(); void setMaxHealth(float maxHealth); boolean isUseHealth(); void setUseHealth(boolean useHealth); // ==================== DURATION ==================== int getDuration(); void setDuration(int ticks); boolean isUseDuration(); void setUseDuration(boolean useDuration); // ==================== STATE (BARRIER-SPECIFIC) ==================== int getTicksAlive(); // ==================== BARRIER ==================== float getDefaultMultiplier(); void setDefaultMultiplier(float multiplier); boolean isSolid(); void setSolid(boolean solid); boolean isKnockbackEnabled(); void setKnockbackEnabled(boolean enabled); float getKnockbackStrength(); void setKnockbackStrength(float strength); /** * Returns whether this barrier absorbs damage on behalf of its owner. * When absorbing is enabled, incoming damage to the barrier's owner is redirected * to the barrier instead, subject to the absorb radius check. * * @return {@code true} if the barrier absorbs the owner's incoming damage * @see #getAbsorbRadius() */ boolean isAbsorbing(); /** * Sets whether this barrier absorbs damage on behalf of its owner. * When absorbing is enabled, incoming damage to the barrier's owner is redirected * to the barrier instead, subject to the absorb radius check. * * @param absorbing {@code true} to enable damage absorption for the owner * @see #setAbsorbRadius(float) */ void setAbsorbing(boolean absorbing); /** * Gets the absorb radius for this barrier. * The absorb radius determines the maximum distance from the barrier's current * position at which the owner's incoming damage will still be redirected to the barrier. * This check uses the barrier entity's live position, so it works correctly with * moving barriers (following domes, moving walls, shields, etc.). * * * * @return the absorb radius in blocks, or {@code -1} for unlimited, or {@code 0} for barrier extent */ float getAbsorbRadius(); /** * Sets the absorb radius for this barrier. * The absorb radius determines the maximum distance from the barrier's current * position at which the owner's incoming damage will still be redirected to the barrier. * This check uses the barrier entity's live position, so it works correctly with * moving barriers (following domes, moving walls, shields, etc.). * * * * @param radius the absorb radius in blocks, or {@code -1} for unlimited, or {@code 0} for barrier extent */ void setAbsorbRadius(float radius); /** * Returns the barrier type: 0=Dome, 1=Panel * @return the barrier type ordinal */ int getBarrierType(); // ==================== SYNC ==================== /** * Sends all current visual and barrier-specific data to tracking clients. *

* Call this after making batch changes to properties like colors, alpha, * lightning, dome radius, panel dimensions, etc. This sends a single packet * instead of one per setter call. *

* Example: *

     * dome.setInnerColor(0xFF0000);
     * dome.setDomeRadius(5.0);
     * dome.syncClient(); // one packet for all changes
     * 
*/ void syncClient(); }