37 lines
1.8 KiB
Diff
37 lines
1.8 KiB
Diff
|
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
|
||
|
index ed4587248fada36c4c206be1fa36fef42fc969e2..ddde8f9f53f352c806166354e6a445543ecc2fbf 100644
|
||
|
--- a/src/main/java/net/minecraft/network/Connection.java
|
||
|
+++ b/src/main/java/net/minecraft/network/Connection.java
|
||
|
@@ -387,10 +387,22 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
||
|
}
|
||
|
// Paper end
|
||
|
|
||
|
+ 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
|
||
|
+ if (currTick != net.minecraft.server.MinecraftServer.currentTick) {
|
||
|
+ currTick = net.minecraft.server.MinecraftServer.currentTick;
|
||
|
+ joinAttemptsThisTick = 0;
|
||
|
+ }
|
||
|
+ // Paper end
|
||
|
if (this.packetListener instanceof ServerLoginPacketListenerImpl) {
|
||
|
+ if ( ((ServerLoginPacketListenerImpl) this.packetListener).state != ServerLoginPacketListenerImpl.State.READY_TO_ACCEPT // Paper
|
||
|
+ || (joinAttemptsThisTick++ < MAX_PER_TICK)) { // Paper - limit the number of joins which can be processed each tick
|
||
|
((ServerLoginPacketListenerImpl) this.packetListener).tick();
|
||
|
+ } // Paper
|
||
|
}
|
||
|
|
||
|
if (this.packetListener instanceof ServerGamePacketListenerImpl) {
|