package net.minecraft.item;
import net.minecraft.block.Block;
import net.minecraft.block.BlockEndPortalFrame;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.item.EntityEnderEye;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.Direction;
import net.minecraft.util.EnumMovingObjectType;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.ChunkPosition;
import net.minecraft.world.World;
public class ItemEnderEye extends Item
{
public ItemEnderEye(int par1)
{
super(par1);
this.setCreativeTab(CreativeTabs.tabMisc);
}
/**
* Callback for item usage. If the item does something special on right clicking, he will have one of those. Return
* True if something happen and false if it don't. This is for ITEMS, not BLOCKS
*/
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
{
int i1 = par3World.getBlockId(par4, par5, par6);
int j1 = par3World.getBlockMetadata(par4, par5, par6);
if (par2EntityPlayer.canPlayerEdit(par4, par5, par6, par7, par1ItemStack) && i1 == Block.endPortalFrame.blockID && !BlockEndPortalFrame.isEnderEyeInserted(j1))
{
if (par3World.isRemote)
{
return true;
}
else
{
par3World.setBlockMetadataWithNotify(par4, par5, par6, j1 + 4, 2);
--par1ItemStack.stackSize;
int k1;
for (k1 = 0; k1 < 16; ++k1)
{
double d0 = (double)((float)par4 + (5.0F + itemRand.nextFloat() * 6.0F) / 16.0F);
double d1 = (double)((float)par5 + 0.8125F);
double d2 = (double)((float)par6 + (5.0F + itemRand.nextFloat() * 6.0F) / 16.0F);
double d3 = 0.0D;
double d4 = 0.0D;
double d5 = 0.0D;
par3World.spawnParticle("smoke", d0, d1, d2, d3, d4, d5);
}
k1 = j1 & 3;
int l1 = 0;
int i2 = 0;
boolean flag = false;
boolean flag1 = true;
int j2 = Direction.rotateRight[k1];
int k2;
int l2;
int i3;
int j3;
int k3;
for (k2 = -2; k2 <= 2; ++k2)
{
j3 = par4 + Direction.offsetX[j2] * k2;
l2 = par6 + Direction.offsetZ[j2] * k2;
k3 = par3World.getBlockId(j3, par5, l2);
if (k3 == Block.endPortalFrame.blockID)
{
i3 = par3World.getBlockMetadata(j3, par5, l2);
if (!BlockEndPortalFrame.isEnderEyeInserted(i3))
{
flag1 = false;
break;
}
i2 = k2;
if (!flag)
{
l1 = k2;
flag = true;
}
}
}
if (flag1 && i2 == l1 + 2)
{
for (k2 = l1; k2 <= i2; ++k2)
{
j3 = par4 + Direction.offsetX[j2] * k2;
l2 = par6 + Direction.offsetZ[j2] * k2;
j3 += Direction.offsetX[k1] * 4;
l2 += Direction.offsetZ[k1] * 4;
k3 = par3World.getBlockId(j3, par5, l2);
i3 = par3World.getBlockMetadata(j3, par5, l2);
if (k3 != Block.endPortalFrame.blockID || !BlockEndPortalFrame.isEnderEyeInserted(i3))
{
flag1 = false;
break;
}
}
for (k2 = l1 - 1; k2 <= i2 + 1; k2 += 4)
{
for (j3 = 1; j3 <= 3; ++j3)
{
l2 = par4 + Direction.offsetX[j2] * k2;
k3 = par6 + Direction.offsetZ[j2] * k2;
l2 += Direction.offsetX[k1] * j3;
k3 += Direction.offsetZ[k1] * j3;
i3 = par3World.getBlockId(l2, par5, k3);
int l3 = par3World.getBlockMetadata(l2, par5, k3);
if (i3 != Block.endPortalFrame.blockID || !BlockEndPortalFrame.isEnderEyeInserted(l3))
{
flag1 = false;
break;
}
}
}
if (flag1)
{
for (k2 = l1; k2 <= i2; ++k2)
{
for (j3 = 1; j3 <= 3; ++j3)
{
l2 = par4 + Direction.offsetX[j2] * k2;
k3 = par6 + Direction.offsetZ[j2] * k2;
l2 += Direction.offsetX[k1] * j3;
k3 += Direction.offsetZ[k1] * j3;
par3World.setBlock(l2, par5, k3, Block.endPortal.blockID, 0, 2);
}
}
}
}
return true;
}
}
else
{
return false;
}
}
/**
* Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
*/
public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
{
MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(par2World, par3EntityPlayer, false);
if (movingobjectposition != null && movingobjectposition.typeOfHit == EnumMovingObjectType.TILE)
{
int i = par2World.getBlockId(movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ);
if (i == Block.endPortalFrame.blockID)
{
return par1ItemStack;
}
}
if (!par2World.isRemote)
{
ChunkPosition chunkposition = par2World.findClosestStructure("Stronghold", (int)par3EntityPlayer.posX, (int)par3EntityPlayer.posY, (int)par3EntityPlayer.posZ);
if (chunkposition != null)
{
EntityEnderEye entityendereye = new EntityEnderEye(par2World, par3EntityPlayer.posX, par3EntityPlayer.posY + 1.62D - (double)par3EntityPlayer.yOffset, par3EntityPlayer.posZ);
entityendereye.moveTowards((double)chunkposition.x, chunkposition.y, (double)chunkposition.z);
par2World.spawnEntityInWorld(entityendereye);
par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));
par2World.playAuxSFXAtEntity((EntityPlayer)null, 1002, (int)par3EntityPlayer.posX, (int)par3EntityPlayer.posY, (int)par3EntityPlayer.posZ, 0);
if (!par3EntityPlayer.capabilities.isCreativeMode)
{
--par1ItemStack.stackSize;
}
}
}
return par1ItemStack;
}
}