diff --git a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java index 1603f0f3..b6d80cf9 100644 --- a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java +++ b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java @@ -9,9 +9,12 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.apache.commons.lang3.tuple.Triple; import org.embeddedt.modernfix.duck.IExtendedModelBakery; @@ -106,6 +109,25 @@ public class DynamicBakedModelProvider implements Map blockOpt = BuiltInRegistries.BLOCK.getOptional(registryKey); + if(blockOpt.isPresent()) { + return ModelBakeryHelpers.getBlockStatesForMRL(blockOpt.get().getStateDefinition(), mrl).size() > 0; + } + } catch(RuntimeException ignored) { + // can occur if the MRL is not valid for that blockstate, ignore + } + } + return false; + } @Override public BakedModel get(Object o) { @@ -120,11 +142,11 @@ public class DynamicBakedModelProvider implements Map copyTopLevelModelList(Map map) { + return new ArrayList<>(map.values()); + } + private BiFunction textureGetter; @Inject(method = "bakeModels", at = @At("HEAD")) 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 fe2d51d9..38e9d2f8 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 @@ -146,6 +146,14 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery { return ImmutableList.of(); } + /** + * Make a copy of the top-level model list to avoid CME if more models get loaded here. + */ + @Redirect(method = "", at = @At(value = "INVOKE", target = "Ljava/util/Map;values()Ljava/util/Collection;", ordinal = 0)) + private Collection copyTopLevelModelList(Map map) { + return new ArrayList<>(map.values()); + } + private BiFunction textureGetter; @Inject(method = "bakeModels", at = @At("HEAD"))