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