Added progress bar for the ModelLoader.

This commit is contained in:
RainWarrior 2016-01-06 22:53:34 +03:00
parent 68339f51cf
commit 95615cb4bf
1 changed files with 44 additions and 13 deletions

View File

@ -57,6 +57,8 @@ import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.common.FMLLog;
import net.minecraftforge.fml.common.ProgressManager;
import net.minecraftforge.fml.common.ProgressManager.ProgressBar;
import net.minecraftforge.fml.common.registry.GameData;
import net.minecraftforge.fml.common.registry.RegistryDelegate;
@ -82,6 +84,10 @@ public class ModelLoader extends ModelBakery
private IModel missingModel = null;
private IModel itemModel = new ItemLayerModel(MODEL_GENERATED);
private ProgressBar blockBar;
private ProgressBar itemBar;
private boolean shouldProgressBar = false;
private boolean isLoading = false;
public boolean isLoading()
{
@ -148,47 +154,71 @@ public class ModelLoader extends ModelBakery
private void loadBlocks()
{
Map<IBlockState, ModelResourceLocation> stateMap = blockModelShapes.getBlockStateMapper().putAllStateModelLocations();
blockBar = ProgressManager.push("ModelLoader: blocks", stateMap.size());
Collection<ModelResourceLocation> variants = Lists.newArrayList(stateMap.values());
variants.add(new ModelResourceLocation("minecraft:item_frame", "normal")); //Vanilla special cases item_frames so must we
variants.add(new ModelResourceLocation("minecraft:item_frame", "map"));
shouldProgressBar = true;
loadVariants(variants);
shouldProgressBar = false;
ProgressManager.pop(blockBar);
}
@Override
protected void registerVariant(ModelBlockDefinition definition, ModelResourceLocation location)
{
Variants variants = null;
if(shouldProgressBar)
{
blockBar.step(location.toString());
}
boolean p = shouldProgressBar;
try
{
variants = definition.getVariants(location.getVariant());
}
catch(MissingVariantException e)
{
missingVariants.add(location);
}
if (variants != null && !variants.getVariants().isEmpty())
{
Variants variants = null;
try
{
stateModels.put(location, new WeightedRandomModel(location, variants));
variants = definition.getVariants(location.getVariant());
}
catch(Throwable e)
catch(MissingVariantException e)
{
throw new RuntimeException(e);
missingVariants.add(location);
}
if (variants != null && !variants.getVariants().isEmpty())
{
try
{
stateModels.put(location, new WeightedRandomModel(location, variants));
}
catch(Throwable e)
{
throw new RuntimeException(e);
}
}
}
finally
{
shouldProgressBar = p;
}
}
private void loadItems()
{
registerVariantNames();
for(Item item : GameData.getItemRegistry().typeSafeIterable())
int size = 0;
ImmutableList<Item> items = ImmutableList.copyOf(GameData.getItemRegistry().typeSafeIterable());
for(Item item : items)
{
size += getVariantNames(item).size();
}
itemBar = ProgressManager.push("ModelLoader: items", size);
for(Item item : items)
{
// default loading
for(String s : (List<String>)getVariantNames(item))
{
ResourceLocation file = getItemLocation(s);
ModelResourceLocation memory = getInventoryVariant(s);
itemBar.step(memory.toString());
IModel model = null;
try
{
@ -216,6 +246,7 @@ public class ModelLoader extends ModelBakery
}
}
}
ProgressManager.pop(itemBar);
// replace vanilla bucket models if desired. done afterwards for performance reasons
if(ForgeModContainer.replaceVanillaBucketModel)