diff --git a/src/main/java/dev/zontreck/libzontreck/api/Vector2.java b/src/main/java/dev/zontreck/libzontreck/api/Vector2.java index 670f786..a0645ec 100644 --- a/src/main/java/dev/zontreck/libzontreck/api/Vector2.java +++ b/src/main/java/dev/zontreck/libzontreck/api/Vector2.java @@ -1,11 +1,11 @@ package dev.zontreck.libzontreck.api; -import dev.zontreck.libzontreck.vectors.Vector2d; +import dev.zontreck.libzontreck.vectors.Vector2f; import dev.zontreck.libzontreck.vectors.Vector2i; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.phys.Vec2; -public interface Vector2 +public interface Vector2 { /** * Converts the current Vector2 representation into a minecraft Vec2 @@ -62,7 +62,7 @@ public interface Vector2 * Converts, if necessary, to Vector2d * @return A vector2d instance */ - Vector2d asVector2d(); + Vector2f asVector2f(); /** * Converts, if necessary, to Vector2i @@ -123,4 +123,16 @@ public interface Vector2 * @return New instance */ Vector2 moveDown(); + + /** + * Gets the X value + * @return X + */ + T getX(); + + /** + * Gets the Y value + * @return Y + */ + T getY(); } diff --git a/src/main/java/dev/zontreck/libzontreck/api/Vector3.java b/src/main/java/dev/zontreck/libzontreck/api/Vector3.java index f7679f5..ce23cc1 100644 --- a/src/main/java/dev/zontreck/libzontreck/api/Vector3.java +++ b/src/main/java/dev/zontreck/libzontreck/api/Vector3.java @@ -1,16 +1,13 @@ package dev.zontreck.libzontreck.api; -import dev.zontreck.libzontreck.vectors.Vector2d; -import dev.zontreck.libzontreck.vectors.Vector2i; import dev.zontreck.libzontreck.vectors.Vector3d; import dev.zontreck.libzontreck.vectors.Vector3i; import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.phys.Vec2; import net.minecraft.world.phys.Vec3; -public interface Vector3 +public interface Vector3 { /** * Converts the current Vector3 representation into a minecraft Vec3 @@ -140,4 +137,22 @@ public interface Vector3 * @return New instance */ Vector3 moveDown(); + + /** + * Gets the X value + * @return X + */ + T getX(); + + /** + * Gets the Y value + * @return Y + */ + T getY(); + + /** + * Gets the Z value + * @return Z + */ + T getZ(); } diff --git a/src/main/java/dev/zontreck/libzontreck/chestgui/ChestGUI.java b/src/main/java/dev/zontreck/libzontreck/chestgui/ChestGUI.java index ed1cd74..d41046b 100644 --- a/src/main/java/dev/zontreck/libzontreck/chestgui/ChestGUI.java +++ b/src/main/java/dev/zontreck/libzontreck/chestgui/ChestGUI.java @@ -9,7 +9,7 @@ import dev.zontreck.libzontreck.networking.ModMessages; import dev.zontreck.libzontreck.networking.packets.S2CCloseChestGUI; import dev.zontreck.libzontreck.util.ChatHelpers; import dev.zontreck.libzontreck.util.ServerUtilities; -import dev.zontreck.libzontreck.vectors.Vector2d; +import dev.zontreck.libzontreck.vectors.Vector2f; import dev.zontreck.libzontreck.vectors.Vector2i; import net.minecraft.world.SimpleMenuProvider; import net.minecraft.world.item.Item; @@ -228,7 +228,7 @@ public class ChestGUI return this.id.equals(id); } - public void handleButtonClicked(int slot, Vector2d pos, Item item) { + public void handleButtonClicked(int slot, Vector2f pos, Item item) { for(ChestGUIButton button : buttons) { if(button.getSlotNum() == slot) diff --git a/src/main/java/dev/zontreck/libzontreck/util/PositionUtil.java b/src/main/java/dev/zontreck/libzontreck/util/PositionUtil.java index 332deae..fdcb9f6 100644 --- a/src/main/java/dev/zontreck/libzontreck/util/PositionUtil.java +++ b/src/main/java/dev/zontreck/libzontreck/util/PositionUtil.java @@ -2,8 +2,10 @@ package dev.zontreck.libzontreck.util; import dev.zontreck.libzontreck.api.Vector3; import dev.zontreck.libzontreck.vectors.Vector3d; +import dev.zontreck.libzontreck.vectors.Vector3i; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; /** @@ -112,4 +114,43 @@ public class PositionUtil } + public List sortAscending(List vecs) + { + + List copy = new ArrayList<>(vecs); + List sorted = new ArrayList<>(); + + + while(copy.size()>0) + { + Vector3 lowest = findFirstLowestPosition(copy); + copy.remove(lowest); + sorted.add(lowest); + } + + return sorted; + } + + public static Vector3 findFirstLowestPosition(List vecs) + { + + Vector3i lowest = new Vector3i(0, 500, 0); + List copy = new ArrayList<>(vecs); + + Iterator it = copy.iterator(); + while(it.hasNext()) + { + Vector3i entry = it.next().asVector3i(); + if(entry.y < lowest.y) + { + lowest = entry; + it.remove(); + }else it.remove(); + } + + return lowest; + + } + + } diff --git a/src/main/java/dev/zontreck/libzontreck/vectors/ChunkPos.java b/src/main/java/dev/zontreck/libzontreck/vectors/ChunkPos.java index e88fba8..0e60b5a 100644 --- a/src/main/java/dev/zontreck/libzontreck/vectors/ChunkPos.java +++ b/src/main/java/dev/zontreck/libzontreck/vectors/ChunkPos.java @@ -5,7 +5,7 @@ import net.minecraft.server.level.ServerLevel; public class ChunkPos { public Points points; - public Vector2d centerPoints; + public Vector2f centerPoints; public String dim; public ChunkPos(Vector3d point1, Vector3d point2, ServerLevel lvl) @@ -17,7 +17,7 @@ public class ChunkPos { public ChunkPos(CompoundTag tag) { points = new Points(tag.getCompound("points")); - centerPoints = Vector2d.deserialize(tag.getCompound("center")); + centerPoints = Vector2f.deserialize(tag.getCompound("center")); } public boolean isWithin(Vector3d point) diff --git a/src/main/java/dev/zontreck/libzontreck/vectors/Vector2d.java b/src/main/java/dev/zontreck/libzontreck/vectors/Vector2f.java similarity index 66% rename from src/main/java/dev/zontreck/libzontreck/vectors/Vector2d.java rename to src/main/java/dev/zontreck/libzontreck/vectors/Vector2f.java index 17b50bd..112686c 100644 --- a/src/main/java/dev/zontreck/libzontreck/vectors/Vector2d.java +++ b/src/main/java/dev/zontreck/libzontreck/vectors/Vector2f.java @@ -1,13 +1,12 @@ package dev.zontreck.libzontreck.vectors; import dev.zontreck.libzontreck.api.Vector2; -import dev.zontreck.libzontreck.exceptions.InvalidDeserialization; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.phys.Vec2; -public class Vector2d implements Vector2 +public class Vector2f implements Vector2 { - public static final Vector2d ZERO = new Vector2d(0, 0); + public static final Vector2f ZERO = new Vector2f(0, 0); public float x; public float y; @@ -17,26 +16,26 @@ public class Vector2d implements Vector2 return new Vec2(x, y); } - public Vector2d() + public Vector2f() { } - public Vector2d(float x, float y) + public Vector2f(float x, float y) { this.x=x; this.y=y; } - public Vector2d(Vec2 pos) + public Vector2f(Vec2 pos) { x=pos.x; y=pos.y; } - public static Vector2d parseString(String vector2) + public static Vector2f parseString(String vector2) { - Vector2d vec = new Vector2d(); + Vector2f vec = new Vector2f(); // This will be serialized most likely from the ToString method // Parse if(vector2.startsWith("<")) @@ -62,9 +61,9 @@ public class Vector2d implements Vector2 } @Override - public Vector2d Clone() + public Vector2f Clone() { - Vector2d n = new Vector2d(x, y); + Vector2f n = new Vector2f(x, y); return n; } @@ -84,9 +83,9 @@ public class Vector2d implements Vector2 return tag; } - public static Vector2d deserialize(CompoundTag tag) + public static Vector2f deserialize(CompoundTag tag) { - Vector2d vec = new Vector2d(); + Vector2f vec = new Vector2f(); vec.x=tag.getFloat("x"); vec.y=tag.getFloat("y"); @@ -96,7 +95,7 @@ public class Vector2d implements Vector2 @Override public boolean Same(Vector2 other) { - Vector2d ov = other.asVector2d(); + Vector2f ov = other.asVector2f(); if(x == ov.x && y == ov.y) return true; return false; } @@ -104,8 +103,8 @@ public class Vector2d implements Vector2 @Override public boolean Inside(Vector2 point1, Vector2 point2) { - Vector2d p1 = point1.asVector2d(); - Vector2d p2 = point2.asVector2d(); + Vector2f p1 = point1.asVector2f(); + Vector2f p2 = point2.asVector2f(); if(p1.x <= x && p2.x >= x){ if(p1.y <= y && p2.y >= y) @@ -118,7 +117,7 @@ public class Vector2d implements Vector2 } @Override - public Vector2d asVector2d() + public Vector2f asVector2f() { return this; } @@ -131,14 +130,14 @@ public class Vector2d implements Vector2 @Override public boolean greater(Vector2 other) { - Vector2d vec = other.asVector2d(); + Vector2f vec = other.asVector2f(); return ((x > vec.x) && (y > vec.y)); } @Override public boolean less(Vector2 other) { - Vector2d vec = other.asVector2d(); + Vector2f vec = other.asVector2f(); return ((x > vec.x) && (y > vec.y)); } public boolean equal(Vector2 other) @@ -147,30 +146,40 @@ public class Vector2d implements Vector2 } @Override - public Vector2d add(Vector2 other) { - Vector2d vec = other.asVector2d(); - return new Vector2d(x + vec.x, y + vec.y); + public Vector2f add(Vector2 other) { + Vector2f vec = other.asVector2f(); + return new Vector2f(x + vec.x, y + vec.y); } @Override - public Vector2d subtract(Vector2 other) { - Vector2d vec = other.asVector2d(); - return new Vector2d(x - vec.x, y - vec.y); + public Vector2f subtract(Vector2 other) { + Vector2f vec = other.asVector2f(); + return new Vector2f(x - vec.x, y - vec.y); } @Override public double distance(Vector2 other) { - Vector2d vec = subtract(other); + Vector2f vec = subtract(other); return Math.sqrt((vec.x * vec.x + vec.y * vec.y)); } @Override - public Vector2d moveUp() { - return add(new Vector2d(0,1)); + public Vector2f moveUp() { + return add(new Vector2f(0,1)); } @Override - public Vector2d moveDown() { - return subtract(new Vector2d(0,1)); + public Vector2f moveDown() { + return subtract(new Vector2f(0,1)); + } + + @Override + public Float getX() { + return x; + } + + @Override + public Float getY() { + return y; } } diff --git a/src/main/java/dev/zontreck/libzontreck/vectors/Vector2i.java b/src/main/java/dev/zontreck/libzontreck/vectors/Vector2i.java index e782c7b..a812be6 100644 --- a/src/main/java/dev/zontreck/libzontreck/vectors/Vector2i.java +++ b/src/main/java/dev/zontreck/libzontreck/vectors/Vector2i.java @@ -1,11 +1,10 @@ package dev.zontreck.libzontreck.vectors; import dev.zontreck.libzontreck.api.Vector2; -import dev.zontreck.libzontreck.exceptions.InvalidDeserialization; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.phys.Vec2; -public class Vector2i implements Vector2 +public class Vector2i implements Vector2 { public static final Vector2i ZERO = new Vector2i(0, 0); @@ -121,8 +120,8 @@ public class Vector2i implements Vector2 } @Override - public Vector2d asVector2d() { - return new Vector2d(x,y); + public Vector2f asVector2f() { + return new Vector2f(x,y); } @Override @@ -185,4 +184,15 @@ public class Vector2i implements Vector2 public Vector2i moveDown() { return subtract(new Vector2i(0,1)); } + + + @Override + public Integer getX() { + return x; + } + + @Override + public Integer getY() { + return y; + } } diff --git a/src/main/java/dev/zontreck/libzontreck/vectors/Vector3d.java b/src/main/java/dev/zontreck/libzontreck/vectors/Vector3d.java index 09b90e4..eaaa44e 100644 --- a/src/main/java/dev/zontreck/libzontreck/vectors/Vector3d.java +++ b/src/main/java/dev/zontreck/libzontreck/vectors/Vector3d.java @@ -10,7 +10,7 @@ import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.phys.Vec3; -public class Vector3d implements Vector3 +public class Vector3d implements Vector3 { public static final Vector3d ZERO = new Vector3d(0, 0, 0); @@ -219,4 +219,19 @@ public class Vector3d implements Vector3 { return Same(other); } + + @Override + public Double getX() { + return x; + } + + @Override + public Double getY() { + return y; + } + + @Override + public Double getZ() { + return z; + } } diff --git a/src/main/java/dev/zontreck/libzontreck/vectors/Vector3i.java b/src/main/java/dev/zontreck/libzontreck/vectors/Vector3i.java index 9916470..5efecaf 100644 --- a/src/main/java/dev/zontreck/libzontreck/vectors/Vector3i.java +++ b/src/main/java/dev/zontreck/libzontreck/vectors/Vector3i.java @@ -10,7 +10,7 @@ import net.minecraft.world.phys.Vec3; import java.util.ArrayList; import java.util.List; -public class Vector3i implements Vector3 +public class Vector3i implements Vector3 { public static final Vector3i ZERO = new Vector3i(0, 0, 0); @@ -212,4 +212,19 @@ public class Vector3i implements Vector3 { return Same(other); } + + @Override + public Integer getX() { + return x; + } + + @Override + public Integer getY() { + return y; + } + + @Override + public Integer getZ() { + return z; + } } diff --git a/src/main/java/dev/zontreck/libzontreck/vectors/WorldPosition.java b/src/main/java/dev/zontreck/libzontreck/vectors/WorldPosition.java index 1fc09cd..add4d2b 100644 --- a/src/main/java/dev/zontreck/libzontreck/vectors/WorldPosition.java +++ b/src/main/java/dev/zontreck/libzontreck/vectors/WorldPosition.java @@ -121,7 +121,7 @@ public class WorldPosition { public ChunkPos getChunkPos() { net.minecraft.world.level.ChunkPos mcChunk = getActualDimension().getChunkAt(Position.asBlockPos()).getPos(); ChunkPos pos = new ChunkPos(new Vector3d(mcChunk.getMinBlockX(), -70, mcChunk.getMinBlockZ()), new Vector3d(mcChunk.getMaxBlockX(), 400, mcChunk.getMaxBlockZ()), getActualDimension()); - pos.centerPoints = new Vector2d(mcChunk.getMiddleBlockX(), mcChunk.getMiddleBlockZ()); + pos.centerPoints = new Vector2f(mcChunk.getMiddleBlockX(), mcChunk.getMiddleBlockZ()); return pos; }