/******************************************************************************* * AbyssalCraft * Copyright (c) 2012 - 2017 Shinoow. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-3.0.txt * * Contributors: * Shinoow - implementation ******************************************************************************/ package com.shinoow.abyssalcraft.common.items; import java.util.List; 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.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; import com.shinoow.abyssalcraft.api.item.ACItems; import com.shinoow.abyssalcraft.client.handlers.AbyssalCraftClientEventHooks; import com.shinoow.abyssalcraft.common.network.PacketDispatcher; import com.shinoow.abyssalcraft.common.network.server.StaffOfRendingMessage; import com.shinoow.abyssalcraft.lib.ACTabs; import com.shinoow.abyssalcraft.lib.util.items.IStaffOfRending; public class ItemStaff extends Item implements IStaffOfRending{ public ItemStaff() { super(); setUnlocalizedName("staff"); setCreativeTab(ACTabs.tabTools); setFull3D(); setMaxStackSize(1); } @Override public String getItemStackDisplayName(ItemStack par1ItemStack) { return TextFormatting.BLUE + super.getItemStackDisplayName(par1ItemStack); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void addInformation(ItemStack is, EntityPlayer player, List l, boolean B){ l.add(I18n.translateToLocal("tooltip.staff")); int abyssal = getEnergy(is, "Abyssal"); int dread = getEnergy(is, "Dread"); int omothol = getEnergy(is, "Omothol"); int shadow = getEnergy(is, "Shadow"); l.add(I18n.translateToLocal("tooltip.drainstaff.energy.1")+": " + abyssal + "/100"); l.add(I18n.translateToLocal("tooltip.drainstaff.energy.2")+": " + dread + "/100"); l.add(I18n.translateToLocal("tooltip.drainstaff.energy.3")+": " + omothol + "/100"); l.add(I18n.translateToLocal("tooltip.drainstaff.energy.4")+": " + shadow + "/200"); } @Override public boolean isFull3D(){ return true; } @Override public void increaseEnergy(ItemStack stack, String type){ if(!stack.hasTagCompound()) stack.setTagCompound(new NBTTagCompound()); stack.getTagCompound().setInteger("energy"+type, getEnergy(stack, type) + getDrainAmount(stack)); } @Override public void setEnergy(int amount, ItemStack stack, String type){ stack.getTagCompound().setInteger("energy"+type, amount); } @Override public int getEnergy(ItemStack par1ItemStack, String type) { return par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("energy"+type) ? (int)par1ItemStack.getTagCompound().getInteger("energy"+type) : 0; } @Override @SuppressWarnings("rawtypes") public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) { ItemStack stack = player.getHeldItem(hand); if(world.isRemote){ RayTraceResult mov = AbyssalCraftClientEventHooks.getMouseOverExtended(50); if (mov != null) if (mov.entityHit != null && !mov.entityHit.isDead) if (mov.entityHit != player ) PacketDispatcher.sendToServer(new StaffOfRendingMessage(mov.entityHit.getEntityId(), hand)); } if(getEnergy(stack, "Shadow") >= 200){ setEnergy(0, stack, "Shadow"); player.inventory.addItemStackToInventory(new ItemStack(ACItems.shadow_gem)); } if(getEnergy(stack, "Abyssal") >= 100){ setEnergy(0, stack, "Abyssal"); player.inventory.addItemStackToInventory(new ItemStack(ACItems.essence, 1, 0)); } if(getEnergy(stack, "Dread") >= 100){ setEnergy(0, stack, "Dread"); player.inventory.addItemStackToInventory(new ItemStack(ACItems.essence, 1, 1)); } if(getEnergy(stack, "Omothol") >= 100){ setEnergy(0, stack, "Omothol"); player.inventory.addItemStackToInventory(new ItemStack(ACItems.essence, 1, 2)); } return new ActionResult(EnumActionResult.PASS, stack); } @Override public int getDrainAmount(ItemStack stack){ return 5; } @Override public boolean getShareTag() { return true; } }