diff options
Diffstat (limited to 'patches/server/0063-Configurable-inter-world-teleportation-safety.patch')
-rw-r--r-- | patches/server/0063-Configurable-inter-world-teleportation-safety.patch | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/patches/server/0063-Configurable-inter-world-teleportation-safety.patch b/patches/server/0063-Configurable-inter-world-teleportation-safety.patch new file mode 100644 index 0000000000..e6af143352 --- /dev/null +++ b/patches/server/0063-Configurable-inter-world-teleportation-safety.patch @@ -0,0 +1,30 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Sudzzy <[email protected]> +Date: Thu, 3 Mar 2016 02:50:31 -0600 +Subject: [PATCH] Configurable inter-world teleportation safety + +People are able to abuse the way Bukkit handles teleportation across worlds since it provides a built in teleportation +safety check. + +To abuse the safety check, players are required to get into a location deemed unsafe by Bukkit e.g. be within a chest +or door block. While they are in this block, they accept a teleport request from a player within a different world. Once +the player teleports, Minecraft will recursively search upwards for a safe location, this could eventually land within a +player's skybase. + +Example setup to perform the glitch: http://puu.sh/ng3PC/cf072dcbdb.png +The wanted destination was on top of the emerald block however the player ended on top of the diamond block. +This only is the case if the player is teleporting between worlds. + +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index b6932bee839cac9b819b9cd7a3f7668688bfe44e..24621c11ff91df8695eecc818e6a94a095c5a9cc 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -1235,7 +1235,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + entity.connection.teleport(to); + } else { + // The respawn reason should never be used if the passed location is non null. +- this.server.getHandle().respawn(entity, toWorld, true, to, true, null); ++ this.server.getHandle().respawn(entity, toWorld, true, to, !toWorld.paperConfig().environment.disableTeleportationSuffocationCheck, null); // Paper + } + return true; + } |