diff options
Diffstat (limited to 'src')
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 + } +} |