@Override
    public boolean equals(Object o) {
        if (o == this) return true;
        if (!(o instanceof Point)) return false;
        final Point other = (Point) o;
        return this.getPosition().equals(other.getPosition()) && this.getDirection().equals(other.getDirection());
    }
An immutable and serializable position + direction object
helper/src/main/java/me/lucko/helper/serialize/Point.java