143 lines
2.6 KiB
Java
143 lines
2.6 KiB
Java
|
/**
|
||
|
* Copyright (c) SpaceToad, 2011
|
||
|
* http://www.mod-buildcraft.com
|
||
|
*
|
||
|
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||
|
* License 1.0, or MMPL. Please check the contents of the license located in
|
||
|
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||
|
*/
|
||
|
|
||
|
package buildcraft.api.core;
|
||
|
|
||
|
import net.minecraft.nbt.NBTTagCompound;
|
||
|
import net.minecraft.tileentity.TileEntity;
|
||
|
import net.minecraftforge.common.ForgeDirection;
|
||
|
|
||
|
public class Position {
|
||
|
|
||
|
public double x, y, z;
|
||
|
public ForgeDirection orientation;
|
||
|
|
||
|
public Position(double ci, double cj, double ck) {
|
||
|
x = ci;
|
||
|
y = cj;
|
||
|
z = ck;
|
||
|
orientation = ForgeDirection.UNKNOWN;
|
||
|
}
|
||
|
|
||
|
public Position(double ci, double cj, double ck, ForgeDirection corientation) {
|
||
|
x = ci;
|
||
|
y = cj;
|
||
|
z = ck;
|
||
|
orientation = corientation;
|
||
|
}
|
||
|
|
||
|
public Position(Position p) {
|
||
|
x = p.x;
|
||
|
y = p.y;
|
||
|
z = p.z;
|
||
|
orientation = p.orientation;
|
||
|
}
|
||
|
|
||
|
public Position(NBTTagCompound nbttagcompound) {
|
||
|
x = nbttagcompound.getDouble("i");
|
||
|
y = nbttagcompound.getDouble("j");
|
||
|
z = nbttagcompound.getDouble("k");
|
||
|
|
||
|
orientation = ForgeDirection.UNKNOWN;
|
||
|
}
|
||
|
|
||
|
public Position(TileEntity tile) {
|
||
|
x = tile.xCoord;
|
||
|
y = tile.yCoord;
|
||
|
z = tile.zCoord;
|
||
|
}
|
||
|
|
||
|
public void moveRight(double step) {
|
||
|
switch (orientation) {
|
||
|
case SOUTH:
|
||
|
x = x - step;
|
||
|
break;
|
||
|
case NORTH:
|
||
|
x = x + step;
|
||
|
break;
|
||
|
case EAST:
|
||
|
z = z + step;
|
||
|
break;
|
||
|
case WEST:
|
||
|
z = z - step;
|
||
|
break;
|
||
|
default:
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void moveLeft(double step) {
|
||
|
moveRight(-step);
|
||
|
}
|
||
|
|
||
|
public void moveForwards(double step) {
|
||
|
switch (orientation) {
|
||
|
case UP:
|
||
|
y = y + step;
|
||
|
break;
|
||
|
case DOWN:
|
||
|
y = y - step;
|
||
|
break;
|
||
|
case SOUTH:
|
||
|
z = z + step;
|
||
|
break;
|
||
|
case NORTH:
|
||
|
z = z - step;
|
||
|
break;
|
||
|
case EAST:
|
||
|
x = x + step;
|
||
|
break;
|
||
|
case WEST:
|
||
|
x = x - step;
|
||
|
break;
|
||
|
default:
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void moveBackwards(double step) {
|
||
|
moveForwards(-step);
|
||
|
}
|
||
|
|
||
|
public void moveUp(double step) {
|
||
|
switch (orientation) {
|
||
|
case SOUTH:
|
||
|
case NORTH:
|
||
|
case EAST:
|
||
|
case WEST:
|
||
|
y = y + step;
|
||
|
break;
|
||
|
default:
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
public void moveDown(double step) {
|
||
|
moveUp(-step);
|
||
|
}
|
||
|
|
||
|
public void writeToNBT(NBTTagCompound nbttagcompound) {
|
||
|
nbttagcompound.setDouble("i", x);
|
||
|
nbttagcompound.setDouble("j", y);
|
||
|
nbttagcompound.setDouble("k", z);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String toString() {
|
||
|
return "{" + x + ", " + y + ", " + z + "}";
|
||
|
}
|
||
|
|
||
|
public Position min(Position p) {
|
||
|
return new Position(p.x > x ? x : p.x, p.y > y ? y : p.y, p.z > z ? z : p.z);
|
||
|
}
|
||
|
|
||
|
public Position max(Position p) {
|
||
|
return new Position(p.x < x ? x : p.x, p.y < y ? y : p.y, p.z < z ? z : p.z);
|
||
|
}
|
||
|
|
||
|
}
|