From c8ec88128b82d4cc618136f9da33f048ef1b199d Mon Sep 17 00:00:00 2001 From: Clexus <528373858@qq.com> Date: Fri, 22 May 2026 18:22:10 +0800 Subject: [PATCH 1/4] Expose relative parameters to setRotation --- paper-api/src/main/java/org/bukkit/entity/Entity.java | 10 ++++++++++ paper-api/src/main/java/org/bukkit/entity/Player.java | 10 ++++++++++ .../org/bukkit/craftbukkit/entity/CraftEntity.java | 8 ++++++++ .../org/bukkit/craftbukkit/entity/CraftPlayer.java | 7 +++++++ 4 files changed, 35 insertions(+) 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 2c68aae864a7..e2205b6bdf66 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Entity.java +++ b/paper-api/src/main/java/org/bukkit/entity/Entity.java @@ -135,6 +135,16 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent */ public void setRotation(float yaw, float pitch); + /** + * Sets the entity's rotation. + * + * @param yaw the yaw + * @param relativeYaw whether the yaw is relative to the current yaw + * @param pitch the pitch + * @param relativePitch whether the pitch is relative to the current pitch + */ + void setRotation(float yaw, boolean relativeYaw, float pitch, boolean relativePitch); + // Paper start - Teleport API /** * Teleports this entity to the given location. diff --git a/paper-api/src/main/java/org/bukkit/entity/Player.java b/paper-api/src/main/java/org/bukkit/entity/Player.java index fe3f4b7552e1..5fadc9053c0a 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Player.java +++ b/paper-api/src/main/java/org/bukkit/entity/Player.java @@ -3795,6 +3795,16 @@ public int getPing() { */ void setRotation(float yaw, float pitch); + /** + * Sets the player's rotation. + * + * @param yaw the yaw + * @param relativeYaw whether the yaw is relative to the current yaw + * @param pitch the pitch + * @param relativePitch whether the pitch is relative to the current pitch + */ + void setRotation(float yaw, boolean relativeYaw, float pitch, boolean relativePitch); + /** * Causes the player to look towards the given entity. * diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index 2f40476da09c..05573d9f99ac 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -277,6 +277,14 @@ public void setRotation(float yaw, float pitch) { this.getHandle().forceSetRotation(yaw, false, pitch, false); } + @Override + public void setRotation(float yaw, final boolean relativeYaw, float pitch, final boolean relativePitch) { + NumberConversions.checkFinite(pitch, "pitch not finite"); + NumberConversions.checkFinite(yaw, "yaw not finite"); + + this.getHandle().forceSetRotation(yaw, relativeYaw, pitch, relativePitch); + } + @Override public boolean teleport(Location location) { return this.teleport(location, TeleportCause.PLUGIN); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 2e95fee39986..3fbbfc6bf0b0 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1299,6 +1299,13 @@ public void setRotation(float yaw, float pitch) { super.setRotation(yaw, pitch); } + @Override + public void setRotation(final float yaw, final boolean relativeYaw, final float pitch, final boolean relativePitch) { + if (this.getHandle().connection == null) return; + + super.setRotation(yaw, relativeYaw, pitch, relativePitch); + } + @Override public void lookAt(org.bukkit.entity.@NonNull Entity entity, @NonNull LookAnchor playerAnchor, @NonNull LookAnchor entityAnchor) { this.getHandle().lookAt(toNmsAnchor(playerAnchor), ((CraftEntity) entity).getHandle(), toNmsAnchor(entityAnchor)); From 50c68b1ec9306ad82fff2b7a741cb5a25754d5cc Mon Sep 17 00:00:00 2001 From: Clexus <528373858@qq.com> Date: Fri, 22 May 2026 19:10:12 +0800 Subject: [PATCH 2/4] Add note --- paper-api/src/main/java/org/bukkit/entity/Player.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/entity/Player.java b/paper-api/src/main/java/org/bukkit/entity/Player.java index 5fadc9053c0a..f98d0bc69375 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Player.java +++ b/paper-api/src/main/java/org/bukkit/entity/Player.java @@ -3796,14 +3796,18 @@ public int getPing() { void setRotation(float yaw, float pitch); /** - * Sets the player's rotation. + * Modify the player's rotation. + *
+ * Note: When relative parameters are set, client will do interpolations to + * make the rotation smooth, it's different from just send a new rotation with + * yaw or pitch addition. * * @param yaw the yaw * @param relativeYaw whether the yaw is relative to the current yaw * @param pitch the pitch * @param relativePitch whether the pitch is relative to the current pitch */ - void setRotation(float yaw, boolean relativeYaw, float pitch, boolean relativePitch); + void modRotation(float yaw, boolean relativeYaw, float pitch, boolean relativePitch); /** * Causes the player to look towards the given entity. From f6da67a36a6d4d29b6ef4ee67ecd622a46de51bd Mon Sep 17 00:00:00 2001 From: Clexus <528373858@qq.com> Date: Fri, 22 May 2026 19:14:28 +0800 Subject: [PATCH 3/4] Wrongly renamed --- paper-api/src/main/java/org/bukkit/entity/Player.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-api/src/main/java/org/bukkit/entity/Player.java b/paper-api/src/main/java/org/bukkit/entity/Player.java index f98d0bc69375..73e594669ea0 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Player.java +++ b/paper-api/src/main/java/org/bukkit/entity/Player.java @@ -3807,7 +3807,7 @@ public int getPing() { * @param pitch the pitch * @param relativePitch whether the pitch is relative to the current pitch */ - void modRotation(float yaw, boolean relativeYaw, float pitch, boolean relativePitch); + void setRotation(float yaw, boolean relativeYaw, float pitch, boolean relativePitch); /** * Causes the player to look towards the given entity. From 7e8505f3616b499ba3cc9212b59979e35e840848 Mon Sep 17 00:00:00 2001 From: Clexus <528373858@qq.com> Date: Fri, 22 May 2026 19:17:02 +0800 Subject: [PATCH 4/4] Wrongly renamed 2 --- paper-api/src/main/java/org/bukkit/entity/Player.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-api/src/main/java/org/bukkit/entity/Player.java b/paper-api/src/main/java/org/bukkit/entity/Player.java index 73e594669ea0..3dc58808ad0d 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Player.java +++ b/paper-api/src/main/java/org/bukkit/entity/Player.java @@ -3796,7 +3796,7 @@ public int getPing() { void setRotation(float yaw, float pitch); /** - * Modify the player's rotation. + * Set the player's rotation. *
* Note: When relative parameters are set, client will do interpolations to * make the rotation smooth, it's different from just send a new rotation with