package org.bukkit.entity; import java.util.List; import java.util.Set; import java.util.UUID; import io.papermc.paper.entity.LookAnchor; import org.bukkit.Chunk; // Paper import org.bukkit.EntityEffect; import org.bukkit.Location; import org.bukkit.Nameable; import org.bukkit.Server; import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.block.BlockFace; import org.bukkit.block.PistonMoveReaction; import org.bukkit.command.CommandSender; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.material.Directional; import org.bukkit.metadata.Metadatable; import org.bukkit.persistence.PersistentDataHolder; import org.bukkit.util.BoundingBox; import org.bukkit.util.Vector; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * Represents a base entity in the world *

* Not all methods are guaranteed to work/may have side effects when * {@link #isInWorld()} is false. */ public interface Entity extends Metadatable, CommandSender, Nameable, PersistentDataHolder, net.kyori.adventure.text.event.HoverEventSource, net.kyori.adventure.sound.Sound.Emitter { // Paper /** * Gets the entity's current position * * @return a new copy of Location containing the position of this entity */ @NotNull public Location getLocation(); /** * Stores the entity's current position in the provided Location object. *

* If the provided Location is null this method does nothing and returns * null. * * @param loc the location to copy into * @return The Location object provided or null */ @Contract("null -> null; !null -> !null") @Nullable public Location getLocation(@Nullable Location loc); /** * Sets this entity's velocity in meters per tick * * @param velocity New velocity to travel with */ public void setVelocity(@NotNull Vector velocity); /** * Gets this entity's current velocity * * @return Current traveling velocity of this entity */ @NotNull public Vector getVelocity(); /** * Gets the entity's height * * @return height of entity */ public double getHeight(); /** * Gets the entity's width * * @return width of entity */ public double getWidth(); /** * Gets the entity's current bounding box. *

* The returned bounding box reflects the entity's current location and * size. * * @return the entity's current bounding box */ @NotNull public BoundingBox getBoundingBox(); /** * Returns true if the entity is supported by a block. This value is a * state updated by the server and is not recalculated unless the entity * moves. * * @return True if entity is on ground. * @see Player#isOnGround() */ public boolean isOnGround(); /** * Returns true if the entity is in water. * * @return true if the entity is in water. */ public boolean isInWater(); /** * Gets the current world this entity resides in * * @return World */ @NotNull public World getWorld(); /** * Sets the entity's rotation. *

* Note that if the entity is affected by AI, it may override this rotation. * * @param yaw the yaw * @param pitch the pitch */ public void setRotation(float yaw, float pitch); // Paper start - Teleport API /** * Teleports this entity to the given location. * * @param location New location to teleport this entity to * @param teleportFlags Flags to be used in this teleportation * @return true if the teleport was successful */ default boolean teleport(@NotNull Location location, @NotNull io.papermc.paper.entity.TeleportFlag @NotNull... teleportFlags) { return this.teleport(location, TeleportCause.PLUGIN, teleportFlags); } /** * Teleports this entity to the given location. * * @param location New location to teleport this entity to * @param cause The cause of this teleportation * @param teleportFlags Flags to be used in this teleportation * @return true if the teleport was successful */ boolean teleport(@NotNull Location location, @NotNull TeleportCause cause, @NotNull io.papermc.paper.entity.TeleportFlag @NotNull... teleportFlags); /** * Causes the entity to look towards the given position. * * @param x x coordinate * @param y y coordinate * @param z z coordinate * @param entityAnchor What part of the entity should face the given position */ void lookAt(double x, double y, double z, @NotNull LookAnchor entityAnchor); /** * Causes the entity to look towards the given position. * * @param position Position to look at in the player's current world * @param entityAnchor What part of the entity should face the given position */ default void lookAt(@NotNull io.papermc.paper.math.Position position, @NotNull LookAnchor entityAnchor) { this.lookAt(position.x(), position.y(), position.z(), entityAnchor); } // Paper end - Teleport API /** * Teleports this entity to the given location. If this entity is riding a * vehicle, it will be dismounted prior to teleportation. * * @param location New location to teleport this entity to * @return true if the teleport was successful */ public boolean teleport(@NotNull Location location); /** * Teleports this entity to the given location. If this entity is riding a * vehicle, it will be dismounted prior to teleportation. * * @param location New location to teleport this entity to * @param cause The cause of this teleportation * @return true if the teleport was successful */ public boolean teleport(@NotNull Location location, @NotNull TeleportCause cause); /** * Teleports this entity to the target Entity. If this entity is riding a * vehicle, it will be dismounted prior to teleportation. * * @param destination Entity to teleport this entity to * @return true if the teleport was successful */ public boolean teleport(@NotNull Entity destination); /** * Teleports this entity to the target Entity. If this entity is riding a * vehicle, it will be dismounted prior to teleportation. * * @param destination Entity to teleport this entity to * @param cause The cause of this teleportation * @return true if the teleport was successful */ public boolean teleport(@NotNull Entity destination, @NotNull TeleportCause cause); // Paper start /** * Loads/Generates(in 1.13+) the Chunk asynchronously, and then teleports the entity when the chunk is ready. * @param loc Location to teleport to * @return A future that will be completed with the result of the teleport */ default java.util.concurrent.@NotNull CompletableFuture teleportAsync(final @NotNull Location loc) { return this.teleportAsync(loc, TeleportCause.PLUGIN); } /** * Loads/Generates(in 1.13+) the Chunk asynchronously, and then teleports the entity when the chunk is ready. * @param loc Location to teleport to * @param cause Reason for teleport * @return A future that will be completed with the result of the teleport */ default java.util.concurrent.@NotNull CompletableFuture teleportAsync(final @NotNull Location loc, final @NotNull TeleportCause cause) { final class Holder { static final io.papermc.paper.entity.TeleportFlag[] EMPTY_FLAGS = new io.papermc.paper.entity.TeleportFlag[0]; } return this.teleportAsync(loc, cause, Holder.EMPTY_FLAGS); } /** * Loads/Generates(in 1.13+) the Chunk asynchronously, and then teleports the entity when the chunk is ready. * @param loc Location to teleport to * @param cause Reason for teleport * @param teleportFlags Flags to be used in this teleportation * @return A future that will be completed with the result of the teleport */ java.util.concurrent.@NotNull CompletableFuture teleportAsync(@NotNull Location loc, @NotNull TeleportCause cause, @NotNull io.papermc.paper.entity.TeleportFlag @NotNull... teleportFlags); // Paper end /** * Returns a list of entities within a bounding box centered around this * entity * * @param x 1/2 the size of the box along x axis * @param y 1/2 the size of the box along y axis * @param z 1/2 the size of the box along z axis * @return {@code List} List of entities nearby */ @NotNull public List getNearbyEntities(double x, double y, double z); /** * Returns the network protocol ID for this entity. This is * not to be used as an identifier for the entity except in * network-related operations. Use {@link #getUniqueId()} as * an entity identifier instead. * * @return the network protocol ID * @see #getUniqueId() */ public int getEntityId(); /** * Returns the entity's current fire ticks (ticks before the entity stops * being on fire). * * @return int fireTicks */ public int getFireTicks(); /** * Returns the entity's maximum fire ticks. * * @return int maxFireTicks */ public int getMaxFireTicks(); /** * Sets the entity's current fire ticks (ticks before the entity stops * being on fire). * * @param ticks Current ticks remaining */ public void setFireTicks(int ticks); /** * Sets if the entity has visual fire (it will always appear to be on fire). * * @param fire whether visual fire is enabled */ void setVisualFire(boolean fire); /** * Gets if the entity has visual fire (it will always appear to be on fire). * * @return whether visual fire is enabled */ boolean isVisualFire(); /** * Returns the entity's current freeze ticks (amount of ticks the entity has * been in powdered snow). * * @return int freeze ticks */ int getFreezeTicks(); /** * Returns the entity's maximum freeze ticks (amount of ticks before it will * be fully frozen) * * @return int max freeze ticks */ int getMaxFreezeTicks(); /** * Sets the entity's current freeze ticks (amount of ticks the entity has * been in powdered snow). * * @param ticks Current ticks */ void setFreezeTicks(int ticks); /** * Gets if the entity is fully frozen (it has been in powdered snow for max * freeze ticks). * * @return freeze status */ boolean isFrozen(); // Paper start - missing entity api /** * Sets whether the entity is invisible or not. *

* This setting is undefined for non-living entities like boats or paintings. * Non-living entities that are marked as invisible through this method may e.g. only hide their shadow. * To hide such entities from players completely, see {@link Player#hideEntity(org.bukkit.plugin.Plugin, Entity)}. * * @param invisible If the entity is invisible */ void setInvisible(boolean invisible); // Paper - moved up from LivingEntity /** * Gets whether the entity is invisible or not. * * @return Whether the entity is invisible */ boolean isInvisible(); // Paper - moved up from LivingEntity /** * Sets this entities no physics status. * * @param noPhysics boolean indicating if the entity should not have physics. */ void setNoPhysics(boolean noPhysics); /** * Gets if this entity has no physics. * * @return true if the entity does not have physics. */ boolean hasNoPhysics(); // Paper end - missing entity api // Paper start - Freeze Tick Lock API /** * Gets if the entity currently has its freeze ticks locked * to a set amount. *

* This is only set by plugins * * @return locked or not */ boolean isFreezeTickingLocked(); /** * Sets if the entity currently has its freeze ticks locked, * preventing default vanilla freeze tick modification. * * @param locked prevent vanilla modification or not */ void lockFreezeTicks(boolean locked); // Paper end - Freeze Tick Lock API /** * Mark the entity's removal. * * @throws UnsupportedOperationException if you try to remove a {@link Player} use {@link Player#kickPlayer(String)} in this case instead */ public void remove(); /** * Returns true if this entity has been marked for removal. * * @return True if it is dead. */ public boolean isDead(); /** * Returns false if the entity has died, been despawned for some other * reason, or has not been added to the world. * * @return True if valid. */ public boolean isValid(); /** * Gets the {@link Server} that contains this Entity * * @return Server instance running this Entity */ @Override @NotNull public Server getServer(); /** * Returns true if the entity gets persisted. *

* By default all entities are persistent. An entity will also not get * persisted, if it is riding an entity that is not persistent. *

* The persistent flag on players controls whether or not to save their * playerdata file when they quit. If a player is directly or indirectly * riding a non-persistent entity, the vehicle at the root and all its * passengers won't get persisted. *

* This should not be confused with * {@link LivingEntity#setRemoveWhenFarAway(boolean)} which controls * despawning of living entities. * * @return true if this entity is persistent */ public boolean isPersistent(); /** * Sets whether or not the entity gets persisted. * * @param persistent the persistence status * @see #isPersistent() */ public void setPersistent(boolean persistent); /** * Gets the primary passenger of a vehicle. For vehicles that could have * multiple passengers, this will only return the primary passenger. * * @return an entity * @deprecated entities may have multiple passengers, use * {@link #getPassengers()} */ @Deprecated(since = "1.11.2") @Nullable public Entity getPassenger(); /** * Set the passenger of a vehicle. * * @param passenger The new passenger. * @return false if it could not be done for whatever reason * @deprecated entities may have multiple passengers, use * {@link #addPassenger(org.bukkit.entity.Entity)} */ @Deprecated(since = "1.11.2") public boolean setPassenger(@NotNull Entity passenger); /** * Gets a list of passengers of this vehicle. *

* The returned list will not be directly linked to the entity's current * passengers, and no guarantees are made as to its mutability. * * @return list of entities corresponding to current passengers. */ @NotNull public List getPassengers(); /** * Add a passenger to the vehicle. * * @param passenger The passenger to add * @return false if it could not be done for whatever reason */ public boolean addPassenger(@NotNull Entity passenger); /** * Remove a passenger from the vehicle. * * @param passenger The passenger to remove * @return false if it could not be done for whatever reason */ public boolean removePassenger(@NotNull Entity passenger); /** * Check if a vehicle has passengers. * * @return True if the vehicle has no passengers. */ public boolean isEmpty(); /** * Eject any passenger. * * @return True if there was a passenger. */ public boolean eject(); /** * Returns the distance this entity has fallen * * @return The distance. */ public float getFallDistance(); /** * Sets the fall distance for this entity * * @param distance The new distance. */ public void setFallDistance(float distance); /** * Record the last {@link EntityDamageEvent} inflicted on this entity * * @param event a {@link EntityDamageEvent} * @deprecated method is for internal use only and will be removed */ @Deprecated(since = "1.20.4", forRemoval = true) public void setLastDamageCause(@Nullable EntityDamageEvent event); /** * Retrieve the last {@link EntityDamageEvent} inflicted on this entity. * This event may have been cancelled. * * @return the last known {@link EntityDamageEvent} or null if hitherto * unharmed */ @Nullable public EntityDamageEvent getLastDamageCause(); /** * Returns a unique and persistent id for this entity * * @return unique id */ @NotNull public UUID getUniqueId(); /** * Gets the amount of ticks this entity has lived for. *

* This is the equivalent to "age" in entities. * * @return Age of entity */ public int getTicksLived(); /** * Sets the amount of ticks this entity has lived for. *

* This is the equivalent to "age" in entities. May not be less than one * tick. * * @param value Age of entity */ public void setTicksLived(int value); /** * Performs the specified {@link EntityEffect} for this entity. *

* This will be viewable to all players near the entity. *

* If the effect is not applicable to this class of entity, it will not play. * * @param type Effect to play. */ public void playEffect(@NotNull EntityEffect type); /** * Get the type of the entity. * * @return The entity type. */ @NotNull public EntityType getType(); /** * Get the {@link Sound} this entity makes while swimming. * * @return the swimming sound */ @NotNull public Sound getSwimSound(); /** * Get the {@link Sound} this entity makes when splashing in water. For most * entities, this is just {@link Sound#ENTITY_GENERIC_SPLASH}. * * @return the splash sound */ @NotNull public Sound getSwimSplashSound(); /** * Get the {@link Sound} this entity makes when splashing in water at high * speeds. For most entities, this is just {@link Sound#ENTITY_GENERIC_SPLASH}. * * @return the splash sound */ @NotNull public Sound getSwimHighSpeedSplashSound(); /** * Returns whether this entity is inside a vehicle. * * @return True if the entity is in a vehicle. */ public boolean isInsideVehicle(); /** * Leave the current vehicle. If the entity is currently in a vehicle (and * is removed from it), true will be returned, otherwise false will be * returned. * * @return True if the entity was in a vehicle. */ public boolean leaveVehicle(); /** * Get the vehicle that this entity is inside. If there is no vehicle, * null will be returned. * * @return The current vehicle. */ @Nullable public Entity getVehicle(); /** * Sets whether or not to display the mob's custom name client side. The * name will be displayed above the mob similarly to a player. *

* This value has no effect on players, they will always display their * name. * * @param flag custom name or not */ public void setCustomNameVisible(boolean flag); /** * Gets whether or not the mob's custom name is displayed client side. *

* This value has no effect on players, they will always display their * name. * * @return if the custom name is displayed */ public boolean isCustomNameVisible(); /** * Sets whether or not this entity is visible by default. * * If this entity is not visible by default, then * {@link Player#showEntity(org.bukkit.plugin.Plugin, org.bukkit.entity.Entity)} * will need to be called before the entity is visible to a given player. * * @param visible default visibility status */ public void setVisibleByDefault(boolean visible); /** * Gets whether or not this entity is visible by default. * * If this entity is not visible by default, then * {@link Player#showEntity(org.bukkit.plugin.Plugin, org.bukkit.entity.Entity)} * will need to be called before the entity is visible to a given player. * * @return default visibility status */ public boolean isVisibleByDefault(); /** * Get all players that are currently tracking this entity. *

* 'Tracking' means that this entity has been sent to the player and that * they are receiving updates on its state. Note that the client's {@code * 'Entity Distance'} setting does not affect the range at which entities * are tracked. * * @return the players tracking this entity, or an empty set if none */ @NotNull Set getTrackedBy(); /** * Sets whether the entity has a team colored (default: white) glow. * * nb: this refers to the 'Glowing' entity property, not whether a * glowing potion effect is applied * * @param flag if the entity is glowing */ void setGlowing(boolean flag); /** * Gets whether the entity is glowing or not. * * nb: this refers to the 'Glowing' entity property, not whether a * glowing potion effect is applied * * @return whether the entity is glowing */ boolean isGlowing(); /** * Sets whether the entity is invulnerable or not. *

* When an entity is invulnerable it can only be damaged by players in * creative mode. * * @param flag if the entity is invulnerable */ public void setInvulnerable(boolean flag); /** * Gets whether the entity is invulnerable or not. * * @return whether the entity is */ public boolean isInvulnerable(); /** * Gets whether the entity is silent or not. * * @return whether the entity is silent. */ public boolean isSilent(); /** * Sets whether the entity is silent or not. *

* When an entity is silent it will not produce any sound. * * @param flag if the entity is silent */ public void setSilent(boolean flag); /** * Returns whether gravity applies to this entity. * * @return whether gravity applies */ boolean hasGravity(); /** * Sets whether gravity applies to this entity. * * @param gravity whether gravity should apply */ void setGravity(boolean gravity); /** * Gets the period of time (in ticks) before this entity can use a portal. * * @return portal cooldown ticks */ int getPortalCooldown(); /** * Sets the period of time (in ticks) before this entity can use a portal. * * @param cooldown portal cooldown ticks */ void setPortalCooldown(int cooldown); /** * Returns a set of tags for this entity. *
* Entities can have no more than 1024 tags. * * @return a set of tags for this entity */ @NotNull Set getScoreboardTags(); /** * Add a tag to this entity. *
* Entities can have no more than 1024 tags. * * @param tag the tag to add * @return true if the tag was successfully added */ boolean addScoreboardTag(@NotNull String tag); /** * Removes a given tag from this entity. * * @param tag the tag to remove * @return true if the tag was successfully removed */ boolean removeScoreboardTag(@NotNull String tag); /** * Returns the reaction of the entity when moved by a piston. * * @return reaction */ @NotNull PistonMoveReaction getPistonMoveReaction(); /** * Get the closest cardinal {@link BlockFace} direction an entity is * currently facing. *
* This will not return any non-cardinal directions such as * {@link BlockFace#UP} or {@link BlockFace#DOWN}. *
* {@link Hanging} entities will override this call and thus their behavior * may be different. * * @return the entity's current cardinal facing. * @see Hanging * @see Directional#getFacing() */ @NotNull BlockFace getFacing(); /** * Gets the entity's current pose. * * Note that the pose is only updated at the end of a tick, so may be * inconsistent with other methods. eg {@link Player#isSneaking()} being * true does not imply the current pose will be {@link Pose#SNEAKING} * * @return current pose */ @NotNull Pose getPose(); // Paper start /** * Returns if the entity is in sneak mode * * @return true if the entity is in sneak mode */ boolean isSneaking(); /** * Sets the sneak mode the entity. *

* Note: For most Entities this does not update Entity's pose * and just makes its name tag less visible. * * @param sneak true if the entity should be sneaking */ void setSneaking(boolean sneak); /** * Sets the entity's current {@link Pose}. * *

Note: While poses affect some things like hitboxes, they do not change the entity's state * (e.g. having {@link Pose#SNEAKING} does not guarantee {@link #isSneaking()} being {@code true}). * *

If applied to the {@link Player}, they might see a different pose client-side. * * @param pose a new {@link Pose} * @see #setPose(Pose, boolean) */ default void setPose(@NotNull Pose pose) { setPose(pose, false); } /** * Sets the entity's current {@link Pose}. * *

Note: While poses affect some things like hitboxes, they do not change the entity's state * (e.g. having {@link Pose#SNEAKING} does not guarantee {@link #isSneaking()} being {@code true}). * *

If applied to the {@link Player}, they might see a different pose client-side. * * @param pose a new {@link Pose} * @param fixed whether the new {@link Pose} should stay until manually changed */ void setPose(@NotNull Pose pose, boolean fixed); /** * Checks whether the entity has a fixed {@link Pose} * * @see #setPose(Pose, boolean) * @return whether the entity has a fixed {@link Pose} */ boolean hasFixedPose(); // Paper end /** * Get the category of spawn to which this entity belongs. * * @return the entity´s category spawn */ @NotNull SpawnCategory getSpawnCategory(); /** * Checks if this entity has been spawned in a world.
* Entities not spawned in a world will not tick, be sent to players, or be * saved to the server files. * * @return whether the entity has been spawned in a world */ boolean isInWorld(); /** * Get this entity as an NBT string. *

* This string should not be relied upon as a serializable value. * * @return the NBT string or null if one cannot be made */ @Nullable @ApiStatus.Experimental String getAsString(); /** * Crates an {@link EntitySnapshot} representing the current state of this entity. * * @return a snapshot representing this entity or null if one cannot be made */ @Nullable @ApiStatus.Experimental EntitySnapshot createSnapshot(); /** * Creates a copy of this entity and all its data. Does not spawn the copy in * the world.
* Note: Players cannot be copied. * * @return a copy of this entity. */ @NotNull @ApiStatus.Experimental Entity copy(); /** * Creates a copy of this entity and all its data. Spawns the copy at the given location.
* Note: Players cannot be copied. * @param to the location to copy to * @return a copy of this entity. */ @NotNull @ApiStatus.Experimental Entity copy(@NotNull Location to); // Spigot start public class Spigot extends CommandSender.Spigot { } @NotNull @Override Spigot spigot(); // Spigot end // Paper start /** * Gets the entity's display name formatted with their team prefix/suffix and * the entity's default hover/click events. * * @return the team display name */ net.kyori.adventure.text.@NotNull Component teamDisplayName(); @NotNull @Override default net.kyori.adventure.text.event.HoverEvent asHoverEvent(final @NotNull java.util.function.UnaryOperator op) { return net.kyori.adventure.text.event.HoverEvent.showEntity(op.apply(net.kyori.adventure.text.event.HoverEvent.ShowEntity.of(this.getType().getKey(), this.getUniqueId(), this.customName()))); } /** * Gets the location where this entity originates from. *

* This value can be null if the entity hasn't yet been added to the world. * * @return Location where entity originates or null if not yet added */ @Nullable Location getOrigin(); /** * Returns whether this entity was spawned from a mob spawner. * * @return True if entity spawned from a mob spawner */ boolean fromMobSpawner(); /** * Gets the latest chunk an entity is currently or was in. * * @return The current, or most recent chunk if the entity is invalid (which may load the chunk) */ @NotNull default Chunk getChunk() { // TODO remove impl here return getLocation().getChunk(); } /** * @return The {@link org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason} that initially spawned this entity. */ @NotNull org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason getEntitySpawnReason(); /** * Check if entity is underwater */ boolean isUnderWater(); /** * Check if entity is in rain */ boolean isInRain(); /** * Check if entity is in bubble column */ boolean isInBubbleColumn(); /** * Check if entity is in water or rain */ boolean isInWaterOrRain(); /** * Check if entity is in water or bubble column */ boolean isInWaterOrBubbleColumn(); /** * Check if entity is in water or rain or bubble column */ boolean isInWaterOrRainOrBubbleColumn(); /** * Check if entity is in lava */ boolean isInLava(); /** * Check if entity is inside a ticking chunk */ boolean isTicking(); /** * Returns a set of {@link Player Players} within this entity's tracking range (players that can "see" this entity). * * @return players in tracking range * @deprecated slightly misleading name, use {@link #getTrackedBy()} */ @Deprecated @NotNull Set getTrackedPlayers(); /** * Spawns the entity in the world at the given {@link Location} with the default spawn reason. *

* This will not spawn the entity if the entity is already spawned or has previously been despawned. *

* Also, this method will fire the same events as a normal entity spawn. * * @param location The location to spawn the entity at. * @return Whether the entity was successfully spawned. */ public default boolean spawnAt(@NotNull Location location) { return spawnAt(location, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT); } /** * Spawns the entity in the world at the given {@link Location} with the reason given. *

* This will not spawn the entity if the entity is already spawned or has previously been despawned. *

* Also, this method will fire the same events as a normal entity spawn. * * @param location The location to spawn the entity at. * @param reason The reason for the entity being spawned. * @return Whether the entity was successfully spawned. */ public boolean spawnAt(@NotNull Location location, @NotNull org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason reason); /** * Check if entity is inside powdered snow. * * @return true if in powdered snow. */ boolean isInPowderedSnow(); /** * Gets the x-coordinate of this entity * * @return x-coordinate */ double getX(); /** * Gets the y-coordinate of this entity * * @return y-coordinate */ double getY(); /** * Gets the z-coordinate of this entity * * @return z-coordinate */ double getZ(); /** * Gets this entity's pitch * * @see Location#getPitch() * @return the entity's pitch */ float getPitch(); /** * Gets this entity's yaw * * @see Location#getYaw() * @return the entity's yaw */ float getYaw(); // Paper end // Paper start - Collision API /** * Checks for any collisions with the entity's bounding box at the provided location. * This will check for any colliding entities (boats, shulkers) / worldborder / blocks. * Does not load chunks that are within the bounding box at the specified location. * * @param location the location to check collisions in * @return collides or not */ boolean collidesAt(@NotNull Location location); /** * This checks using the given boundingbox as the entity's boundingbox if the entity would collide with anything. * This will check for any colliding entities (boats, shulkers) / worldborder / blocks. * Does not load chunks that are within the bounding box. * * @param boundingBox the box to check collisions in * @return collides or not */ boolean wouldCollideUsing(@NotNull BoundingBox boundingBox); // Paper end - Collision API // Paper start - Folia schedulers /** * Returns the task scheduler for this entity. The entity scheduler can be used to schedule tasks * that are guaranteed to always execute on the tick thread that owns the entity. *

If you do not need/want to make your plugin run on Folia, use {@link org.bukkit.Server#getScheduler()} instead.

* @return the task scheduler for this entity. * @see io.papermc.paper.threadedregions.scheduler.EntityScheduler */ @NotNull io.papermc.paper.threadedregions.scheduler.EntityScheduler getScheduler(); // Paper end - Folia schedulers // Paper start - entity scoreboard name /** * Gets the string name of the entity used to track it in {@link org.bukkit.scoreboard.Scoreboard Scoreboards}. * * @return the scoreboard entry name * @see org.bukkit.scoreboard.Scoreboard#getScores(String) * @see org.bukkit.scoreboard.Scoreboard#getEntries() */ @NotNull String getScoreboardEntryName(); // Paper end - entity scoreboard name // Paper start - broadcast hurt animation /** * Broadcasts a hurt animation. This fakes incoming damage towards the target entity. *

* The target players cannot include {@code this} player. For self-damage, use * {@link Player#sendHurtAnimation(float)}. * * @param players the players to broadcast to (cannot include {@code this} * @throws IllegalArgumentException if {@code this} is contained in {@code players} */ void broadcastHurtAnimation(@NotNull java.util.Collection players); // Paper end - broadcast hurt animation }