Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite the tick loop system #295

Merged
merged 18 commits into from
Feb 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
545 changes: 0 additions & 545 deletions patches/server/0004-Backport-modern-tick-loop.patch

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ This feature can be enabled by setting the "server-ip" field in server.propertie
Currently, this feature is only supported on Linux environments with Epoll available.

diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
index 6434b8613971a228fb0074390d8223bfcefe4e9f..ee6a6b379575b0d0b10b96bac4ae8e1ffa810b8f 100644
index 088beb22b53ddf77dc182dd5ac39e1086d5279aa..8e57df176bcb04b7309a476a5472a41e5e46f8ae 100644
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
@@ -165,6 +165,28 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
@@ -163,6 +163,28 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer

this.r = WorldSettings.a(i);
DedicatedServer.LOGGER.info("Default game type: " + this.r);
Expand Down Expand Up @@ -42,7 +42,7 @@ index 6434b8613971a228fb0074390d8223bfcefe4e9f..ee6a6b379575b0d0b10b96bac4ae8e1f
InetAddress inetaddress = null;

if (this.getServerIp().length() > 0) {
@@ -174,11 +196,9 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
@@ -172,11 +194,9 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
if (this.R() < 0) {
this.setPort(this.propertyManager.getInt("server-port", 25565));
}
Expand All @@ -57,7 +57,7 @@ index 6434b8613971a228fb0074390d8223bfcefe4e9f..ee6a6b379575b0d0b10b96bac4ae8e1f
// PaperSpigot start
org.github.paperspigot.PaperSpigotConfig.init((File) options.valueOf("paper-settings"));
org.github.paperspigot.PaperSpigotConfig.registerCommands();
@@ -190,7 +210,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
@@ -188,7 +208,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer

if (!org.spigotmc.SpigotConfig.lateBind) {
try {
Expand All @@ -66,7 +66,7 @@ index 6434b8613971a228fb0074390d8223bfcefe4e9f..ee6a6b379575b0d0b10b96bac4ae8e1f
} catch (IOException ioexception) {
DedicatedServer.LOGGER.warn("**** FAILED TO BIND TO PORT!");
DedicatedServer.LOGGER.warn("The exception was: {}", new Object[] { ioexception.toString()});
@@ -296,7 +316,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
@@ -294,7 +314,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer

if (org.spigotmc.SpigotConfig.lateBind) {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ index fcf54e3a138f8408d7b85f087be03ca8cedb45f9..9b8415a334d7e8527ec39d32e7ab1b81

public SocketAddress getSocketAddress() {
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index 5c980fe2907d2ff01be793ab0654ab198f46e519..c3768c33f240799deb5f92b5141c962e41b11827 100644
index c936219196ea403a9d247ad6c8c0ffee79411da2..3add8302c4817ed2612c55f2213db67d139e2a46 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -17,6 +17,7 @@ public class Main {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Also avoids spamming closed channel exception by rechecking closed state in disp
and then catch exceptions and close if they fire.

diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index 9ece4582635db8d9547302421b44f67e262fd0f7..7d5a3c4b6d9958efde5f918963631603efd33877 100644
index 9b8415a334d7e8527ec39d32e7ab1b81be876b54..9dd98c1b5f23163ee42536c1e4aa4d11ac656e05 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -62,7 +62,7 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Only make one flush call when emptying the packet queue too.
This patch will be used to optimise out flush calls in later patches.

diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index 7d5a3c4b6d9958efde5f918963631603efd33877..b455a3159cd79704ba8da66ca540a4ea48719f05 100644
index 9dd98c1b5f23163ee42536c1e4aa4d11ac656e05..f655d58cf5725f9815abb577a2d60569ac03ce40 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -81,6 +81,38 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ Subject: [PATCH] Consolidate flush calls for entity tracker packets
Most server packets seem to be sent from here, so try to avoid expensive flush calls from them.

diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 0ad70c9ef1d5ab91a56852f171934a41e0c0a11d..9ae7d40f9d558d501fc754996f2122d7b9edcdae 100644
index 7d19ec833d61c2f75b5eb75d7eb291c7366a1a9a..610775bfd092b988f907013f35bfc5b2adeb738a 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -946,7 +946,26 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
@@ -860,7 +860,26 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
this.methodProfiler.b();
this.methodProfiler.a("tracker");
worldserver.timings.tracker.startTiming(); // Spigot
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ up on this optimisation before he came along.
Locally this patch drops the entity tracker tick by a full 1.5x.

diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index b455a3159cd79704ba8da66ca540a4ea48719f05..06e57ed7e48e14f07da4f9264c6ddc7017821578 100644
index f655d58cf5725f9815abb577a2d60569ac03ce40..948d97d1c34721064588bb279690e4ddf046be30 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -305,8 +305,14 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,10 @@ index 0000000000000000000000000000000000000000..9afaf630481a9533fb014f306d4d90b8
+public class PandaSpigotWorldConfig {
+}
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
index ee6a6b379575b0d0b10b96bac4ae8e1ffa810b8f..09085582a95fc4c61034db70dd543c5e7da8ede7 100644
index 8e57df176bcb04b7309a476a5472a41e5e46f8ae..97699e7f86cef3ab8c4560066f0ef93c18a8f5ad 100644
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
@@ -198,6 +198,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
@@ -196,6 +196,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
}
bindAddress = new java.net.InetSocketAddress(inetaddress, this.R());
}
Expand Down Expand Up @@ -206,7 +206,7 @@ index ad8c5da90fc64825185aedcfdf89a6ff013a7a81..1caffab6e75abf6010e8f1f2d2a29a2a

pluginManager.clearPlugins();
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index c3768c33f240799deb5f92b5141c962e41b11827..7ec64221dca7da2d0d52628a59e303eeb44b2621 100644
index 3add8302c4817ed2612c55f2213db67d139e2a46..d8bb9c3e95b14e91075f8a36053e44090519a547 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -131,6 +131,14 @@ public class Main {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ the updates per world, so that we can re-use the same packet
object for every player unless they have per-player time enabled.

diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 9ae7d40f9d558d501fc754996f2122d7b9edcdae..864f078f7242bf7b0571c61f0e023c8de02ff771 100644
index 610775bfd092b988f907013f35bfc5b2adeb738a..735f8d4d08d9adf4daf31cb68045dda1d0229b94 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -882,12 +882,24 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
@@ -796,12 +796,24 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs

SpigotTimings.timeUpdateTimer.startTiming(); // Spigot
// Send time updates to everyone, it will get the right time from the world the player is in.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ index 3dd3d0702c17541083d0d365ca46e93602105bce..b5f16e8cab9e43ad7597b2ea5bc92139
public KnockbackConfig knockback;

diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 864f078f7242bf7b0571c61f0e023c8de02ff771..f2ba1733dcd66ef43bf6262f5fcf241c71d2d26f 100644
index 735f8d4d08d9adf4daf31cb68045dda1d0229b94..918863f601bb2199f5b46ca85f54152c138bbe7e 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -889,7 +889,7 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
@@ -803,7 +803,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
long worldTime = world.getTime();
final PacketPlayOutUpdateTime worldPacket = new PacketPlayOutUpdateTime(worldTime, dayTime, doDaylight);
for (EntityHuman entityhuman : world.players) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ keeping long lived large direct buffers in cache.
Set system properly at server startup if not set already to help protect from this.

diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index 7ec64221dca7da2d0d52628a59e303eeb44b2621..abf3a9f32e55a893b6f451c1e89de38c17ca90b3 100644
index d8bb9c3e95b14e91075f8a36053e44090519a547..b2a99effdf3ee503f94c39239f01e462c810e4c0 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -19,6 +19,7 @@ public class Main {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ index 72c7e6fc8bb0a71877d6759af44d39030bcf51f5..1353a791235ae3b820072fa80ef60c3c

protected void doTick() {}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index f2ba1733dcd66ef43bf6262f5fcf241c71d2d26f..9b3028ddc71ea072a53d44d49fc66865fdcd4d36 100644
index 918863f601bb2199f5b46ca85f54152c138bbe7e..00429aa61ca5dbfc8ebc29557d20b5b40e4ea6b3 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -909,6 +909,7 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
@@ -823,6 +823,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs

// if (i == 0 || this.getAllowNether()) {
WorldServer worldserver = this.worlds.get(i);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,18 @@ Cleanups a bytebuffer which was allocated during the encoding of the
favicon to be sent to the client.

diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 9b3028ddc71ea072a53d44d49fc66865fdcd4d36..ff1cd9953300e3306c42b0875ab003d014e7ba44 100644
index 00429aa61ca5dbfc8ebc29557d20b5b40e4ea6b3..bed9076fc52dc7a4f2ee3fe28c2a3f72fb6b0293 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -746,6 +746,7 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
@@ -671,6 +671,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs

if (file.isFile()) {
ByteBuf bytebuf = Unpooled.buffer();
+ ByteBuf bytebuf1 = null; // PandaSpigot - cleanup favicon bytebuf

try {
BufferedImage bufferedimage = ImageIO.read(file);
@@ -753,13 +754,14 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
@@ -678,13 +679,14 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
Validate.validState(bufferedimage.getWidth() == 64, "Must be 64 pixels wide", new Object[0]);
Validate.validState(bufferedimage.getHeight() == 64, "Must be 64 pixels high", new Object[0]);
ImageIO.write(bufferedimage, "PNG", new ByteBufOutputStream(bytebuf));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ the randomness. This is mostly an optimization, as it would be
multiplied by zero anyways, causing the same effect.

diff --git a/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java b/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
index 1d35967a27245ab12ea76db9218662eb6a4b8306..14f65a41a7711afd45fbd09007e385dfd6291719 100644
index 04f04ce721aa06fba935618176c77587e305a5b0..05c9ebb76a3cb19e887bea1311ac36035334b9a1 100644
--- a/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
+++ b/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
@@ -36,6 +36,10 @@ public class PandaSpigotWorldConfig {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,15 @@ index 0000000000000000000000000000000000000000..c8540d16defdc633113b504616794f44
+ }
+}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index e6466f470adddbaf438b98c559a27d5d13bccacd..6392695bf426536709967f744d511ed9de823a96 100644
index bed9076fc52dc7a4f2ee3fe28c2a3f72fb6b0293..9d2b4037119030eea027b7d79ab4f36f28af71ae 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -100,7 +100,7 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
@@ -100,7 +100,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
private long X = 0L;
private final GameProfileRepository Y;
private final UserCache Z;
- protected final Queue<FutureTask<?>> j = new java.util.concurrent.ConcurrentLinkedQueue<FutureTask<?>>(); // Spigot, PAIL: Rename
+ protected final Queue<FutureTask<?>> j = new com.destroystokyo.paper.utils.CachedSizeConcurrentLinkedQueue<>(); // Spigot, PAIL: Rename // PandaSpigot - Make size() constant-time
private Thread serverThread;
private long ab; // PandaSpigot - The az() initializer is redundant
private long ab = az();

Original file line number Diff line number Diff line change
Expand Up @@ -320,10 +320,10 @@ index 9034e1ad7a013c7288e68322a65798e40d8b851d..86ab9994079c6e18e3aed885db4171d0
public EntityFishingHook hookedFish;
public boolean affectsSpawning = true; // PaperSpigot
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 86abea9555bdd23eed4a2a92cc5b1907f5a081c7..a82b1d140f3e3abbce55e9d96cc340fb6a8b8642 100644
index 9d2b4037119030eea027b7d79ab4f36f28af71ae..e613c8afd3b02b91f224dcdeab28277227fa2a84 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1624,6 +1624,7 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
@@ -1536,6 +1536,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
return true;
}

Expand Down
Loading