package openmods.item;
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public abstract class ItemGeneric extends Item {
protected Map<Integer, IMetaItem> metaitems = Maps.newHashMap();
public ItemGeneric() {
setHasSubtypes(true);
setMaxDamage(0);
}
public void registerItem(int id, IMetaItem item) {
IMetaItem prev = metaitems.put(id, item);
Preconditions.checkState(prev == null, "Config error: replacing meta item %s with %s", prev, item);
}
public void initRecipes() {
for (IMetaItem item : metaitems.values()) {
item.addRecipe();
}
}
@Override
public void registerIcons(IIconRegister register) {
for (IMetaItem item : metaitems.values()) {
item.registerIcons(register);
}
}
@Override
public IIcon getIconFromDamage(int i) {
IMetaItem meta = getMeta(i);
if (meta != null) { return meta.getIcon(); }
return null;
}
@Override
public String getUnlocalizedName(ItemStack stack) {
IMetaItem meta = getMeta(stack.getItemDamage());
if (meta != null) { return "item." + meta.getUnlocalizedName(stack); }
return "";
}
@Override
public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int side, float par8, float par9, float par10) {
IMetaItem meta = getMeta(itemStack.getItemDamage());
if (meta != null) { return meta.onItemUse(itemStack, player, world, x, y, z, side, par8, par9, par10); }
return true;
}
@Override
public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) {
IMetaItem meta = getMeta(itemStack.getItemDamage());
if (meta != null) { return meta.onItemRightClick(itemStack, player, world); }
return itemStack;
}
@Override
public boolean hitEntity(ItemStack itemStack, EntityLivingBase target, EntityLivingBase player) {
IMetaItem meta = getMeta(itemStack.getItemDamage());
if (meta != null) { return meta.hitEntity(itemStack, target, player); }
return true;
}
@Override
@SideOnly(Side.CLIENT)
public boolean hasEffect(ItemStack itemStack, int pass) {
IMetaItem meta = getMeta(itemStack.getItemDamage());
return meta != null? meta.hasEffect(pass) : false;
}
@Override
@SideOnly(Side.CLIENT)
@SuppressWarnings({ "rawtypes", "unchecked" })
public void getSubItems(Item item, CreativeTabs tab, List subItems) {
for (Entry<Integer, IMetaItem> entry : metaitems.entrySet())
entry.getValue().addToCreativeList(item, entry.getKey(), subItems);
}
public IMetaItem getMeta(int id) {
return metaitems.get(id);
}
public IMetaItem getMeta(ItemStack itemStack) {
return getMeta(itemStack.getItemDamage());
}
public ItemStack newItemStack(int id) {
return newItemStack(id, 1);
}
public ItemStack newItemStack(int id, int number) {
return new ItemStack(this, number, id);
}
public ItemStack newItemStack(IMetaItem meta, int size) {
for (Entry<Integer, IMetaItem> o : metaitems.entrySet()) {
if (o.getValue().equals(meta)) { return newItemStack(o.getKey(), size); }
}
return null;
}
}