From 53caebdecfffdcb3c386bc9ae412c32e8a6c709c Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Wed, 28 Jun 2023 08:25:08 +1000 Subject: Merge pull request #258 * highlight items missing in NEU repo * fixed it detecting some wrong items * Merge branch 'hannibal002:beta' into highlight_missing_neu_items --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 1 + .../skyhanni/config/features/DevData.java | 12 ++++++ .../skyhanni/test/HighlightMissingRepoItems.kt | 50 ++++++++++++++++++++++ .../hannibal2/skyhanni/test/SkyHanniTestCommand.kt | 1 + .../java/at/hannibal2/skyhanni/utils/NEUItems.kt | 7 ++- 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/test/HighlightMissingRepoItems.kt diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index c1856c035..c63a6fe32 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -323,6 +323,7 @@ class SkyHanniMod { loadModule(PacketTest()) loadModule(TestBingo) loadModule(TestCopyRngMeterValues) + loadModule(HighlightMissingRepoItems()) } @Mod.EventHandler diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/DevData.java b/src/main/java/at/hannibal2/skyhanni/config/features/DevData.java index 77a0fcf33..1fb5a2be1 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/DevData.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/DevData.java @@ -47,6 +47,12 @@ public class DevData { @ConfigAccordionId(id = 0) public boolean showInternalName = false; + @Expose + @ConfigOption(name = "Show empty internal names", desc = "Shows internal name even if it is blank.") + @ConfigEditorBoolean + @ConfigAccordionId(id = 0) + public boolean showEmptyNames = false; + @Expose @ConfigOption(name = "Show item UUID", desc = "Show the Unique Identifier of items. in the lore.") @ConfigEditorBoolean @@ -59,6 +65,12 @@ public class DevData { @ConfigAccordionId(id = 0) public boolean copyRngMeter = false; + @Expose + @ConfigOption(name = "Highlight Missing Repo Items", desc = "Highlights each item in the current inventory that is not in your current NEU repo.") + @ConfigEditorBoolean + @ConfigAccordionId(id = 0) + public boolean highlightMissingRepo = false; + @Expose public Position debugPos = new Position(10, 10, false, true); diff --git a/src/main/java/at/hannibal2/skyhanni/test/HighlightMissingRepoItems.kt b/src/main/java/at/hannibal2/skyhanni/test/HighlightMissingRepoItems.kt new file mode 100644 index 000000000..63b552373 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/test/HighlightMissingRepoItems.kt @@ -0,0 +1,50 @@ +package at.hannibal2.skyhanni.test + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.GuiContainerEvent +import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName +import at.hannibal2.skyhanni.utils.LorenzColor +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NEUItems +import at.hannibal2.skyhanni.utils.RenderUtils.highlight +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.inventory.GuiChest +import net.minecraft.client.gui.inventory.GuiInventory +import net.minecraft.inventory.Slot +import net.minecraftforge.fml.common.eventhandler.EventPriority +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class HighlightMissingRepoItems { + + @SubscribeEvent(priority = EventPriority.LOWEST) + fun onBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) { + if (!LorenzUtils.inSkyBlock) return + if (!SkyHanniMod.feature.dev.highlightMissingRepo) return + + val gui = event.gui + + if (gui is GuiChest) { + highlightItems(gui.inventorySlots.inventorySlots) + } else if (gui is GuiInventory) { + val player = Minecraft.getMinecraft().thePlayer + highlightItems(player.inventoryContainer.inventorySlots) + } + } + + private fun highlightItems(slots: Iterable) { + if (NEUItems.allInternalNames.isEmpty()) return + for (slot in slots) { + if (!slot.hasStack) continue + val internalName = slot.stack.getInternalName() + if (internalName == "") continue + if (!NEUItems.allInternalNames.contains(internalName)) { + slot highlight LorenzColor.RED + } + } + } + + @SubscribeEvent + fun onRepoReload(event: io.github.moulberry.notenoughupdates.events.RepositoryReloadEvent) { + NEUItems.allItemsCache = NEUItems.readAllNeuItems() + } +} \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniTestCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniTestCommand.kt index d3a7e982f..d10fc49f3 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniTestCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniTestCommand.kt @@ -167,6 +167,7 @@ class SkyHanniTestCommand { val itemStack = event.itemStack if (itemStack != null) { val internalName = itemStack.getInternalName() + if (internalName == "" && !SkyHanniMod.feature.dev.showEmptyNames) return event.toolTip.add("Internal Name: '$internalName'") } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index dc98f3a0a..97f1b7ca3 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -30,7 +30,8 @@ object NEUItems { private val multiplierCache = mutableMapOf>() private val recipesCache = mutableMapOf>() private val enchantmentNamePattern = Pattern.compile("^(?(?:§.)+)(?[^§]+) (?[IVXL]+)$") - private var allItemsCache = mapOf() // item name -> internal name + var allItemsCache = mapOf() // item name -> internal name + var allInternalNames = mutableListOf() fun getInternalName(itemName: String): String { return getInternalNameOrNull(itemName) ?: throw Error("getInternalName is null for '$itemName'") @@ -53,11 +54,13 @@ object NEUItems { return null } - private fun readAllNeuItems(): Map { + fun readAllNeuItems(): Map { + allInternalNames.clear() val map = mutableMapOf() for (internalName in manager.itemInformation.keys) { val name = manager.createItem(internalName).displayName.removeColor().lowercase() map[name] = internalName + allInternalNames.add(internalName) } return map } -- cgit