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    }