2022-06-09 10:51:45 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Shane Freeder <theboyetronic@gmail.com>
|
|
|
|
Date: Wed, 19 Aug 2020 05:05:54 +0100
|
|
|
|
Subject: [PATCH] Buffer joins to world
|
|
|
|
|
|
|
|
This patch buffers the number of logins which will attempt to join
|
|
|
|
the world per tick, this attempts to reduce the impact that join floods
|
|
|
|
has on the server
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java
|
2023-06-08 18:09:43 +02:00
|
|
|
index 1b6d090afea5b0a49b601b73cefeedc0b832ba9d..ee8d1bb909cf2a3bbe3434aa085762d952198063 100644
|
2022-06-09 10:51:45 +02:00
|
|
|
--- a/src/main/java/net/minecraft/network/Connection.java
|
|
|
|
+++ b/src/main/java/net/minecraft/network/Connection.java
|
2023-06-08 18:09:43 +02:00
|
|
|
@@ -443,14 +443,29 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
2022-06-09 10:51:45 +02:00
|
|
|
}
|
2023-06-08 18:09:43 +02:00
|
|
|
// Paper end
|
2022-06-09 10:51:45 +02:00
|
|
|
|
|
|
|
+ private static final int MAX_PER_TICK = io.papermc.paper.configuration.GlobalConfiguration.get().misc.maxJoinsPerTick; // Paper
|
|
|
|
+ private static int joinAttemptsThisTick; // Paper
|
|
|
|
+ private static int currTick; // Paper
|
|
|
|
public void tick() {
|
|
|
|
this.flushQueue();
|
|
|
|
+ // Paper start
|
2022-12-21 22:55:42 +01:00
|
|
|
+ if (Connection.currTick != net.minecraft.server.MinecraftServer.currentTick) {
|
|
|
|
+ Connection.currTick = net.minecraft.server.MinecraftServer.currentTick;
|
|
|
|
+ Connection.joinAttemptsThisTick = 0;
|
2022-06-09 10:51:45 +02:00
|
|
|
+ }
|
|
|
|
+ // Paper end
|
2022-07-27 22:46:05 +02:00
|
|
|
PacketListener packetlistener = this.packetListener;
|
2022-06-09 10:51:45 +02:00
|
|
|
|
2022-07-27 22:46:05 +02:00
|
|
|
if (packetlistener instanceof TickablePacketListener) {
|
2022-12-21 22:55:42 +01:00
|
|
|
TickablePacketListener tickablepacketlistener = (TickablePacketListener) packetlistener;
|
|
|
|
|
|
|
|
+ // Paper start - limit the number of joins which can be processed each tick
|
|
|
|
+ if (!(this.packetListener instanceof net.minecraft.server.network.ServerLoginPacketListenerImpl loginPacketListener)
|
|
|
|
+ || loginPacketListener.state != net.minecraft.server.network.ServerLoginPacketListenerImpl.State.READY_TO_ACCEPT
|
|
|
|
+ || Connection.joinAttemptsThisTick++ < MAX_PER_TICK) {
|
|
|
|
tickablepacketlistener.tick();
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!this.isConnected() && !this.disconnectionHandled) {
|