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