aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/rift/EnigmaSoulWaypoints.kt66
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/rift/RiftRegion.kt13
3 files changed, 72 insertions, 9 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
index 2ba491953..9739e4aa5 100644
--- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
+++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
@@ -309,7 +309,7 @@ class SkyHanniMod {
loadModule(RiftLarva())
loadModule(RiftOdonata())
loadModule(RiftAgaricusCap())
- loadModule(EnigmaSoulWaypoints())
+ loadModule(EnigmaSoulWaypoints)
init()
diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/EnigmaSoulWaypoints.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/EnigmaSoulWaypoints.kt
index 7f5c901a6..5abbc22ee 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/rift/EnigmaSoulWaypoints.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/rift/EnigmaSoulWaypoints.kt
@@ -2,40 +2,85 @@ package at.hannibal2.skyhanni.features.rift
import at.hannibal2.skyhanni.events.*
import at.hannibal2.skyhanni.test.GriffinUtils.drawWaypointFilled
+import at.hannibal2.skyhanni.utils.ItemUtils.getLore
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.NEUItems
import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText
import at.hannibal2.skyhanni.utils.RenderUtils.highlight
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
+import io.github.moulberry.notenoughupdates.events.ReplaceItemEvent
import io.github.moulberry.notenoughupdates.events.SlotClickEvent
+import io.github.moulberry.notenoughupdates.util.Utils
import net.minecraft.client.gui.inventory.GuiChest
+import net.minecraft.client.player.inventory.ContainerLocalMenu
+import net.minecraft.init.Blocks
import net.minecraft.inventory.ContainerChest
+import net.minecraft.item.ItemStack
import net.minecraftforge.client.event.RenderWorldLastEvent
import net.minecraftforge.fml.common.eventhandler.EventPriority
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-class EnigmaSoulWaypoints {
+object EnigmaSoulWaypoints {
private var inInventory = false
- private val soulLocations = mutableMapOf<String, LorenzVec>()
+ private val soulLocations = mutableMapOf<String, Pair<LorenzVec, RiftRegion>>()
private val trackedSouls = mutableListOf<String>()
+ private val inventoryUnfound = mutableListOf<String>()
+ private var adding = true
+
+ private val item by lazy {
+ val neuItem = NEUItems.getItemStackOrNull("SKYBLOCK_ENIGMA_SOUL") ?: ItemStack(Blocks.obsidian) // can prob have a better fallback
+ Utils.createItemStack(neuItem.item, "§5Toggle Missing", "§7Click here to toggle", "§7the waypoints for each", "§7missing souls on this page")
+ }
+
+ @SubscribeEvent
+ fun replaceItem(event: ReplaceItemEvent) {
+ if (inventoryUnfound.isEmpty()) return
+ if (event.inventory is ContainerLocalMenu && inInventory && event.slotNumber == 31) {
+ event.replaceWith(item)
+ }
+ }
@SubscribeEvent
fun onInventoryOpen(event: InventoryOpenEvent) {
inInventory = false
- if (event.inventoryName.contains("Enigma Souls")) inInventory = true
+ if (!event.inventoryName.contains("Enigma Souls")) return
+ inInventory = true
+
+ for (stack in event.inventoryItems.values) {
+ val split = stack.displayName.split("Enigma: ")
+ if (split.size == 2) {
+ if (stack.getLore().last() == "§8✖ Not completed yet!") {
+ inventoryUnfound.add(split.last())
+ }
+ }
+ }
}
@SubscribeEvent
fun onInventoryClose(event: InventoryCloseEvent) {
inInventory = false
+ inventoryUnfound.clear()
+ adding = true
}
@SubscribeEvent(priority = EventPriority.HIGH)
fun onSlotClick(event: SlotClickEvent) {
if (!inInventory || !RiftAPI.inRift()) return
+ if (event.slotId == 31 && inventoryUnfound.isNotEmpty()) {
+ event.isCanceled = true
+ if (adding) {
+ trackedSouls.addAll(inventoryUnfound)
+ adding = false
+ } else {
+ trackedSouls.removeAll(inventoryUnfound)
+ adding = true
+ }
+ }
+
val split = event.slot.stack.displayName.split("Enigma: ")
if (split.size == 2) {
event.isCanceled = true // maybe change to a middle click
@@ -69,14 +114,17 @@ class EnigmaSoulWaypoints {
}
}
}
+ if (!adding) {
+ chest.inventorySlots[31] highlight LorenzColor.DARK_PURPLE
+ }
}
@SubscribeEvent
fun onRenderWorld(event: RenderWorldLastEvent) {
if (!RiftAPI.inRift()) return
for (soul in trackedSouls) {
- soulLocations[soul]?.let { event.drawWaypointFilled(it, LorenzColor.DARK_PURPLE.toColor(), true, true) }
- soulLocations[soul]?.let { event.drawDynamicText(it.add(0, 1, 0), "§5$soul Soul", 1.0) }
+ soulLocations[soul]?.let { event.drawWaypointFilled(it.first, LorenzColor.DARK_PURPLE.toColor(), true, true) }
+ soulLocations[soul]?.let { event.drawDynamicText(it.first.add(0, 1, 0), "§5$soul Soul", 1.0) }
}
}
@@ -85,6 +133,7 @@ class EnigmaSoulWaypoints {
val data = event.getConstant("EnigmaSouls") ?: return
for (area in data.entrySet()) {
+ val region = RiftRegion.values().firstOrNull {it.areaName == area.key.toString()} ?: continue
val element = area.value.asJsonArray
for (i in 0 until element.size()) {
@@ -93,7 +142,8 @@ class EnigmaSoulWaypoints {
val position = itemObject["position"].asString
val split = position.split(", ")
if (split.size == 3) {
- soulLocations[name] = LorenzVec(split[0].toDouble(), split[1].toDouble(), split[2].toDouble())
+ val location = LorenzVec(split[0].toDouble(), split[1].toDouble(), split[2].toDouble())
+ soulLocations[name] = Pair(location, region)
}
}
}
@@ -114,9 +164,9 @@ class EnigmaSoulWaypoints {
var closestDistance = 8.0
for (soul in soulLocations) {
- if (soul.value.distanceToPlayer() < closestDistance) {
+ if (soul.value.first.distanceToPlayer() < closestDistance) {
closestSoul = soul.key
- closestDistance = soul.value.distanceToPlayer()
+ closestDistance = soul.value.first.distanceToPlayer()
}
}
trackedSouls.remove(closestSoul)
diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftRegion.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftRegion.kt
new file mode 100644
index 000000000..c18c05532
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftRegion.kt
@@ -0,0 +1,13 @@
+package at.hannibal2.skyhanni.features.rift
+
+enum class RiftRegion(val areaName: String, vararg val aliases: String) {
+ WYLD_WOODS("Wyld Woods", "wyld", "woods"),
+ BLACK_LAGOON("Black Lagoon", "lagoon", "black"),
+ WEST_VILLAGE("West Village", "west"),
+ DREADFARM("Dreadfarm", "dreadfarm"),
+ VILLAGE_PLAZA("Village Plaza", "plaza", "villagePlaza"),
+ LIVING_CAVE("Living Cave", "living", "cave"),
+ COLOSSEUM("Colosseum", "collosseum"),
+ STILLGORE_CHATEAU("Stillgore Château", "stillgore", "chateau"),
+ MOUNTAINTOP("Mountaintop")
+} \ No newline at end of file