Files

137 lines
4.8 KiB
Java

package noppes.npcs.api;
import noppes.npcs.api.entity.*;
import noppes.npcs.api.entity.IEnergyExplosion;
/**
* Central controller for creating energy entities and routing energy damage.
* Access via API.getEnergyController().
*
* All factory methods create entities that are NOT spawned in the world.
* Configure the entity, then call fire() (projectiles) or spawn() (zones/sweepers/panels)
* to place it in the world.
*/
public interface IEnergyHandler {
// ==================== PROJECTILE CREATION ====================
/**
* Create an energy orb projectile. Not spawned until fire() is called.
* @param world the world
* @param owner the owning entity
* @param x X position
* @param y Y position
* @param z Z position
* @param size the orb size
* @return the energy orb entity
*/
IEnergyOrb createOrb(IWorld world, IEntity owner, double x, double y, double z, float size);
/**
* Create an energy beam projectile. Not spawned until fire() is called.
* @param world the world
* @param owner the owning entity
* @param x X position
* @param y Y position
* @param z Z position
* @param beamWidth the beam width
* @param headSize the head size
* @return the energy beam entity
*/
IEnergyBeam createBeam(IWorld world, IEntity owner, double x, double y, double z, float beamWidth, float headSize);
/**
* Create an energy disc projectile. Not spawned until fire() is called.
* @param world the world
* @param owner the owning entity
* @param x X position
* @param y Y position
* @param z Z position
* @param radius the disc radius
* @param thickness the disc thickness
* @return the energy disc entity
*/
IEnergyDisc createDisc(IWorld world, IEntity owner, double x, double y, double z, float radius, float thickness);
/**
* Create an energy laser projectile. Not spawned until fire() is called.
* @param world the world
* @param owner the owning entity
* @param x X position
* @param y Y position
* @param z Z position
* @param laserWidth the laser width
* @return the energy laser entity
*/
IEnergyLaser createLaser(IWorld world, IEntity owner, double x, double y, double z, float laserWidth);
// ==================== ZONE CREATION ====================
/**
* Create a hazard zone entity with defaults. Not spawned until spawn() is called.
* Hazards deal continuous damage to entities within the zone.
* @param world the world
* @param owner the owning entity
* @param x X position
* @param y Y position
* @param z Z position
* @return the energy zone entity
*/
IEnergyZone createHazard(IWorld world, IEntity owner, double x, double y, double z);
/**
* Create a trap zone entity with defaults. Not spawned until spawn() is called.
* Traps trigger when entities enter and deal burst damage.
* @param world the world
* @param owner the owning entity
* @param x X position
* @param y Y position
* @param z Z position
* @return the energy zone entity
*/
IEnergyZone createTrap(IWorld world, IEntity owner, double x, double y, double z);
// ==================== SWEEPER CREATION ====================
/**
* Create a sweeper entity with defaults. Not spawned until spawn() is called.
* Sweepers rotate a beam that damages entities in its path.
* @param world the world
* @param owner the owning entity
* @param x X position
* @param y Y position
* @param z Z position
* @return the energy sweeper entity
*/
IEnergySweeper createSweeper(IWorld world, IEntity owner, double x, double y, double z);
// ==================== PANEL CREATION ====================
/**
* Create a panel entity with defaults. Not spawned until spawn() is called.
* Panels are flat energy barriers that can deal damage on contact.
* @param world the world
* @param owner the owning entity
* @param x X position
* @param y Y position
* @param z Z position
* @return the energy panel entity
*/
IEnergyPanel createPanel(IWorld world, IEntity owner, double x, double y, double z);
// ==================== EXPLOSION CREATION ====================
/**
* Create an energy explosion entity. Not spawned until spawn() is called.
* Visual-only by default. Set damage > 0 to enable area damage with falloff.
* @param world the world
* @param owner the owning entity
* @param x X position
* @param y Y position
* @param z Z position
* @param radius the explosion radius
* @return the energy explosion entity
*/
IEnergyExplosion createExplosion(IWorld world, IEntity owner, double x, double y, double z, float radius);
}