@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Block block = (Block) o;

        if (initialMoves != block.initialMoves) return false;
        if (remainingMoves != block.remainingMoves) return false;
        if (origin != null ? !origin.equals(block.origin) : block.origin != null) return false;
        if (place != null ? !place.equals(block.place) : block.place != null) return false;

        return true;
    }