package mods.eln.generic;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mods.eln.misc.UtilsClient;
import mods.eln.misc.VoltageLevelColor;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.client.IItemRenderer.ItemRenderType;
import net.minecraftforge.client.IItemRenderer.ItemRendererHelper;
import java.util.List;
public class GenericItemUsingDamageDescriptor {
public String IconName;
private IIcon iconIndex;
public String name;
public VoltageLevelColor voltageLevelColor = VoltageLevelColor.None;
public Item parentItem;
public int parentItemDamage;
public GenericItemUsingDamageDescriptor(String name) {
this(name, name);
}
public GenericItemUsingDamageDescriptor(String name, String iconName) {
setDefaultIcon(iconName);
this.name = name;
}
public void setDefaultIcon(String name) {
this.IconName = "eln:" + name.replaceAll(" ", "").toLowerCase();
}
public NBTTagCompound getDefaultNBT() {
return null;
}
public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) {
}
public ItemStack onItemRightClick(ItemStack s, World w, EntityPlayer p) {
return s;
}
public void getSubItems(List list) {
ItemStack stack = newItemStack(1);
list.add(stack);
}
@SideOnly(value = Side.CLIENT)
public void updateIcons(IIconRegister iconRegister) {
this.iconIndex = iconRegister.registerIcon(IconName);
}
public IIcon getIcon() {
return iconIndex;
}
public String getName(ItemStack stack) {
return name;
}
public static GenericItemUsingDamageDescriptor getDescriptor(ItemStack stack) {
if (stack == null)
return null;
if ((stack.getItem() instanceof GenericItemUsingDamage) == false)
return null;
return ((GenericItemUsingDamage<GenericItemUsingDamageDescriptor>) stack.getItem()).getDescriptor(stack);
}
public static GenericItemUsingDamageDescriptor getDescriptor(ItemStack stack, Class extendClass) {
GenericItemUsingDamageDescriptor desc = getDescriptor(stack);
if (desc == null)
return null;
if (extendClass.isAssignableFrom(desc.getClass()) == false)
return null;
return desc;
}
public void setParent(Item item, int damage) {
this.parentItem = item;
this.parentItemDamage = damage;
}
public ItemStack newItemStack(int size) {
ItemStack stack = new ItemStack(parentItem, size, parentItemDamage);
stack.setTagCompound(getDefaultNBT());
return stack;
}
public ItemStack newItemStack() {
return newItemStack(1);
}
public boolean checkSameItemStack(ItemStack stack) {
if (stack == null)
return false;
if (stack.getItem() != parentItem || stack.getItemDamage() != parentItemDamage)
return false;
return true;
}
/**
* Callback for item usage. If the item does something special on right clicking, he will have one of those. Return
* True if something happen and false if it don't. This is for ITEMS, not BLOCKS
*/
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float vx, float vy, float vz) {
return false;
}
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
return voltageLevelColor != VoltageLevelColor.None;
}
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
return false;
}
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
if (getIcon() == null)
return;
voltageLevelColor.drawIconBackground(type);
// remove "eln:" to add the full path replace("eln:", "textures/blocks/") + ".png";
String icon = getIcon().getIconName().substring(4);
UtilsClient.drawIcon(type, new ResourceLocation("eln", "textures/items/" + icon + ".png"));
}
public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) {
}
protected NBTTagCompound getNbt(ItemStack stack) {
NBTTagCompound nbt = stack.getTagCompound();
if (nbt == null) {
stack.setTagCompound(nbt = getDefaultNBT());
}
return nbt;
}
public float getStrVsBlock(ItemStack stack, Block block) {
return 0.2f;
}
public boolean onBlockDestroyed(ItemStack stack, World w, Block block, int x, int y, int z, EntityLivingBase entity) {
return false;
}
public boolean onDroppedByPlayer(ItemStack item, EntityPlayer player) {
return true;
}
public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) {
return false;
}
public boolean onBlockStartBreak(ItemStack itemstack, int x, int y, int z, EntityPlayer player) {
return false;
}
}