From 4cd15c07b25f6a2bb6e0aca5e293324d2f49d3c7 Mon Sep 17 00:00:00 2001 From: Lucy Poulton Date: Wed, 31 Dec 2025 10:50:58 +0000 Subject: [PATCH 1/2] Remove spectator players' cameras when teleporting --- .../bukkit/craftbukkit/entity/CraftPlayer.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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 e3c9327de894..2cd72ff805be 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 @@ -1317,7 +1317,23 @@ protected boolean teleport0(Location location, org.bukkit.event.player.PlayerTel return false; } - return super.teleport0(location, cause, flags); + // Paper start - stop spectating other entities on teleport + // return super.teleport0(location, cause, flags); + // Attempt to set the camera first + Entity camera = this.getHandle().getCamera(); + this.getHandle().setCamera(null); + if (camera != this.getHandle() && camera == this.getHandle().getCamera()) { + // If the camera hasn't changed, it was likely cancelled by an event, so stop the teleport + return false; + } + + boolean teleported = super.teleport0(location, cause, flags); + if (!teleported) { + // If the teleport doesn't go through, restore the original camera + this.getHandle().setCamera(camera); + } + return teleported; + // Paper end - stop spectating other entities on teleport } @Override From 14a87a5d0832bef9eca3cd611ff8853e0f83df31 Mon Sep 17 00:00:00 2001 From: Lucy Poulton Date: Wed, 31 Dec 2025 12:29:34 +0000 Subject: [PATCH 2/2] Remove unneeded boundary comments, check for any non-self camera --- .../java/org/bukkit/craftbukkit/entity/CraftPlayer.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) 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 2cd72ff805be..f5e40f2200cb 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 @@ -1317,13 +1317,10 @@ protected boolean teleport0(Location location, org.bukkit.event.player.PlayerTel return false; } - // Paper start - stop spectating other entities on teleport - // return super.teleport0(location, cause, flags); - // Attempt to set the camera first Entity camera = this.getHandle().getCamera(); this.getHandle().setCamera(null); - if (camera != this.getHandle() && camera == this.getHandle().getCamera()) { - // If the camera hasn't changed, it was likely cancelled by an event, so stop the teleport + if (this.getHandle() != this.getHandle().getCamera()) { + // If the camera is not the player after setting, the stop spectating event was likely cancelled, so stop the teleport return false; } @@ -1333,7 +1330,6 @@ protected boolean teleport0(Location location, org.bukkit.event.player.PlayerTel this.getHandle().setCamera(camera); } return teleported; - // Paper end - stop spectating other entities on teleport } @Override