package minefantasy.mf2.item.gadget; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import minefantasy.mf2.MineFantasyII; import minefantasy.mf2.item.list.CreativeTabMF; import minefantasy.mf2.item.list.ToolListMF; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemPotion; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.potion.PotionHelper; import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; import net.minecraft.world.World; public class ItemSyringe extends ItemPotion { public ItemSyringe() { super(); this.setMaxStackSize(16); String name = "syringe"; this.setCreativeTab(CreativeTabMF.tabGadget); setTextureName("minefantasy2:Other/"+name); GameRegistry.registerItem(this, name, MineFantasyII.MODID); this.setUnlocalizedName(name); } @Override public Multimap getAttributeModifiers(ItemStack item) { Multimap map = HashMultimap.create(); map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", 0, 0)); return map; } @Override public boolean hitEntity(ItemStack item, EntityLivingBase target, EntityLivingBase user) { World world = user.worldObj; target.playSound("random.drink", 1.0F, 2.0F); target.playSound("minefantasy2:weapon.hit.blade.metal", 1.0F, 1.5F); if (!world.isRemote) { apply(target, item); } if (user instanceof EntityPlayer && !((EntityPlayer)user).capabilities.isCreativeMode) { --item.stackSize; if (item.stackSize <= 0) { user.setCurrentItemOrArmor(0, new ItemStack(ToolListMF.syringe_empty)); } else { if(!((EntityPlayer)user).inventory.addItemStackToInventory(new ItemStack(ToolListMF.syringe_empty))) { user.entityDropItem(new ItemStack(ToolListMF.syringe_empty), 0F); } } } return true; } @Override public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer user) { if(user.isSwingInProgress) { return item; } user.swingItem(); if (!user.capabilities.isCreativeMode) { --item.stackSize; } user.playSound("random.drink", 1.0F, 2.0F); user.playSound("minefantasy2:weapon.hit.blade.metal", 1.0F, 1.5F); if (!world.isRemote) { apply(user, item); } if (!user.capabilities.isCreativeMode) { if (item.stackSize <= 0) { return new ItemStack(ToolListMF.syringe_empty); } if(!user.inventory.addItemStackToInventory(new ItemStack(ToolListMF.syringe_empty))) { user.entityDropItem(new ItemStack(ToolListMF.syringe_empty), 0F); } } return item; } private void apply(EntityLivingBase target, ItemStack item) { List list = this.getEffects(item); if (list != null) { Iterator iterator = list.iterator(); while (iterator.hasNext()) { PotionEffect potioneffect = (PotionEffect)iterator.next(); target.addPotionEffect(new PotionEffect(potioneffect)); } } } private IIcon icon, fill; @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister reg) { this.icon = reg.registerIcon(this.getIconString()); this.fill = reg.registerIcon(this.getIconString() + "_" + "fill"); } @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int p_77617_1_) { return icon; } @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamageForRenderPass(int p_77618_1_, int p_77618_2_) { return p_77618_2_ == 0 ? fill : super.getIconFromDamageForRenderPass(p_77618_1_, p_77618_2_); } @Override public String getItemStackDisplayName(ItemStack item) { if (item.getItemDamage() == 0) { return StatCollector.translateToLocal("item.syringe_empty.name"); } else { String s = ""; List list = Items.potionitem.getEffects(item); String s1; if (list != null && !list.isEmpty()) { s1 = ((PotionEffect)list.get(0)).getEffectName(); s1 = s1 + ".postfix"; return s + StatCollector.translateToLocal(s1).trim(); } else { s1 = PotionHelper.func_77905_c(item.getItemDamage()); return StatCollector.translateToLocal(s1).trim() + " " + super.getItemStackDisplayName(item); } } } private static final Map potionMap = new LinkedHashMap(); @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list) { int sub; if (potionMap.isEmpty()) { for (int i = 0; i <= 15; ++i) { for (sub = 0; sub <= 0; ++sub) { int k; if (sub == 0) { k = i | 8192; } else { k = i | 16384; } for (int l = 0; l <= 2; ++l) { int i1 = k; if (l != 0) { if (l == 1) { i1 = k | 32; } else if (l == 2) { i1 = k | 64; } } List list1 = PotionHelper.getPotionEffects(i1, false); if (list1 != null && !list1.isEmpty() && !ItemPotion.isSplash(i1)) { potionMap.put(list1, Integer.valueOf(i1)); } } } } } Iterator iterator = potionMap.values().iterator(); while (iterator.hasNext()) { sub = ((Integer)iterator.next()).intValue(); list.add(new ItemStack(item, 1, sub)); } } }