aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/bazaar
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-09-16 12:34:18 +0200
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-09-16 12:34:18 +0200
commit4293cfd919c3c93d4532534f722c407d7ad1370d (patch)
treef9f612f021ef7f4283d74312edfaca30badc6749 /src/main/java/at/hannibal2/skyhanni/features/bazaar
parent538e3ceb76f8e0b590291ce9aa90aa94896cdcb6 (diff)
parent024ba52fb69b6cd44b4e31542867f802de656f15 (diff)
downloadSkyHanni-cum.tar.gz
SkyHanni-cum.tar.bz2
SkyHanni-cum.zip
Merge branch 'beta' into cumcum
# Conflicts: # src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt # src/main/java/at/hannibal2/skyhanni/config/features/AshfangConfig.java
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/bazaar')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarApi.kt18
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarBestSellMethod.kt54
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarOpenPriceWebsite.kt65
3 files changed, 112 insertions, 25 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarApi.kt b/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarApi.kt
index d17a3dc6b..dfc69dee8 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarApi.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarApi.kt
@@ -21,6 +21,8 @@ class BazaarApi {
var inBazaarInventory = false
private var currentSearchedItem = ""
+ var currentlyOpenedProduct: NEUInternalName? = null
+
fun getBazaarDataByName(name: String): BazaarData? = NEUItems.getInternalNameOrNull(name)?.getBazaarData()
fun NEUInternalName.getBazaarData() = if (isBazaarItem()) {
@@ -45,6 +47,21 @@ class BazaarApi {
@SubscribeEvent
fun onInventoryOpen(event: InventoryFullyOpenedEvent) {
inBazaarInventory = checkIfInBazaar(event)
+ if (inBazaarInventory) {
+ val openedProduct = getOpenedProduct(event.inventoryItems) ?: return
+ currentlyOpenedProduct = openedProduct
+ BazaarOpenedProductEvent(openedProduct, event).postAndCatch()
+ }
+ }
+
+ private fun getOpenedProduct(inventoryItems: Map<Int, ItemStack>): NEUInternalName? {
+ val buyInstantly = inventoryItems[10] ?: return null
+
+ if (buyInstantly.displayName != "§aBuy Instantly") return null
+ val bazaarItem = inventoryItems[13] ?: return null
+
+ val itemName = bazaarItem.displayName
+ return NEUItems.getInternalNameOrNull(itemName)
}
@SubscribeEvent
@@ -118,5 +135,6 @@ class BazaarApi {
@SubscribeEvent
fun onInventoryClose(event: InventoryCloseEvent) {
inBazaarInventory = false
+ currentlyOpenedProduct = null
}
} \ No newline at end of file
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
diff --git a/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarOpenPriceWebsite.kt b/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarOpenPriceWebsite.kt
new file mode 100644
index 000000000..b39809125
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/bazaar/BazaarOpenPriceWebsite.kt
@@ -0,0 +1,65 @@
+package at.hannibal2.skyhanni.features.bazaar
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.utils.NEUInternalName
+import at.hannibal2.skyhanni.utils.NEUItems
+import at.hannibal2.skyhanni.utils.OSUtils
+import at.hannibal2.skyhanni.utils.SimpleTimeMark
+import io.github.moulberry.notenoughupdates.events.ReplaceItemEvent
+import io.github.moulberry.notenoughupdates.events.SlotClickEvent
+import io.github.moulberry.notenoughupdates.util.Utils
+import net.minecraft.entity.player.InventoryPlayer
+import net.minecraftforge.fml.common.eventhandler.EventPriority
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import kotlin.time.Duration.Companion.seconds
+
+class BazaarOpenPriceWebsite {
+ private val config get() = SkyHanniMod.feature.bazaar
+ private var lastClick = SimpleTimeMark.farPast()
+
+ private val item by lazy {
+ val neuItem = NEUItems.getItemStack("PAPER", true)
+ Utils.createItemStack(
+ neuItem.item,
+ "§bPrice History",
+ "§7Click here to open",
+ "§7the price history",
+ "§7on §cskyblock.bz"
+ )
+ }
+
+ @SubscribeEvent
+ fun replaceItem(event: ReplaceItemEvent) {
+ if (!isEnabled()) return
+ BazaarApi.currentlyOpenedProduct ?: return
+ if (event.inventory is InventoryPlayer) return
+
+ if (event.slotNumber == 22) {
+ event.replaceWith(item)
+ }
+ }
+
+ @SubscribeEvent(priority = EventPriority.HIGH)
+ fun onStackClick(event: SlotClickEvent) {
+ if (!isEnabled()) return
+ val lastItem = BazaarApi.currentlyOpenedProduct ?: return
+
+ if (event.slotId == 22) {
+ event.isCanceled = true
+ if (lastClick.passedSince() > 0.3.seconds) {
+ val name = getSkyBlockBzName(lastItem)
+ OSUtils.openBrowser("https://www.skyblock.bz/product/$name")
+ lastClick = SimpleTimeMark.now()
+ }
+ }
+ }
+
+ private fun getSkyBlockBzName(internalName: NEUInternalName): String {
+ val name = internalName.asString()
+ return if (name.contains(";")) {
+ "ENCHANTMENT_" + name.replace(";", "_")
+ } else name
+ }
+
+ fun isEnabled() = config.openPriceWebsite
+} \ No newline at end of file