aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0060-Add-velocity-warnings.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0060-Add-velocity-warnings.patch')
-rw-r--r--Spigot-Server-Patches/0060-Add-velocity-warnings.patch62
1 files changed, 62 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0060-Add-velocity-warnings.patch b/Spigot-Server-Patches/0060-Add-velocity-warnings.patch
new file mode 100644
index 0000000000..c1c50dc052
--- /dev/null
+++ b/Spigot-Server-Patches/0060-Add-velocity-warnings.patch
@@ -0,0 +1,62 @@
+From e5d75fd43f1e772df59e499fced596ef2eefdb25 Mon Sep 17 00:00:00 2001
+From: Joseph Hirschfeld <[email protected]>
+Date: Thu, 3 Mar 2016 02:48:12 -0600
+Subject: [PATCH] Add velocity warnings
+
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+index cab671d68..28da39cbd 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+@@ -173,6 +173,7 @@ public final class CraftServer implements Server {
+ private final UUID invalidUserUUID = UUID.nameUUIDFromBytes("InvalidUsername".getBytes(Charsets.UTF_8));
+ private final List<CraftPlayer> playerView;
+ public int reloadCount;
++ public static Exception excessiveVelEx; // Paper - Velocity warnings
+
+ private final class BooleanWrapper {
+ private boolean value = true;
+diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+index 6497905b9..463289199 100644
+--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+@@ -229,6 +229,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
+ }
+
+ public void setVelocity(Vector vel) {
++ // Paper start - Warn server owners when plugins try to set super high velocities
++ if (!(this instanceof org.bukkit.entity.Projectile) && (vel.getX() > 4 || vel.getX() < -4 || vel.getY() > 4 || vel.getY() < -4 || vel.getZ() > 4 || vel.getZ() < -4)) {
++ CraftServer.excessiveVelEx = new Exception("Excessive velocity set detected: tried to set velocity of entity #" + getEntityId() + " to (" + vel.getX() + "," + vel.getY() + "," + vel.getZ() + ").");
++ }
++ // Paper end
+ entity.motX = vel.getX();
+ entity.motY = vel.getY();
+ entity.motZ = vel.getZ();
+diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
+index 3ed983cc0..6384d50e7 100644
+--- a/src/main/java/org/spigotmc/WatchdogThread.java
++++ b/src/main/java/org/spigotmc/WatchdogThread.java
+@@ -66,7 +66,19 @@ public class WatchdogThread extends Thread
+ log.log( Level.SEVERE, "During the run of the server, a physics stackoverflow was supressed" );
+ log.log( Level.SEVERE, "near " + net.minecraft.server.World.blockLocation);
+ }
+- //
++ // Paper start - Warn in watchdog if an excessive velocity was ever set
++ if ( org.bukkit.craftbukkit.CraftServer.excessiveVelEx != null )
++ {
++ log.log( Level.SEVERE, "------------------------------" );
++ log.log( Level.SEVERE, "During the run of the server, a plugin set an excessive velocity on an entity" );
++ log.log( Level.SEVERE, "This may be the cause of the issue, or it may be entirely unrelated" );
++ log.log( Level.SEVERE, org.bukkit.craftbukkit.CraftServer.excessiveVelEx.getMessage());
++ for ( StackTraceElement stack : org.bukkit.craftbukkit.CraftServer.excessiveVelEx.getStackTrace() )
++ {
++ log.log( Level.SEVERE, "\t\t" + stack );
++ }
++ }
++ // Paper end
+ log.log( Level.SEVERE, "------------------------------" );
+ log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" );
+ dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().primaryThread.getId(), Integer.MAX_VALUE ), log );
+--
+2.12.2
+