diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarBestSellMethod.kt')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarBestSellMethod.kt | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarBestSellMethod.kt b/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarBestSellMethod.kt index d6145fb63..b42a331fe 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarBestSellMethod.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarBestSellMethod.kt @@ -1,16 +1,18 @@ package at.hannibal2.skyhanni.features.bazaar import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.BazaarOpenedProductEvent import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.features.bazaar.BazaarApi.Companion.getBazaarData +import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getNameWithEnchantment import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.NEUItems +import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.RenderUtils.renderString -import net.minecraft.client.gui.inventory.GuiChest -import net.minecraft.inventory.ContainerChest +import io.github.moulberry.notenoughupdates.events.SlotClickEvent +import net.minecraft.item.ItemStack import net.minecraftforge.client.event.GuiScreenEvent import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -18,40 +20,36 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class BazaarBestSellMethod { private var display = "" + // Working with the last clicked item manually because + // the open inventory event happen while the recent clicked item in the inventory is not in the inventory or in the cursor slot + private var lastClickedItem: ItemStack? = null + private var nextCloseWillResetItem = false + @SubscribeEvent fun onInventoryClose(event: InventoryCloseEvent) { display = "" + if (lastClickedItem != null) { + if (nextCloseWillResetItem) { + lastClickedItem = null + } + nextCloseWillResetItem = !nextCloseWillResetItem + } } @SubscribeEvent - fun onGuiDraw(event: GuiScreenEvent.DrawScreenEvent.Post) { + fun onBazaarOpenedProduct(event: BazaarOpenedProductEvent) { if (!isEnabled()) return - display = getNewText(event) + display = updateDisplay(event.openedProduct) } - private fun getNewText(event: GuiScreenEvent.DrawScreenEvent.Post): String { + private fun updateDisplay(internalName: NEUInternalName): String { try { - if (event.gui !is GuiChest) return "" - val chest = (event.gui as GuiChest).inventorySlots as ContainerChest - - val inv = chest.lowerChestInventory ?: return "" - - val buyInstantly = inv.getStackInSlot(10) - if (buyInstantly == null || buyInstantly.displayName != "§aBuy Instantly") return "" - val bazaarItem = inv.getStackInSlot(13) ?: return "" - - val internalName = NEUItems.getInternalNameOrNull(bazaarItem.displayName) ?: return "" - - var having = 0 - for (slot in chest.inventorySlots) { - if (slot == null) continue - if (slot.slotNumber == slot.slotIndex) continue - val stack = slot.stack ?: continue - if (internalName == stack.getInternalName()) { - having += stack.stackSize + var having = InventoryUtils.countItemsInLowerInventory { it.getInternalName() == internalName } + lastClickedItem?.let { + if (it.getInternalName() == internalName) { + having += it.stackSize } } - if (having <= 0) return "" val data = internalName.getBazaarData() ?: return "" @@ -73,5 +71,11 @@ class BazaarBestSellMethod { SkyHanniMod.feature.bazaar.bestSellMethodPos.renderString(display, posLabel = "Bazaar Best Sell Method") } + @SubscribeEvent(priority = EventPriority.HIGH) + fun onStackClick(event: SlotClickEvent) { + lastClickedItem = event.slot?.stack + nextCloseWillResetItem = false + } + private fun isEnabled() = LorenzUtils.inSkyBlock && SkyHanniMod.feature.bazaar.bestSellMethod }
\ No newline at end of file |
