From 17e8de8a3abee0545e325c56e8d1bd2678e55061 Mon Sep 17 00:00:00 2001 From: RainWarrior Date: Wed, 20 Jan 2016 01:19:38 +0300 Subject: [PATCH] Fixed error detection login in ModelLoader, reduced the maximum number of printed stack traces to 5 per domain. --- .../client/model/ModelLoader.java | 65 +++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/minecraftforge/client/model/ModelLoader.java b/src/main/java/net/minecraftforge/client/model/ModelLoader.java index c130a0eca..bc88f7ba7 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelLoader.java +++ b/src/main/java/net/minecraftforge/client/model/ModelLoader.java @@ -81,7 +81,7 @@ public class ModelLoader extends ModelBakery private final Set textures = Sets.newHashSet(); private final Set loadingModels = Sets.newHashSet(); private final Set missingVariants = Sets.newHashSet(); - private final Map loadingExceptions = Maps.newHashMap(); + private final Map loadingExceptions = Maps.newHashMap(); private IModel missingModel = null; private IModel itemModel = new ItemLayerModel(MODEL_GENERATED); @@ -198,11 +198,25 @@ public class ModelLoader extends ModelBakery } } - private void storeException(ModelResourceLocation location, Exception exception) + private void storeException(ResourceLocation location, Exception exception) { loadingExceptions.put(location, exception); } + @Override + protected ModelBlockDefinition getModelBlockDefinition(ResourceLocation location) + { + try + { + return super.getModelBlockDefinition(location); + } + catch (Exception exception) + { + storeException(location, new Exception("Could not load model definition for variant " + location, exception)); + } + return new ModelBlockDefinition(new ArrayList()); + } + private void loadItems() { registerVariantNames(); @@ -864,16 +878,30 @@ public class ModelLoader extends ModelBakery public void onPostBakeEvent(IRegistry modelRegistry) { IBakedModel missingModel = modelRegistry.getObject(MODEL_MISSING); - for(Map.Entry entry : loadingExceptions.entrySet()) + Map modelErrors = Maps.newHashMap(); + for(Map.Entry entry : loadingExceptions.entrySet()) { - IBakedModel model = modelRegistry.getObject(entry.getKey()); - if(model == null || model == missingModel) + // ignoring pure ResourceLocation arguments, all things we care about pass ModelResourceLocation + if(entry.getKey() instanceof ModelResourceLocation) { - FMLLog.getLogger().error("Exception loading model for variant " + entry.getKey(), entry.getValue()); - } - if(model == null) - { - modelRegistry.putObject(entry.getKey(), missingModel); + ModelResourceLocation location = (ModelResourceLocation)entry.getKey(); + IBakedModel model = modelRegistry.getObject(location); + if(model == null || model == missingModel) + { + String domain = entry.getKey().getResourceDomain(); + Integer errorCountBox = modelErrors.get(domain); + int errorCount = errorCountBox == null ? 0 : errorCountBox; + errorCount++; + if(errorCount < 5) + { + FMLLog.getLogger().error("Exception loading model for variant " + entry.getKey(), entry.getValue()); + } + modelErrors.put(domain, errorCount); + } + if(model == null) + { + modelRegistry.putObject(location, missingModel); + } } } for(ModelResourceLocation missing : missingVariants) @@ -881,13 +909,28 @@ public class ModelLoader extends ModelBakery IBakedModel model = modelRegistry.getObject(missing); if(model == null || model == missingModel) { - FMLLog.severe("Model definition for location %s not found", missing); + String domain = missing.getResourceDomain(); + Integer errorCountBox = modelErrors.get(domain); + int errorCount = errorCountBox == null ? 0 : errorCountBox; + errorCount++; + if(errorCount < 5) + { + FMLLog.severe("Model definition for location %s not found", missing); + } + modelErrors.put(domain, errorCount); } if(model == null) { modelRegistry.putObject(missing, missingModel); } } + for(Map.Entry e : modelErrors.entrySet()) + { + if(e.getValue() >= 5) + { + FMLLog.severe("Supressed additional %s model loading errors for domain %s", e.getValue(), e.getKey()); + } + } isLoading = false; }