Be less strict with vanilla teleport command limits

Just limit to the same valid location check as BaseBlockPosition, no
reason to restrict to the world border.

Ref: GH-3165
This commit is contained in:
Zach Brown 2020-04-16 21:16:35 -05:00
parent 0f06d38062
commit fdb8fe7807
No known key found for this signature in database
GPG key ID: CC9DA35FC5450B76

View file

@ -1,19 +1,21 @@
From b05693d1f838ea0610b915f48954530dca2943ff Mon Sep 17 00:00:00 2001
From edcf740d8e3d2b296015f13626dabff83cde74f0 Mon Sep 17 00:00:00 2001
From: Zach Brown <zach@zachbr.io>
Date: Thu, 16 Apr 2020 20:07:29 -0500
Subject: [PATCH] Restrict vanilla teleport command to worldborder
Subject: [PATCH] Restrict vanilla teleport command to valid locations
Fixes GH-3165
diff --git a/src/main/java/net/minecraft/server/CommandTeleport.java b/src/main/java/net/minecraft/server/CommandTeleport.java
index 3060b4f68..df2711978 100644
index 3060b4f68..79016b587 100644
--- a/src/main/java/net/minecraft/server/CommandTeleport.java
+++ b/src/main/java/net/minecraft/server/CommandTeleport.java
@@ -116,6 +116,11 @@ public class CommandTeleport {
@@ -116,6 +116,12 @@ public class CommandTeleport {
}
private static void a(CommandListenerWrapper commandlistenerwrapper, Entity entity, WorldServer worldserver, double d0, double d1, double d2, Set<PacketPlayOutPosition.EnumPlayerTeleportFlags> set, float f, float f1, @Nullable CommandTeleport.a commandteleport_a) {
+ // Paper start - Don't allow teleport command to go outside the world border
+ if (!worldserver.getWorldBorder().isInBounds(new BlockPosition(d0, d1, d2))) {
+ // Paper start - Don't allow teleport command to invalid locations
+ if (d0 <= -30000000 || d2 <= -30000000 || d0 > 30000000 || d2 > 30000000) { // Copy/pasta from BaseBlockPosition#isValidLocation
+ org.bukkit.Bukkit.getLogger().warning("Refused to teleport " + entity.getName() + " to " + d0 + ", " + d1 + ", " + d2);
+ return;
+ }
+ // Paper end
@ -21,5 +23,5 @@ index 3060b4f68..df2711978 100644
ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(new BlockPosition(d0, d1, d2));
--
2.26.1.windows.1
2.26.0