diff options
author | Walker Selby <git@walkerselby.com> | 2023-12-11 12:08:24 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-11 21:08:24 +0100 |
commit | 9a5d44a2a68a20429b5d66328f1e2a3a7cfca03b (patch) | |
tree | f18bd603f3a137c49cc5686e37eccce236cdcfd1 /src/main/java/at/hannibal2/skyhanni/features/stranded | |
parent | 5938c9a1220a390d930adf9067c606c7f0d1c667 (diff) | |
download | skyhanni-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.kt | 69 |
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 +} |