Point extends Location { public void align(Location origin) { if (relative[X]) setX(getX() + origin.getX()); if (relative[Y]) setY(getY() + origin.getY()); if (relative[Z]) setZ(getZ() + origin.getZ()); if (rotation) Vectors.rotate(this, origin); } Point();  Point(double x, double y, double z);  Point(@Nullable World world, double x, double y, double z);  Point(@Nullable World world, double x, double y, double z, float yaw, float pitch); void copy(Location origin, Location result); void copy(Location origin, Vector result); void align(Location origin); Point set(Axis axis, double value); boolean relative(Axis axis); Point relative(Axis axis, boolean relative); boolean rotation(); Point rotation(boolean rotation); @Override boolean equals(Object object); @Override int hashCode(); @Override String toString();  }
@Test void align() { var position = new Point(1, 2, 3).relative(Axis.X, true).relative(Axis.Y, true).relative(Axis.Z, true).rotation(true); var origin = new Point(null, 1, 2, 3, 90, 180); position.align(origin); assertEquals(new Point(2, -4, -6).relative(Axis.X, true).relative(Axis.Y, true).relative(Axis.Z, true).rotation(true), position); }