001 package net.minecraft.src; 002 003 public class ItemEnderEye extends Item 004 { 005 public ItemEnderEye(int par1) 006 { 007 super(par1); 008 this.setTabToDisplayOn(CreativeTabs.tabMisc); 009 } 010 011 public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) 012 { 013 int var11 = par3World.getBlockId(par4, par5, par6); 014 int var12 = par3World.getBlockMetadata(par4, par5, par6); 015 016 if (par2EntityPlayer.canPlayerEdit(par4, par5, par6) && var11 == Block.endPortalFrame.blockID && !BlockEndPortalFrame.isEnderEyeInserted(var12)) 017 { 018 if (par3World.isRemote) 019 { 020 return true; 021 } 022 else 023 { 024 par3World.setBlockMetadataWithNotify(par4, par5, par6, var12 + 4); 025 --par1ItemStack.stackSize; 026 int var13; 027 028 for (var13 = 0; var13 < 16; ++var13) 029 { 030 double var14 = (double)((float)par4 + (5.0F + itemRand.nextFloat() * 6.0F) / 16.0F); 031 double var16 = (double)((float)par5 + 0.8125F); 032 double var18 = (double)((float)par6 + (5.0F + itemRand.nextFloat() * 6.0F) / 16.0F); 033 double var20 = 0.0D; 034 double var22 = 0.0D; 035 double var24 = 0.0D; 036 par3World.spawnParticle("smoke", var14, var16, var18, var20, var22, var24); 037 } 038 039 var13 = var12 & 3; 040 int var26 = 0; 041 int var15 = 0; 042 boolean var27 = false; 043 boolean var17 = true; 044 int var28 = Direction.enderEyeMetaToDirection[var13]; 045 int var19; 046 int var21; 047 int var23; 048 int var29; 049 int var30; 050 051 for (var19 = -2; var19 <= 2; ++var19) 052 { 053 var29 = par4 + Direction.offsetX[var28] * var19; 054 var21 = par6 + Direction.offsetZ[var28] * var19; 055 var30 = par3World.getBlockId(var29, par5, var21); 056 057 if (var30 == Block.endPortalFrame.blockID) 058 { 059 var23 = par3World.getBlockMetadata(var29, par5, var21); 060 061 if (!BlockEndPortalFrame.isEnderEyeInserted(var23)) 062 { 063 var17 = false; 064 break; 065 } 066 067 var15 = var19; 068 069 if (!var27) 070 { 071 var26 = var19; 072 var27 = true; 073 } 074 } 075 } 076 077 if (var17 && var15 == var26 + 2) 078 { 079 for (var19 = var26; var19 <= var15; ++var19) 080 { 081 var29 = par4 + Direction.offsetX[var28] * var19; 082 var21 = par6 + Direction.offsetZ[var28] * var19; 083 var29 += Direction.offsetX[var13] * 4; 084 var21 += Direction.offsetZ[var13] * 4; 085 var30 = par3World.getBlockId(var29, par5, var21); 086 var23 = par3World.getBlockMetadata(var29, par5, var21); 087 088 if (var30 != Block.endPortalFrame.blockID || !BlockEndPortalFrame.isEnderEyeInserted(var23)) 089 { 090 var17 = false; 091 break; 092 } 093 } 094 095 for (var19 = var26 - 1; var19 <= var15 + 1; var19 += 4) 096 { 097 for (var29 = 1; var29 <= 3; ++var29) 098 { 099 var21 = par4 + Direction.offsetX[var28] * var19; 100 var30 = par6 + Direction.offsetZ[var28] * var19; 101 var21 += Direction.offsetX[var13] * var29; 102 var30 += Direction.offsetZ[var13] * var29; 103 var23 = par3World.getBlockId(var21, par5, var30); 104 int var31 = par3World.getBlockMetadata(var21, par5, var30); 105 106 if (var23 != Block.endPortalFrame.blockID || !BlockEndPortalFrame.isEnderEyeInserted(var31)) 107 { 108 var17 = false; 109 break; 110 } 111 } 112 } 113 114 if (var17) 115 { 116 for (var19 = var26; var19 <= var15; ++var19) 117 { 118 for (var29 = 1; var29 <= 3; ++var29) 119 { 120 var21 = par4 + Direction.offsetX[var28] * var19; 121 var30 = par6 + Direction.offsetZ[var28] * var19; 122 var21 += Direction.offsetX[var13] * var29; 123 var30 += Direction.offsetZ[var13] * var29; 124 par3World.setBlockWithNotify(var21, par5, var30, Block.endPortal.blockID); 125 } 126 } 127 } 128 } 129 130 return true; 131 } 132 } 133 else 134 { 135 return false; 136 } 137 } 138 139 /** 140 * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer 141 */ 142 public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) 143 { 144 MovingObjectPosition var4 = this.getMovingObjectPositionFromPlayer(par2World, par3EntityPlayer, false); 145 146 if (var4 != null && var4.typeOfHit == EnumMovingObjectType.TILE) 147 { 148 int var5 = par2World.getBlockId(var4.blockX, var4.blockY, var4.blockZ); 149 150 if (var5 == Block.endPortalFrame.blockID) 151 { 152 return par1ItemStack; 153 } 154 } 155 156 if (!par2World.isRemote) 157 { 158 ChunkPosition var7 = par2World.findClosestStructure("Stronghold", (int)par3EntityPlayer.posX, (int)par3EntityPlayer.posY, (int)par3EntityPlayer.posZ); 159 160 if (var7 != null) 161 { 162 EntityEnderEye var6 = new EntityEnderEye(par2World, par3EntityPlayer.posX, par3EntityPlayer.posY + 1.62D - (double)par3EntityPlayer.yOffset, par3EntityPlayer.posZ); 163 var6.moveTowards((double)var7.x, var7.y, (double)var7.z); 164 par2World.spawnEntityInWorld(var6); 165 par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); 166 par2World.playAuxSFXAtEntity((EntityPlayer)null, 1002, (int)par3EntityPlayer.posX, (int)par3EntityPlayer.posY, (int)par3EntityPlayer.posZ, 0); 167 168 if (!par3EntityPlayer.capabilities.isCreativeMode) 169 { 170 --par1ItemStack.stackSize; 171 } 172 } 173 } 174 175 return par1ItemStack; 176 } 177 }