diff --git a/paper-api/src/main/java/org/bukkit/entity/Entity.java b/paper-api/src/main/java/org/bukkit/entity/Entity.java index f9460a4876..0d38a47702 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Entity.java +++ b/paper-api/src/main/java/org/bukkit/entity/Entity.java @@ -571,4 +571,16 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent */ @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(); } diff --git a/paper-api/src/main/java/org/bukkit/entity/Pose.java b/paper-api/src/main/java/org/bukkit/entity/Pose.java new file mode 100644 index 0000000000..b6e0c6f534 --- /dev/null +++ b/paper-api/src/main/java/org/bukkit/entity/Pose.java @@ -0,0 +1,37 @@ +package org.bukkit.entity; + +/** + * Represents an entity body pose. + */ +public enum Pose { + + /** + * Entity is standing normally. + * + */ + STANDING, + /** + * Entity is gliding. + */ + FALL_FLYING, + /** + * Entity is sleeping. + */ + SLEEPING, + /** + * Entity is swimming. + */ + SWIMMING, + /** + * Entity is riptiding with a trident. + */ + SPIN_ATTACK, + /** + * Entity is sneaking. + */ + SNEAKING, + /** + * Entity is dead. + */ + DYING; +} diff --git a/paper-api/src/main/java/org/bukkit/event/entity/EntityPoseChangeEvent.java b/paper-api/src/main/java/org/bukkit/event/entity/EntityPoseChangeEvent.java new file mode 100644 index 0000000000..6fb2b02ace --- /dev/null +++ b/paper-api/src/main/java/org/bukkit/event/entity/EntityPoseChangeEvent.java @@ -0,0 +1,44 @@ +package org.bukkit.event.entity; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Pose; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +/** + * Called when an entity changes its pose. + * + * @see Entity#getPose() + */ +public class EntityPoseChangeEvent extends EntityEvent { + + private static final HandlerList handlers = new HandlerList(); + // + private final Pose pose; + + public EntityPoseChangeEvent(@NotNull Entity who, @NotNull Pose pose) { + super(who); + this.pose = pose; + } + + /** + * Gets the entity's new pose. + * + * @return the new pose + */ + @NotNull + public Pose getPose() { + return pose; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return handlers; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } +}