aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0064-Add-velocity-warnings.patch
diff options
context:
space:
mode:
authorSpottedleaf <[email protected]>2023-06-07 22:21:04 -0700
committerSpottedleaf <[email protected]>2023-06-07 22:26:06 -0700
commit819facd7c4343f6783d1a4ee84345d5b99ef47ce (patch)
tree67933d38087dbc5713d3669c03ccb4d167521ca6 /patches/server/0064-Add-velocity-warnings.patch
parent0c4a1c449662e842432f4458dbb2e26a0dbc66ff (diff)
downloadPaper-819facd7c4343f6783d1a4ee84345d5b99ef47ce.tar.gz
Paper-819facd7c4343f6783d1a4ee84345d5b99ef47ce.zip
rewrite chunk system checkpoint
Diffstat (limited to 'patches/server/0064-Add-velocity-warnings.patch')
-rw-r--r--patches/server/0064-Add-velocity-warnings.patch88
1 files changed, 88 insertions, 0 deletions
diff --git a/patches/server/0064-Add-velocity-warnings.patch b/patches/server/0064-Add-velocity-warnings.patch
new file mode 100644
index 0000000000..604f376234
--- /dev/null
+++ b/patches/server/0064-Add-velocity-warnings.patch
@@ -0,0 +1,88 @@
+From 0000000000000000000000000000000000000000 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 9c80c55e8c15aa847aea134dd8121ee9d0c24d1c..1cca43506306994e740278a581b0d33924d08491 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+@@ -296,6 +296,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
+
+ static {
+ ConfigurationSerialization.registerClass(CraftOfflinePlayer.class);
+diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+index 0a6926f9b6be67d4d710d2fbc6bd2b1fcb0677a0..c9275f73be7332f79312037954f9685f6c1f800f 100644
+--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+@@ -465,10 +465,40 @@ 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 || this instanceof org.bukkit.entity.Minecart) && isUnsafeVelocity(velocity)) {
++ CraftServer.excessiveVelEx = new Exception("Excessive velocity set detected: tried to set velocity of entity " + entity.getScoreboardName() + " id #" + getEntityId() + " to (" + velocity.getX() + "," + velocity.getY() + "," + velocity.getZ() + ").");
++ }
++ // Paper end
+ this.entity.setDeltaMovement(CraftVector.toNMS(velocity));
+ entity.hurtMarked = 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 this.getHandle().getBbHeight();
+diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
+index 11d7ede26b46d0bf9cced65e8c3bcc41c8b66dbf..3ad14bf0697e682a2e777baa8faeb323d127fb13 100644
+--- a/src/main/java/org/spigotmc/WatchdogThread.java
++++ b/src/main/java/org/spigotmc/WatchdogThread.java
+@@ -80,7 +80,19 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa
+ log.log( Level.SEVERE, "During the run of the server, a physics stackoverflow was supressed" );
+ log.log( Level.SEVERE, "near " + net.minecraft.world.level.Level.lastPhysicsProblem );
+ }
+- //
++ // 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!):" ); // Paper
+ io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper // Paper - rewrite chunk system