aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/stranded
diff options
context:
space:
mode:
authorWalker Selby <git@walkerselby.com>2023-12-11 12:08:24 -0800
committerGitHub <noreply@github.com>2023-12-11 21:08:24 +0100
commit9a5d44a2a68a20429b5d66328f1e2a3a7cfca03b (patch)
treef18bd603f3a137c49cc5686e37eccce236cdcfd1 /src/main/java/at/hannibal2/skyhanni/features/stranded
parent5938c9a1220a390d930adf9067c606c7f0d1c667 (diff)
downloadskyhanni-9a5d44a2a68a20429b5d66328f1e2a3a7cfca03b.tar.gz
skyhanni-9a5d44a2a68a20429b5d66328f1e2a3a7cfca03b.tar.bz2
skyhanni-9a5d44a2a68a20429b5d66328f1e2a3a7cfca03b.zip
Feature: Highlight Placeable NPCs (Stranded) (#723)
Highlights NPCs in the stranded menu that are placeable but not placed. #723
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/stranded')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/stranded/HighlightPlaceableNpcs.kt69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/stranded/HighlightPlaceableNpcs.kt b/src/main/java/at/hannibal2/skyhanni/features/stranded/HighlightPlaceableNpcs.kt
new file mode 100644
index 000000000..52c450ca4
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/stranded/HighlightPlaceableNpcs.kt
@@ -0,0 +1,69 @@
+package at.hannibal2.skyhanni.features.stranded
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.GuiContainerEvent
+import at.hannibal2.skyhanni.events.InventoryCloseEvent
+import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent
+import at.hannibal2.skyhanni.utils.InventoryUtils
+import at.hannibal2.skyhanni.utils.ItemUtils.getLore
+import at.hannibal2.skyhanni.utils.LorenzColor
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.RenderUtils.highlight
+import net.minecraftforge.fml.common.eventhandler.EventPriority
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+class HighlightPlaceableNpcs {
+ private val config get() = SkyHanniMod.feature.stranded.highlightPlaceableNpcs
+ private val locationPattern = "§7Location: §f\\[§e\\d+§f, §e\\d+§f, §e\\d+§f]".toPattern()
+
+ private var inInventory = false
+ private var highlightedItems = emptyList<Int>()
+
+ @SubscribeEvent
+ fun onInventoryOpen(event: InventoryFullyOpenedEvent) {
+ inInventory = false
+ if (!isEnabled()) return
+
+ if (event.inventoryName != "Island NPCs") return
+
+ val highlightedItems = mutableListOf<Int>()
+ for ((slot, stack) in event.inventoryItems) {
+ if (isPlaceableNpc(stack.getLore())) {
+ highlightedItems.add(slot)
+ }
+ }
+ inInventory = true
+ this.highlightedItems = highlightedItems
+ }
+
+ @SubscribeEvent
+ fun onInventoryClose(event: InventoryCloseEvent) {
+ inInventory = false
+ highlightedItems = emptyList()
+ }
+
+ @SubscribeEvent(priority = EventPriority.LOW)
+ fun onBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) {
+ if (!isEnabled() || !inInventory) return
+ for (slot in InventoryUtils.getItemsInOpenChest()) {
+ if (slot.slotIndex in highlightedItems) {
+ slot highlight LorenzColor.GREEN
+ }
+ }
+ }
+
+ private fun isPlaceableNpc(lore: List<String>): Boolean {
+ // Checking if NPC & placeable
+ if (lore.isEmpty() || !(lore.last() == "§ethis NPC!" || lore.last() == "§eyour location!")) {
+ return false
+ }
+
+ // Checking if is already placed
+ for (line in lore) {
+ if (locationPattern.matcher(line).matches()) return false
+ }
+ return true
+ }
+
+ private fun isEnabled() = LorenzUtils.inSkyBlock && config
+}