Skip to content

Commit

Permalink
Fixed teleport issue
Browse files Browse the repository at this point in the history
  • Loading branch information
mosemister committed Dec 12, 2023
1 parent 35362d1 commit 5ced3bb
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 26 deletions.
26 changes: 26 additions & 0 deletions src/main/java/org/core/utils/Bounds.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import org.core.vector.type.Vector3;

import java.util.stream.Stream;

public class Bounds<N extends Number> {

private Vector3<? extends N> min;
Expand Down Expand Up @@ -47,6 +49,30 @@ public Vector3<? extends N> last() {
return this.max;
}

public Stream<Vector3<Integer>> frame() {
Stream.Builder<Vector3<Integer>> stream = Stream.builder();
Vector3<Integer> min = this.getIntMin();
Vector3<Integer> max = this.getIntMax();
for (int x = min.getX(); x <= max.getX(); x++) {
boolean matchX = min.getX() == x || max.getX() == x;
for (int y = min.getY(); y <= max.getY(); y++) {
boolean matchY = min.getY() == y || max.getY() == y;
if (!matchX && !matchY) {
continue;
}
for (int z = min.getZ(); z <= max.getZ(); z++) {
Vector3<Integer> vector = Vector3.valueOf(x, y, z);
boolean matchZ = min.getZ() == z || max.getZ() == z;
if (!((matchX && matchY) || matchZ)) {
continue;
}
stream.add(vector);
}
}
}
return stream.build();
}

public void add(Vector3<Integer> vector) {
this.add(vector.getX(), vector.getY(), vector.getZ());
}
Expand Down
61 changes: 35 additions & 26 deletions src/main/java/org/core/vector/type/Vector3.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import java.math.BigDecimal;
import java.util.function.Function;
import java.util.function.IntFunction;

public class Vector3<N extends Number> extends Vector<N, Vector3<N>> {

Expand All @@ -17,16 +18,14 @@ public int getSize() {

@Override
public <Num extends Number> Vector<Num, ?> createInstance(Function<BigDecimal, Num> function,
BigDecimal... decimals) {
BigDecimal... decimals) {
return new Vector3<>(function, decimals);
}
};

public static final VectorConverter.Specific<Integer, Vector3<Integer>> INT_CONVERTER =
new VectorConverter.Specific.AbstractSpecificWrapper<>(
public static final VectorConverter.Specific<Integer, Vector3<Integer>> INT_CONVERTER = new VectorConverter.Specific.AbstractSpecificWrapper<>(
GENERAL_CONVERTER, BigDecimal::intValue);
public static final VectorConverter.Specific<Double, Vector3<Double>> DOUBLE_CONVERTER =
new VectorConverter.Specific.AbstractSpecificWrapper<>(
public static final VectorConverter.Specific<Double, Vector3<Double>> DOUBLE_CONVERTER = new VectorConverter.Specific.AbstractSpecificWrapper<>(
GENERAL_CONVERTER, BigDecimal::doubleValue);


Expand All @@ -38,15 +37,6 @@ public Vector3(Function<BigDecimal, N> function, BigDecimal x, BigDecimal y, Big
super(function, x, y, z);
}

public static Vector3<Double> valueOf(double x, double y, double z) {
return new Vector3<>(BigDecimal::doubleValue, BigDecimal.valueOf(x), BigDecimal.valueOf(y),
BigDecimal.valueOf(z));
}

public static Vector3<Integer> valueOf(int x, int y, int z) {
return new Vector3<>(BigDecimal::intValue, BigDecimal.valueOf(x), BigDecimal.valueOf(y), BigDecimal.valueOf(z));
}

@Override
protected Vector3<N> createNew(BigDecimal... values) {
return new Vector3<>(this.toNumber, values[0], values[1], values[2]);
Expand All @@ -57,6 +47,12 @@ public <Num extends Number> Vector3<Num> toVector(Function<BigDecimal, Num> func
return new Vector3<>(function, this.points);
}

@Override
public String toString() {
return "Vector3{X: " + this.getRawX().toPlainString() + ", Y: " + this.getRawY().toPlainString() + ", Z: "
+ this.getRawZ().toPlainString() + "}";
}

public N getX() {
return this.getPoint(0);
}
Expand All @@ -81,38 +77,51 @@ public BigDecimal getRawZ() {
return this.getRawPoint(2);
}

public N[] toArray(IntFunction<N[]> collector) {
N[] array = collector.apply(3);
array[0] = getX();
array[1] = getY();
array[2] = getZ();
return array;
}

public Vector3<N> plus(Number x, Number y, Number z) {
return this.plus(this.createNew(BigDecimal.valueOf(x.doubleValue()), BigDecimal.valueOf(y.doubleValue()),
BigDecimal.valueOf(z.doubleValue())));
BigDecimal.valueOf(z.doubleValue())));
}

public Vector3<N> minus(Number x, Number y, Number z) {
return this.minus(this.createNew(BigDecimal.valueOf(x.doubleValue()), BigDecimal.valueOf(y.doubleValue()),
BigDecimal.valueOf(z.doubleValue())));
BigDecimal.valueOf(z.doubleValue())));
}

public double distanceSquared(Vector3<?> vector) {
final BigDecimal dx = this.getRawX().subtract(vector.getRawX());
final BigDecimal dy = this.getRawY().subtract(vector.getRawY());
final BigDecimal dz = this.getRawZ().subtract(vector.getRawZ());

return dx.doubleValue() * dx.doubleValue() + dy.doubleValue() * dy.doubleValue() +
dz.doubleValue() * dz.doubleValue();
return dx.doubleValue() * dx.doubleValue() + dy.doubleValue() * dy.doubleValue()
+ dz.doubleValue() * dz.doubleValue();
}

public double distanceSquared(Number x, Number y, Number z) {
return this.distanceSquared(this.createNew(BigDecimal.valueOf(x.doubleValue()),
BigDecimal.valueOf(y.doubleValue()), BigDecimal.valueOf(z.doubleValue())));
return this.distanceSquared(
this.createNew(BigDecimal.valueOf(x.doubleValue()), BigDecimal.valueOf(y.doubleValue()),
BigDecimal.valueOf(z.doubleValue())));
}

public Vector3<N> copyWith(N x, N y, N z){
return new Vector3<>(this.toNumber, BigDecimal.valueOf(x.doubleValue()), BigDecimal.valueOf(y.doubleValue()), BigDecimal.valueOf(z.doubleValue()));
public Vector3<N> copyWith(N x, N y, N z) {
return new Vector3<>(this.toNumber, BigDecimal.valueOf(x.doubleValue()), BigDecimal.valueOf(y.doubleValue()),
BigDecimal.valueOf(z.doubleValue()));
}

@Override
public String toString() {
return "Vector3{X: " + this.getRawX().toPlainString() + ", Y: " + this.getRawY().toPlainString() + ", Z: " +
this.getRawZ().toPlainString() + "}";
public static Vector3<Double> valueOf(double x, double y, double z) {
return new Vector3<>(BigDecimal::doubleValue, BigDecimal.valueOf(x), BigDecimal.valueOf(y),
BigDecimal.valueOf(z));
}

public static Vector3<Integer> valueOf(int x, int y, int z) {
return new Vector3<>(BigDecimal::intValue, BigDecimal.valueOf(x), BigDecimal.valueOf(y), BigDecimal.valueOf(z));
}


Expand Down

0 comments on commit 5ced3bb

Please sign in to comment.