package org.ultramine.regions;
import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.ChunkPosition;
import net.minecraftforge.common.util.ForgeDirection;
import org.ultramine.server.chunk.ChunkHash;
import java.io.IOException;
public final class BlockPos
{
public static final BlockPos EMPTY = new BlockPos();
public final int x;
public final int y;
public final int z;
public BlockPos(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
public BlockPos()
{
this(0, 0, 0);
}
public BlockPos(double x, double y, double z)
{
this.x = MathHelper.floor_double(x);
this.y = MathHelper.floor_double(y);
this.z = MathHelper.floor_double(z);
}
public BlockPos step(ForgeDirection d)
{
return new BlockPos(x + d.offsetX, y + d.offsetY, z + d.offsetZ);
}
public BlockPos stepBack(ForgeDirection d)
{
return new BlockPos(x - d.offsetX, y - d.offsetY, z - d.offsetZ);
}
public Rectangle toRect()
{
return new Rectangle(this, this);
}
public boolean isInAABB(BlockPos min, BlockPos max)
{
return x >= min.x && x <= max.x && y >= min.y && y <= max.y && z >= min.z && z <= max.z;
}
public static BlockPos fromChunkPosition(ChunkPosition block)
{
return new BlockPos(block.chunkPosX, block.chunkPosY, block.chunkPosZ);
}
public static BlockPos fromTileEntity(TileEntity block)
{
return new BlockPos(block.xCoord, block.yCoord, block.zCoord);
}
public static BlockPos read(ByteBuf buf) throws IOException
{
return new BlockPos(buf.readInt(), buf.readInt(), buf.readInt());
}
public void write(ByteBuf buf) throws IOException
{
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
}
public static BlockPos fromNBT(NBTTagCompound nbt)
{
return new BlockPos(nbt.getInteger("x"), nbt.getInteger("y"), nbt.getInteger("z"));
}
public NBTTagCompound toNBT()
{
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("x", x);
nbt.setInteger("y", y);
nbt.setInteger("z", z);
return nbt;
}
@Override
public String toString()
{
return "BlockPos(" + x + ", " + y + ", " + z + ")";
}
@Override
public int hashCode()
{
return Long.hashCode(ChunkHash.blockCoordToHash(x, y, z));
}
public boolean equals(BlockPos v)
{
return x == v.x && y == v.y && z == v.z;
}
@Override
public boolean equals(Object o)
{
return o != null && o.getClass() == BlockPos.class && equals((BlockPos)o);
}
}