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