diff --git a/paper-server/patches/sources/net/minecraft/server/players/PlayerList.java.patch b/paper-server/patches/sources/net/minecraft/server/players/PlayerList.java.patch index be24f9393..9ae3e3ffe 100644 --- a/paper-server/patches/sources/net/minecraft/server/players/PlayerList.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/players/PlayerList.java.patch @@ -489,7 +489,7 @@ + } else if (!this.isWhiteListed(gameprofile, event)) { // Paper - ProfileWhitelistVerifyEvent + //ichatmutablecomponent = Component.translatable("multiplayer.disconnect.not_whitelisted"); // Paper + //event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.whitelistMessage)); // Spigot // Paper - Adventure - moved to isWhitelisted -+ } else if (this.getIpBans().isBanned(socketaddress) && !this.getIpBans().get(socketaddress).hasExpired()) { ++ } else if (this.getIpBans().isBanned(socketaddress) && getIpBans().get(socketaddress) != null && !this.getIpBans().get(socketaddress).hasExpired()) { // Paper - fix NPE with temp ip bans + IpBanListEntry ipbanentry = this.ipBans.get(socketaddress); ichatmutablecomponent = Component.translatable("multiplayer.disconnect.banned_ip.reason", ipbanentry.getReason()); diff --git a/paper-server/patches/sources/net/minecraft/server/players/StoredUserList.java.patch b/paper-server/patches/sources/net/minecraft/server/players/StoredUserList.java.patch index f5936fe15..bea194db9 100644 --- a/paper-server/patches/sources/net/minecraft/server/players/StoredUserList.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/players/StoredUserList.java.patch @@ -1,15 +1,38 @@ --- a/net/minecraft/server/players/StoredUserList.java +++ b/net/minecraft/server/players/StoredUserList.java -@@ -54,7 +54,7 @@ +@@ -30,7 +30,7 @@ + private static final Logger LOGGER = LogUtils.getLogger(); + private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create(); + private final File file; +- private final Map map = Maps.newHashMap(); ++ private final Map map = Maps.newConcurrentMap(); // Paper - Use ConcurrentHashMap in JsonList + + public StoredUserList(File file) { + this.file = file; +@@ -53,8 +53,11 @@ + @Nullable public V get(K key) { - this.removeExpired(); +- this.removeExpired(); - return (StoredUserEntry) this.map.get(this.getKeyForUser(key)); -+ return (V) this.map.get(this.getKeyForUser(key)); // CraftBukkit - fix decompile error ++ // Paper start - Use ConcurrentHashMap in JsonList ++ return (V) this.map.computeIfPresent(this.getKeyForUser(key), (k, v) -> { ++ return v.hasExpired() ? null : v; ++ }); ++ // Paper end - Use ConcurrentHashMap in JsonList } public void remove(K key) { -@@ -85,6 +85,7 @@ +@@ -77,7 +80,7 @@ + } + + public boolean isEmpty() { +- return this.map.size() < 1; ++ return this.map.isEmpty(); // Paper - Use ConcurrentHashMap in JsonList + } + + protected String getKeyForUser(K profile) { +@@ -85,29 +88,12 @@ } protected boolean contains(K k0) { @@ -17,34 +40,42 @@ return this.map.containsKey(this.getKeyForUser(k0)); } -@@ -93,7 +94,7 @@ - Iterator iterator = this.map.values().iterator(); - - while (iterator.hasNext()) { + private void removeExpired() { +- List list = Lists.newArrayList(); +- Iterator iterator = this.map.values().iterator(); +- +- while (iterator.hasNext()) { - V v0 = (StoredUserEntry) iterator.next(); -+ V v0 = (V) iterator.next(); // CraftBukkit - decompile error - - if (v0.hasExpired()) { - list.add(v0.getUser()); -@@ -103,7 +104,7 @@ - iterator = list.iterator(); - - while (iterator.hasNext()) { +- +- if (v0.hasExpired()) { +- list.add(v0.getUser()); +- } +- } +- +- iterator = list.iterator(); +- +- while (iterator.hasNext()) { - K k0 = iterator.next(); -+ K k0 = (K) iterator.next(); // CraftBukkit - decompile error +- +- this.map.remove(this.getKeyForUser(k0)); +- } +- ++ this.map.values().removeIf(StoredUserEntry::hasExpired); // Paper - Use ConcurrentHashMap in JsonList + } - this.map.remove(this.getKeyForUser(k0)); - } -@@ -118,7 +119,7 @@ + protected abstract StoredUserEntry createEntry(JsonObject json); +@@ -117,8 +103,9 @@ + } public void save() throws IOException { ++ this.removeExpired(); // Paper - remove expired values before saving JsonArray jsonarray = new JsonArray(); - Stream stream = this.map.values().stream().map((jsonlistentry) -> { + Stream stream = this.map.values().stream().map((jsonlistentry) -> { // CraftBukkit - decompile error JsonObject jsonobject = new JsonObject(); Objects.requireNonNull(jsonlistentry); -@@ -171,9 +172,17 @@ +@@ -171,9 +158,17 @@ StoredUserEntry jsonlistentry = this.createEntry(jsonobject); if (jsonlistentry.getUser() != null) {