From bc1483ea7afd8137f49ea98197d28b8c5f734e8b Mon Sep 17 00:00:00 2001 From: Helvetica Volubi Date: Mon, 27 Oct 2025 00:10:44 +0800 Subject: [PATCH] fix: try to fix Concurrent throw in protocol --- gradle.properties | 2 +- .../leaves/protocol/AppleSkinProtocol.java | 14 +++++++++----- .../org/leavesmc/leaves/protocol/BBORProtocol.java | 2 +- .../leaves/protocol/jade/JadeProtocol.java | 14 ++++++++++---- .../protocol/servux/ServuxHudDataProtocol.java | 4 ++-- .../protocol/syncmatica/CommunicationManager.java | 5 +++-- 6 files changed, 26 insertions(+), 15 deletions(-) diff --git a/gradle.properties b/gradle.properties index 95369f9..4ffa5d9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ mcVersion=1.21.8 release=2 # 0 for skip release, 1 for pre-release, 2 for release -luminolRef=332099a920bc3e854ba1d37fc5651c0f922e32e8 +luminolRef=e5ac67331202037c494ce7381630c6544f54d583 org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java index bc8d44c..c51ebf5 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/AppleSkinProtocol.java @@ -30,7 +30,11 @@ import org.leavesmc.leaves.protocol.core.LeavesProtocol; import org.leavesmc.leaves.protocol.core.ProtocolHandler; import org.leavesmc.leaves.protocol.core.ProtocolUtils; -import java.util.*; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; @LeavesProtocol.Register(namespace = "appleskin") public class AppleSkinProtocol implements LeavesProtocol { @@ -43,11 +47,11 @@ public class AppleSkinProtocol implements LeavesProtocol { private static final float MINIMUM_EXHAUSTION_CHANGE_THRESHOLD = 0.01F; - private static final Map previousSaturationLevels = new HashMap<>(); - private static final Map previousExhaustionLevels = new HashMap<>(); - private static final Map previousNaturalRegeneration = new HashMap<>(); + private static final Map previousSaturationLevels = new ConcurrentHashMap<>(); + private static final Map previousExhaustionLevels = new ConcurrentHashMap<>(); + private static final Map previousNaturalRegeneration = new ConcurrentHashMap<>(); - private static final Map> subscribedChannels = new HashMap<>(); + private static final Map> subscribedChannels = new ConcurrentHashMap<>(); @Contract("_ -> new") public static ResourceLocation id(String path) { diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/BBORProtocol.java b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/BBORProtocol.java index 05d8c93..f9e268e 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/BBORProtocol.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/BBORProtocol.java @@ -55,7 +55,7 @@ public class BBORProtocol implements LeavesProtocol { private static final ResourceLocation STRUCTURE_LIST_SYNC = id("structure_list_sync_v1"); // call private static final Map players = new ConcurrentHashMap<>(); - private static final Map> playerBoundingBoxesCache = new HashMap<>(); + private static final Map> playerBoundingBoxesCache = new ConcurrentHashMap<>(); private static final Map>> dimensionCache = new ConcurrentHashMap<>(); private static boolean initialized = false; diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java index df5468f..9901608 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java @@ -152,12 +152,16 @@ public class JadeProtocol implements LeavesProtocol { return; } ProtocolUtils.sendPayloadPacket(player, new ServerHandshakePayload(Collections.emptyMap(), shearableBlocks, blockDataProviders.mappedIds(), entityDataProviders.mappedIds())); - enabledPlayers.add(player); + synchronized (enabledPlayers) { + enabledPlayers.add(player); + } } @ProtocolHandler.PlayerLeave public static void onPlayerLeave(ServerPlayer player) { - enabledPlayers.remove(player); + synchronized (enabledPlayers) { + enabledPlayers.remove(player); + } } @ProtocolHandler.PayloadReceiver(payload = RequestEntityPayload.class) @@ -245,8 +249,10 @@ public class JadeProtocol implements LeavesProtocol { @ProtocolHandler.ReloadServer public static void onServerReload() { rebuildShearableBlocks(); - for (ServerPlayer player : enabledPlayers) { - ProtocolUtils.sendPayloadPacket(player, new ServerHandshakePayload(Collections.emptyMap(), shearableBlocks, blockDataProviders.mappedIds(), entityDataProviders.mappedIds())); + synchronized (enabledPlayers) { + for (ServerPlayer player : enabledPlayers) { + ProtocolUtils.sendPayloadPacket(player, new ServerHandshakePayload(Collections.emptyMap(), shearableBlocks, blockDataProviders.mappedIds(), entityDataProviders.mappedIds())); + } } } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/ServuxHudDataProtocol.java b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/ServuxHudDataProtocol.java index 8803888..d251de2 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/ServuxHudDataProtocol.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/servux/ServuxHudDataProtocol.java @@ -56,8 +56,8 @@ public class ServuxHudDataProtocol implements LeavesProtocol { private static final List players = Collections.synchronizedList(new ArrayList<>()); private static final int updateInterval = 80; - private static final ConcurrentHashMap> loggerPlayers = new ConcurrentHashMap<>(); - private static final ConcurrentHashMap> LOGGERS = new ConcurrentHashMap<>(); + private static final Map> loggerPlayers = new ConcurrentHashMap<>(); + private static final Map> LOGGERS = new ConcurrentHashMap<>(); private static final Table DATA = HashBasedTable.create(); public static boolean refreshSpawnMetadata = false; diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/CommunicationManager.java b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/CommunicationManager.java index 2650f4f..ebb9c73 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/CommunicationManager.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/protocol/syncmatica/CommunicationManager.java @@ -37,6 +37,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; @LeavesProtocol.Register(namespace = "syncmatica") public class CommunicationManager implements LeavesProtocol { @@ -46,8 +47,8 @@ public class CommunicationManager implements LeavesProtocol { protected static final Map modifyState = new HashMap<>(); protected static final Rotation[] rotOrdinals = Rotation.values(); protected static final Mirror[] mirOrdinals = Mirror.values(); - private static final Map> downloadingFile = new HashMap<>(); - private static final Map playerMap = new HashMap<>(); + private static final Map> downloadingFile = new ConcurrentHashMap<>(); + private static final Map playerMap = new ConcurrentHashMap<>(); public CommunicationManager() { }