diff options
3 files changed, 77 insertions, 44 deletions
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 818f626e..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,6 +25,7 @@ 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; @@ -249,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); diff --git a/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/GlaciteTunnelWaypoints.kt b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/GlaciteTunnelWaypoints.kt index 7def2809..cb4c8377 100644 --- a/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/GlaciteTunnelWaypoints.kt +++ b/src/main/kotlin/io/github/moulberry/notenoughupdates/miscfeatures/GlaciteTunnelWaypoints.kt @@ -19,71 +19,54 @@ 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 -class GlaciteTunnelWaypoints { +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 waypointsForQuest: Map<String, Waypoints> = mapOf( - "Onyx Gemstone Collector" to Waypoints( - "§0Onyx Gemstone Mine", - listOf( - BlockPos(-68, 130, 407), - BlockPos(9, 137, 412), - BlockPos(-17, 133, 393), - BlockPos(12, 137, 365), - BlockPos(23, 137, 386), - BlockPos(79, 119, 412), - ) - ), - "Aquamarine Gemstone Collector" to Waypoints( - "§3Aquamarine Gemstone Mine", - listOf( - BlockPos(-3, 139, 437), - BlockPos(72, 151, 387), - BlockPos(86, 150, 323), - BlockPos(50, 117, 302), - ) - ), - "Peridot Gemstone Collector" to Waypoints( - "§2Peridot Gemstone Mine", - listOf( - BlockPos(-76, 120, 281), - BlockPos(91, 122, 393), - BlockPos(-61, 147, 301), - BlockPos(-74, 122, 459), - ) - ), - "Citrine Gemstone Collector" to Waypoints( - "§6Citrine Gemstone Mine", - listOf( - BlockPos(-95, 145, 258), - BlockPos(-57, 144, 422), - BlockPos(37, 119, 387), - BlockPos(-46, 127, 411), - ) - ), - ) + 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) { 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 + } +} |