package openblocks.common.item;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import openblocks.api.IPointable;
import openmods.utils.ItemUtils;
/**
* Pointer item is used for.. pointing
*
* @author Mikee
*
*/
public class MetaPointer extends MetaGeneric {
public MetaPointer(String name, Object... recipes) {
super(name, recipes);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register) {
registerIcon(register, "pointer");
}
@Override
public ItemStack onItemRightClick(ItemStack itemStack, EntityPlayer player, World world) {
if (!world.isRemote && player.isSneaking()) {
Vec3 posVec = Vec3.createVectorHelper(player.posX, player.posY + 1.62F, player.posZ);
Vec3 lookVec = player.getLook(1.0f);
Vec3 targetVec = posVec.addVector(lookVec.xCoord * 10f, lookVec.yCoord * 10f, lookVec.zCoord * 10f);
MovingObjectPosition movingObject = world.rayTraceBlocks(posVec, targetVec);
NBTTagCompound tag = ItemUtils.getItemTag(itemStack);
if (movingObject != null && movingObject.typeOfHit.equals(MovingObjectType.BLOCK)) {
final TileEntity pointedTileEntity = world.getTileEntity(movingObject.blockX, movingObject.blockY, movingObject.blockZ);
if (pointedTileEntity instanceof IPointable) {
NBTTagCompound linkTag = new NBTTagCompound();
linkTag.setInteger("x", movingObject.blockX);
linkTag.setInteger("y", movingObject.blockY);
linkTag.setInteger("z", movingObject.blockZ);
linkTag.setInteger("d", world.provider.dimensionId);
tag.setTag("lastPoint", linkTag);
((IPointable)pointedTileEntity).onPointingStart(itemStack, player);
} else if (tag.hasKey("lastPoint")) {
NBTTagCompound cannonTag = tag.getCompoundTag("lastPoint");
int x = cannonTag.getInteger("x");
int y = cannonTag.getInteger("y");
int z = cannonTag.getInteger("z");
int d = cannonTag.getInteger("d");
if (world.provider.dimensionId == d && world.blockExists(x, y, z)) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof IPointable) {
((IPointable)tile).onPointingEnd(itemStack, player, movingObject.blockX, movingObject.blockY, movingObject.blockZ);
}
}
}
}
}
return itemStack;
}
}