f5265d6688
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 6ff65c82 SPIGOT-5908: CompassMeta for new lodestone compass data CraftBukkit Changes:3b9cf0f8
Improve code formatting008f039f
SPIGOT-5913: MOTD no longer supports new line characterb8b65eb7
SPIGOT-5908: CompassMeta for new lodestone compass data Spigot Changes: 4d9262cf Rebuild patches d27f7952 SPIGOT-5912: Outdated client message shows outdated server message
45 Zeilen
2.5 KiB
Diff
45 Zeilen
2.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Sudzzy <originmc@outlook.com>
|
|
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/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index cd47a4ca069df26969de3051c2aac80540093818..abbf59bb91021821876a8960e8f77fac24457ec4 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -198,4 +198,9 @@ public class PaperWorldConfig {
|
|
portalSearchRadius = getInt("portal-search-radius", 128);
|
|
portalCreateRadius = getInt("portal-create-radius", 16);
|
|
}
|
|
+
|
|
+ public boolean disableTeleportationSuffocationCheck;
|
|
+ private void disableTeleportationSuffocationCheck() {
|
|
+ disableTeleportationSuffocationCheck = getBoolean("disable-teleportation-suffocation-check", false);
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index fea541b287d3d4bd4a79d5058685cbd8d02768a5..0f6d0c078c1280676dcd0be2c7c61942109fb822 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -762,7 +762,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
if (fromWorld == toWorld) {
|
|
entity.playerConnection.teleport(to);
|
|
} else {
|
|
- server.getHandle().moveToWorld(entity, toWorld, true, to, true);
|
|
+ server.getHandle().moveToWorld(entity, toWorld, true, to, !toWorld.paperConfig.disableTeleportationSuffocationCheck); // Paper
|
|
}
|
|
return true;
|
|
}
|