From 371e5119f10cf6742745fa4601fed506a164e0b9 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 5 Aug 2023 12:07:21 -0400 Subject: [PATCH] Never return a non-null model if it was top level in vanilla --- .../DynamicBakedModelProvider.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) 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 9ecb0f2f9..40de0d2d4 100644 --- a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java +++ b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java @@ -9,8 +9,11 @@ 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.Registry; import net.minecraft.resources.ResourceLocation; +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.ModernFix; @@ -103,6 +106,25 @@ public boolean containsKey(Object o) { public boolean containsValue(Object o) { return permanentOverrides.containsValue(o) || bakedCache.containsValue(o); } + + private static boolean isVanillaTopLevelModel(ResourceLocation location) { + if(location instanceof ModelResourceLocation) { + try { + ModelResourceLocation mrl = (ModelResourceLocation)location; + ResourceLocation registryKey = new ResourceLocation(mrl.getNamespace(), mrl.getPath()); + // check for standard inventory model + if(mrl.getVariant().equals("inventory") && Registry.ITEM.containsKey(registryKey)) + return true; + Optional blockOpt = Registry.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) { @@ -117,11 +139,11 @@ public BakedModel get(Object o) { model = missingModel; } if(model == missingModel) { - // to correctly emulate the original map, we return null for missing models - permanentOverrides.put((ResourceLocation) o, null); - return null; - } else - return model; + // to correctly emulate the original map, we return null for missing models, unless they are top-level + model = isVanillaTopLevelModel((ResourceLocation)o) ? model : null; + permanentOverrides.put((ResourceLocation) o, model); + } + return model; } }