From 69233f1bbf197948691dfe291a0c656dfa8efb0f Mon Sep 17 00:00:00 2001 From: Ben Staddon Date: Thu, 16 Aug 2018 21:21:21 +0100 Subject: [PATCH] Add variant alias for item models not loaded via blockstate (#5025) --- .../client/model/ModelLoader.java | 1 + .../client/model/ModelLoaderRegistry.java | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraftforge/client/model/ModelLoader.java b/src/main/java/net/minecraftforge/client/model/ModelLoader.java index b1883b13e8..7995408674 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelLoader.java +++ b/src/main/java/net/minecraftforge/client/model/ModelLoader.java @@ -300,6 +300,7 @@ public final class ModelLoader extends ModelBakery try { model = ModelLoaderRegistry.getModel(file); + ModelLoaderRegistry.addAlias(memory, file); } catch (Exception normalException) { diff --git a/src/main/java/net/minecraftforge/client/model/ModelLoaderRegistry.java b/src/main/java/net/minecraftforge/client/model/ModelLoaderRegistry.java index 04fd021b87..1a12652149 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelLoaderRegistry.java +++ b/src/main/java/net/minecraftforge/client/model/ModelLoaderRegistry.java @@ -52,6 +52,8 @@ public class ModelLoaderRegistry private static final Map cache = Maps.newHashMap(); private static final Deque loadingModels = Queues.newArrayDeque(); private static final Set textures = Sets.newHashSet(); + private static final Map aliases = Maps.newHashMap(); + private static IResourceManager manager; // Forge built-in loaders @@ -95,7 +97,10 @@ public class ModelLoaderRegistry public static IModel getModel(ResourceLocation location) throws Exception { IModel model; - if(cache.containsKey(location)) return cache.get(location); + + IModel cached = cache.get(location); + if (cached != null) return cached; + for(ResourceLocation loading : loadingModels) { if(location.getClass() == loading.getClass() && location.equals(loading)) @@ -106,6 +111,9 @@ public class ModelLoaderRegistry loadingModels.addLast(location); try { + ResourceLocation aliased = aliases.get(location); + if (aliased != null) return getModel(aliased); + ResourceLocation actual = getActualLocation(location); ICustomModelLoader accepted = null; for(ICustomModelLoader loader : loaders) @@ -227,9 +235,16 @@ public class ModelLoaderRegistry return model; } + static void addAlias(ResourceLocation from, ResourceLocation to) + { + aliases.put(from, to); + } + public static void clearModelCache(IResourceManager manager) { ModelLoaderRegistry.manager = manager; + aliases.clear(); + textures.clear(); cache.clear(); // putting the builtin models in cache.put(new ResourceLocation("minecraft:builtin/generated"), ItemLayerModel.INSTANCE);