From 5ced3bb96a5f7c21cad0a5fbda3987399bb7d83c Mon Sep 17 00:00:00 2001 From: mose Date: Tue, 12 Dec 2023 17:54:43 +0000 Subject: [PATCH] Fixed teleport issue --- src/main/java/org/core/utils/Bounds.java | 26 ++++++++ .../java/org/core/vector/type/Vector3.java | 61 +++++++++++-------- 2 files changed, 61 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/core/utils/Bounds.java b/src/main/java/org/core/utils/Bounds.java index b06399dc..7215426d 100644 --- a/src/main/java/org/core/utils/Bounds.java +++ b/src/main/java/org/core/utils/Bounds.java @@ -2,6 +2,8 @@ import org.core.vector.type.Vector3; +import java.util.stream.Stream; + public class Bounds { private Vector3 min; @@ -47,6 +49,30 @@ public Vector3 last() { return this.max; } + public Stream> frame() { + Stream.Builder> stream = Stream.builder(); + Vector3 min = this.getIntMin(); + Vector3 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 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 vector) { this.add(vector.getX(), vector.getY(), vector.getZ()); } diff --git a/src/main/java/org/core/vector/type/Vector3.java b/src/main/java/org/core/vector/type/Vector3.java index 6616c147..4a06c249 100644 --- a/src/main/java/org/core/vector/type/Vector3.java +++ b/src/main/java/org/core/vector/type/Vector3.java @@ -5,6 +5,7 @@ import java.math.BigDecimal; import java.util.function.Function; +import java.util.function.IntFunction; public class Vector3 extends Vector> { @@ -17,16 +18,14 @@ public int getSize() { @Override public Vector createInstance(Function function, - BigDecimal... decimals) { + BigDecimal... decimals) { return new Vector3<>(function, decimals); } }; - public static final VectorConverter.Specific> INT_CONVERTER = - new VectorConverter.Specific.AbstractSpecificWrapper<>( + public static final VectorConverter.Specific> INT_CONVERTER = new VectorConverter.Specific.AbstractSpecificWrapper<>( GENERAL_CONVERTER, BigDecimal::intValue); - public static final VectorConverter.Specific> DOUBLE_CONVERTER = - new VectorConverter.Specific.AbstractSpecificWrapper<>( + public static final VectorConverter.Specific> DOUBLE_CONVERTER = new VectorConverter.Specific.AbstractSpecificWrapper<>( GENERAL_CONVERTER, BigDecimal::doubleValue); @@ -38,15 +37,6 @@ public Vector3(Function function, BigDecimal x, BigDecimal y, Big super(function, x, y, z); } - public static Vector3 valueOf(double x, double y, double z) { - return new Vector3<>(BigDecimal::doubleValue, BigDecimal.valueOf(x), BigDecimal.valueOf(y), - BigDecimal.valueOf(z)); - } - - public static Vector3 valueOf(int x, int y, int z) { - return new Vector3<>(BigDecimal::intValue, BigDecimal.valueOf(x), BigDecimal.valueOf(y), BigDecimal.valueOf(z)); - } - @Override protected Vector3 createNew(BigDecimal... values) { return new Vector3<>(this.toNumber, values[0], values[1], values[2]); @@ -57,6 +47,12 @@ public Vector3 toVector(Function 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); } @@ -81,14 +77,22 @@ public BigDecimal getRawZ() { return this.getRawPoint(2); } + public N[] toArray(IntFunction collector) { + N[] array = collector.apply(3); + array[0] = getX(); + array[1] = getY(); + array[2] = getZ(); + return array; + } + public Vector3 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 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) { @@ -96,23 +100,28 @@ public double distanceSquared(Vector3 vector) { 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 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 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 valueOf(double x, double y, double z) { + return new Vector3<>(BigDecimal::doubleValue, BigDecimal.valueOf(x), BigDecimal.valueOf(y), + BigDecimal.valueOf(z)); + } + + public static Vector3 valueOf(int x, int y, int z) { + return new Vector3<>(BigDecimal::intValue, BigDecimal.valueOf(x), BigDecimal.valueOf(y), BigDecimal.valueOf(z)); }