001 package net.minecraft.src; 002 003 import cpw.mods.fml.common.Side; 004 import cpw.mods.fml.common.asm.SideOnly; 005 import cpw.mods.fml.common.registry.VillagerRegistry; 006 007 import java.util.Iterator; 008 import java.util.List; 009 010 public class ItemMonsterPlacer extends Item 011 { 012 public ItemMonsterPlacer(int par1) 013 { 014 super(par1); 015 this.setHasSubtypes(true); 016 this.setCreativeTab(CreativeTabs.tabMisc); 017 } 018 019 @SideOnly(Side.CLIENT) 020 public String getItemDisplayName(ItemStack par1ItemStack) 021 { 022 String var2 = ("" + StatCollector.translateToLocal(this.getItemName() + ".name")).trim(); 023 String var3 = EntityList.getStringFromID(par1ItemStack.getItemDamage()); 024 025 if (var3 != null) 026 { 027 var2 = var2 + " " + StatCollector.translateToLocal("entity." + var3 + ".name"); 028 } 029 030 return var2; 031 } 032 033 @SideOnly(Side.CLIENT) 034 public int getColorFromDamage(int par1, int par2) 035 { 036 EntityEggInfo var3 = (EntityEggInfo)EntityList.entityEggs.get(Integer.valueOf(par1)); 037 return var3 != null ? (par2 == 0 ? var3.primaryColor : var3.secondaryColor) : 16777215; 038 } 039 040 /** 041 * Callback for item usage. If the item does something special on right clicking, he will have one of those. Return 042 * True if something happen and false if it don't. This is for ITEMS, not BLOCKS 043 */ 044 public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) 045 { 046 if (par3World.isRemote) 047 { 048 return true; 049 } 050 else 051 { 052 int var11 = par3World.getBlockId(par4, par5, par6); 053 par4 += Facing.offsetsXForSide[par7]; 054 par5 += Facing.offsetsYForSide[par7]; 055 par6 += Facing.offsetsZForSide[par7]; 056 double var12 = 0.0D; 057 058 if (par7 == 1 && var11 == Block.fence.blockID || var11 == Block.netherFence.blockID) 059 { 060 var12 = 0.5D; 061 } 062 063 if (spawnCreature(par3World, par1ItemStack.getItemDamage(), (double)par4 + 0.5D, (double)par5 + var12, (double)par6 + 0.5D) && !par2EntityPlayer.capabilities.isCreativeMode) 064 { 065 --par1ItemStack.stackSize; 066 } 067 068 return true; 069 } 070 } 071 072 /** 073 * Spawns the creature specified by the egg's type in the location specified by the last three parameters. 074 * Parameters: world, entityID, x, y, z. 075 */ 076 public static boolean spawnCreature(World par0World, int par1, double par2, double par4, double par6) 077 { 078 if (!EntityList.entityEggs.containsKey(Integer.valueOf(par1))) 079 { 080 return false; 081 } 082 else 083 { 084 Entity var8 = EntityList.createEntityByID(par1, par0World); 085 086 if (var8 != null) 087 { 088 var8.setLocationAndAngles(par2, par4, par6, par0World.rand.nextFloat() * 360.0F, 0.0F); 089 090 if (var8 instanceof EntityVillager) 091 { 092 EntityVillager var9 = (EntityVillager)var8; 093 VillagerRegistry.applyRandomTrade(var9, var9.getRNG()); 094 par0World.spawnEntityInWorld(var9); 095 return true; 096 } 097 098 par0World.spawnEntityInWorld(var8); 099 ((EntityLiving)var8).playLivingSound(); 100 } 101 102 return var8 != null; 103 } 104 } 105 106 @SideOnly(Side.CLIENT) 107 public boolean requiresMultipleRenderPasses() 108 { 109 return true; 110 } 111 112 @SideOnly(Side.CLIENT) 113 114 /** 115 * Gets an icon index based on an item's damage value and the given render pass 116 */ 117 public int getIconFromDamageForRenderPass(int par1, int par2) 118 { 119 return par2 > 0 ? super.getIconFromDamageForRenderPass(par1, par2) + 16 : super.getIconFromDamageForRenderPass(par1, par2); 120 } 121 122 @SideOnly(Side.CLIENT) 123 124 /** 125 * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) 126 */ 127 public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) 128 { 129 Iterator var4 = EntityList.entityEggs.values().iterator(); 130 131 while (var4.hasNext()) 132 { 133 EntityEggInfo var5 = (EntityEggInfo)var4.next(); 134 par3List.add(new ItemStack(par1, 1, var5.spawnedID)); 135 } 136 } 137 }