package mods.eln.generic;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mods.eln.misc.Utils;
import mods.eln.misc.UtilsClient;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
public class GenericItemBlockUsingDamage<Descriptor extends GenericItemBlockUsingDamageDescriptor> extends ItemBlock {
public Hashtable<Integer, Descriptor> subItemList = new Hashtable<Integer, Descriptor>();
public ArrayList<Integer> orderList = new ArrayList<Integer>();
public ArrayList<Descriptor> descriptors = new ArrayList<Descriptor>();
public Descriptor defaultElement = null;
public GenericItemBlockUsingDamage(Block b) {
super(b);
setHasSubtypes(true);
}
public void setDefaultElement(Descriptor descriptor) {
defaultElement = descriptor;
}
public void doubleEntry(int src, int dst) {
subItemList.put(dst, subItemList.get(src));
}
public void addDescriptor(int damage, Descriptor descriptor) {
subItemList.put(damage, descriptor);
ItemStack stack = new ItemStack(this, 1, damage);
stack.setTagCompound(descriptor.getDefaultNBT());
//LanguageRegistry.addName(stack, descriptor.name);
orderList.add(damage);
descriptors.add(descriptor);
descriptor.setParent(this, damage);
GameRegistry.registerCustomItemStack(descriptor.name, descriptor.newItemStack(1));
}
public void addWithoutRegistry(int damage, Descriptor descriptor) {
subItemList.put(damage, descriptor);
ItemStack stack = new ItemStack(this, 1, damage);
stack.setTagCompound(descriptor.getDefaultNBT());
descriptor.setParent(this, damage);
}
public Descriptor getDescriptor(int damage) {
return subItemList.get(damage);
}
public Descriptor getDescriptor(ItemStack itemStack) {
if (itemStack == null) return defaultElement;
if (itemStack.getItem() != this) return defaultElement;
return getDescriptor(itemStack.getItemDamage());
}
/*
@Override
@SideOnly(Side.CLIENT)
public int getIconFromDamage(int damage) {
return getDescriptor(damage).getIconId();
}
//caca1.5.1
@Override
public String getTextureFile () {
return CommonProxy.ITEMS_PNG;
}
@Override
public String getItemNameIS(ItemStack itemstack) {
return getItemName() + "." + getDescriptor(itemstack).name;
}
*/
/*@Override
public String getItemStackDisplayName(ItemStack par1ItemStack) {
Descriptor desc = getDescriptor(par1ItemStack);
if(desc == null) return "Unknown";
return desc.getName(par1ItemStack);
}*/
@Override
public String getUnlocalizedName(ItemStack par1ItemStack) {
Descriptor desc = getDescriptor(par1ItemStack);
if (desc == null) {
return this.getClass().getName();
} else {
return desc.name.replaceAll("\\s+", "_");
}
}
@Override
public IIcon getIconFromDamage(int damage) {
Descriptor desc = getDescriptor(damage);
if (desc == null) return null;
return desc.getIcon();
}
@Override
@SideOnly(value = Side.CLIENT)
public void registerIcons(IIconRegister iconRegister) {
for (GenericItemBlockUsingDamageDescriptor descriptor : subItemList.values()) {
descriptor.updateIcons(iconRegister);
}
}
@SideOnly(Side.CLIENT)
@Override
public void getSubItems(Item itemID, CreativeTabs tabs, List list) {
// You can also take a more direct approach and do each one individual but I prefer the lazy / right way
//for(Entry<Integer, Descriptor> entry : subItemList.entrySet())
for (int id : orderList) {
ItemStack stack = Utils.newItemStack(itemID, 1, id);
stack.setTagCompound(subItemList.get(id).getDefaultNBT());
list.add(stack);
}
}
public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) {
Descriptor desc = getDescriptor(itemStack);
if (desc == null) return;
List listFromDescriptor = new ArrayList();
desc.addInformation(itemStack, entityPlayer, listFromDescriptor, par4);
UtilsClient.showItemTooltip(listFromDescriptor, list);
}
public boolean onEntityItemUpdate(EntityItem entityItem) {
Descriptor desc = getDescriptor(entityItem.getEntityItem());
if (desc != null) return desc.onEntityItemUpdate(entityItem);
return false;
}
@Override
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
Descriptor desc = getDescriptor(stack);
if (desc != null) return desc.onItemUseFirst(stack, player);
return false;
}
}