diff --git a/paper-api/src/main/java/io/papermc/paper/entity/SchoolableFish.java b/paper-api/src/main/java/io/papermc/paper/entity/SchoolableFish.java new file mode 100644 index 0000000000..a16329a8d0 --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/entity/SchoolableFish.java @@ -0,0 +1,47 @@ +package io.papermc.paper.entity; + +import org.bukkit.entity.Fish; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +/** + * Represents a fish that can school with other fish. + */ +@NullMarked +public interface SchoolableFish extends Fish { + + /** + * Forces this fish to follow the given fish. + * + * @param leader fish to follow + */ + void startFollowing(SchoolableFish leader); + + /** + * Causes the fish to stop following their current + * leader. + */ + void stopFollowing(); + + /** + * Gets the amount of fish currently following this fish. + * + * @return school size + */ + int getSchoolSize(); + + /** + * Gets the maximum number of fish that will naturally follow this fish. + * + * @return max school size + */ + int getMaxSchoolSize(); + + /** + * Gets the fish that this entity is currently following. + * + * @return following fish + */ + @Nullable SchoolableFish getSchoolLeader(); + +} diff --git a/paper-api/src/main/java/org/bukkit/entity/AbstractHorse.java b/paper-api/src/main/java/org/bukkit/entity/AbstractHorse.java index 161af8bc4f..2e9d6e6023 100644 --- a/paper-api/src/main/java/org/bukkit/entity/AbstractHorse.java +++ b/paper-api/src/main/java/org/bukkit/entity/AbstractHorse.java @@ -106,17 +106,71 @@ public interface AbstractHorse extends Vehicle, InventoryHolder, Tameable { * Gets whether the horse is currently grazing hay. * * @return true if eating hay + * @deprecated use {@link #isEatingGrass()}, this name is incorrect */ + @Deprecated // Paper - Horse API boolean isEatingHaystack(); /** * Sets whether the horse is grazing hay. * * @param eatingHaystack new hay grazing status + * @deprecated use {@link #setEatingGrass(boolean)}, this name is incorrect */ + @Deprecated // Paper - Horse API void setEatingHaystack(boolean eatingHaystack); @NotNull @Override public AbstractHorseInventory getInventory(); + + // Paper start - Horse API + /** + * Gets if a horse is in their eating grass animation. + * + * @return eating grass animation is active + */ + public boolean isEatingGrass(); + + /** + * Sets if a horse is in their eating grass animation. + * + *
When true, the horse will lower its neck.
+ * + * @param eating eating grass animation is active + */ + public void setEatingGrass(boolean eating); + + /** + * Gets if a horse is in their rearing animation. + * + * @return rearing animation is active + */ + public boolean isRearing(); + + /** + * Sets if a horse is in their rearing animation. + * + *When true, the horse will stand on its hind legs.
+ * + * @param rearing rearing animation is active + */ + public void setRearing(boolean rearing); + + /** + * Gets if a horse is in their eating animation. + * + * @return eating animation is active + */ + public boolean isEating(); + + /** + * Sets if a horse is in their eating animation. + * + *When true, the horse will bob its head.
+ * + * @param eating eating animation is active + */ + public void setEating(boolean eating); + // Paper end - Horse API } diff --git a/paper-api/src/main/java/org/bukkit/entity/AreaEffectCloud.java b/paper-api/src/main/java/org/bukkit/entity/AreaEffectCloud.java index 9d99a67014..c4b3ab4b9c 100644 --- a/paper-api/src/main/java/org/bukkit/entity/AreaEffectCloud.java +++ b/paper-api/src/main/java/org/bukkit/entity/AreaEffectCloud.java @@ -259,4 +259,20 @@ public interface AreaEffectCloud extends Entity { * @param source the {@link ProjectileSource} that threw the LingeringPotion */ public void setSource(@Nullable ProjectileSource source); + + // Paper start - owner API + /** + * Get the entity UUID for the owner of this area effect cloud. + * + * @return the entity owner uuid or null + */ + @Nullable java.util.UUID getOwnerUniqueId(); + + /** + * Sets the entity UUID for the owner of this area effect cloud. + * + * @param ownerUuid the entity owner uuid or null to clear + */ + void setOwnerUniqueId(@Nullable java.util.UUID ownerUuid); + // Paper end } diff --git a/paper-api/src/main/java/org/bukkit/entity/Bat.java b/paper-api/src/main/java/org/bukkit/entity/Bat.java index bd73f22ef7..b9f8b14d90 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Bat.java +++ b/paper-api/src/main/java/org/bukkit/entity/Bat.java @@ -24,4 +24,23 @@ public interface Bat extends Ambient { * @param state the new state */ void setAwake(boolean state); + + // Paper start + /** + * Gets the location that this bat is currently trying to move towards. + * + * @return target location, or null if it's going to find a new location + */ + @org.jetbrains.annotations.Nullable + org.bukkit.Location getTargetLocation(); + + /** + * Sets the location that this bat is currently trying to move towards. + *+ * This can be set to null to cause the bat to recalculate its target location + * + * @param location location to move towards (world is ignored, will always use the entity's world) + */ + void setTargetLocation(@org.jetbrains.annotations.Nullable org.bukkit.Location location); + // Paper end } diff --git a/paper-api/src/main/java/org/bukkit/entity/Bee.java b/paper-api/src/main/java/org/bukkit/entity/Bee.java index adb20a9abb..1f6702b0de 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Bee.java +++ b/paper-api/src/main/java/org/bukkit/entity/Bee.java @@ -93,4 +93,56 @@ public interface Bee extends Animals { * @param ticks Ticks the bee cannot enter a hive for */ void setCannotEnterHiveTicks(int ticks); + + // Paper start + /** + * Sets the override for if the bee is currently rolling. + * + * @param rolling is rolling, or unset for vanilla behavior + */ + void setRollingOverride(@org.jetbrains.annotations.NotNull net.kyori.adventure.util.TriState rolling); + + /** + * Gets the plugin set override for if the bee is currently rolling. + * + * @return plugin set rolling override + */ + @org.jetbrains.annotations.NotNull + net.kyori.adventure.util.TriState getRollingOverride(); + + /** + * Gets if the bee is currently rolling. + * + * @return is rolling + */ + boolean isRolling(); + + /** + * Sets how many crops this bee has grown since it last + * pollinated. + * @param crops number of crops + */ + void setCropsGrownSincePollination(int crops); + + /** + * Gets how many crops this bee has grown since it last + * pollinated. + * @return number of crops + */ + int getCropsGrownSincePollination(); + + /** + * Sets how many ticks this bee has gone without pollinating. + * + * @param ticks number of ticks + */ + void setTicksSincePollination(int ticks); + + /** + * Gets how many ticks this bee has gone without pollinating + * + * @return number of ticks + */ + int getTicksSincePollination(); + // Paper end } diff --git a/paper-api/src/main/java/org/bukkit/entity/Bogged.java b/paper-api/src/main/java/org/bukkit/entity/Bogged.java index 8b75a505a5..0e5aaf54df 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Bogged.java +++ b/paper-api/src/main/java/org/bukkit/entity/Bogged.java @@ -7,4 +7,18 @@ import org.jetbrains.annotations.ApiStatus; */ @ApiStatus.Experimental public interface Bogged extends AbstractSkeleton, Shearable { + + /** + * Gets whether the bogged is in its sheared state. + * + * @return Whether the bogged is sheared. + */ + boolean isSheared(); + + /** + * Sets whether the bogged is in its sheared state. + * + * @param flag Whether to shear the bogged + */ + void setSheared(boolean flag); } diff --git a/paper-api/src/main/java/org/bukkit/entity/Cat.java b/paper-api/src/main/java/org/bukkit/entity/Cat.java index 104b9c8a28..5101553bb7 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Cat.java +++ b/paper-api/src/main/java/org/bukkit/entity/Cat.java @@ -90,4 +90,36 @@ public interface Cat extends Tameable, Sittable { return Lists.newArrayList(Registry.CAT_VARIANT).toArray(new Type[0]); } } + + // Paper start - More cat api + /** + * Sets if the cat is lying down. + * This is visual and does not affect the behaviour of the cat. + * + * @param lyingDown whether the cat should lie down + */ + public void setLyingDown(boolean lyingDown); + + /** + * Gets if the cat is lying down. + * + * @return whether the cat is lying down + */ + public boolean isLyingDown(); + + /** + * Sets if the cat has its head up. + * This is visual and does not affect the behaviour of the cat. + * + * @param headUp head is up + */ + public void setHeadUp(boolean headUp); + + /** + * Gets if the cat has its head up. + * + * @return head is up + */ + public boolean isHeadUp(); + // Paper end - More cat api } diff --git a/paper-api/src/main/java/org/bukkit/entity/Chicken.java b/paper-api/src/main/java/org/bukkit/entity/Chicken.java index cb3ec6ef6c..b4c1a26260 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Chicken.java +++ b/paper-api/src/main/java/org/bukkit/entity/Chicken.java @@ -3,4 +3,35 @@ package org.bukkit.entity; /** * Represents a Chicken. */ -public interface Chicken extends Animals {} +// Paper start +public interface Chicken extends Animals { + + /** + * Gets if this chicken was spawned as a chicken jockey. + * + * @return is chicken jockey + */ + boolean isChickenJockey(); + + /** + * Sets if this chicken was spawned as a chicken jockey. + * + * @param isChickenJockey is chicken jockey + */ + void setIsChickenJockey(boolean isChickenJockey); + + /** + * Gets the number of ticks till this chicken lays an egg. + * + * @return ticks till the chicken lays an egg + */ + int getEggLayTime(); + + /** + * Sets the number of ticks till this chicken lays an egg. + * + * @param eggLayTime ticks till the chicken lays an egg + */ + void setEggLayTime(int eggLayTime); +} +// Paper end diff --git a/paper-api/src/main/java/org/bukkit/entity/Cod.java b/paper-api/src/main/java/org/bukkit/entity/Cod.java index 191ce6c0e3..8de09075e1 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Cod.java +++ b/paper-api/src/main/java/org/bukkit/entity/Cod.java @@ -4,4 +4,4 @@ package org.bukkit.entity; /** * Represents a cod fish. */ -public interface Cod extends Fish { } +public interface Cod extends io.papermc.paper.entity.SchoolableFish { } // Paper - Schooling Fish API diff --git a/paper-api/src/main/java/org/bukkit/entity/Damageable.java b/paper-api/src/main/java/org/bukkit/entity/Damageable.java index 1d2447a28b..4b94f1ed62 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Damageable.java +++ b/paper-api/src/main/java/org/bukkit/entity/Damageable.java @@ -53,6 +53,25 @@ public interface Damageable extends Entity { */ void setHealth(double health); + // Paper start - entity heal API + /** + * Heal this entity by the given amount. This will call {@link org.bukkit.event.entity.EntityRegainHealthEvent}. + * + * @param amount heal amount + */ + default void heal(final double amount) { + this.heal(amount, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.CUSTOM); + } + + /** + * Heal this entity by the given amount. This will call {@link org.bukkit.event.entity.EntityRegainHealthEvent}. + * + * @param amount heal amount + * @param reason heal reason + */ + void heal(double amount, @NotNull org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason reason); + // Paper end - entity heal API + /** * Gets the entity's absorption amount. * diff --git a/paper-api/src/main/java/org/bukkit/entity/Enderman.java b/paper-api/src/main/java/org/bukkit/entity/Enderman.java index 875817b807..db01cc952f 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Enderman.java +++ b/paper-api/src/main/java/org/bukkit/entity/Enderman.java @@ -86,4 +86,36 @@ public interface Enderman extends Monster { * @return true if the teleport succeeded. */ public boolean teleportTowards(@NotNull Entity entity); + + // Paper start + /** + * Returns whether the enderman is screaming/angry. + * + * @return whether the enderman is screaming + */ + boolean isScreaming(); + + /** + * Sets whether the enderman is screaming/angry. + * + * @param screaming whether the enderman is screaming + */ + void setScreaming(boolean screaming); + + /** + * Returns whether the enderman has been stared at. + * If set to true, players will hear an ambient sound. + * + * @return whether the enderman has been stared at + */ + boolean hasBeenStaredAt(); + + /** + * Sets whether the enderman has been stared at. + * If set to true, players will hear an ambient sound. + * + * @param hasBeenStaredAt whether the enderman has been stared at + */ + void setHasBeenStaredAt(boolean hasBeenStaredAt); + // Paper end } diff --git a/paper-api/src/main/java/org/bukkit/entity/Endermite.java b/paper-api/src/main/java/org/bukkit/entity/Endermite.java index c77d1a4ea7..7b379fb21e 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Endermite.java +++ b/paper-api/src/main/java/org/bukkit/entity/Endermite.java @@ -23,4 +23,22 @@ public interface Endermite extends Monster { */ @Deprecated(since = "1.17") void setPlayerSpawned(boolean playerSpawned); + // Paper start + /** + * Sets how many ticks this endermite has been living for. + * If this value is greater than 2400, this endermite will despawn. + * + * @param ticks lifetime ticks + */ + void setLifetimeTicks(int ticks); + + /** + * Gets how long this endermite has been living for. + * This value will tick up while {@link LivingEntity#getRemoveWhenFarAway()} is false. + * If this value is greater than 2400, this endermite will despawn. + * + * @return lifetime ticks + */ + int getLifetimeTicks(); + // Paper end } 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 8521a9ae4d..3b40c63a38 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Entity.java +++ b/paper-api/src/main/java/org/bukkit/entity/Entity.java @@ -293,6 +293,40 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent */ 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 + /** * Mark the entity's removal. * diff --git a/paper-api/src/main/java/org/bukkit/entity/Fireball.java b/paper-api/src/main/java/org/bukkit/entity/Fireball.java index d7ebb33e94..252e3d35c0 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Fireball.java +++ b/paper-api/src/main/java/org/bukkit/entity/Fireball.java @@ -62,4 +62,25 @@ public interface Fireball extends Projectile, Explosive { */ @NotNull Vector getAcceleration(); + + // Paper start - Expose power on fireball projectiles + /** + * Sets the power of a fireball. The power determines the direction and magnitude of its acceleration. + * + * @param power the power + * @deprecated use #setAcceleration(Vector) instead. + */ + @Deprecated + public void setPower(@NotNull Vector power); + + /** + * Gets the power of a fireball. The power determines the direction and magnitude of its acceleration. + * + * @return the power + * @deprecated Use #getAcceleration instead. + */ + @Deprecated + @NotNull + public Vector getPower(); + // Paper end - Expose power on fireball projectiles } diff --git a/paper-api/src/main/java/org/bukkit/entity/Fox.java b/paper-api/src/main/java/org/bukkit/entity/Fox.java index c61a473453..473a7e36ad 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Fox.java +++ b/paper-api/src/main/java/org/bukkit/entity/Fox.java @@ -92,4 +92,55 @@ public interface Fox extends Animals, Sittable { RED, SNOW; } + + // Paper start - Add more fox behavior API + /** + * Sets if the fox is interested. + * + * @param interested is interested + */ + public void setInterested(boolean interested); + + /** + * Gets if the fox is interested. + * + * @return fox is interested + */ + public boolean isInterested(); + + /** + * Sets if the fox is leaping. + * + * @param leaping is leaping + */ + public void setLeaping(boolean leaping); + + /** + * Gets if the fox is leaping. + * + * @return fox is leaping + */ + public boolean isLeaping(); + + /** + * Sets if the fox is defending. + * + * @param defending is defending + */ + public void setDefending(boolean defending); + + /** + * Gets if the fox is defending. + * + * @return fox is defending + */ + public boolean isDefending(); + + /** + * Sets if the fox face planted. + * + * @param faceplanted face planted + */ + public void setFaceplanted(boolean faceplanted); + // Paper end - Add more fox behavior API } diff --git a/paper-api/src/main/java/org/bukkit/entity/Ghast.java b/paper-api/src/main/java/org/bukkit/entity/Ghast.java index 6b3c9bef9a..9c618a27d5 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Ghast.java +++ b/paper-api/src/main/java/org/bukkit/entity/Ghast.java @@ -18,4 +18,21 @@ public interface Ghast extends Flying, Enemy { * @param flag Whether the Ghast is charging */ void setCharging(boolean flag); + + // Paper start + /** + * Returns the explosion power of shot fireballs. + * + * @return explosion power of shot fireballs + */ + int getExplosionPower(); + + /** + * Sets the explosion power of shot fireballs. + * + * @param explosionPower explosion power of shot fireballs + * @throws IllegalArgumentException if the explosion power is less than 0 or greater than 127 + */ + void setExplosionPower(int explosionPower); + // Paper end } diff --git a/paper-api/src/main/java/org/bukkit/entity/LivingEntity.java b/paper-api/src/main/java/org/bukkit/entity/LivingEntity.java index 5db673a057..c2ed224560 100644 --- a/paper-api/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/paper-api/src/main/java/org/bukkit/entity/LivingEntity.java @@ -1004,6 +1004,7 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource * * @param invisible If the entity is invisible */ + @Override // Paper - move invisibility up to Entity public void setInvisible(boolean invisible); /** @@ -1011,6 +1012,7 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource * * @return Whether the entity is invisible */ + @Override // Paper - move invisibility up to Entity public boolean isInvisible(); // Paper start @@ -1047,6 +1049,57 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource void setShieldBlockingDelay(int delay); // Paper end + // Paper start - missing entity API + /** + * Retrieves the sideways movement direction of the entity. + *
+ * The returned value ranges from -1 to 1, where: + * - Positive 1 represents movement to the left. + * - Negative 1 represents movement to the right. + *
+ * Please note that for entities of type {@link Player}, this value is updated only when riding another entity. + *
+ * This method specifically provides information about the entity's sideways movement, whereas {@link #getVelocity()} returns + * a vector representing the entity's overall current momentum. + * + * @return Sideways movement direction, ranging from -1 (right) to 1 (left). + */ + float getSidewaysMovement(); + + /** + * Retrieves the upwards movement direction of the entity. + *
+ * The returned value ranges from -1 to 1, where: + * - Positive 1 represents upward movement. + * - Negative 1 represents downward movement. + *
+ * Please note that for entities of type {@link Player}, this value is never updated. + *
+ * This method specifically provides information about the entity's vertical movement, + * whereas {@link #getVelocity()} returns a vector representing the entity's overall + * current momentum. + * + * @return Upwards movement direction, ranging from -1 (downward) to 1 (upward). + */ + float getUpwardsMovement(); + + /** + * Retrieves the forwards movement direction of the entity. + *
+ * The returned value ranges from -1 to 1, where: + * - Positive 1 represents movement forwards. + * - Negative 1 represents movement backwards. + *
+ * Please note that for entities of type {@link Player}, this value is updated only when riding another entity. + *
+ * This method specifically provides information about the entity's forward and backward movement, + * whereas {@link #getVelocity()} returns a vector representing the entity's overall current momentum. + * + * @return Forwards movement direction, ranging from -1 (backward) to 1 (forward). + */ + float getForwardsMovement(); + // Paper end - missing entity API + // Paper start - active item API /** * Starts using the item in the specified hand, making it the diff --git a/paper-api/src/main/java/org/bukkit/entity/Llama.java b/paper-api/src/main/java/org/bukkit/entity/Llama.java index d23226ccb0..bc84b892ca 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Llama.java +++ b/paper-api/src/main/java/org/bukkit/entity/Llama.java @@ -67,4 +67,56 @@ public interface Llama extends ChestedHorse, RangedEntity { // Paper @NotNull @Override LlamaInventory getInventory(); + + // Paper start + /** + * Checks if this llama is in a caravan. + * This means that this llama is currently following + * another llama. + * + * @return is in caravan + */ + boolean inCaravan(); + + /** + * Joins a caravan, with the provided llama being the leader + * of the caravan. + * This llama will then follow the provided llama. + * + * @param llama head of caravan to join + */ + void joinCaravan(@NotNull Llama llama); + + /** + * Leaves the current caravan that they are in. + */ + void leaveCaravan(); + + /** + * Get the llama that this llama is following. + *
+ * Does not necessarily mean the leader of the entire caravan. + * + * @return the llama currently being followed + */ + @org.jetbrains.annotations.Nullable + Llama getCaravanHead(); + + /** + * Checks if another llama is currently following behind + * this llama. + * + * @return true if being followed in the caravan + */ + boolean hasCaravanTail(); + + /** + * Gets the llama that is currently following behind + * this llama. + * + * @return the llama following this llama, or null if none is following them + */ + @org.jetbrains.annotations.Nullable + Llama getCaravanTail(); + // Paper end } diff --git a/paper-api/src/main/java/org/bukkit/entity/Mob.java b/paper-api/src/main/java/org/bukkit/entity/Mob.java index 5fd723c9fd..91d31e5418 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Mob.java +++ b/paper-api/src/main/java/org/bukkit/entity/Mob.java @@ -170,4 +170,38 @@ public interface Mob extends LivingEntity, Lootable { this.setSeed(seed); } // Paper end - LootTable API + + // Paper start - Missing Entity API + /** + * Some mobs will raise their arm(s) when aggressive: + *
+ * Note: This doesn't always show the actual aggressive state as + * set by {@link #setAggressive(boolean)}. {@link Panda}'s are always + * aggressive if their combined {@link Panda.Gene} is {@link Panda.Gene#AGGRESSIVE}. + * + * @return wether the mob is aggressive or not + */ + boolean isAggressive(); + + /** + * Some mobs will raise their arm(s) when aggressive, + * see {@link #isAggressive()} for full list. + * + * @param aggressive wether the mob should be aggressive or not + * @see #isAggressive() + */ + void setAggressive(boolean aggressive); + // Paper end - Missing Entity API } diff --git a/paper-api/src/main/java/org/bukkit/entity/Panda.java b/paper-api/src/main/java/org/bukkit/entity/Panda.java index 1f027927a1..4f06870cc8 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Panda.java +++ b/paper-api/src/main/java/org/bukkit/entity/Panda.java @@ -107,6 +107,98 @@ public interface Panda extends Animals, Sittable { */ int getUnhappyTicks(); + // Paper start - Panda API + /** + * Sets the sneeze progress in this animation. + * This value counts up only if {@link Panda#isSneezing()} is true + * + * @param ticks sneeze progress + */ + void setSneezeTicks(int ticks); + + /** + * Gets the current sneeze progress, or how many ticks this panda will sneeze for. + * + * @return sneeze progress + */ + int getSneezeTicks(); + + /** + * Sets the eating ticks for this panda. + *
+ * + * This starts counting up as long as it is greater than 0. + * + * @param ticks eating ticks + */ + void setEatingTicks(int ticks); + + /** + * Gets the current eating progress, or how many ticks this panda has been eating for. + * + * @return eating progress + */ + int getEatingTicks(); + + /** + * Sets the number of ticks this panda will be unhappy for. + *
+ * This value counts down. + * + * @param ticks unhappy ticks + */ + void setUnhappyTicks(int ticks); + + /** + * Sets if this panda is currently on its back. + * + * @param onBack is on its back + * @deprecated use {@link #setOnBack(boolean)} + */ + @Deprecated(forRemoval = true, since = "1.19") + default void setIsOnBack(boolean onBack) { + this.setOnBack(onBack); + } + + /** + * Sets if this panda is currently sitting. + * + * @param sitting is currently sitting + * @deprecated use {@link #setSitting(boolean)} + */ + @Deprecated(forRemoval = true, since = "1.19") + default void setIsSitting(boolean sitting) { + this.setSitting(sitting); + } + + /** + * Sets if this panda is currently sitting. + * + * @param sitting is currently sitting + */ + @Override + void setSitting(boolean sitting); + + /** + * Gets if this panda is sitting. + * + * @return is sitting + */ + @Override + boolean isSitting(); + + /** + * Gets this Panda's combined gene. + *
+ * The combined gene can be modified using
+ * {@link #setMainGene(Gene)} or {@link #setHiddenGene(Gene)}.
+ *
+ * @return combined gene
+ */
+ @NotNull
+ Gene getCombinedGene();
+ // Paper end - Panda API
+
public enum Gene {
NORMAL(false),
diff --git a/paper-api/src/main/java/org/bukkit/entity/Phantom.java b/paper-api/src/main/java/org/bukkit/entity/Phantom.java
index 3dafdf14ce..2fe8e8868f 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Phantom.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Phantom.java
@@ -40,5 +40,21 @@ public interface Phantom extends Flying, Enemy {
* @param shouldBurnInDay True to burn in sunlight
*/
public void setShouldBurnInDay(boolean shouldBurnInDay);
+
+ /**
+ * Gets the location that this phantom circles around when not attacking a player
+ * This will be changed after attacking a player.
+ *
+ * @return circling location
+ */
+ @org.jetbrains.annotations.NotNull
+ org.bukkit.Location getAnchorLocation();
+
+ /**
+ * Sets the location that this phantom circles around when not attacking a player
+ *
+ * @param location circling location (world is ignored, will always use the entity's world)
+ */
+ void setAnchorLocation(@org.jetbrains.annotations.NotNull org.bukkit.Location location);
// Paper end
}
diff --git a/paper-api/src/main/java/org/bukkit/entity/Piglin.java b/paper-api/src/main/java/org/bukkit/entity/Piglin.java
index 6fdc0e0bb6..eb0b7c18c1 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Piglin.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Piglin.java
@@ -90,4 +90,47 @@ public interface Piglin extends PiglinAbstract, InventoryHolder, com.destroystok
*/
@NotNull
public Set
+ * This works with any item currently held in the piglin's hand.
+ *
+ * @param chargingCrossbow is charging
+ */
+ void setChargingCrossbow(boolean chargingCrossbow);
+
+ /**
+ * Gets if the piglin is currently charging the
+ * item in their hand.
+ *
+ * @return is charging
+ */
+ boolean isChargingCrossbow();
+
+ /**
+ * Sets whether the Piglin is dancing or not
+ *
+ * @param dancing is dancing
+ */
+ void setDancing(boolean dancing);
+
+ /**
+ * Causes the piglin to dance for a
+ * specified amount of time
+ *
+ * @param duration duration of the dance in ticks
+ */
+ void setDancing(long duration);
+
+ /**
+ * Gets if the piglin is currently dancing
+ *
+ * @return is dancing
+ */
+ boolean isDancing();
+ // Paper end
+
}
diff --git a/paper-api/src/main/java/org/bukkit/entity/PolarBear.java b/paper-api/src/main/java/org/bukkit/entity/PolarBear.java
index 479f7a7c54..4e526ba6aa 100644
--- a/paper-api/src/main/java/org/bukkit/entity/PolarBear.java
+++ b/paper-api/src/main/java/org/bukkit/entity/PolarBear.java
@@ -3,4 +3,22 @@ package org.bukkit.entity;
/**
* Represents a polar bear.
*/
-public interface PolarBear extends Animals {}
+// Paper start
+public interface PolarBear extends Animals {
+
+ /**
+ * Returns whether the polar bear is standing.
+ *
+ * @return whether the polar bear is standing
+ */
+ boolean isStanding();
+
+ /**
+ * Sets whether the polar bear is standing.
+ *
+ * @param standing whether the polar bear should be standing
+ */
+ void setStanding(boolean standing);
+
+}
+// Paper end
diff --git a/paper-api/src/main/java/org/bukkit/entity/Rabbit.java b/paper-api/src/main/java/org/bukkit/entity/Rabbit.java
index e88154283a..979062aa47 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Rabbit.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Rabbit.java
@@ -14,6 +14,23 @@ public interface Rabbit extends Animals {
* @param type Sets the type of rabbit for this entity.
*/
public void setRabbitType(@NotNull Type type);
+ // Paper start
+ /**
+ * Sets how many ticks this rabbit will wait
+ * until trying to find more carrots.
+ *
+ * @param ticks ticks
+ */
+ void setMoreCarrotTicks(int ticks);
+
+ /**
+ * Returns how many ticks this rabbit
+ * will wait until trying to find more carrots.
+ *
+ * @return ticks
+ */
+ int getMoreCarrotTicks();
+ // Paper end
/**
* Represents the various types a Rabbit might be.
diff --git a/paper-api/src/main/java/org/bukkit/entity/Ravager.java b/paper-api/src/main/java/org/bukkit/entity/Ravager.java
index 4374d5206d..0eb7214472 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Ravager.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Ravager.java
@@ -3,4 +3,61 @@ package org.bukkit.entity;
/**
* Illager beast.
*/
-public interface Ravager extends Raider { }
+// Paper start - Missing Entity Behavior
+public interface Ravager extends Raider {
+
+ /**
+ * Gets how many ticks this ravager is attacking for.
+ * When attacking, the ravager cannot move.
+ *
+ * @return ticks attacking or -1 if they are currently not attacking
+ */
+ int getAttackTicks();
+
+ /**
+ * Sets how many ticks this ravager is attacking for.
+ * When attacking, the ravager cannot move.
+ * This will tick down till it gets to -1, where this ravager will no longer be attacking.
+ *
+ * @param ticks ticks attacking or -1 if they should no longer be attacking
+ */
+ void setAttackTicks(int ticks);
+
+ /**
+ * Gets how many ticks the ravager is stunned for.
+ * The ravager cannot move or attack while stunned.
+ * At 0, this will cause the ravager to roar.
+ *
+ * @return ticks stunned or -1 if they are currently not stunned
+ */
+ int getStunnedTicks();
+
+ /**
+ * Sets how many ticks the ravager is stunned for.
+ * The ravager cannot move or attack while stunned.
+ * At 0, this will cause the ravager to roar.
+ *
+ * @param ticks ticks stunned or -1 if they should no longer be stunned
+ */
+ void setStunnedTicks(int ticks);
+
+ /**
+ * Gets how many ticks the ravager is roaring for.
+ * While roaring, the ravager cannot move
+ *
+ * @return ticks roaring or -1 if they are currently not roaring
+ */
+ int getRoarTicks();
+
+ /**
+ * Sets how many ticks the ravager is roaring for.
+ * While roaring, the ravager cannot move
+ * This will tick down till it gets to -1, where it is no longer active.
+ * If set to 11, this will play a sound and hurt nearby players.
+ *
+ * @param ticks ticks roaring or -1 if they should no longer be roaring
+ */
+ void setRoarTicks(int ticks);
+
+}
+// Paper end
diff --git a/paper-api/src/main/java/org/bukkit/entity/Salmon.java b/paper-api/src/main/java/org/bukkit/entity/Salmon.java
index 407aa5de17..d8a2d44fe5 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Salmon.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Salmon.java
@@ -5,7 +5,7 @@ import org.jetbrains.annotations.NotNull;
/**
* Represents a salmon fish.
*/
-public interface Salmon extends Fish {
+public interface Salmon extends io.papermc.paper.entity.SchoolableFish { // Paper - Schooling Fish API
/**
* Get the variant of this salmon.
diff --git a/paper-api/src/main/java/org/bukkit/entity/Sheep.java b/paper-api/src/main/java/org/bukkit/entity/Sheep.java
index 46bc1a0ed9..9ed473e5e9 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Sheep.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Sheep.java
@@ -6,4 +6,18 @@ import org.bukkit.material.Colorable;
* Represents a Sheep.
*/
public interface Sheep extends Animals, Colorable, Shearable {
+
+ /**
+ * Gets whether the sheep is in its sheared state.
+ *
+ * @return Whether the sheep is sheared.
+ */
+ boolean isSheared();
+
+ /**
+ * Sets whether the sheep is in its sheared state.
+ *
+ * @param flag Whether to shear the sheep
+ */
+ void setSheared(boolean flag);
}
diff --git a/paper-api/src/main/java/org/bukkit/entity/TNTPrimed.java b/paper-api/src/main/java/org/bukkit/entity/TNTPrimed.java
index 0813bd913c..87e717c9ea 100644
--- a/paper-api/src/main/java/org/bukkit/entity/TNTPrimed.java
+++ b/paper-api/src/main/java/org/bukkit/entity/TNTPrimed.java
@@ -64,4 +64,26 @@ public interface TNTPrimed extends Explosive {
default org.bukkit.Location getSourceLoc() {
return this.getOrigin();
}
+
+ // Paper start
+ /**
+ * Sets the visual block data of this
+ * primed tnt.
+ *
+ * This will return null if the wandering trader has finished
+ * wandering towards the given location.
+ *
+ * @return the location currently wandering towards, or null if not wandering
+ */
+ @org.jetbrains.annotations.Nullable
+ org.bukkit.Location getWanderingTowards();
+
+ /**
+ * Sets the location that this wandering trader is currently wandering towards.
+ *
+ * This can be set to null to prevent the wandering trader from wandering further.
+ *
+ * @param location location to wander towards (world is ignored, will always use the entity's world)
+ */
+ void setWanderingTowards(@org.jetbrains.annotations.Nullable org.bukkit.Location location);
// Paper end
}
diff --git a/paper-api/src/main/java/org/bukkit/entity/Warden.java b/paper-api/src/main/java/org/bukkit/entity/Warden.java
index 3794db8867..efaa45f41b 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Warden.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Warden.java
@@ -30,6 +30,18 @@ public interface Warden extends Monster {
*/
int getAnger(@NotNull Entity entity);
+ // Paper start
+ /**
+ * Gets the highest anger level of this warden.
+ *
+ * Anger is an integer from 0 to 150. Once a Warden reaches 80 anger at a
+ * target it will actively pursue it.
+ *
+ * @return highest anger level
+ */
+ int getHighestAnger();
+ // Paper end
+
/**
* Increases the anger level of this warden.
*
diff --git a/paper-api/src/main/java/org/bukkit/entity/Wither.java b/paper-api/src/main/java/org/bukkit/entity/Wither.java
index 87a814f63c..14543c2238 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Wither.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Wither.java
@@ -43,7 +43,9 @@ public interface Wither extends Monster, Boss, com.destroystokyo.paper.entity.Ra
* Returns the wither's current invulnerability ticks.
*
* @return amount of invulnerability ticks
+ * @deprecated Duplicate api, use {@link #getInvulnerableTicks()}
*/
+ @Deprecated(forRemoval = true) // Paper
int getInvulnerabilityTicks();
/**
@@ -52,7 +54,9 @@ public interface Wither extends Monster, Boss, com.destroystokyo.paper.entity.Ra
* When invulnerability ticks reach 0, the wither will trigger an explosion.
*
* @param ticks amount of invulnerability ticks
+ * @deprecated Duplicate api, use {@link #setInvulnerableTicks(int)}
*/
+ @Deprecated(forRemoval = true) // Paper
void setInvulnerabilityTicks(int ticks);
/**
@@ -64,4 +68,43 @@ public interface Wither extends Monster, Boss, com.destroystokyo.paper.entity.Ra
LEFT,
RIGHT
}
+
+ // Paper start
+ /**
+ * @return whether the wither is charged
+ */
+ boolean isCharged();
+
+ /**
+ * @return ticks the wither is invulnerable for
+ */
+ int getInvulnerableTicks();
+
+ /**
+ * Sets for how long in the future, the wither should be invulnerable.
+ *
+ * @param ticks ticks the wither is invulnerable for
+ */
+ void setInvulnerableTicks(int ticks);
+
+ /**
+ * @return whether the wither can travel through portals
+ */
+ boolean canTravelThroughPortals();
+
+ /**
+ * Sets whether the wither can travel through portals.
+ *
+ * @param value whether the wither can travel through portals
+ */
+ void setCanTravelThroughPortals(boolean value);
+
+ /**
+ * Makes the wither invulnerable for 11 seconds and
+ * sets the health to one third of the max health.
+ *
+ * When this reaches 0, the entity will be converted. A value of less than 0
+ * will stop the current conversion process without converting the current
+ * entity.
+ *
+ * @param time new conversion time
+ * @param broadcastEntityEvent whether this conversion time mutation should broadcast the
+ * org.bukkit.{@link org.bukkit.EntityEffect#ZOMBIE_TRANSFORM} entity event to the
+ * world. If false, no entity event is published, preventing for example the
+ * org.bukkit.{@link org.bukkit.Sound#ENTITY_ZOMBIE_VILLAGER_CURE} from playing.
+ */
+ void setConversionTime(int time, boolean broadcastEntityEvent);
+ // Paper end - missing entity behaviour api - converting without entity event
}
diff --git a/paper-api/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java b/paper-api/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java
index db69687a7a..261bacee2a 100644
--- a/paper-api/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java
+++ b/paper-api/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java
@@ -24,4 +24,23 @@ public interface HopperMinecart extends Minecart, InventoryHolder, LootableEntit
* @param enabled new enabled state
*/
void setEnabled(boolean enabled);
+ // Paper start
+ /**
+ * Gets the number of ticks that this hopper minecart cannot pickup items up for.
+ *
+ * @return ticks left on cooldown
+ * @deprecated Hopper minecarts don't have cooldowns anymore
+ */
+ @Deprecated(forRemoval = true, since = "1.19.4")
+ int getPickupCooldown();
+
+ /**
+ * Sets the number of ticks that this hopper minecart cannot pickup items for.
+ *
+ * @param cooldown cooldown length in ticks
+ * @deprecated Hopper minecarts don't have cooldowns anymore
+ */
+ @Deprecated(forRemoval = true, since = "1.19.4")
+ void setPickupCooldown(int cooldown);
+ // Paper end
}
+ * The explosion of the tnt stays the
+ * same and is not affected by this change.
+ *
+ * @param data the visual block data
+ */
+ void setBlockData(@org.jetbrains.annotations.NotNull org.bukkit.block.data.BlockData data);
+
+ /**
+ * Gets the visual block data of this
+ * primed tnt.
+ *
+ * @return the visual block data
+ */
+ @org.jetbrains.annotations.NotNull
+ org.bukkit.block.data.BlockData getBlockData();
+ // Paper end
}
diff --git a/paper-api/src/main/java/org/bukkit/entity/Tadpole.java b/paper-api/src/main/java/org/bukkit/entity/Tadpole.java
index d64979ebdd..8e097ad55d 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Tadpole.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Tadpole.java
@@ -18,4 +18,21 @@ public interface Tadpole extends Fish {
* @param age New age
*/
public void setAge(int age);
+
+ // Paper start - Tadpole age lock api
+ /**
+ * Lock the age of the animal, setting this will prevent the animal from
+ * maturing.
+ *
+ * @param lock new lock
+ */
+ void setAgeLock(boolean lock);
+
+ /**
+ * Gets the current agelock.
+ *
+ * @return the current agelock
+ */
+ boolean getAgeLock();
+ // Paper end
}
diff --git a/paper-api/src/main/java/org/bukkit/entity/Trident.java b/paper-api/src/main/java/org/bukkit/entity/Trident.java
index 28cdb3b544..c8015ff610 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Trident.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Trident.java
@@ -3,4 +3,40 @@ package org.bukkit.entity;
/**
* Represents a thrown trident.
*/
-public interface Trident extends AbstractArrow, ThrowableProjectile { }
+// Paper start
+public interface Trident extends AbstractArrow, ThrowableProjectile {
+
+ /**
+ * Returns whether the trident has an enchanted glow.
+ * This can be separate from the underlying item having any enchantments.
+ *
+ * @return whether the trident has an enchanted glow
+ */
+ boolean hasGlint();
+
+ /**
+ * Sets whether the trident has an enchanted glow.
+ * This is separate from the underlying item having any enchantments.
+ *
+ * @param glint whether the trident should have an enchanted glow
+ */
+ void setGlint(boolean glint);
+
+ /**
+ * Returns the loyalty level of the trident.
+ * This can be separate from the underlying item's enchantments.
+ *
+ * @return loyalty level of the trident
+ */
+ int getLoyaltyLevel();
+
+ /**
+ * Sets the loyalty level of the trident.
+ * This is separate from the underlying item's enchantments.
+ *
+ * @param loyaltyLevel loyalty level
+ * @throws IllegalArgumentException if the loyalty level is lower than 0 or greater than 127
+ */
+ void setLoyaltyLevel(int loyaltyLevel);
+}
+// Paper end
diff --git a/paper-api/src/main/java/org/bukkit/entity/TropicalFish.java b/paper-api/src/main/java/org/bukkit/entity/TropicalFish.java
index ab31289bb0..84bba32e80 100644
--- a/paper-api/src/main/java/org/bukkit/entity/TropicalFish.java
+++ b/paper-api/src/main/java/org/bukkit/entity/TropicalFish.java
@@ -6,7 +6,7 @@ import org.jetbrains.annotations.NotNull;
/**
* Tropical fish.
*/
-public interface TropicalFish extends Fish {
+public interface TropicalFish extends io.papermc.paper.entity.SchoolableFish { // Paper - Schooling Fish API
/**
* Gets the color of the fish's pattern.
diff --git a/paper-api/src/main/java/org/bukkit/entity/Vex.java b/paper-api/src/main/java/org/bukkit/entity/Vex.java
index 627e3c1a96..3c447d2300 100644
--- a/paper-api/src/main/java/org/bukkit/entity/Vex.java
+++ b/paper-api/src/main/java/org/bukkit/entity/Vex.java
@@ -57,21 +57,30 @@ public interface Vex extends Monster {
* Gets the remaining lifespan of this entity.
*
* @return life in ticks
+ * @deprecated This API duplicates existing API which uses the more
+ * preferable name due to mirroring internals better
*/
+ @Deprecated
int getLifeTicks();
/**
* Sets the remaining lifespan of this entity.
*
* @param lifeTicks life in ticks, or negative for unlimited lifepan
+ * @deprecated This API duplicates existing API which uses the more
+ * preferable name due to mirroring internals better
*/
+ @Deprecated
void setLifeTicks(int lifeTicks);
/**
* Gets if the entity has a limited life.
*
* @return true if the entity has limited life
+ * @deprecated This API duplicates existing API which uses the more
+ * preferable name due to mirroring internals better
*/
+ @Deprecated
boolean hasLimitedLife();
// Paper start
@@ -89,5 +98,37 @@ public interface Vex extends Monster {
* @param summoner New summoner
*/
void setSummoner(@Nullable Mob summoner);
+
+ /**
+ * Gets if this vex should start to take damage
+ * once {@link Vex#getLimitedLifetimeTicks()} is less than or equal to 0.
+ *
+ * @return will take damage
+ */
+ boolean hasLimitedLifetime();
+
+ /**
+ * Sets if this vex should start to take damage
+ * once {@link Vex#getLimitedLifetimeTicks()} is less than or equal to 0.
+ *
+ * @param hasLimitedLifetime should take damage
+ */
+ void setLimitedLifetime(boolean hasLimitedLifetime);
+
+ /**
+ * Gets the number of ticks remaining until the vex will start
+ * to take damage.
+ *
+ * @return ticks until the vex will start to take damage
+ */
+ int getLimitedLifetimeTicks();
+
+ /**
+ * Sets the number of ticks remaining until the vex takes damage.
+ * This number is ticked down only if {@link Vex#hasLimitedLifetime()} is true.
+ *
+ * @param ticks ticks remaining
+ */
+ void setLimitedLifetimeTicks(int ticks);
// Paper end
}
diff --git a/paper-api/src/main/java/org/bukkit/entity/WanderingTrader.java b/paper-api/src/main/java/org/bukkit/entity/WanderingTrader.java
index da76e1ed54..9f25774659 100644
--- a/paper-api/src/main/java/org/bukkit/entity/WanderingTrader.java
+++ b/paper-api/src/main/java/org/bukkit/entity/WanderingTrader.java
@@ -53,5 +53,26 @@ public interface WanderingTrader extends AbstractVillager {
* @return whether the mob will drink
*/
public boolean canDrinkMilk();
+
+ /**
+ * Gets the location that this wandering trader is currently
+ * wandering towards.
+ *
+ * This is called in vanilla directly after spawning the wither.
+ */
+ void enterInvulnerabilityPhase();
+ // Paper end
}
diff --git a/paper-api/src/main/java/org/bukkit/entity/ZombieVillager.java b/paper-api/src/main/java/org/bukkit/entity/ZombieVillager.java
index e38f38ebfc..e647c6b933 100644
--- a/paper-api/src/main/java/org/bukkit/entity/ZombieVillager.java
+++ b/paper-api/src/main/java/org/bukkit/entity/ZombieVillager.java
@@ -90,4 +90,22 @@ public interface ZombieVillager extends Zombie {
* @param conversionPlayer the player
*/
void setConversionPlayer(@Nullable OfflinePlayer conversionPlayer);
+
+ // Paper start - missing entity behaviour api - converting without entity event
+ /**
+ * Sets the amount of ticks until this entity will be converted to a
+ * Villager as a result of being cured.
+ *