aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-04-11 21:35:01 +0200
committerGitHub <noreply@github.com>2024-04-11 21:35:01 +0200
commitff8fff15ffd33392ef596bc8e393eac8207ee0d4 (patch)
tree68cb8bc1a06a3293e3611f9e1d2e6d2571cd579e
parentb90bc26a68a3392d17f9f54dbe70ddc544b61fd3 (diff)
downloadNotEnoughUpdates-ff8fff15ffd33392ef596bc8e393eac8207ee0d4.tar.gz
NotEnoughUpdates-ff8fff15ffd33392ef596bc8e393eac8207ee0d4.tar.bz2
NotEnoughUpdates-ff8fff15ffd33392ef596bc8e393eac8207ee0d4.zip
Add new Glacite Tunnel Gemstone Waypoints (#1082)
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/separatesections/Mining.java38
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java38
-rw-r--r--src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/GlaciteTunnelWaypoints.kt107
-rw-r--r--src/main/kotlin/io/github/moulberry/notenoughupdates/util/BlockPosTypeAdapter.kt51
4 files changed, 217 insertions, 17 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/separatesections/Mining.java b/src/main/java/io/github/moulberry/notenoughupdates/options/separatesections/Mining.java
index b485535e..c3d9b88d 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/options/separatesections/Mining.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/separatesections/Mining.java
@@ -20,7 +20,6 @@
package io.github.moulberry.notenoughupdates.options.separatesections;
import com.google.gson.annotations.Expose;
-import io.github.moulberry.notenoughupdates.core.config.Position;
import io.github.moulberry.moulconfig.annotations.ConfigAccordionId;
import io.github.moulberry.moulconfig.annotations.ConfigEditorAccordion;
import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean;
@@ -29,6 +28,8 @@ import io.github.moulberry.moulconfig.annotations.ConfigEditorDraggableList;
import io.github.moulberry.moulconfig.annotations.ConfigEditorDropdown;
import io.github.moulberry.moulconfig.annotations.ConfigEditorSlider;
import io.github.moulberry.moulconfig.annotations.ConfigOption;
+import io.github.moulberry.notenoughupdates.core.config.Position;
+import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
@@ -94,6 +95,41 @@ public class Mining {
@ConfigAccordionId(id = 0)
public boolean fallenStarWaypoint = true;
+ @Expose
+ @ConfigOption(
+ name = "Glacite Tunnel Waypoints",
+ desc = "Show waypoints in the Glacite Tunnels to the various gemstone locations, when you have a commission for them."
+ )
+ @ConfigEditorDropdown
+ @ConfigAccordionId(id = 0)
+ public @NotNull GlaciteTunnelWaypointBehaviour tunnelWaypoints = GlaciteTunnelWaypointBehaviour.SHOW_ALL;
+
+ @Expose
+ @ConfigOption(
+ name = "Always show Glacite Tunnel Waypoints",
+ desc = "Always show the Gemstone waypoints in the tunnels, instead of only for your current commissions."
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean alwaysShowTunnelWaypoints = false;
+
+ public enum GlaciteTunnelWaypointBehaviour {
+ SHOW_ALL("Show all"),
+ SHOW_NEAREST("Show nearest"),
+ NONE("Show none"),
+ ;
+ String text;
+
+ GlaciteTunnelWaypointBehaviour(String text) {
+ this.text = text;
+ }
+
+ @Override
+ public String toString() {
+ return text;
+ }
+ }
+
@ConfigOption(
name = "Drill Fuel Bar",
desc = ""
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java
index 8b12026d..83a860d0 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java
@@ -25,9 +25,11 @@ import io.github.moulberry.notenoughupdates.core.config.Position;
import io.github.moulberry.notenoughupdates.core.util.StringUtils;
import io.github.moulberry.notenoughupdates.core.util.lerp.LerpUtils;
import io.github.moulberry.notenoughupdates.guifeatures.SkyMallDisplay;
+import io.github.moulberry.notenoughupdates.miscfeatures.GlaciteTunnelWaypoints;
import io.github.moulberry.notenoughupdates.miscfeatures.ItemCooldowns;
import io.github.moulberry.notenoughupdates.miscfeatures.tablisttutorial.TablistAPI;
import io.github.moulberry.notenoughupdates.options.NEUConfig;
+import io.github.moulberry.notenoughupdates.options.separatesections.Mining;
import io.github.moulberry.notenoughupdates.util.ItemResolutionQuery;
import io.github.moulberry.notenoughupdates.util.SBInfo;
import io.github.moulberry.notenoughupdates.util.StarCultCalculator;
@@ -172,7 +174,7 @@ public class MiningOverlay extends TextTabOverlay {
if (line == null) {
continue;
}
- if(!line.contains("▶"))continue;
+ if (!line.contains("▶")) continue;
String cleanLine = Utils.cleanColour(line).replace("▶", "").trim();
if (cleanLine.equals("Dwarven Mines")) {
commLocation = "mining_3";
@@ -248,9 +250,7 @@ public class MiningOverlay extends TextTabOverlay {
String sideBarLoc = SBInfo.getInstance().getScoreboardLocation();
if (location.equals("mining_3")
- && (sideBarLoc.equals("Dwarven Base Camp")
- || sideBarLoc.equals("Glacite Tunnels")
- || sideBarLoc.equals("Glacite Lake"))) {
+ && (GlaciteTunnelWaypoints.INSTANCE.getGlaciteTunnelLocations().contains(sideBarLoc))) {
location = "mineshaft";
}
return NotEnoughUpdates.INSTANCE.config.getLocationSpecific(location);
@@ -265,7 +265,8 @@ public class MiningOverlay extends TextTabOverlay {
if (!NotEnoughUpdates.INSTANCE.config.mining.dwarvenOverlay &&
NotEnoughUpdates.INSTANCE.config.mining.emissaryWaypoints == 0 &&
!NotEnoughUpdates.INSTANCE.config.mining.titaniumAlert &&
- NotEnoughUpdates.INSTANCE.config.mining.locWaypoints == 0) {
+ NotEnoughUpdates.INSTANCE.config.mining.locWaypoints == 0
+ && NotEnoughUpdates.INSTANCE.config.mining.tunnelWaypoints != Mining.GlaciteTunnelWaypointBehaviour.NONE) {
return;
}
@@ -273,8 +274,8 @@ public class MiningOverlay extends TextTabOverlay {
//thanks to "Pure Genie#7250" for helping with this (makes tita alert and waypoints work without mine overlay)
if (SBInfo.getInstance().getLocation() == null) return;
if (SBInfo.getInstance().getLocation().equals("mining_3") ||
- SBInfo.getInstance().getLocation().equals("crystal_hollows") || SBInfo.getInstance().getLocation().equals(
- "mineshaft")) {
+ SBInfo.getInstance().getLocation().equals("crystal_hollows")
+ || SBInfo.getInstance().getLocation().equals("mineshaft")) {
commissionProgress.clear();
// These strings will be displayed one after the other when the player list is disabled
@@ -395,6 +396,18 @@ public class MiningOverlay extends TextTabOverlay {
}
}
+ if (ItemCooldowns.firstLoadMillis > 0) {
+ //set cooldown on first skyblock load.
+ ItemCooldowns.pickaxeUseCooldownMillisRemaining =
+ 60 * 1000 - (System.currentTimeMillis() - ItemCooldowns.firstLoadMillis);
+ ItemCooldowns.firstLoadMillis = 0;
+ }
+
+ if (!NotEnoughUpdates.INSTANCE.config.mining.dwarvenOverlay) {
+ overlayStrings = null;
+ return;
+ }
+
List<String> commissionsStrings = new ArrayList<>();
for (Map.Entry<String, Float> entry : commissionProgress.entrySet()) {
if (entry.getValue() >= 1) {
@@ -433,13 +446,6 @@ public class MiningOverlay extends TextTabOverlay {
}
}
- if (ItemCooldowns.firstLoadMillis > 0) {
- //set cooldown on first skyblock load.
- ItemCooldowns.pickaxeUseCooldownMillisRemaining =
- 60 * 1000 - (System.currentTimeMillis() - ItemCooldowns.firstLoadMillis);
- ItemCooldowns.firstLoadMillis = 0;
- }
-
String pickaxeCooldown;
if (ItemCooldowns.pickaxeUseCooldownMillisRemaining <= 0) {
pickaxeCooldown = DARK_AQUA + "Pickaxe CD: \u00a7aReady";
@@ -625,7 +631,7 @@ public class MiningOverlay extends TextTabOverlay {
if (name.equals("Glacite Collector")) return "Break ice";
if (name.equals("Onyx Gemstone Collector")) return "Break black glass";
if (name.equals("Aquamarine Gemstone Collector")) return "Break aqua glass";
- if (name.equals("Peridot Gemstone Collecto")) return "Break dark green glass";
+ if (name.equals("Peridot Gemstone Collector")) return "Break dark green glass";
if (name.equals("Citrine Gemstone Collector")) return "Break brown glass";
} else if (SBInfo.getInstance().getLocation().equals("crystal_hollows")) { // Crystal Hollows
@@ -671,7 +677,7 @@ public class MiningOverlay extends TextTabOverlay {
if (name.equals("Glacite Collector")) return "Break ice";
if (name.equals("Onyx Gemstone Collector")) return "Break black glass";
if (name.equals("Aquamarine Gemstone Collector")) return "Break aqua glass";
- if (name.equals("Peridot Gemstone Collecto")) return "Break dark green glass";
+ if (name.equals("Peridot Gemstone Collector")) return "Break dark green glass";
if (name.equals("Citrine Gemstone Collector")) return "Break brown glass";
}
diff --git a/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/GlaciteTunnelWaypoints.kt b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/GlaciteTunnelWaypoints.kt
new file mode 100644
index 00000000..cb4c8377
--- /dev/null
+++ b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/GlaciteTunnelWaypoints.kt
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2024 NotEnoughUpdates contributors
+ *
+ * This file is part of NotEnoughUpdates.
+ *
+ * NotEnoughUpdates 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, either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * NotEnoughUpdates 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 NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package io.github.moulberry.notenoughupdates.miscfeatures
+
+import com.google.gson.GsonBuilder
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates
+import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe
+import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils
+import io.github.moulberry.notenoughupdates.events.RepositoryReloadEvent
+import io.github.moulberry.notenoughupdates.options.separatesections.Mining
+import io.github.moulberry.notenoughupdates.overlays.MiningOverlay
+import io.github.moulberry.notenoughupdates.util.BlockPosTypeAdapterFactory
+import io.github.moulberry.notenoughupdates.util.SBInfo
+import io.github.moulberry.notenoughupdates.util.kotlin.KSerializable
+import io.github.moulberry.notenoughupdates.util.kotlin.KotlinTypeAdapterFactory
+import io.github.moulberry.notenoughupdates.util.kotlin.fromJson
+import net.minecraft.client.Minecraft
+import net.minecraft.util.BlockPos
+import net.minecraftforge.client.event.RenderWorldLastEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+@NEUAutoSubscribe
+object GlaciteTunnelWaypoints {
+ val glaciteTunnelLocations = setOf(
+ "Glacite Tunnels",
+ "Glacite Lake",
+ "Dwarven Base Camp",
+ "Inside the Wall",
+ "Fossil Research Center",
+ )
+
+
+ @KSerializable
+ data class Waypoints(
+ val title: String,
+ val waypoints: List<BlockPos>,
+ )
+
+ val gson = GsonBuilder().registerTypeAdapterFactory(KotlinTypeAdapterFactory)
+ .registerTypeAdapterFactory(BlockPosTypeAdapterFactory)
+ .create()
+
+ @SubscribeEvent
+ fun onRepoReload(event: RepositoryReloadEvent) {
+ val text = event.repositoryRoot.resolve("constants/glacite_tunnel_waypoints.json")
+ .takeIf { it.exists() }?.readText()
+ if (text != null) {
+ waypointsForQuest = gson.fromJson(text)
+ }
+ }
+
+ var waypointsForQuest: Map<String, Waypoints> = mapOf()
+
+ @SubscribeEvent
+ fun onRender(event: RenderWorldLastEvent) {
+ if (NotEnoughUpdates.INSTANCE.config.mining.tunnelWaypoints == Mining.GlaciteTunnelWaypointBehaviour.NONE)
+ return
+
+ if (SBInfo.getInstance().scoreboardLocation !in glaciteTunnelLocations)
+ return
+
+ val wantedGemstones = if (NotEnoughUpdates.INSTANCE.config.mining.alwaysShowTunnelWaypoints)
+ waypointsForQuest.keys
+ else
+ MiningOverlay.commissionProgress.entries.filter { it.value < 1 }.map { it.key }
+ val player = Minecraft.getMinecraft().thePlayer?.position ?: return
+ for (entry in wantedGemstones) {
+ val waypoints = waypointsForQuest[entry] ?: continue
+ val waypointLocations = when (NotEnoughUpdates.INSTANCE.config.mining.tunnelWaypoints) {
+ Mining.GlaciteTunnelWaypointBehaviour.SHOW_ALL -> {
+ waypoints.waypoints
+ }
+
+ Mining.GlaciteTunnelWaypointBehaviour.SHOW_NEAREST -> {
+ listOf(waypoints.waypoints.minByOrNull { it.distanceSq(player) })
+ }
+
+ Mining.GlaciteTunnelWaypointBehaviour.NONE -> break
+ }
+ for (waypoint in waypointLocations) {
+ if (waypoint == null) continue
+ RenderUtils.renderWayPoint(
+ waypoints.title,
+ waypoint,
+ event.partialTicks
+ )
+ }
+ }
+ }
+}
diff --git a/src/main/kotlin/io/github/moulberry/notenoughupdates/util/BlockPosTypeAdapter.kt b/src/main/kotlin/io/github/moulberry/notenoughupdates/util/BlockPosTypeAdapter.kt
new file mode 100644
index 00000000..e002d6f6
--- /dev/null
+++ b/src/main/kotlin/io/github/moulberry/notenoughupdates/util/BlockPosTypeAdapter.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2024 NotEnoughUpdates contributors
+ *
+ * This file is part of NotEnoughUpdates.
+ *
+ * NotEnoughUpdates 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, either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * NotEnoughUpdates 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 NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package io.github.moulberry.notenoughupdates.util
+
+import com.google.gson.Gson
+import com.google.gson.TypeAdapter
+import com.google.gson.TypeAdapterFactory
+import com.google.gson.reflect.TypeToken
+import com.google.gson.stream.JsonReader
+import com.google.gson.stream.JsonWriter
+import net.minecraft.util.BlockPos
+
+object BlockPosTypeAdapterFactory : TypeAdapterFactory {
+ object Adapter : TypeAdapter<BlockPos>() {
+ override fun write(out: JsonWriter, value: BlockPos) {
+ out.value("${value.x}:${value.y}:${value.z}")
+ }
+
+ override fun read(reader: JsonReader): BlockPos {
+ val (x, y, z) = reader.nextString().split(":")
+ return BlockPos(
+ x.toInt(),
+ y.toInt(),
+ z.toInt(),
+ )
+ }
+ }
+
+ override fun <T : Any?> create(gson: Gson, type: TypeToken<T>): TypeAdapter<T>? {
+ if (BlockPos::class.java.isAssignableFrom(type.rawType))
+ return Adapter as TypeAdapter<T>
+ return null
+ }
+}