diff --git a/api/src/main/java/com/seibel/lod/api/objects/data/DhApiRaycastResult.java b/api/src/main/java/com/seibel/lod/api/objects/data/DhApiRaycastResult.java
new file mode 100644
index 000000000..dcc9c300f
--- /dev/null
+++ b/api/src/main/java/com/seibel/lod/api/objects/data/DhApiRaycastResult.java
@@ -0,0 +1,36 @@
+package com.seibel.lod.api.objects.data;
+
+import com.seibel.lod.api.objects.math.DhApiVec3i;
+import com.seibel.lod.core.util.math.Vec3i;
+
+/**
+ * Holds a single datapoint of terrain data
+ * and the block position from the raycast.
+ *
+ * @author James Seibel
+ * @version 2022-11-19
+ */
+public class DhApiRaycastResult
+{
+ /**
+ * LOD position of this raycast.
+ *
+ * Note:
+ * This will NOT be the block position for the given raycast
+ * if the LOD is more than one block tall. In that case this will
+ * be the bottom block position for that LOD.
+ */
+ public final DhApiVec3i pos;
+
+ /** The LOD data at this position. */
+ public final DhApiTerrainDataPoint dataPoint;
+
+
+
+ public DhApiRaycastResult(DhApiTerrainDataPoint dataPoint, Vec3i blockPos)
+ {
+ this.dataPoint = dataPoint;
+ this.pos = blockPos;
+ }
+
+}
diff --git a/api/src/main/java/com/seibel/lod/api/objects/math/DhApiVec3i.java b/api/src/main/java/com/seibel/lod/api/objects/math/DhApiVec3i.java
new file mode 100644
index 000000000..4f6d5b022
--- /dev/null
+++ b/api/src/main/java/com/seibel/lod/api/objects/math/DhApiVec3i.java
@@ -0,0 +1,94 @@
+/*
+ * This file is part of the Distant Horizons mod (formerly the LOD Mod),
+ * licensed under the GNU LGPL v3 License.
+ *
+ * Copyright (C) 2020-2022 James Seibel
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see .
+ */
+
+package com.seibel.lod.api.objects.math;
+
+import com.seibel.lod.core.util.MathUtil;
+
+/**
+ * Often used to store block positions or any other
+ * position in 3D space.
+ *
+ * @author James Seibel
+ * @version 2022-11-19
+ */
+public class DhApiVec3i
+{
+ public int x;
+ public int y;
+ public int z;
+
+
+
+ /** creates a Vec3 at (0,0,0) */
+ public DhApiVec3i()
+ {
+ this.x = 0;
+ this.y = 0;
+ this.z = 0;
+ }
+
+ public DhApiVec3i(int x, int y, int z)
+ {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+ else if (obj != null && this.getClass() == obj.getClass())
+ {
+ DhApiVec3i Vec3f = (DhApiVec3i) obj;
+ if (Float.compare(Vec3f.x, this.x) != 0)
+ {
+ return false;
+ }
+ else if (Float.compare(Vec3f.y, this.y) != 0)
+ {
+ return false;
+ }
+ else
+ {
+ return Float.compare(Vec3f.z, this.z) == 0;
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int i = Float.floatToIntBits(this.x);
+ i = 31 * i + Float.floatToIntBits(this.y);
+ return 31 * i + Float.floatToIntBits(this.z);
+ }
+
+ @Override
+ public String toString() { return "[" + this.x + ", " + this.y + ", " + this.z + "]"; }
+
+}
diff --git a/api/src/main/java/com/seibel/lod/core/util/math/Vec3i.java b/api/src/main/java/com/seibel/lod/core/util/math/Vec3i.java
index dc0d2c6a2..ebcf05439 100644
--- a/api/src/main/java/com/seibel/lod/core/util/math/Vec3i.java
+++ b/api/src/main/java/com/seibel/lod/core/util/math/Vec3i.java
@@ -19,6 +19,7 @@
package com.seibel.lod.core.util.math;
+import com.seibel.lod.api.objects.math.DhApiVec3i;
import com.seibel.lod.core.util.MathUtil;
/**
@@ -26,9 +27,9 @@ import com.seibel.lod.core.util.MathUtil;
* implementation of a 3 element integer vector.
*
* @author James Seibel
- * @version 11-11-2021
+ * @version 2022-11-19
*/
-public class Vec3i
+public class Vec3i extends DhApiVec3i // extends the API object so it can be returned through the API
{
public static Vec3i XNeg = new Vec3i(-1, 0, 0);
public static Vec3i XPos = new Vec3i(1, 0, 0);
@@ -37,16 +38,15 @@ public class Vec3i
public static Vec3i ZNeg = new Vec3i(0, 0, -1);
public static Vec3i ZPos = new Vec3i(0, 0, 1);
-
- public int x;
- public int y;
- public int z;
+ // x,y,z variables are handled in the parent object
public Vec3i()
{
-
+ this.x = 0;
+ this.y = 0;
+ this.z = 0;
}
public Vec3i(int x, int y, int z)
@@ -56,42 +56,7 @@ public class Vec3i
this.z = z;
}
- @Override
- public boolean equals(Object obj)
- {
- if (this == obj)
- {
- return true;
- }
- else if (obj != null && this.getClass() == obj.getClass())
- {
- Vec3i Vec3f = (Vec3i) obj;
- if (Float.compare(Vec3f.x, this.x) != 0)
- {
- return false;
- }
- else if (Float.compare(Vec3f.y, this.y) != 0)
- {
- return false;
- }
- else
- {
- return Float.compare(Vec3f.z, this.z) == 0;
- }
- }
- else
- {
- return false;
- }
- }
- @Override
- public int hashCode()
- {
- int i = Float.floatToIntBits(this.x);
- i = 31 * i + Float.floatToIntBits(this.y);
- return 31 * i + Float.floatToIntBits(this.z);
- }
public void mul(float scalar)
{
@@ -181,18 +146,9 @@ public class Vec3i
- @Override
- public String toString()
- {
- return "[" + this.x + ", " + this.y + ", " + this.z + "]";
- }
-
// Forge start
- public Vec3i(int[] values)
- {
- set(values);
- }
+ public Vec3i(int[] values) { this.set(values); }
public void set(int[] values)
{
@@ -200,4 +156,5 @@ public class Vec3i
this.y = values[1];
this.z = values[2];
}
+
}