From 33e437f8653e68aa1ac4fb679fc95871794a34bf Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Wed, 26 Jul 2023 21:29:33 -0400 Subject: [PATCH 1/2] Hotfix for CoFH crash Apparently BooleanSupplier is *not* used --- .../bugfix/cofh_core_crash/FlagManagerMixin.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/cofh_core_crash/FlagManagerMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/cofh_core_crash/FlagManagerMixin.java index f39e12e1..058b7d2e 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/cofh_core_crash/FlagManagerMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/cofh_core_crash/FlagManagerMixin.java @@ -2,12 +2,15 @@ package org.embeddedt.modernfix.forge.mixin.bugfix.cofh_core_crash; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.embeddedt.modernfix.annotation.RequiresMod; -import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Coerce; import org.spongepowered.asm.mixin.injection.Redirect; -import java.util.function.BooleanSupplier; +import java.util.function.Supplier; /** * Fix getOrCreateFlag accessing the FLAGS map without synchronization by wrapping all calls to it @@ -18,15 +21,15 @@ import java.util.function.BooleanSupplier; @RequiresMod("cofh_core") public class FlagManagerMixin { @Shadow @Final - private static Object2ObjectOpenHashMap FLAGS; + private static Object2ObjectOpenHashMap> FLAGS; @Shadow - private BooleanSupplier getOrCreateFlag(String flag) { + private Supplier getOrCreateFlag(String flag) { throw new AssertionError(); } @Redirect(method = "*", at = @At(value = "INVOKE", target = "getOrCreateFlag"), require = 0) - private BooleanSupplier getFlag(@Coerce Object flagHandler, String flag) { + private Supplier getFlag(@Coerce Object flagHandler, String flag) { if(flagHandler != this) throw new AssertionError("Redirect targeted bad getOrCreateFlag invocation"); synchronized (FLAGS) { From 213bcd1b2ace5c2124508e10084552f8fb572e74 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Wed, 26 Jul 2023 22:02:21 -0400 Subject: [PATCH 2/2] Fix getResource("") failing to return valid resource Fixes #187 --- .../classloading/ModernFixResourceFinder.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ModernFixResourceFinder.java b/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ModernFixResourceFinder.java index 528cb4f7..b0dc2315 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ModernFixResourceFinder.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ModernFixResourceFinder.java @@ -92,7 +92,20 @@ public class ModernFixResourceFinder { } public static Enumeration findAllURLsForResource(String input) { - // CachedResourcePath normalizes already + // CachedResourcePath normalizes already but we need to strip trailing slash if any + // TODO move logic to FileUtil.normalize() + int lastIndex = input.length(); + boolean strip = false; + while(lastIndex > 1) { + char c = input.charAt(lastIndex - 1); + if (c == '/' || c == '\\') { + lastIndex--; + strip = true; + } else + break; + } + if(strip) + input = input.substring(0, lastIndex); Collection urlList = urlsForClass.get(new CachedResourcePath(input)); if(!urlList.isEmpty()) { String pathInput = FileUtil.normalize(input);