From dae9cafbcbd46751311d377b38b4d9ccf3e8f51b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Thu, 22 Feb 2024 21:56:23 +0100 Subject: Saving every diana burrow location and option to show them. #938 --- .../features/event/diana/AllBurrowsList.kt | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/event/diana/AllBurrowsList.kt (limited to 'src/main/java/at/hannibal2/skyhanni/features') diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/AllBurrowsList.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/AllBurrowsList.kt new file mode 100644 index 000000000..f28c4966f --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/AllBurrowsList.kt @@ -0,0 +1,80 @@ +package at.hannibal2.skyhanni.features.event.diana + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.BurrowDetectEvent +import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent +import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.utils.ChatUtils +import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer +import at.hannibal2.skyhanni.utils.LorenzColor +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzVec +import at.hannibal2.skyhanni.utils.OSUtils +import at.hannibal2.skyhanni.utils.RenderUtils.drawColor +import kotlinx.coroutines.launch +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object AllBurrowsList { + private var list = listOf() + private val config get() = SkyHanniMod.feature.event.diana.allBurrowsList + private val burrowLocations get() = SkyHanniMod.feature.storage?.foundDianaBurrowLocations + + @SubscribeEvent + fun onBurrowDetect(event: BurrowDetectEvent) { + if (!isEnabled()) return + burrowLocations?.add(event.burrowLocation) + } + + @SubscribeEvent + fun onTick(event: LorenzTickEvent) { + if (!isEnabled()) return + if (!event.repeatSeconds(1)) return + val burrowLocations = burrowLocations ?: return + + val range = 5..70 + list = burrowLocations.asSequence().map { it to it.distanceToPlayer() } + .filter { it.second.toInt() in range } + .sortedBy { it.second } + .map { it.first } + .take(25).toList() + } + + fun copyToClipboard() { + val burrowLocations = burrowLocations ?: return + val list = burrowLocations.map { it.printWithAccuracy(0, ":") } + OSUtils.copyToClipboard(list.joinToString(";")) + LorenzUtils.chat("Saved all ${list.size} burrow locations to clipboard.") + } + + fun addFromClipboard() { + SkyHanniMod.coroutineScope.launch { + val text = OSUtils.readFromClipboard() ?: return@launch + val burrowLocations = burrowLocations ?: return@launch + + var new = 0 + var duplicate = 0 + for (raw in text.split(";")) { + val location = LorenzVec.decodeFromString(raw) + if (location !in burrowLocations) { + burrowLocations.add(location) + new++ + } else { + duplicate++ + } + } + ChatUtils.chat("Added $new new burrow locations, $duplicate are duplicate.") + } + } + + @SubscribeEvent + fun onRenderWorld(event: LorenzRenderWorldEvent) { + if (!isEnabled()) return + if (!config.showAll) return + + for (location in list) { + event.drawColor(location, LorenzColor.DARK_AQUA) + } + } + + fun isEnabled() = DianaAPI.isDoingDiana() && config.save +} -- cgit