mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-03-11 12:15:35 +00:00
104 lines
2.5 KiB
Java
104 lines
2.5 KiB
Java
package com.hbm.util.fauxpointtwelve;
|
|
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.util.MathHelper;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
/**
|
|
* Adjusted code from MC 1.12 (com.minecraft.util.math.BlockPos)
|
|
*/
|
|
public class BlockPos implements Cloneable {
|
|
|
|
private final int x;
|
|
private final int y;
|
|
private final int z;
|
|
|
|
public BlockPos(int x, int y, int z) {
|
|
this.x = x;
|
|
this.y = y;
|
|
this.z = z;
|
|
}
|
|
|
|
public BlockPos(TileEntity te) {
|
|
this(te.xCoord, te.yCoord, te.zCoord);
|
|
}
|
|
|
|
public BlockPos(double x, double y, double z) {
|
|
this((int)MathHelper.floor_double(x), (int)MathHelper.floor_double(y), (int)MathHelper.floor_double(z));
|
|
}
|
|
|
|
public BlockPos add(int x, int y, int z) {
|
|
return x == 0 && y == 0 && z == 0 ? this : new BlockPos(this.getX() + x, this.getY() + y, this.getZ() + z);
|
|
}
|
|
|
|
public BlockPos add(double x, double y, double z) {
|
|
return x == 0.0D && y == 0.0D && z == 0.0D ? this : new BlockPos((double) this.getX() + x, (double) this.getY() + y, (double) this.getZ() + z);
|
|
}
|
|
|
|
public BlockPos add(BlockPos vec) {
|
|
return this.add(vec.getX(), vec.getY(), vec.getZ());
|
|
}
|
|
|
|
public BlockPos rotate(Rotation rotationIn) {
|
|
switch(rotationIn) {
|
|
case NONE:
|
|
default: return this;
|
|
case CLOCKWISE_90: return new BlockPos(-this.getZ(), this.getY(), this.getX());
|
|
case CLOCKWISE_180: return new BlockPos(-this.getX(), this.getY(), -this.getZ());
|
|
case COUNTERCLOCKWISE_90: return new BlockPos(this.getZ(), this.getY(), -this.getX());
|
|
}
|
|
}
|
|
|
|
public BlockPos offset(ForgeDirection dir) {
|
|
return this.offset(dir, 1);
|
|
}
|
|
|
|
public BlockPos offset(ForgeDirection dir, int distance) {
|
|
return new BlockPos(x + dir.offsetX * distance, y + dir.offsetY * distance, z + dir.offsetZ * distance);
|
|
}
|
|
|
|
public int getX() {
|
|
return this.x;
|
|
}
|
|
|
|
public int getY() {
|
|
return this.y;
|
|
}
|
|
|
|
public int getZ() {
|
|
return this.z;
|
|
}
|
|
|
|
/** modified 1.12 vanilla implementation */
|
|
@Override
|
|
public int hashCode() {
|
|
return (this.getY() + this.getZ() * 27644437) * 27644437 + this.getX();
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object toCompare) {
|
|
if(this == toCompare) {
|
|
return true;
|
|
} else if(!(toCompare instanceof BlockPos)) {
|
|
return false;
|
|
} else {
|
|
BlockPos pos = (BlockPos) toCompare;
|
|
if(this.getX() != pos.getX()) {
|
|
return false;
|
|
} else if(this.getY() != pos.getY()) {
|
|
return false;
|
|
} else {
|
|
return this.getZ() == pos.getZ();
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public BlockPos clone() {
|
|
try {
|
|
return (BlockPos) super.clone();
|
|
} catch(Exception x) { }
|
|
return null;
|
|
}
|
|
}
|