// Path: src/com/jaquadro/minecraft/chameleon/Chameleon.java
// @Mod(modid = Chameleon.MOD_ID, name = Chameleon.MOD_NAME, version = Chameleon.MOD_VERSION, dependencies = "required-after:forge@[14.21.0.2362,);", acceptedMinecraftVersions = "[1.12,1.13)")
// public class Chameleon
// {
//     public static final String MOD_ID = "chameleon";
//     public static final String MOD_NAME = "Chameleon";
//     public static final String MOD_VERSION = "@VERSION@";
//     public static final String SOURCE_PATH = "com.jaquadro.minecraft.chameleon.";
// 
//     public static Logger log;
// 
//     @SideOnly(Side.CLIENT)
//     public IconRegistry iconRegistry;
// 
//     @SideOnly(Side.CLIENT)
//     public ModelRegistry modelRegistry;
// 
//     @Mod.Instance(MOD_ID)
//     public static Chameleon instance;
// 
//     @SidedProxy(clientSide = SOURCE_PATH + "core.ClientProxy", serverSide = SOURCE_PATH + "core.CommonProxy")
//     public static CommonProxy proxy;
// 
//     @Mod.EventHandler
//     public void preInit (FMLPreInitializationEvent event) {
//         log = event.getModLog();
// 
//         MinecraftForge.EVENT_BUS.register(proxy);
//         proxy.preInitSidedResources();
//     }
// 
//     @Mod.EventHandler
//     public void init (FMLInitializationEvent event) {
//         proxy.initSidedResources();
// 
//     }
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/resources/register/IBlockModelRegister.java
// public interface IBlockModelRegister
// {
//     List<IBlockState> getBlockStates ();
// 
//     IBakedModel getModel (IBlockState state, IBakedModel existingModel);
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/resources/register/IItemModelRegister.java
// public interface IItemModelRegister
// {
//     Item getItem ();
// 
//     List<ItemStack> getItemVariants ();
// 
//     IBakedModel getModel (ItemStack stack, IBakedModel existingModel);
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/resources/register/IUnifiedRegister.java
// public interface IUnifiedRegister extends IBlockModelRegister, IItemModelRegister, ITextureRegister
// {
// }


import com.jaquadro.minecraft.chameleon.Chameleon;
import com.jaquadro.minecraft.chameleon.resources.register.IBlockModelRegister;
import com.jaquadro.minecraft.chameleon.resources.register.IItemModelRegister;
import com.jaquadro.minecraft.chameleon.resources.register.IUnifiedRegister;
import net.minecraft.block.Block;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.IRegistry;
import net.minecraftforge.client.model.ICustomModelLoader;
import net.minecraftforge.client.model.IModel;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.commons.lang3.tuple.Pair;
import java.util.*;
package com.jaquadro.minecraft.chameleon.resources;



@SideOnly(Side.CLIENT)
public class ModelRegistry
{
    private final Set<IBlockModelRegister> blockRegistry = new HashSet<IBlockModelRegister>();
    private final Set<IItemModelRegister> itemRegistry = new HashSet<IItemModelRegister>();

    public final ChamModelLoader loader = new ChamModelLoader();

    public void registerModel (IBlockModelRegister modelRegister) {
        if (modelRegister != null)
            blockRegistry.add(modelRegister);
    }

    public void registerModel (IItemModelRegister modelRegister) {
        if (modelRegister != null) {
            itemRegistry.add(modelRegister);
            registerItemVariants(modelRegister.getItem());
        }
    }

// Path: src/com/jaquadro/minecraft/chameleon/Chameleon.java
// @Mod(modid = Chameleon.MOD_ID, name = Chameleon.MOD_NAME, version = Chameleon.MOD_VERSION, dependencies = "required-after:forge@[14.21.0.2362,);", acceptedMinecraftVersions = "[1.12,1.13)")
// public class Chameleon
// {
//     public static final String MOD_ID = "chameleon";
//     public static final String MOD_NAME = "Chameleon";
//     public static final String MOD_VERSION = "@VERSION@";
//     public static final String SOURCE_PATH = "com.jaquadro.minecraft.chameleon.";
// 
//     public static Logger log;
// 
//     @SideOnly(Side.CLIENT)
//     public IconRegistry iconRegistry;
// 
//     @SideOnly(Side.CLIENT)
//     public ModelRegistry modelRegistry;
// 
//     @Mod.Instance(MOD_ID)
//     public static Chameleon instance;
// 
//     @SidedProxy(clientSide = SOURCE_PATH + "core.ClientProxy", serverSide = SOURCE_PATH + "core.CommonProxy")
//     public static CommonProxy proxy;
// 
//     @Mod.EventHandler
//     public void preInit (FMLPreInitializationEvent event) {
//         log = event.getModLog();
// 
//         MinecraftForge.EVENT_BUS.register(proxy);
//         proxy.preInitSidedResources();
//     }
// 
//     @Mod.EventHandler
//     public void init (FMLInitializationEvent event) {
//         proxy.initSidedResources();
// 
//     }
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/resources/register/IBlockModelRegister.java
// public interface IBlockModelRegister
// {
//     List<IBlockState> getBlockStates ();
// 
//     IBakedModel getModel (IBlockState state, IBakedModel existingModel);
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/resources/register/IItemModelRegister.java
// public interface IItemModelRegister
// {
//     Item getItem ();
// 
//     List<ItemStack> getItemVariants ();
// 
//     IBakedModel getModel (ItemStack stack, IBakedModel existingModel);
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/resources/register/IUnifiedRegister.java
// public interface IUnifiedRegister extends IBlockModelRegister, IItemModelRegister, ITextureRegister
// {
// }


// Path: src/com/jaquadro/minecraft/chameleon/resources/ModelRegistry.java
import com.jaquadro.minecraft.chameleon.Chameleon;
import com.jaquadro.minecraft.chameleon.resources.register.IBlockModelRegister;
import com.jaquadro.minecraft.chameleon.resources.register.IItemModelRegister;
import com.jaquadro.minecraft.chameleon.resources.register.IUnifiedRegister;
import net.minecraft.block.Block;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.IRegistry;
import net.minecraftforge.client.model.ICustomModelLoader;
import net.minecraftforge.client.model.IModel;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.commons.lang3.tuple.Pair;
import java.util.*;

package com.jaquadro.minecraft.chameleon.resources;



@SideOnly(Side.CLIENT)
public class ModelRegistry
{
    private final Set<IBlockModelRegister> blockRegistry = new HashSet<IBlockModelRegister>();
    private final Set<IItemModelRegister> itemRegistry = new HashSet<IItemModelRegister>();

    public final ChamModelLoader loader = new ChamModelLoader();

    public void registerModel (IBlockModelRegister modelRegister) {
        if (modelRegister != null)
            blockRegistry.add(modelRegister);
    }

    public void registerModel (IItemModelRegister modelRegister) {
        if (modelRegister != null) {
            itemRegistry.add(modelRegister);
            registerItemVariants(modelRegister.getItem());
        }
    }

    public void registerModel (IUnifiedRegister modelRegister) {