From 7cb660f9557a30a8e5c4097a51759f1565ebff3f Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:00:48 -0400 Subject: [PATCH 1/2] Fix FFAPI Model Loading API v1 causing missing item models --- .../dynamic_resources/ModelBakeryMixin.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakeryMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakeryMixin.java index b12fbefa..b1d684c2 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakeryMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakeryMixin.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.cache.RemovalNotification; +import com.google.common.collect.ForwardingMap; import com.google.common.collect.ImmutableList; import net.minecraft.client.Minecraft; import net.minecraft.client.color.block.BlockColors; @@ -36,6 +37,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.io.IOException; import java.util.*; +import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; import java.util.function.BiFunction; @@ -74,9 +76,14 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery { private HashMap smallLoadingCache = new HashMap<>(); + // disable fabric recursion + @SuppressWarnings("unused") + private boolean fabric_enableGetOrLoadModelGuard; + @Redirect(method = "", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/resources/model/ModelBakery;blockColors:Lnet/minecraft/client/color/block/BlockColors;")) private void replaceTopLevelBakedModels(ModelBakery bakery, BlockColors val) { + fabric_enableGetOrLoadModelGuard = false; this.blockColors = val; this.loadedBakedModels = CacheBuilder.newBuilder() .expireAfterAccess(ModelBakeryHelpers.MAX_MODEL_LIFETIME_SECS, TimeUnit.SECONDS) @@ -93,7 +100,19 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery { .softValues() .build(); this.bakedCache = loadedBakedModels.asMap(); - this.unbakedCache = loadedModels.asMap(); + ConcurrentMap unbakedCacheBackingMap = loadedModels.asMap(); + this.unbakedCache = new ForwardingMap() { + @Override + protected Map delegate() { + return unbakedCacheBackingMap; + } + + @Override + public UnbakedModel put(ResourceLocation key, UnbakedModel value) { + smallLoadingCache.put(key, value); + return super.put(key, value); + } + }; this.bakedTopLevelModels = new DynamicBakedModelProvider((ModelBakery)(Object)this, bakedCache); } From 5d984f653e51f9ab893068a7a5c332b0efd6b44e Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:04:29 -0400 Subject: [PATCH 2/2] Don't log error if NO_GROUP field is missing Fixes error message in log with Connector --- .../modernfix/platform/forge/ModernFixPlatformHooksImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java b/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java index b75ed47f..fb896bf5 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java +++ b/forge/src/main/java/org/embeddedt/modernfix/platform/forge/ModernFixPlatformHooksImpl.java @@ -187,6 +187,8 @@ public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks { noGroupField.setAccessible(true); InjectorGroupInfo noGroup = (InjectorGroupInfo)noGroupField.get(null); groupMembersField.set(noGroup, new DummyList<>()); + } catch(NoSuchFieldException ignored) { + // Connector will replace FML's mixin with one which already has the fix, don't bother logging } catch(RuntimeException | ReflectiveOperationException e) { ModernFixMixinPlugin.instance.logger.error("Failed to patch mixin memory leak", e); }