aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2024-01-26 00:12:07 -0500
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2024-05-24 19:51:15 -0400
commit92bb441b31cd72d142adee578cc253708cf0101c (patch)
tree774b4c2d6147164289513f5e9fbcc0c17c4384c7 /src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java
parent5d5d1347644a798551100d22feddc92d4049cb59 (diff)
downloadSkyblocker-92bb441b31cd72d142adee578cc253708cf0101c.tar.gz
Skyblocker-92bb441b31cd72d142adee578cc253708cf0101c.tar.bz2
Skyblocker-92bb441b31cd72d142adee578cc253708cf0101c.zip
Add NamedWaypoint and WaypointCategory
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java')
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java b/src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java
new file mode 100644
index 00000000..f35ad95d
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/waypoint/NamedWaypoint.java
@@ -0,0 +1,79 @@
+package de.hysky.skyblocker.utils.waypoint;
+
+import com.google.common.primitives.Floats;
+import com.google.gson.JsonObject;
+import com.mojang.serialization.Codec;
+import com.mojang.serialization.DataResult;
+import com.mojang.serialization.codecs.RecordCodecBuilder;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.PosUtils;
+import de.hysky.skyblocker.utils.render.RenderHelper;
+import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
+import net.minecraft.text.Text;
+import net.minecraft.text.TextCodecs;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Vec3d;
+
+import java.util.function.Supplier;
+
+public class NamedWaypoint extends Waypoint {
+ public static final Codec<NamedWaypoint> CODEC = RecordCodecBuilder.create(instance -> instance.group(
+ BlockPos.CODEC.fieldOf("pos").forGetter(secretWaypoint -> secretWaypoint.pos),
+ TextCodecs.CODEC.fieldOf("name").forGetter(secretWaypoint -> secretWaypoint.name),
+ Codec.floatRange(0, 1).listOf().comapFlatMap(
+ colorComponentsList -> colorComponentsList.size() == 3 ? DataResult.success(Floats.toArray(colorComponentsList)) : DataResult.error(() -> "Expected 3 color components, got " + colorComponentsList.size() + " instead"),
+ Floats::asList
+ ).fieldOf("colorComponents").forGetter(secretWaypoint -> secretWaypoint.colorComponents),
+ Codec.BOOL.fieldOf("shouldRender").forGetter(Waypoint::shouldRender)
+ ).apply(instance, NamedWaypoint::new));
+ protected final Text name;
+ protected final Vec3d centerPos;
+
+ public NamedWaypoint(BlockPos pos, String name, float[] colorComponents, boolean shouldRender) {
+ this(pos, Text.of(name), colorComponents, shouldRender);
+ }
+
+ public NamedWaypoint(BlockPos pos, Text name, float[] colorComponents, boolean shouldRender) {
+ this(pos, name, () -> SkyblockerConfigManager.get().general.waypoints.waypointType, colorComponents, shouldRender);
+ }
+
+ public NamedWaypoint(BlockPos pos, String name, Supplier<Type> typeSupplier, float[] colorComponents, boolean shouldRender) {
+ this(pos, Text.of(name), typeSupplier, colorComponents, shouldRender);
+ }
+
+ public NamedWaypoint(BlockPos pos, Text name, Supplier<Type> typeSupplier, float[] colorComponents) {
+ this(pos, name, typeSupplier, colorComponents, true);
+ }
+
+ public NamedWaypoint(BlockPos pos, Text name, Supplier<Type> typeSupplier, float[] colorComponents, boolean shouldRender) {
+ super(pos, typeSupplier, colorComponents, DEFAULT_HIGHLIGHT_ALPHA, DEFAULT_LINE_WIDTH, true, shouldRender);
+ this.name = name;
+ this.centerPos = pos.toCenterPos();
+ }
+
+ public static NamedWaypoint fromSkytilsJson(JsonObject waypointJson) {
+ int color = waypointJson.get("color").getAsInt();
+ return new NamedWaypoint(PosUtils.parsePosJson(waypointJson), waypointJson.get("name").getAsString(), () -> SkyblockerConfigManager.get().general.waypoints.waypointType, new float[]{((color & 0x00FF0000) >> 16) / 255f, ((color & 0x0000FF00) >> 8) / 255f, (color & 0x000000FF) / 255f}, waypointJson.get("enabled").getAsBoolean());
+ }
+
+ public Text getName() {
+ return name;
+ }
+
+ protected boolean shouldRenderName() {
+ return true;
+ }
+
+ @Override
+ public void render(WorldRenderContext context) {
+ super.render(context);
+ if (shouldRenderName()) {
+ RenderHelper.renderText(context, name, centerPos.add(0, 1, 0), true);
+ }
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return this == obj || obj instanceof NamedWaypoint waypoint && name.equals(waypoint.name);
+ }
+}