From 185e24e5c8b0ff98fc54350b3213f8a22a090a1b Mon Sep 17 00:00:00 2001 From: RaphiMC <50594595+RaphiMC@users.noreply.github.com> Date: Wed, 24 Apr 2024 23:04:00 +0200 Subject: [PATCH] Workaround for data loading race condition --- .../MixinBlockItemPacketRewriter1_20_5.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/MixinBlockItemPacketRewriter1_20_5.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/MixinBlockItemPacketRewriter1_20_5.java index 8054e8ae..7f7ca39f 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/MixinBlockItemPacketRewriter1_20_5.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/MixinBlockItemPacketRewriter1_20_5.java @@ -40,6 +40,7 @@ import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5 import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ServerboundPacket1_20_5; import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.BlockItemPacketRewriter1_20_5; import com.viaversion.viaversion.rewriter.ItemRewriter; +import de.florianmichael.viafabricplus.ViaFabricPlus; import de.florianmichael.viafabricplus.injection.access.IBlockItemPacketRewriter1_20_5; import de.florianmichael.viafabricplus.protocoltranslator.impl.ViaFabricPlusMappingDataLoader; import net.raphimc.vialegacy.api.LegacyProtocolVersion; @@ -111,7 +112,22 @@ public abstract class MixinBlockItemPacketRewriter1_20_5 extends ItemRewriter entry : itemToolComponents.entrySet()) { + int attempts = 0; + while (ProtocolVersion.getClosest(entry.getKey()) == null) { + try { + Thread.sleep(100); + if (attempts++ > 100) { // 10 seconds + ViaFabricPlus.global().getLogger().warn("Failed to load item-tool-components.json after 10 seconds. Skipping entry."); + break; + } + } catch (InterruptedException e) { + break; + } + } final ProtocolVersion version = ProtocolVersion.getClosest(entry.getKey()); + if (version == null) { // Only happens if the timeout above is reached or the thread is interrupted + continue; + } final Map toolProperties = new HashMap<>(); final JsonArray toolComponents = entry.getValue().getAsJsonArray(); for (JsonElement toolComponent : toolComponents) {