// Path: src/com/jaquadro/minecraft/chameleon/resources/IItemEnum.java
// public interface IItemEnum extends IStringSerializable
// {
//     String getUnlocalizedName ();
// 
//     int getMetadata ();
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/resources/IItemMeshMapper.java
// public interface IItemMeshMapper
// {
//     List<Pair<ItemStack, ModelResourceLocation>> getMeshMappings ();
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/resources/IItemVariantProvider.java
// public interface IItemVariantProvider
// {
//     List<ResourceLocation> getItemVariants ();
// }


import com.jaquadro.minecraft.chameleon.resources.IItemEnum;
import com.jaquadro.minecraft.chameleon.resources.IItemMeshMapper;
import com.jaquadro.minecraft.chameleon.resources.IItemVariantProvider;
import net.minecraft.block.Block;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import org.apache.commons.lang3.tuple.Pair;
import java.util.ArrayList;
import java.util.List;
import java.util.function.IntFunction;
package com.jaquadro.minecraft.chameleon.item;



public class ChamMultiItemBlock<T extends Enum<T> & IItemEnum> extends ItemBlock implements IItemMeshMapper, IItemVariantProvider
{
    private final Class<T> clazz;
    private final IntFunction<T> metaLookup;
    private final PropertyEnum<T> property;

    public ChamMultiItemBlock (Block block, PropertyEnum<T> property, Class<T> clazz, IntFunction<T> metaLookup) {
        super(block);
        this.property = property;
        this.clazz = clazz;
        this.metaLookup = metaLookup;
        this.setRegistryName(block.getRegistryName());

        setMaxDamage(0);
        setHasSubtypes(true);
    }

    @Override
    public int getMetadata (int damage) {
        return damage;
    }

    @Override
// Path: src/com/jaquadro/minecraft/chameleon/resources/IItemEnum.java
// public interface IItemEnum extends IStringSerializable
// {
//     String getUnlocalizedName ();
// 
//     int getMetadata ();
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/resources/IItemMeshMapper.java
// public interface IItemMeshMapper
// {
//     List<Pair<ItemStack, ModelResourceLocation>> getMeshMappings ();
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/resources/IItemVariantProvider.java
// public interface IItemVariantProvider
// {
//     List<ResourceLocation> getItemVariants ();
// }


// Path: src/com/jaquadro/minecraft/chameleon/item/ChamMultiItemBlock.java
import com.jaquadro.minecraft.chameleon.resources.IItemEnum;
import com.jaquadro.minecraft.chameleon.resources.IItemMeshMapper;
import com.jaquadro.minecraft.chameleon.resources.IItemVariantProvider;
import net.minecraft.block.Block;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import org.apache.commons.lang3.tuple.Pair;
import java.util.ArrayList;
import java.util.List;
import java.util.function.IntFunction;

package com.jaquadro.minecraft.chameleon.item;



public class ChamMultiItemBlock<T extends Enum<T> & IItemEnum> extends ItemBlock implements IItemMeshMapper, IItemVariantProvider
{
    private final Class<T> clazz;
    private final IntFunction<T> metaLookup;
    private final PropertyEnum<T> property;

    public ChamMultiItemBlock (Block block, PropertyEnum<T> property, Class<T> clazz, IntFunction<T> metaLookup) {
        super(block);
        this.property = property;
        this.clazz = clazz;
        this.metaLookup = metaLookup;
        this.setRegistryName(block.getRegistryName());

        setMaxDamage(0);
        setHasSubtypes(true);
    }

    @Override
    public int getMetadata (int damage) {
        return damage;
    }

    @Override
    public String getUnlocalizedName (ItemStack itemStack) {