mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-12 15:08:27 +02:00
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: 9a793cce Remove no longer applicable caveats to setPlayerListName 7137829e SPIGOT-4496: Undeprecate MapView.getId and make int de33ade0 Remove some draft API designations a35fa838 SPIGOT-4472: Add Consumer scheduler methods CraftBukkit Changes:8cd538e6
SPIGOT-4498: Crash on startupb4ee04ba
SPIGOT-4496: Undeprecate MapView.getId and make intec937d0e
SPIGOT-4472: Add Consumer scheduler methods Spigot Changes: a1f2566f Use monotonic time for watchdog bc4adcbf SPIGOT-4498: Crash on startup bb387e6c Rebuild patches
96 lines
4.7 KiB
Diff
96 lines
4.7 KiB
Diff
From 28f85cba59d14521010bd7034f77d446210f32ab Mon Sep 17 00:00:00 2001
|
|
From: Joseph Hirschfeld <joe@ibj.io>
|
|
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 cd17cdcf38..71bdbac134 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -199,6 +199,7 @@ public final class CraftServer implements Server {
|
|
public boolean ignoreVanillaPermissions = false;
|
|
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 df7c77e9aa..2858f11eef 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
@@ -265,12 +265,44 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
public void setVelocity(Vector velocity) {
|
|
Preconditions.checkArgument(velocity != null, "velocity");
|
|
velocity.checkFinite();
|
|
+
|
|
+ // Paper start - Warn server owners when plugins try to set super high velocities
|
|
+ if (!(this instanceof org.bukkit.entity.Projectile) && isUnsafeVelocity(velocity)) {
|
|
+ CraftServer.excessiveVelEx = new Exception("Excessive velocity set detected: tried to set velocity of entity " + entity.getName() + " id #" + getEntityId() + " to (" + velocity.getX() + "," + velocity.getY() + "," + velocity.getZ() + ").");
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
entity.motX = velocity.getX();
|
|
entity.motY = velocity.getY();
|
|
entity.motZ = velocity.getZ();
|
|
entity.velocityChanged = true;
|
|
}
|
|
|
|
+ // Paper start
|
|
+ /**
|
|
+ * Checks if the given velocity is not necessarily safe in all situations.
|
|
+ * This function returning true does not mean the velocity is dangerous or to be avoided, only that it may be
|
|
+ * a detriment to performance on the server.
|
|
+ *
|
|
+ * It is not to be used as a hard rule of any sort.
|
|
+ * Paper only uses it to warn server owners in watchdog crashes.
|
|
+ *
|
|
+ * @param vel incoming velocity to check
|
|
+ * @return if the velocity has the potential to be a performance detriment
|
|
+ */
|
|
+ private static boolean isUnsafeVelocity(Vector vel) {
|
|
+ final double x = vel.getX();
|
|
+ final double y = vel.getY();
|
|
+ final double z = vel.getZ();
|
|
+
|
|
+ if (x > 4 || x < -4 || y > 4 || y < -4 || z > 4 || z < -4) {
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ return false;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public double getHeight() {
|
|
return getHandle().length;
|
|
diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
|
|
index 21316d67f1..5d03191c80 100644
|
|
--- a/src/main/java/org/spigotmc/WatchdogThread.java
|
|
+++ b/src/main/java/org/spigotmc/WatchdogThread.java
|
|
@@ -76,7 +76,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.19.1
|
|
|