From 1321b5d68014dab30c8ea499f921c3d188bddcd0 Mon Sep 17 00:00:00 2001 From: lax1dude Date: Sun, 19 Jan 2025 12:04:27 -0800 Subject: [PATCH] (1.3.5) Reduce lock contention in EaglerXBungee --- .../EaglerXBungee-Latest.jar | Bin 601826 -> 599174 bytes .../gateway_bungeecord/EaglerXBungee.java | 7 +- .../auth/AuthLoadingCache.java | 34 +- .../GameProtocolMessageController.java | 7 +- .../server/web/HttpWebServer.java | 48 +-- .../shit/CompatWarning.java | 3 + .../skins/CapeServiceOffline.java | 34 +- .../gateway_bungeecord/skins/SkinService.java | 394 +++++++----------- .../skins/SkinServiceOffline.java | 70 +--- .../src/main/resources/plugin.yml | 2 +- gateway_version | 2 +- 11 files changed, 238 insertions(+), 363 deletions(-) diff --git a/gateway/EaglercraftXBungee/EaglerXBungee-Latest.jar b/gateway/EaglercraftXBungee/EaglerXBungee-Latest.jar index bdcef2ed9104dd1417694fe8a4891bc000aa74db..a5d8bef9c0e5eb696a62309006188a5460e29916 100644 GIT binary patch delta 92300 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 diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/EaglerXBungee.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/EaglerXBungee.java index 126d111..b69cbe8 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/EaglerXBungee.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/EaglerXBungee.java @@ -64,8 +64,11 @@ import net.md_5.bungee.BungeeCord; */ public class EaglerXBungee extends Plugin { - public static final String NATIVE_BUNGEECORD_BUILD = "1.21-R0.1-SNAPSHOT:20a71b0:1887"; - public static final String NATIVE_WATERFALL_BUILD = "1.21-R0.1-SNAPSHOT:bf1be7e:581"; + public static final String NATIVE_BUNGEECORD_BUILD = "1.21-R0.1-SNAPSHOT:1265a99:1892"; + public static final String NATIVE_BUNGEECORD_BUILD_DL = "https://ci.md-5.net/job/BungeeCord/1892/artifact/bootstrap/target/BungeeCord.jar"; + + public static final String NATIVE_WATERFALL_BUILD = "1.21-R0.1-SNAPSHOT:9ab9e2b:582"; + public static final String NATIVE_WATERFALL_BUILD_DL = "https://api.papermc.io/v2/projects/waterfall/versions/1.21/builds/582/downloads/waterfall-1.21-582.jar"; static { CompatWarning.displayCompatWarning(); diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/auth/AuthLoadingCache.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/auth/AuthLoadingCache.java index 957942a..852e9d6 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/auth/AuthLoadingCache.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/auth/AuthLoadingCache.java @@ -4,6 +4,8 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; import net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.api.EaglerXBungeeAPIHelper; @@ -44,6 +46,7 @@ public class AuthLoadingCache { boolean shouldEvict(K key, V value); } + private final ReadWriteLock cacheMapLock; private final Map> cacheMap; private final CacheLoader provider; private final long cacheTTL; @@ -51,6 +54,7 @@ public class AuthLoadingCache { private long cacheTimer; public AuthLoadingCache(CacheLoader provider, long cacheTTL) { + this.cacheMapLock = new ReentrantReadWriteLock(); this.cacheMap = new HashMap<>(); this.provider = provider; this.cacheTTL = cacheTTL; @@ -58,13 +62,19 @@ public class AuthLoadingCache { public V get(K key) { CacheEntry etr; - synchronized(cacheMap) { + cacheMapLock.readLock().lock(); + try { etr = cacheMap.get(key); + }finally { + cacheMapLock.readLock().unlock(); } if(etr == null) { + cacheMapLock.writeLock().lock(); V loaded = provider.load(key); - synchronized(cacheMap) { + try { cacheMap.put(key, new CacheEntry<>(loaded)); + }finally { + cacheMapLock.writeLock().unlock(); } return loaded; }else { @@ -74,13 +84,17 @@ public class AuthLoadingCache { } public void evict(K key) { - synchronized(cacheMap) { + cacheMapLock.writeLock().lock(); + try { cacheMap.remove(key); + }finally { + cacheMapLock.writeLock().unlock(); } } public void evictAll(CacheVisitor visitor) { - synchronized(cacheMap) { + cacheMapLock.writeLock().lock(); + try { Iterator>> itr = cacheMap.entrySet().iterator(); while(itr.hasNext()) { Entry> etr = itr.next(); @@ -88,6 +102,8 @@ public class AuthLoadingCache { itr.remove(); } } + }finally { + cacheMapLock.writeLock().unlock(); } } @@ -95,7 +111,8 @@ public class AuthLoadingCache { long millis = EaglerXBungeeAPIHelper.steadyTimeMillis(); if(millis - cacheTimer > (cacheTTL / 2L)) { cacheTimer = millis; - synchronized(cacheMap) { + cacheMapLock.writeLock().lock(); + try { Iterator> mapItr = cacheMap.values().iterator(); while(mapItr.hasNext()) { CacheEntry etr = mapItr.next(); @@ -103,13 +120,18 @@ public class AuthLoadingCache { mapItr.remove(); } } + }finally { + cacheMapLock.writeLock().unlock(); } } } public void flush() { - synchronized(cacheMap) { + cacheMapLock.writeLock().lock(); + try { cacheMap.clear(); + }finally { + cacheMapLock.writeLock().unlock(); } } diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/protocol/GameProtocolMessageController.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/protocol/GameProtocolMessageController.java index 1f0d610..0c8b38d 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/protocol/GameProtocolMessageController.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/protocol/GameProtocolMessageController.java @@ -1,6 +1,7 @@ package net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.server.protocol; import java.io.IOException; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.concurrent.Callable; @@ -238,10 +239,12 @@ public class GameProtocolMessageController { while(!sendQueueV4.isEmpty()) { sendCount = 0; totalLen = 0; + Iterator itr = sendQueueV4.iterator(); do { - i = sendQueueV4.get(sendCount++).length; + i = itr.next().length; totalLen += GamePacketOutputBuffer.getVarIntSize(i) + i; - }while(totalLen < 32760 && sendCount < sendQueueV4.size()); + ++sendCount; + }while(totalLen < 32760 && itr.hasNext()); if(totalLen >= 32760) { --sendCount; } diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/web/HttpWebServer.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/web/HttpWebServer.java index 704fbfd..63848b2 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/web/HttpWebServer.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/web/HttpWebServer.java @@ -40,7 +40,6 @@ public class HttpWebServer { private final String page404; private static HttpMemoryCache default404Page; private static HttpMemoryCache default404UpgradePage; - private static final Object cacheClearLock = new Object(); public HttpWebServer(File directory, Map contentTypes, List index, String page404) { this.directory = directory; @@ -52,15 +51,13 @@ public class HttpWebServer { public void flushCache() { long millis = EaglerXBungeeAPIHelper.steadyTimeMillis(); - synchronized(cacheClearLock) { - synchronized(filesCache) { - Iterator itr = filesCache.values().iterator(); - while(itr.hasNext()) { - HttpMemoryCache i = itr.next(); - if(i.contentType.fileBrowserCacheTTL != Long.MAX_VALUE && millis - i.lastCacheHit > 900000l) { - i.fileData.release(); - itr.remove(); - } + synchronized(filesCache) { + Iterator itr = filesCache.values().iterator(); + while(itr.hasNext()) { + HttpMemoryCache i = itr.next(); + if(i.contentType.fileBrowserCacheTTL != Long.MAX_VALUE && millis - i.lastCacheHit > 900000l) { + i.fileData.release(); + itr.remove(); } } } @@ -94,19 +91,16 @@ public class HttpWebServer { String joinedPath = String.join("/", pathList); - synchronized(cacheClearLock) { - synchronized(filesCache) { - cached = filesCache.get(joinedPath); - } + //TODO: Rewrite this to cause less lock contention + synchronized(filesCache) { + cached = filesCache.get(joinedPath); if(cached != null) { cached = validateCache(cached); if(cached != null) { return cached; }else { - synchronized(filesCache) { - filesCache.remove(joinedPath); - } + filesCache.remove(joinedPath); } } @@ -123,19 +117,13 @@ public class HttpWebServer { if(f.isDirectory()) { for(int i = 0, l = index.size(); i < l; ++i) { String p = joinedPath + "/" + index.get(i); - synchronized(filesCache) { - cached = filesCache.get(p); - } + cached = filesCache.get(p); if(cached != null) { cached = validateCache(cached); if(cached != null) { - synchronized(filesCache) { - filesCache.put(joinedPath, cached); - } + filesCache.put(joinedPath, cached); }else { - synchronized(filesCache) { - filesCache.remove(p); - } + filesCache.remove(p); if(page404 == null || path.equals(page404)) { return default404Page; }else { @@ -151,9 +139,7 @@ public class HttpWebServer { if(ff.isFile()) { HttpMemoryCache memCache = retrieveFile(ff, p); if(memCache != null) { - synchronized(filesCache) { - filesCache.put(joinedPath, memCache); - } + filesCache.put(joinedPath, memCache); return memCache; } } @@ -166,9 +152,7 @@ public class HttpWebServer { }else { HttpMemoryCache memCache = retrieveFile(f, joinedPath); if(memCache != null) { - synchronized(filesCache) { - filesCache.put(joinedPath, memCache); - } + filesCache.put(joinedPath, memCache); return memCache; }else { if(page404 == null || path.equals(page404)) { diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/shit/CompatWarning.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/shit/CompatWarning.java index 2cdff34..de7fb94 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/shit/CompatWarning.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/shit/CompatWarning.java @@ -37,7 +37,10 @@ public class CompatWarning { ":> apart from the versions listed below:", ":> ", ":> - BungeeCord: " + EaglerXBungee.NATIVE_BUNGEECORD_BUILD, + ":> - " + EaglerXBungee.NATIVE_BUNGEECORD_BUILD_DL, + ":> ", ":> - Waterfall: " + EaglerXBungee.NATIVE_WATERFALL_BUILD, + ":> - " + EaglerXBungee.NATIVE_WATERFALL_BUILD_DL, ":> ", ":> This is not a Bukkit/Spigot plugin!", ":> ", diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/CapeServiceOffline.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/CapeServiceOffline.java index 5430bb8..da01d3f 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/CapeServiceOffline.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/CapeServiceOffline.java @@ -1,8 +1,8 @@ package net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.skins; -import java.util.HashMap; -import java.util.Map; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.server.EaglerInitialHandler; import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket; @@ -13,7 +13,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketOtherCape import net.md_5.bungee.UserConnection; /** - * Copyright (c) 2024 lax1dude. All Rights Reserved. + * Copyright (c) 2024-2025 lax1dude. All Rights Reserved. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED @@ -31,21 +31,16 @@ public class CapeServiceOffline { public static final int masterRateLimitPerPlayer = 250; - private final Map capesCache = new HashMap<>(); + private final ConcurrentMap capesCache = new ConcurrentHashMap<>(); public void registerEaglercraftPlayer(UUID playerUUID, GameMessagePacket capePacket) { - synchronized(capesCache) { - capesCache.put(playerUUID, capePacket); - } + capesCache.put(playerUUID, capePacket); } public void processGetOtherCape(UUID searchUUID, UserConnection sender) { EaglerInitialHandler initialHandler = (EaglerInitialHandler)sender.getPendingConnection(); if(initialHandler.skinLookupRateLimiter.rateLimit(masterRateLimitPerPlayer)) { - GameMessagePacket maybeCape; - synchronized(capesCache) { - maybeCape = capesCache.get(searchUUID); - } + GameMessagePacket maybeCape = capesCache.get(searchUUID); if(maybeCape != null) { initialHandler.sendEaglerMessage(maybeCape); }else { @@ -56,10 +51,7 @@ public class CapeServiceOffline { } public void processForceCape(UUID clientUUID, EaglerInitialHandler initialHandler) { - GameMessagePacket maybeCape; - synchronized(capesCache) { - maybeCape = capesCache.get(clientUUID); - } + GameMessagePacket maybeCape = capesCache.get(clientUUID); if(maybeCape != null) { if (maybeCape instanceof SPacketOtherCapePresetEAG) { initialHandler.sendEaglerMessage( @@ -72,15 +64,11 @@ public class CapeServiceOffline { } public void unregisterPlayer(UUID playerUUID) { - synchronized(capesCache) { - capesCache.remove(playerUUID); - } + capesCache.remove(playerUUID); } public GameMessagePacket getCape(UUID clientUUID) { - synchronized(capesCache) { - return capesCache.get(clientUUID); - } + return capesCache.get(clientUUID); } public byte[] getCapeHandshakeData(UUID clientUUID) { @@ -109,8 +97,6 @@ public class CapeServiceOffline { } public void shutdown() { - synchronized(capesCache) { - capesCache.clear(); - } + capesCache.clear(); } } diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinService.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinService.java index 3d4c533..d5b30c8 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinService.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinService.java @@ -1,6 +1,7 @@ package net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.skins; import java.net.URI; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; @@ -10,6 +11,10 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.function.Consumer; import org.apache.commons.codec.binary.Base64; @@ -38,7 +43,7 @@ import net.md_5.bungee.connection.LoginResult; import net.md_5.bungee.protocol.Property; /** - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * Copyright (c) 2022-2025 lax1dude. All Rights Reserved. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED @@ -56,16 +61,20 @@ public class SkinService implements ISkinService { public static final int masterRateLimitPerPlayer = 250; - private final Map onlinePlayersCache = new HashMap<>(); + private final ConcurrentMap onlinePlayersCache = new ConcurrentHashMap<>(); + private final ConcurrentMap onlinePlayersToTexturesMap = new ConcurrentHashMap<>(); + private final ConcurrentMap foreignSkinCache = new ConcurrentHashMap<>(); + + private final ReadWriteLock onlinePlayersFromTexturesMapLock = new ReentrantReadWriteLock(); private final Multimap onlinePlayersFromTexturesMap = MultimapBuilder.hashKeys().hashSetValues().build(); - private final Map onlinePlayersToTexturesMap = new HashMap<>(); - private final Map foreignSkinCache = new HashMap<>(); private final Map pendingTextures = new HashMap<>(); private final Map pendingUUIDs = new HashMap<>(); private final Map pendingNameLookups = new HashMap<>(); + private final ReadWriteLock antagonistsLock = new ReentrantReadWriteLock(); private final TObjectIntMap antagonists = new TObjectIntHashMap<>(); + private long antagonistCooldown = EaglerXBungeeAPIHelper.steadyTimeMillis(); private final Consumer> antagonistLogger = new Consumer>() { @@ -75,7 +84,8 @@ public class SkinService implements ISkinService { if(t.size() == 1) { int limit = EaglerXBungee.getEagler().getConfig().getAntagonistsRateLimit() << 1; UUID offender = t.iterator().next(); - synchronized(antagonists) { + antagonistsLock.writeLock().lock(); + try { int v = antagonists.get(offender); if(v == antagonists.getNoEntryValue()) { antagonists.put(offender, 1); @@ -84,6 +94,8 @@ public class SkinService implements ISkinService { antagonists.put(offender, v + 1); } } + }finally { + antagonistsLock.writeLock().unlock(); } } } @@ -97,7 +109,7 @@ public class SkinService implements ISkinService { protected final UUID uuid; protected final SkinPacketVersionCache data; protected final int modelKnown; - protected long lastHit; + protected volatile long lastHit; protected CachedForeignSkin(UUID uuid, SkinPacketVersionCache data, int modelKnown) { this.uuid = uuid; @@ -132,7 +144,7 @@ public class SkinService implements ISkinService { protected final Consumer> antagonistsCallback; protected final long initializedTime; - protected boolean finalized; + protected volatile boolean finalized; protected PendingTextureDownload(UUID textureUUID, String textureURL, UUID caller, Consumer callback, Consumer> antagonistsCallback) { @@ -174,7 +186,7 @@ public class SkinService implements ISkinService { protected final Consumer> antagonistsCallback; protected final long initializedTime; - protected boolean finalized; + protected volatile boolean finalized; protected PendingProfileUUIDLookup(UUID profileUUID, UUID caller, Consumer callback, Consumer> antagonistsCallback) { @@ -215,7 +227,7 @@ public class SkinService implements ISkinService { protected final Consumer> antagonistsCallback; protected final long initializedTime; - protected boolean finalized; + protected volatile boolean finalized; protected PendingProfileNameLookup(String profileName, UUID caller, Consumer callback, Consumer> antagonistsCallback) { @@ -263,60 +275,46 @@ public class SkinService implements ISkinService { return; } - CachedPlayerSkin maybeCachedPacket; - synchronized(onlinePlayersCache) { - maybeCachedPacket = onlinePlayersCache.get(searchUUID); - } + CachedPlayerSkin maybeCachedPacket = onlinePlayersCache.get(searchUUID); if(maybeCachedPacket != null) { eaglerHandler.sendEaglerMessage(maybeCachedPacket.data.get(eaglerHandler.getEaglerProtocol())); }else { ProxiedPlayer player = BungeeCord.getInstance().getPlayer(searchUUID); - UUID playerTexture; - synchronized(onlinePlayersToTexturesMap) { - playerTexture = onlinePlayersToTexturesMap.get(searchUUID); - } + UUID playerTexture = onlinePlayersToTexturesMap.get(searchUUID); if(playerTexture != null) { Collection possiblePlayers; - synchronized(onlinePlayersFromTexturesMap) { - possiblePlayers = onlinePlayersFromTexturesMap.get(playerTexture); + onlinePlayersFromTexturesMapLock.readLock().lock(); + try { + possiblePlayers = new ArrayList<>(onlinePlayersFromTexturesMap.get(playerTexture)); + }finally { + onlinePlayersFromTexturesMapLock.readLock().unlock(); } boolean playersExist = possiblePlayers.size() > 0; if(playersExist) { for(UUID uuid : possiblePlayers) { - synchronized(onlinePlayersCache) { - maybeCachedPacket = onlinePlayersCache.get(uuid); - } + maybeCachedPacket = onlinePlayersCache.get(uuid); if(maybeCachedPacket != null) { SkinPacketVersionCache rewritten = SkinPacketVersionCache.rewriteUUID( maybeCachedPacket.data, searchUUID.getMostSignificantBits(), searchUUID.getLeastSignificantBits()); if(player != null) { - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(searchUUID, new CachedPlayerSkin(rewritten, - maybeCachedPacket.textureUUID, maybeCachedPacket.modelId)); - } + onlinePlayersCache.put(searchUUID, new CachedPlayerSkin(rewritten, + maybeCachedPacket.textureUUID, maybeCachedPacket.modelId)); } eaglerHandler.sendEaglerMessage(rewritten.get(eaglerHandler.getEaglerProtocol())); return; } } } - CachedForeignSkin foreignSkin; - synchronized(foreignSkinCache) { - foreignSkin = foreignSkinCache.get(playerTexture); - } + CachedForeignSkin foreignSkin = foreignSkinCache.get(playerTexture); if(foreignSkin != null && foreignSkin.modelKnown != -1) { if(player != null) { - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(searchUUID, - new CachedPlayerSkin(SkinPacketVersionCache.rewriteUUID(foreignSkin.data, - searchUUID.getMostSignificantBits(), searchUUID.getLeastSignificantBits()), - playerTexture, foreignSkin.modelKnown)); - } - synchronized(foreignSkinCache) { - foreignSkinCache.remove(playerTexture); - } + onlinePlayersCache.put(searchUUID, + new CachedPlayerSkin(SkinPacketVersionCache.rewriteUUID(foreignSkin.data, + searchUUID.getMostSignificantBits(), searchUUID.getLeastSignificantBits()), + playerTexture, foreignSkin.modelKnown)); + foreignSkinCache.remove(playerTexture); }else { foreignSkin.lastHit = EaglerXBungeeAPIHelper.steadyTimeMillis(); } @@ -339,7 +337,7 @@ public class SkinService implements ISkinService { if(skinObj != null) { JsonElement url = json.get("url"); if(url != null) { - String urlStr = SkinService.sanitizeTextureURL(url.getAsString()); + String urlStr = sanitizeTextureURL(url.getAsString()); if(urlStr == null) { break; } @@ -353,19 +351,14 @@ public class SkinService implements ISkinService { } UUID skinUUID = SkinPackets.createEaglerURLSkinUUID(urlStr); - CachedForeignSkin foreignSkin; - synchronized(foreignSkinCache) { - foreignSkin = foreignSkinCache.remove(skinUUID); - } + CachedForeignSkin foreignSkin = foreignSkinCache.remove(skinUUID); if(foreignSkin != null) { registerTextureToPlayerAssociation(skinUUID, searchUUID); SkinPacketVersionCache rewrite = SkinPacketVersionCache .rewriteUUIDModel(foreignSkin.data, searchUUID.getMostSignificantBits(), searchUUID.getLeastSignificantBits(), model); - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(searchUUID, new CachedPlayerSkin(rewrite, skinUUID, model)); - } + onlinePlayersCache.put(searchUUID, new CachedPlayerSkin(rewrite, skinUUID, model)); eaglerHandler.sendEaglerMessage(rewrite.get(eaglerHandler.getEaglerProtocol())); return; } @@ -398,10 +391,7 @@ public class SkinService implements ISkinService { }); } }else { - CachedForeignSkin foreignSkin; - synchronized(foreignSkinCache) { - foreignSkin = foreignSkinCache.get(searchUUID); - } + CachedForeignSkin foreignSkin = foreignSkinCache.get(searchUUID); if(foreignSkin != null) { foreignSkin.lastHit = EaglerXBungeeAPIHelper.steadyTimeMillis(); eaglerHandler.sendEaglerMessage(foreignSkin.data.get(eaglerHandler.getEaglerProtocol())); @@ -430,25 +420,22 @@ public class SkinService implements ISkinService { if(!eaglerHandler.skinLookupRateLimiter.rateLimit(masterRateLimitPerPlayer)) { return; } - CachedForeignSkin foreignSkin; - synchronized(foreignSkinCache) { - foreignSkin = foreignSkinCache.get(searchUUID); - } + CachedForeignSkin foreignSkin = foreignSkinCache.get(searchUUID); if(foreignSkin != null) { foreignSkin.lastHit = EaglerXBungeeAPIHelper.steadyTimeMillis(); eaglerHandler.sendEaglerMessage(foreignSkin.data.get(eaglerHandler.getEaglerProtocol())); }else { Collection possiblePlayers; - synchronized(onlinePlayersFromTexturesMap) { - possiblePlayers = onlinePlayersFromTexturesMap.get(searchUUID); + onlinePlayersFromTexturesMapLock.readLock().lock(); + try { + possiblePlayers = new ArrayList<>(onlinePlayersFromTexturesMap.get(searchUUID)); + }finally { + onlinePlayersFromTexturesMapLock.readLock().unlock(); } boolean playersExist = possiblePlayers.size() > 0; if(playersExist) { for(UUID uuid : possiblePlayers) { - CachedPlayerSkin maybeCachedPacket; - synchronized(onlinePlayersCache) { - maybeCachedPacket = onlinePlayersCache.get(uuid); - } + CachedPlayerSkin maybeCachedPacket = onlinePlayersCache.get(uuid); if(maybeCachedPacket != null) { eaglerHandler.sendEaglerMessage(maybeCachedPacket.data.get(eaglerHandler.getEaglerProtocol(), searchUUID.getMostSignificantBits(), searchUUID.getLeastSignificantBits())); @@ -461,10 +448,17 @@ public class SkinService implements ISkinService { searchUUID.getLeastSignificantBits(), 0)); return; } - if(eaglerHandler.skinTextureDownloadRateLimiter.rateLimit(config.getSkinRateLimitPlayer()) && !isLimitedAsAntagonist(sender.getUniqueId())) { - doAsync(() -> { - processResolveURLTextureForForeign(sender, searchUUID, searchUUID, skinURL, -1); - }); + skinURL = sanitizeTextureURL(skinURL); + if(skinURL != null) { + final String skinURL_ = skinURL; + if(eaglerHandler.skinTextureDownloadRateLimiter.rateLimit(config.getSkinRateLimitPlayer()) && !isLimitedAsAntagonist(sender.getUniqueId())) { + doAsync(() -> { + processResolveURLTextureForForeign(sender, searchUUID, searchUUID, skinURL_, -1); + }); + } + }else { + eaglerHandler.sendEaglerMessage(new SPacketOtherSkinPresetEAG(searchUUID.getMostSignificantBits(), + searchUUID.getLeastSignificantBits(), 0)); } } } @@ -479,10 +473,7 @@ public class SkinService implements ISkinService { @Override public void accept(byte[] t) { - CachedPlayerSkin skin; - synchronized(onlinePlayersCache) { - skin = onlinePlayersCache.get(onlineCacheUUID); - } + CachedPlayerSkin skin = onlinePlayersCache.get(onlineCacheUUID); if(skin != null) { EaglerInitialHandler initialHandler = (EaglerInitialHandler)initiator.getPendingConnection(); initialHandler.sendEaglerMessage(skin.data.get(initialHandler.getEaglerProtocol())); @@ -510,9 +501,7 @@ public class SkinService implements ISkinService { onlineCacheUUID.getMostSignificantBits(), onlineCacheUUID.getLeastSignificantBits()), null, -1); } - synchronized (onlinePlayersCache) { - onlinePlayersCache.put(onlineCacheUUID, skin); - } + onlinePlayersCache.put(onlineCacheUUID, skin); EaglerInitialHandler initialHandler = (EaglerInitialHandler) initiator.getPendingConnection(); initialHandler.sendEaglerMessage(skin.data.get(initialHandler.getEaglerProtocol())); } @@ -538,10 +527,7 @@ public class SkinService implements ISkinService { @Override public void accept(byte[] t) { - CachedForeignSkin skin; - synchronized(foreignSkinCache) { - skin = foreignSkinCache.get(foreignCacheUUID); - } + CachedForeignSkin skin = foreignSkinCache.get(foreignCacheUUID); if(skin != null) { EaglerInitialHandler initialHandler = (EaglerInitialHandler) initiator.getPendingConnection(); initialHandler.sendEaglerMessage(skin.data.get(initialHandler.getEaglerProtocol())); @@ -570,9 +556,7 @@ public class SkinService implements ISkinService { foreignCacheUUID.getLeastSignificantBits()), -1); } - synchronized (foreignSkinCache) { - foreignSkinCache.put(foreignCacheUUID, skin); - } + foreignSkinCache.put(foreignCacheUUID, skin); EaglerInitialHandler initialHandler = (EaglerInitialHandler) initiator.getPendingConnection(); initialHandler.sendEaglerMessage(skin.data.get(initialHandler.getEaglerProtocol())); } @@ -598,10 +582,7 @@ public class SkinService implements ISkinService { @Override public void accept(CacheFetchedProfile t) { if(t == null || t.texture == null) { - CachedPlayerSkin skin; - synchronized(onlinePlayersCache) { - skin = onlinePlayersCache.get(playerUUID); - } + CachedPlayerSkin skin = onlinePlayersCache.get(playerUUID); if(skin != null) { EaglerInitialHandler initialHandler = (EaglerInitialHandler) initiator.getPendingConnection(); initialHandler.sendEaglerMessage(skin.data.get(initialHandler.getEaglerProtocol())); @@ -634,9 +615,7 @@ public class SkinService implements ISkinService { SkinPackets.getModelId(t.model) == 1 ? 1 : 0), null, -1); } - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(playerUUID, skin); - } + onlinePlayersCache.put(playerUUID, skin); EaglerInitialHandler initialHandler = (EaglerInitialHandler) initiator.getPendingConnection(); initialHandler.sendEaglerMessage(skin.data.get(initialHandler.getEaglerProtocol())); }else { @@ -666,10 +645,7 @@ public class SkinService implements ISkinService { @Override public void accept(CacheFetchedProfile t) { if(t == null || t.texture == null) { - CachedPlayerSkin skin; - synchronized(onlinePlayersCache) { - skin = onlinePlayersCache.get(t.uuid); - } + CachedPlayerSkin skin = onlinePlayersCache.get(t.uuid); if(skin != null) { EaglerInitialHandler initialHandler = (EaglerInitialHandler) initiator.getPendingConnection(); initialHandler.sendEaglerMessage(skin.data.get(initialHandler.getEaglerProtocol())); @@ -700,9 +676,7 @@ public class SkinService implements ISkinService { mapUUID.getMostSignificantBits(), mapUUID.getLeastSignificantBits(), SkinPackets.getModelId(t.model) == 1 ? 1 : 0), null, -1); } - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(mapUUID, skin); - } + onlinePlayersCache.put(mapUUID, skin); EaglerInitialHandler initialHandler = (EaglerInitialHandler) initiator.getPendingConnection(); initialHandler.sendEaglerMessage(skin.data.get(initialHandler.getEaglerProtocol())); }else { @@ -732,10 +706,7 @@ public class SkinService implements ISkinService { @Override public void accept(CacheFetchedProfile t) { if(t == null || t.texture == null) { - CachedForeignSkin skin; - synchronized(foreignSkinCache) { - skin = foreignSkinCache.get(playerUUID); - } + CachedForeignSkin skin = foreignSkinCache.get(playerUUID); if(skin != null) { EaglerInitialHandler initialHandler = (EaglerInitialHandler) initiator.getPendingConnection(); initialHandler.sendEaglerMessage(skin.data.get(initialHandler.getEaglerProtocol())); @@ -768,9 +739,7 @@ public class SkinService implements ISkinService { SkinPackets.getModelId(t.model) == 1 ? 1 : 0), -1); } - synchronized(foreignSkinCache) { - foreignSkinCache.put(playerUUID, skin); - } + foreignSkinCache.put(playerUUID, skin); EaglerInitialHandler initialHandler = (EaglerInitialHandler) initiator.getPendingConnection(); initialHandler.sendEaglerMessage(skin.data.get(initialHandler.getEaglerProtocol())); }else { @@ -791,27 +760,16 @@ public class SkinService implements ISkinService { } public void registerEaglercraftPlayer(UUID clientUUID, SkinPacketVersionCache generatedPacket, int modelId) { - synchronized(foreignSkinCache) { - foreignSkinCache.remove(clientUUID); - } - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(clientUUID, new CachedPlayerSkin(generatedPacket, null, modelId)); - } + foreignSkinCache.remove(clientUUID); + onlinePlayersCache.put(clientUUID, new CachedPlayerSkin(generatedPacket, null, modelId)); } public void unregisterPlayer(UUID clientUUID) { - CachedPlayerSkin data; - synchronized(onlinePlayersCache) { - data = onlinePlayersCache.remove(clientUUID); - } + CachedPlayerSkin data = onlinePlayersCache.remove(clientUUID); if(data != null) { - synchronized(foreignSkinCache) { - foreignSkinCache.put(clientUUID, new CachedForeignSkin(clientUUID, data.data, data.modelId)); - } + foreignSkinCache.put(clientUUID, new CachedForeignSkin(clientUUID, data.data, data.modelId)); if(data.textureUUID != null) { - synchronized(foreignSkinCache) { - foreignSkinCache.put(data.textureUUID, new CachedForeignSkin(data.textureUUID, data.data, data.modelId)); - } + foreignSkinCache.put(data.textureUUID, new CachedForeignSkin(data.textureUUID, data.data, data.modelId)); } deletePlayerTextureAssociation(clientUUID, data.textureUUID); }else { @@ -821,94 +779,77 @@ public class SkinService implements ISkinService { private void deletePlayerTextureAssociation(UUID clientUUID, UUID textureUUID) { if(textureUUID != null) { - synchronized(onlinePlayersToTexturesMap) { - onlinePlayersToTexturesMap.remove(clientUUID); - } - synchronized(onlinePlayersFromTexturesMap) { + onlinePlayersToTexturesMap.remove(clientUUID); + onlinePlayersFromTexturesMapLock.writeLock().lock(); + try { onlinePlayersFromTexturesMap.remove(textureUUID, clientUUID); + }finally { + onlinePlayersFromTexturesMapLock.writeLock().unlock(); } }else { - UUID removedUUID; - synchronized(onlinePlayersToTexturesMap) { - removedUUID = onlinePlayersToTexturesMap.remove(clientUUID); - } + UUID removedUUID = onlinePlayersToTexturesMap.remove(clientUUID); if(removedUUID != null) { - synchronized(onlinePlayersFromTexturesMap) { + onlinePlayersFromTexturesMapLock.writeLock().lock(); + try { onlinePlayersFromTexturesMap.remove(removedUUID, clientUUID); + }finally { + onlinePlayersFromTexturesMapLock.writeLock().unlock(); } } } } public void registerTextureToPlayerAssociation(UUID textureUUID, UUID playerUUID) { - synchronized(onlinePlayersFromTexturesMap) { + onlinePlayersFromTexturesMapLock.writeLock().lock(); + try { onlinePlayersFromTexturesMap.put(textureUUID, playerUUID); + }finally { + onlinePlayersFromTexturesMapLock.writeLock().unlock(); } - synchronized(onlinePlayersToTexturesMap) { - onlinePlayersToTexturesMap.put(playerUUID, textureUUID); - } - CachedForeignSkin foreign; - synchronized(foreignSkinCache) { - foreign = foreignSkinCache.remove(textureUUID); - } + onlinePlayersToTexturesMap.put(playerUUID, textureUUID); + CachedForeignSkin foreign = foreignSkinCache.remove(textureUUID); if(foreign != null) { - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(playerUUID, new CachedPlayerSkin(foreign.data, textureUUID, foreign.modelKnown)); - } + onlinePlayersCache.put(playerUUID, new CachedPlayerSkin(foreign.data, textureUUID, foreign.modelKnown)); } } public void processForceSkin(UUID playerUUID, EaglerInitialHandler eaglerHandler) { - CachedPlayerSkin maybeCachedPacket; - synchronized(onlinePlayersCache) { - maybeCachedPacket = onlinePlayersCache.get(playerUUID); - } + CachedPlayerSkin maybeCachedPacket = onlinePlayersCache.get(playerUUID); if(maybeCachedPacket != null) { eaglerHandler.sendEaglerMessage(maybeCachedPacket.data.getForceClientV4()); }else { - UUID playerTexture; - synchronized(onlinePlayersToTexturesMap) { - playerTexture = onlinePlayersToTexturesMap.get(playerUUID); - } + UUID playerTexture = onlinePlayersToTexturesMap.get(playerUUID); if(playerTexture != null) { Collection possiblePlayers; - synchronized(onlinePlayersFromTexturesMap) { - possiblePlayers = onlinePlayersFromTexturesMap.get(playerTexture); + onlinePlayersFromTexturesMapLock.readLock().lock(); + try { + possiblePlayers = new ArrayList<>(onlinePlayersFromTexturesMap.get(playerTexture)); + }finally { + onlinePlayersFromTexturesMapLock.readLock().unlock(); } boolean playersExist = possiblePlayers.size() > 0; if(playersExist) { for(UUID uuid : possiblePlayers) { - synchronized(onlinePlayersCache) { - maybeCachedPacket = onlinePlayersCache.get(uuid); - } + maybeCachedPacket = onlinePlayersCache.get(uuid); if(maybeCachedPacket != null) { SkinPacketVersionCache rewritten = SkinPacketVersionCache.rewriteUUID( maybeCachedPacket.data, playerUUID.getMostSignificantBits(), playerUUID.getLeastSignificantBits()); - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(playerUUID, new CachedPlayerSkin(rewritten, - maybeCachedPacket.textureUUID, maybeCachedPacket.modelId)); - } + onlinePlayersCache.put(playerUUID, new CachedPlayerSkin(rewritten, + maybeCachedPacket.textureUUID, maybeCachedPacket.modelId)); eaglerHandler.sendEaglerMessage(rewritten.getForceClientV4()); return; } } } - CachedForeignSkin foreignSkin; - synchronized(foreignSkinCache) { - foreignSkin = foreignSkinCache.get(playerTexture); - } + CachedForeignSkin foreignSkin = foreignSkinCache.get(playerTexture); if(foreignSkin != null && foreignSkin.modelKnown != -1) { - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(playerUUID, - new CachedPlayerSkin(SkinPacketVersionCache.rewriteUUID(foreignSkin.data, - playerUUID.getMostSignificantBits(), playerUUID.getLeastSignificantBits()), - playerTexture, foreignSkin.modelKnown)); - } - synchronized(foreignSkinCache) { - foreignSkinCache.remove(playerTexture); - } + onlinePlayersCache.put(playerUUID, + new CachedPlayerSkin(SkinPacketVersionCache.rewriteUUID(foreignSkin.data, + playerUUID.getMostSignificantBits(), playerUUID.getLeastSignificantBits()), + playerTexture, foreignSkin.modelKnown)); + foreignSkinCache.remove(playerTexture); eaglerHandler.sendEaglerMessage(foreignSkin.data.getForceClientV4()); return; } @@ -927,7 +868,7 @@ public class SkinService implements ISkinService { if(skinObj != null) { JsonElement url = json.get("url"); if(url != null) { - String urlStr = SkinService.sanitizeTextureURL(url.getAsString()); + String urlStr = sanitizeTextureURL(url.getAsString()); if(urlStr == null) { break; } @@ -941,19 +882,14 @@ public class SkinService implements ISkinService { } UUID skinUUID = SkinPackets.createEaglerURLSkinUUID(urlStr); - CachedForeignSkin foreignSkin; - synchronized(foreignSkinCache) { - foreignSkin = foreignSkinCache.remove(skinUUID); - } + CachedForeignSkin foreignSkin = foreignSkinCache.remove(skinUUID); if(foreignSkin != null) { registerTextureToPlayerAssociation(skinUUID, playerUUID); SkinPacketVersionCache rewrite = SkinPacketVersionCache .rewriteUUIDModel(foreignSkin.data, playerUUID.getMostSignificantBits(), playerUUID.getLeastSignificantBits(), model); - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(playerUUID, new CachedPlayerSkin(rewrite, skinUUID, model)); - } + onlinePlayersCache.put(playerUUID, new CachedPlayerSkin(rewrite, skinUUID, model)); eaglerHandler.sendEaglerMessage(rewrite.getForceClientV4()); return; } @@ -981,10 +917,7 @@ public class SkinService implements ISkinService { } }); }else { - CachedForeignSkin foreignSkin; - synchronized(foreignSkinCache) { - foreignSkin = foreignSkinCache.get(playerUUID); - } + CachedForeignSkin foreignSkin = foreignSkinCache.get(playerUUID); if(foreignSkin != null) { foreignSkin.lastHit = EaglerXBungeeAPIHelper.steadyTimeMillis(); eaglerHandler.sendEaglerMessage(foreignSkin.data.getForceClientV4()); @@ -1011,10 +944,7 @@ public class SkinService implements ISkinService { @Override public void accept(byte[] t) { - CachedPlayerSkin skin; - synchronized(onlinePlayersCache) { - skin = onlinePlayersCache.get(onlineCacheUUID); - } + CachedPlayerSkin skin = onlinePlayersCache.get(onlineCacheUUID); if(skin != null) { initiator.sendEaglerMessage(skin.data.getForceClientV4()); } @@ -1041,9 +971,7 @@ public class SkinService implements ISkinService { onlineCacheUUID.getMostSignificantBits(), onlineCacheUUID.getLeastSignificantBits()), null, -1); } - synchronized (onlinePlayersCache) { - onlinePlayersCache.put(onlineCacheUUID, skin); - } + onlinePlayersCache.put(onlineCacheUUID, skin); initiator.sendEaglerMessage(skin.data.getForceClientV4()); } @@ -1068,10 +996,7 @@ public class SkinService implements ISkinService { @Override public void accept(byte[] t) { - CachedForeignSkin skin; - synchronized(foreignSkinCache) { - skin = foreignSkinCache.get(foreignCacheUUID); - } + CachedForeignSkin skin = foreignSkinCache.get(foreignCacheUUID); if(skin != null) { initiator.sendEaglerMessage(skin.data.getForceClientV4()); } @@ -1099,9 +1024,7 @@ public class SkinService implements ISkinService { foreignCacheUUID.getLeastSignificantBits()), -1); } - synchronized (foreignSkinCache) { - foreignSkinCache.put(foreignCacheUUID, skin); - } + foreignSkinCache.put(foreignCacheUUID, skin); initiator.sendEaglerMessage(skin.data.getForceClientV4()); } @@ -1126,10 +1049,7 @@ public class SkinService implements ISkinService { @Override public void accept(CacheFetchedProfile t) { if(t == null || t.texture == null) { - CachedPlayerSkin skin; - synchronized(onlinePlayersCache) { - skin = onlinePlayersCache.get(playerUUID); - } + CachedPlayerSkin skin = onlinePlayersCache.get(playerUUID); if(skin != null) { initiator.sendEaglerMessage(skin.data.getForceClientV4()); } @@ -1161,9 +1081,7 @@ public class SkinService implements ISkinService { SkinPackets.getModelId(t.model) == 1 ? 1 : 0), null, -1); } - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(playerUUID, skin); - } + onlinePlayersCache.put(playerUUID, skin); initiator.sendEaglerMessage(skin.data.getForceClientV4()); }else { processResolveURLTextureForOnlineToForce(initiator, playerUUID, t.textureUUID, t.texture, @@ -1192,10 +1110,7 @@ public class SkinService implements ISkinService { @Override public void accept(CacheFetchedProfile t) { if(t == null || t.texture == null) { - CachedPlayerSkin skin; - synchronized(onlinePlayersCache) { - skin = onlinePlayersCache.get(t.uuid); - } + CachedPlayerSkin skin = onlinePlayersCache.get(t.uuid); if(skin != null) { initiator.sendEaglerMessage(skin.data.getForceClientV4()); } @@ -1225,9 +1140,7 @@ public class SkinService implements ISkinService { mapUUID.getMostSignificantBits(), mapUUID.getLeastSignificantBits(), SkinPackets.getModelId(t.model) == 1 ? 1 : 0), null, -1); } - synchronized(onlinePlayersCache) { - onlinePlayersCache.put(mapUUID, skin); - } + onlinePlayersCache.put(mapUUID, skin); initiator.sendEaglerMessage(skin.data.getForceClientV4()); }else { processResolveURLTextureForOnlineToForce(initiator, mapUUID, t.textureUUID, t.texture, @@ -1256,10 +1169,7 @@ public class SkinService implements ISkinService { @Override public void accept(CacheFetchedProfile t) { if(t == null || t.texture == null) { - CachedForeignSkin skin; - synchronized(foreignSkinCache) { - skin = foreignSkinCache.get(playerUUID); - } + CachedForeignSkin skin = foreignSkinCache.get(playerUUID); if(skin != null) { initiator.sendEaglerMessage(skin.data.getForceClientV4()); } @@ -1291,9 +1201,7 @@ public class SkinService implements ISkinService { SkinPackets.getModelId(t.model) == 1 ? 1 : 0), -1); } - synchronized(foreignSkinCache) { - foreignSkinCache.put(playerUUID, skin); - } + foreignSkinCache.put(playerUUID, skin); initiator.sendEaglerMessage(skin.data.getForceClientV4()); }else { processResolveURLTextureForForeignToForce(initiator, playerUUID, t.textureUUID, t.texture, @@ -1315,12 +1223,16 @@ public class SkinService implements ISkinService { public void flush() { long millis = EaglerXBungeeAPIHelper.steadyTimeMillis(); - synchronized(foreignSkinCache) { - Iterator itr = foreignSkinCache.values().iterator(); - while(itr.hasNext()) { - if(millis - itr.next().lastHit > 900000l) { // 15 minutes - itr.remove(); - } + final List foreignSkinCleanup = new ArrayList<>(4); + foreignSkinCache.entrySet().forEach((etr) -> { + if(millis - etr.getValue().lastHit > 900000l) { // 15 minutes + foreignSkinCleanup.add(etr.getKey()); + } + }); + + if(!foreignSkinCleanup.isEmpty()) { + for(UUID uuid : foreignSkinCleanup) { + foreignSkinCache.remove(uuid); } } @@ -1371,7 +1283,8 @@ public class SkinService implements ISkinService { elapsedCooldown /= cooldownPeriod; if(elapsedCooldown > 0) { antagonistCooldown += elapsedCooldown * cooldownPeriod; - synchronized(antagonists) { + antagonistsLock.writeLock().lock(); + try { Iterator itr = antagonists.keySet().iterator(); while(itr.hasNext()) { UUID key = itr.next(); @@ -1382,6 +1295,8 @@ public class SkinService implements ISkinService { antagonists.put(key, i); } } + }finally { + antagonistsLock.writeLock().unlock(); } } @@ -1389,10 +1304,7 @@ public class SkinService implements ISkinService { } public SkinPacketVersionCache getSkin(UUID playerUUID) { - CachedPlayerSkin skin; - synchronized(onlinePlayersCache) { - skin = onlinePlayersCache.get(playerUUID); - } + CachedPlayerSkin skin = onlinePlayersCache.get(playerUUID); return skin != null ? skin.data : null; } @@ -1407,25 +1319,26 @@ public class SkinService implements ISkinService { private boolean isLimitedAsAntagonist(UUID uuid) { int limit = EaglerXBungee.getEagler().getConfig().getAntagonistsRateLimit(); limit += limit >> 1; - synchronized(antagonists) { - int i = antagonists.get(uuid); - return i != antagonists.getNoEntryValue() && i > limit; + int i; + antagonistsLock.readLock().lock(); + try { + i = antagonists.get(uuid); + }finally { + antagonistsLock.readLock().unlock(); } + return i != antagonists.getNoEntryValue() && i > limit; } private void resetMaps() { - synchronized(onlinePlayersCache) { - onlinePlayersCache.clear(); - } - synchronized(onlinePlayersFromTexturesMap) { + onlinePlayersCache.clear(); + onlinePlayersFromTexturesMapLock.writeLock().lock(); + try { onlinePlayersFromTexturesMap.clear(); + }finally { + onlinePlayersFromTexturesMapLock.writeLock().unlock(); } - synchronized(onlinePlayersToTexturesMap) { - onlinePlayersToTexturesMap.clear(); - } - synchronized(foreignSkinCache) { - foreignSkinCache.clear(); - } + onlinePlayersToTexturesMap.clear(); + foreignSkinCache.clear(); synchronized(pendingTextures) { pendingTextures.clear(); } @@ -1435,8 +1348,11 @@ public class SkinService implements ISkinService { synchronized(pendingNameLookups) { pendingNameLookups.clear(); } - synchronized(antagonists) { + antagonistsLock.writeLock().lock(); + try { antagonists.clear(); + }finally { + antagonistsLock.writeLock().unlock(); } } @@ -1453,7 +1369,7 @@ public class SkinService implements ISkinService { return null; } String host = uri.getHost(); - if(host == null) { + if(host == null || !EaglerXBungee.getEagler().getConfig().isValidSkinHost(host)) { return null; } scheme = scheme.toLowerCase(); diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinServiceOffline.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinServiceOffline.java index 0629890..927acd6 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinServiceOffline.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/skins/SkinServiceOffline.java @@ -1,13 +1,8 @@ package net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.skins; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; import java.util.UUID; - -import com.google.common.collect.Multimap; -import com.google.common.collect.MultimapBuilder; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.server.EaglerInitialHandler; import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.server.SPacketOtherSkinPresetEAG; @@ -15,7 +10,7 @@ import net.lax1dude.eaglercraft.v1_8.socket.protocol.util.SkinPacketVersionCache import net.md_5.bungee.UserConnection; /** - * Copyright (c) 2022-2023 lax1dude. All Rights Reserved. + * Copyright (c) 2022-2025 lax1dude. All Rights Reserved. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED @@ -45,24 +40,17 @@ public class SkinServiceOffline implements ISkinService { } - private final Map skinCache = new HashMap<>(); - - private final Multimap onlinePlayersFromTexturesMap = MultimapBuilder.hashKeys().hashSetValues().build(); + private final ConcurrentMap skinCache = new ConcurrentHashMap<>(); public void init(String uri, String driverClass, String driverPath, int keepObjectsDays, int keepProfilesDays, int maxObjects, int maxProfiles) { - synchronized(skinCache) { - skinCache.clear(); - } + skinCache.clear(); } public void processGetOtherSkin(UUID searchUUID, UserConnection sender) { EaglerInitialHandler initialHandler = (EaglerInitialHandler)sender.getPendingConnection(); if(initialHandler.skinLookupRateLimiter.rateLimit(masterRateLimitPerPlayer)) { - CachedSkin cached; - synchronized(skinCache) { - cached = skinCache.get(searchUUID); - } + CachedSkin cached = skinCache.get(searchUUID); if(cached != null) { initialHandler.sendEaglerMessage(cached.packet.get(initialHandler.getEaglerProtocol())); }else { @@ -74,24 +62,6 @@ public class SkinServiceOffline implements ISkinService { public void processGetOtherSkin(UUID searchUUID, String skinURL, UserConnection sender) { EaglerInitialHandler initialHandler = (EaglerInitialHandler)sender.getPendingConnection(); - Collection uuids; - synchronized(onlinePlayersFromTexturesMap) { - uuids = onlinePlayersFromTexturesMap.get(searchUUID); - } - if(uuids.size() > 0) { - CachedSkin cached; - synchronized(skinCache) { - Iterator uuidItr = uuids.iterator(); - while(uuidItr.hasNext()) { - cached = skinCache.get(uuidItr.next()); - if(cached != null) { - initialHandler.sendEaglerMessage(cached.packet.get(initialHandler.getEaglerProtocol(), - searchUUID.getMostSignificantBits(), searchUUID.getLeastSignificantBits())); - return; - } - } - } - } if(skinURL.startsWith("eagler://")) { // customs skulls from exported singleplayer worlds initialHandler.sendEaglerMessage(new SPacketOtherSkinPresetEAG(searchUUID.getMostSignificantBits(), searchUUID.getLeastSignificantBits(), 0)); @@ -102,28 +72,21 @@ public class SkinServiceOffline implements ISkinService { } public void registerEaglercraftPlayer(UUID clientUUID, SkinPacketVersionCache generatedPacket, int modelId) { - synchronized(skinCache) { - skinCache.put(clientUUID, new CachedSkin(clientUUID, generatedPacket)); - } + skinCache.put(clientUUID, new CachedSkin(clientUUID, generatedPacket)); } public void unregisterPlayer(UUID clientUUID) { - synchronized(skinCache) { - skinCache.remove(clientUUID); - } + skinCache.remove(clientUUID); + } + + public void registerTextureToPlayerAssociation(String textureURL, UUID playerUUID) { } public void registerTextureToPlayerAssociation(UUID textureUUID, UUID playerUUID) { - synchronized(onlinePlayersFromTexturesMap) { - onlinePlayersFromTexturesMap.put(textureUUID, playerUUID); - } } public void processForceSkin(UUID playerUUID, EaglerInitialHandler initialHandler) { - CachedSkin cached; - synchronized(skinCache) { - cached = skinCache.get(playerUUID); - } + CachedSkin cached = skinCache.get(playerUUID); if(cached != null) { initialHandler.sendEaglerMessage(cached.packet.getForceClientV4()); } @@ -134,16 +97,11 @@ public class SkinServiceOffline implements ISkinService { } public void shutdown() { - synchronized(skinCache) { - skinCache.clear(); - } + skinCache.clear(); } public SkinPacketVersionCache getSkin(UUID playerUUID) { - CachedSkin cached; - synchronized(skinCache) { - cached = skinCache.get(playerUUID); - } + CachedSkin cached = skinCache.get(playerUUID); return cached != null ? cached.packet : null; } diff --git a/gateway/EaglercraftXBungee/src/main/resources/plugin.yml b/gateway/EaglercraftXBungee/src/main/resources/plugin.yml index 1b21af0..01d7794 100644 --- a/gateway/EaglercraftXBungee/src/main/resources/plugin.yml +++ b/gateway/EaglercraftXBungee/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: EaglercraftXBungee main: net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.EaglerXBungee -version: 1.3.4 +version: 1.3.5 description: Plugin to allow EaglercraftX 1.8 players to join your network, or allow EaglercraftX 1.8 players to use your network as a proxy to join other networks author: lax1dude \ No newline at end of file diff --git a/gateway_version b/gateway_version index 8c9698a..aaf8be7 100644 --- a/gateway_version +++ b/gateway_version @@ -1 +1 @@ -1.3.4 \ No newline at end of file +1.3.5 \ No newline at end of file