PaperSpigot-Parent/CraftBukkit-Patches/0025-Make-players-in-main-tick-loop-feature-configurable.patch
Zach Brown 0976e9a02a 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
2014-07-05 22:55:30 -05:00

161 lines
6.9 KiB
Diff

From bcc9626b269c27b7c3b72cc6d1ee56793f517305 Mon Sep 17 00:00:00 2001
From: Zach Brown <Zbob750@live.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 93b974a..ffd0549 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -27,6 +27,8 @@ 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();
@@ -175,13 +177,16 @@ 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) {
@@ -261,14 +266,19 @@ 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 d5f3b7b..d8dd9af 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -291,6 +291,12 @@ 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) {
@@ -309,6 +315,11 @@ 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;
@@ -352,6 +363,11 @@ 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) {
@@ -382,6 +398,11 @@ 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;
@@ -423,7 +444,17 @@ 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 7bda065..4f9f660 100644
--- a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
+++ b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
@@ -135,4 +135,13 @@ 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" );
+ }
+ }
}
--
1.9.1