From ff2628ed012b65e98277861b34fc3a93fc921862 Mon Sep 17 00:00:00 2001 From: Zach Brown <1254957+zachbr@users.noreply.github.com> Date: Sat, 5 Jul 2014 22:55:30 -0500 Subject: [PATCH] Make players tick in main loop "feature" configurable Defaults to false, servers thant additional security and peace of mind can turn it back on but doing so may cause gameplay abnormalities --- ...-main-tick-loop-feature-configurable.patch | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 CraftBukkit-Patches/0025-Make-players-in-main-tick-loop-feature-configurable.patch diff --git a/CraftBukkit-Patches/0025-Make-players-in-main-tick-loop-feature-configurable.patch b/CraftBukkit-Patches/0025-Make-players-in-main-tick-loop-feature-configurable.patch new file mode 100644 index 000000000..0f578bedb --- /dev/null +++ b/CraftBukkit-Patches/0025-Make-players-in-main-tick-loop-feature-configurable.patch @@ -0,0 +1,158 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Zach Brown <1254957+zachbr@users.noreply.github.com> +Date: Sat, 5 Jul 2014 22:54:54 -0500 +Subject: [PATCH] Make players in main tick loop feature configurable + + +diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/EntityPlayer.java ++++ b/src/main/java/net/minecraft/server/EntityPlayer.java +@@ -0,0 +0,0 @@ import org.bukkit.event.inventory.InventoryType; + import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; + // CraftBukkit end + ++import org.github.paperspigot.PaperSpigotConfig; // PaperSpigot ++ + public class EntityPlayer extends EntityHuman implements ICrafting { + + private static final Logger bL = LogManager.getLogger(); +@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { + return 1.62F; + } + +- // Spigot start +- private AxisAlignedBB groundCheck = AxisAlignedBB.a( 0, 0, 0, 0, 0, 0 ); +- + public void h() { +- groundCheck.b( locX - 0.3, locY - 0.1, locZ - 0.3, locX + 0.3, locY, locZ + 0.3 ); +- onGround = world.c(groundCheck); +- // Spigot end ++ // PaperSpigot start - Make player tick in main loop configurable ++ if (PaperSpigotConfig.playerTickMainLoop) { ++ // Spigot start ++ AxisAlignedBB groundCheck = AxisAlignedBB.a( 0, 0, 0, 0, 0, 0 ); ++ groundCheck.b( locX - 0.3, locY - 0.1, locZ - 0.3, locX + 0.3, locY, locZ + 0.3 ); ++ onGround = world.c(groundCheck); ++ // Spigot end ++ } ++ // PaperSpigot end + + // CraftBukkit start + if (this.joining) { +@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { + if (this.bX > 0L && this.server.getIdleTimeout() > 0 && MinecraftServer.ar() - this.bX > (long) (this.server.getIdleTimeout() * 1000 * 60)) { + this.playerConnection.disconnect("You have been idle for too long!"); + } +- // Spigot start +- this.i(); +- if ( Double.isNaN( previousY ) ) +- { ++ ++ // PaperSpigot start - Make player tick in main loop configurable ++ if (PaperSpigotConfig.playerTickMainLoop) { ++ // Spigot start ++ this.i(); ++ if ( Double.isNaN( previousY ) ) ++ { ++ previousY = locY; ++ } ++ this.b(locY - previousY, onGround); + previousY = locY; + } +- this.b(locY - previousY, onGround); +- previousY = locY; ++ // PaperSpigot end + } + + private double previousY = Double.NaN; +diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/PlayerConnection.java ++++ b/src/main/java/net/minecraft/server/PlayerConnection.java +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketPlayInListener { + f1 = packetplayinflying.h(); + } + ++ // PaperSpigot start - Make player tick in main loop configurable ++ if (!PaperSpigotConfig.playerTickMainLoop) { ++ this.player.onGround = packetplayinflying.i(); ++ this.player.i(); ++ } ++ // PaperSpigot end; + this.player.V = 0.0F; + this.player.setLocation(d1, d2, d3, f, f1); + if (this.player.vehicle != null) { +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketPlayInListener { + } + + if (this.player.isSleeping()) { ++ // PaperSpigot start - Make player tick in main loop configurable ++ if (!PaperSpigotConfig.playerTickMainLoop) { ++ this.player.i(); ++ } ++ // PaperSpigot end + this.player.setLocation(this.y, this.z, this.q, this.player.yaw, this.player.pitch); + worldserver.playerJoinedWorld(this.player); + return; +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketPlayInListener { + f3 = packetplayinflying.h(); + } + ++ // PaperSpigot start - Make player tick in main loop configurable ++ if (!PaperSpigotConfig.playerTickMainLoop) { ++ this.player.i(); ++ } ++ // PaperSpigot end + this.player.V = 0.0F; + this.player.setLocation(this.y, this.z, this.q, f2, f3); + if (!this.checkMovement) { +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketPlayInListener { + } + + this.player.move(d4, d5, d6); ++ // PaperSpigot start - Make player tick in main loop configurable ++ if (!PaperSpigotConfig.playerTickMainLoop) { ++ this.player.onGround = packetplayinflying.i(); ++ } ++ // PaperSpigot end + this.player.checkMovement(d4, d5, d6); + double d11 = d5; + +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketPlayInListener { + this.f = 0; + } + ++ // PaperSpigot start - Make player tick in main loop configurable ++ if (!PaperSpigotConfig.playerTickMainLoop) { ++ this.player.onGround = packetplayinflying.i(); ++ } ++ // PaperSpigot end + this.minecraftServer.getPlayerList().d(this.player); ++ // PaperSpigot start - Make player tick in main loop configurable ++ if (!PaperSpigotConfig.playerTickMainLoop) { ++ this.player.b(this.player.locY - d0, packetplayinflying.i()); ++ } ++ // PaperSpigot end + } else if (this.e % 20 == 0) { + this.a(this.y, this.z, this.q, this.player.yaw, this.player.pitch); + } +diff --git a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java ++++ b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java +@@ -0,0 +0,0 @@ public class PaperSpigotConfig + { + interactLimit = getInt( "settings.player-interaction-limit", 2 ); + } ++ ++ public static boolean playerTickMainLoop; ++ private static void playerTickMainLoop() ++ { ++ playerTickMainLoop = getBoolean( "settings.player-tick-in-main-loop", false ); ++ if ( playerTickMainLoop ) { ++ Bukkit.getLogger().log( Level.INFO, "Ticking players in the main loop. This may cause gameplay abnormalities" ); ++ } ++ } + } +-- \ No newline at end of file