62 lines
4.2 KiB
Diff
62 lines
4.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: MrHua269 <novau233@163.com>
|
|
Date: Sat, 6 Apr 2024 05:18:00 +0000
|
|
Subject: [PATCH] Gale Replace throttle tracker map with optimized collection
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java
|
|
index 45a2683c9489bee6d67a1f3d702c17f2e9dc02e4..8e90f35218e66690359dac35828a1485a77f34c1 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java
|
|
@@ -1,5 +1,7 @@
|
|
package net.minecraft.server.network;
|
|
|
|
+import it.unimi.dsi.fastutil.objects.Object2LongMap;
|
|
+import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
|
|
import net.minecraft.SharedConstants;
|
|
import net.minecraft.network.Connection;
|
|
import net.minecraft.network.chat.Component;
|
|
@@ -14,7 +16,8 @@ import net.minecraft.server.MinecraftServer;
|
|
|
|
// CraftBukkit start
|
|
import java.net.InetAddress;
|
|
-import java.util.HashMap;
|
|
+import java.util.Iterator;
|
|
+import java.util.Map;
|
|
// CraftBukkit end
|
|
|
|
public class ServerHandshakePacketListenerImpl implements ServerHandshakePacketListener {
|
|
@@ -25,7 +28,7 @@ public class ServerHandshakePacketListenerImpl implements ServerHandshakePacketL
|
|
static final java.util.regex.Pattern PROP_PATTERN = java.util.regex.Pattern.compile("\\w{0,16}");
|
|
// Spigot end
|
|
// CraftBukkit start - add fields
|
|
- private static final HashMap<InetAddress, Long> throttleTracker = new HashMap<InetAddress, Long>();
|
|
+ private static final Object2LongOpenHashMap<InetAddress> throttleTracker = new Object2LongOpenHashMap<>(); // Gale - Dionysus - replace throttle tracker map with optimized collection
|
|
private static int throttleCounter = 0;
|
|
// CraftBukkit end
|
|
private static final Component IGNORE_STATUS_REASON = Component.translatable("disconnect.ignoring_status_request");
|
|
@@ -86,7 +89,7 @@ public class ServerHandshakePacketListenerImpl implements ServerHandshakePacketL
|
|
InetAddress address = ((java.net.InetSocketAddress) this.connection.getRemoteAddress()).getAddress();
|
|
|
|
synchronized (ServerHandshakePacketListenerImpl.throttleTracker) {
|
|
- if (ServerHandshakePacketListenerImpl.throttleTracker.containsKey(address) && !"127.0.0.1".equals(address.getHostAddress()) && currentTime - ServerHandshakePacketListenerImpl.throttleTracker.get(address) < connectionThrottle) {
|
|
+ if (ServerHandshakePacketListenerImpl.throttleTracker.containsKey(address) && !"127.0.0.1".equals(address.getHostAddress()) && currentTime - ServerHandshakePacketListenerImpl.throttleTracker.getLong(address) < connectionThrottle) { // Gale - Dionysus - replace throttle tracker map with optimized collection
|
|
ServerHandshakePacketListenerImpl.throttleTracker.put(address, currentTime);
|
|
Component chatmessage = io.papermc.paper.adventure.PaperAdventure.asVanilla(io.papermc.paper.configuration.GlobalConfiguration.get().messages.kick.connectionThrottle); // Paper - Configurable connection throttle kick message
|
|
this.connection.send(new ClientboundLoginDisconnectPacket(chatmessage));
|
|
@@ -100,13 +103,7 @@ public class ServerHandshakePacketListenerImpl implements ServerHandshakePacketL
|
|
ServerHandshakePacketListenerImpl.throttleCounter = 0;
|
|
|
|
// Cleanup stale entries
|
|
- java.util.Iterator iter = ServerHandshakePacketListenerImpl.throttleTracker.entrySet().iterator();
|
|
- while (iter.hasNext()) {
|
|
- java.util.Map.Entry<InetAddress, Long> entry = (java.util.Map.Entry) iter.next();
|
|
- if (entry.getValue() > connectionThrottle) {
|
|
- iter.remove();
|
|
- }
|
|
- }
|
|
+ throttleTracker.object2LongEntrySet().removeIf(entry -> entry.getLongValue() > connectionThrottle); // Gale - Dionysus - replace throttle tracker map with optimized collection
|
|
}
|
|
}
|
|
} // Paper - Unix domain socket support
|