summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/data
diff options
context:
space:
mode:
authorCalMWolfs <94038482+CalMWolfs@users.noreply.github.com>2024-05-24 23:52:18 +1000
committerGitHub <noreply@github.com>2024-05-24 15:52:18 +0200
commit1b2325c3d4f52e20bdbe6b823106cd45025dac53 (patch)
tree1bae142b40edcfc980deca7c07f6d93e968566f4 /src/main/java/at/hannibal2/skyhanni/data
parentf7bc3f2f0786a15ce3082df4f8bb766d01b4c5ea (diff)
downloadskyhanni-1b2325c3d4f52e20bdbe6b823106cd45025dac53.tar.gz
skyhanni-1b2325c3d4f52e20bdbe6b823106cd45025dac53.tar.bz2
skyhanni-1b2325c3d4f52e20bdbe6b823106cd45025dac53.zip
Backend: Use Skyhanni events (#1557)
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/data')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/CropAccessoryData.kt121
1 files changed, 25 insertions, 96 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/data/CropAccessoryData.kt b/src/main/java/at/hannibal2/skyhanni/data/CropAccessoryData.kt
index 321e81e26..d6f1456b4 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/CropAccessoryData.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/CropAccessoryData.kt
@@ -1,7 +1,6 @@
package at.hannibal2.skyhanni.data
-import at.hannibal2.skyhanni.events.InventoryCloseEvent
-import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent
+import at.hannibal2.skyhanni.events.InventoryUpdatedEvent
import at.hannibal2.skyhanni.events.ProfileJoinEvent
import at.hannibal2.skyhanni.events.SecondPassedEvent
import at.hannibal2.skyhanni.features.garden.CropAccessory
@@ -9,128 +8,58 @@ import at.hannibal2.skyhanni.features.garden.GardenAPI
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName
import at.hannibal2.skyhanni.utils.LorenzUtils
-import at.hannibal2.skyhanni.utils.NEUItems
-import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.StringUtils.matches
import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
-import com.google.gson.JsonElement
import net.minecraft.item.ItemStack
-import net.minecraft.nbt.CompressedStreamTools
-import net.minecraftforge.client.event.GuiScreenEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-import java.io.ByteArrayInputStream
-import java.util.Base64
-class CropAccessoryData {
+object CropAccessoryData {
private val accessoryBagNamePattern by RepoPattern.pattern(
- "data.accessory.bagname",
- "Accessory Bag \\((?<current>\\d)/(?<total>\\d)\\)"
+ "data.accessory.bagname.new",
+ "Accessory Bag.*"
)
- private var loadedAccessoryThisProfile = false
- private var accessoryInBag: CropAccessory? = null
+ private var accessoryInBag = CropAccessory.NONE
private var accessoryInInventory = CropAccessory.NONE
- private var accessoryBagPageNumber = 0
-
- // Handle API detection
@SubscribeEvent
fun onProfileJoin(event: ProfileJoinEvent) {
- loadedAccessoryThisProfile = false
-
- accessoryPage.clear()
- }
-
- // Handle accessory bag detection
- @SubscribeEvent
- fun onInventoryOpen(event: InventoryFullyOpenedEvent) {
-
- // handling accessory bags with only one page
- if (event.inventoryName == "Accessory Bag") {
- isLoadingAccessories = true
- accessoryBagPageCount = 1
- accessoryBagPageNumber = 1
- return
- }
-
- accessoryBagNamePattern.matchMatcher(event.inventoryName) {
- isLoadingAccessories = true
- accessoryBagPageNumber = group("current").toInt()
- accessoryBagPageCount = group("total").toInt()
- } ?: return
+ accessoryInBag = CropAccessory.NONE
+ accessoryInInventory = CropAccessory.NONE
}
@SubscribeEvent
- fun onInventoryClose(event: InventoryCloseEvent) {
- isLoadingAccessories = false
- }
+ fun onInventoryOpen(event: InventoryUpdatedEvent) {
+ if (!accessoryBagNamePattern.matches(event.inventoryName)) return
- @SubscribeEvent
- fun onGuiDraw(event: GuiScreenEvent.DrawScreenEvent) {
- if (!isLoadingAccessories) return
- val items = runCatching {
- InventoryUtils.getItemsInOpenChest()
- }.getOrNull() ?: return
- val bestCropAccessoryPage = bestCropAccessory(items.map { it.stack })
- accessoryPage[accessoryBagPageNumber] = bestCropAccessoryPage
- if (accessoryBagPageCount == accessoryPage.size) {
- accessoryInBag = accessoryPage.values.max().also {
- cropAccessory = maxOf(it, accessoryInInventory)
- }
- loadedAccessoryThisProfile = true
+ val items = event.inventoryItems.mapNotNull { it.value }
+ val bestInPage = bestCropAccessory(items)
+ if (bestInPage > accessoryInBag) {
+ accessoryInBag = bestInPage
}
}
- // Handle inventory detection
@SubscribeEvent
fun onSecondPassed(event: SecondPassedEvent) {
if (!LorenzUtils.inSkyBlock) return
+ if (!event.repeatSeconds(5)) return
+
accessoryInInventory = bestCropAccessory(InventoryUtils.getItemsInOwnInventory())
- if (accessoryInInventory == CropAccessory.NONE) return
- if (accessoryInInventory > (accessoryInBag ?: CropAccessory.NONE)) {
- cropAccessory = accessoryInInventory
+
+ val bestAccessory = maxOf(accessoryInInventory, accessoryInBag)
+ if (bestAccessory > cropAccessory) {
+ cropAccessory = bestAccessory
}
}
- private fun bestCropAccessory(items: Iterable<ItemStack>) =
+ private fun bestCropAccessory(items: List<ItemStack>) =
items.mapNotNull { item -> CropAccessory.getByName(item.getInternalName()) }
.maxOrNull() ?: CropAccessory.NONE
- companion object {
-
- var accessoryBagPageCount = 0
- private set
-
- private var accessoryPage = mutableMapOf<Int, CropAccessory>()
-
- var isLoadingAccessories = false
- private set
-
- val pagesLoaded get() = accessoryPage.size
-
- var cropAccessory: CropAccessory?
- get() = GardenAPI.storage?.savedCropAccessory
- private set(accessory) {
- GardenAPI.storage?.savedCropAccessory = accessory
- }
-
- // Derived partially from NotEnoughUpdates/NotEnoughUpdates, ProfileViewer.Profile#getInventoryInfo
- private fun getCropAccessories(inventory: JsonElement?): MutableList<CropAccessory> {
- if (inventory == null) return mutableListOf()
- val cropAccessories = mutableListOf<CropAccessory>()
- val data = inventory.asJsonObject["data"]?.asString
- val accessoryBagItems = CompressedStreamTools.readCompressed(
- ByteArrayInputStream(Base64.getDecoder().decode(data))
- ).getTagList("i", 10)
- for (j in 0 until accessoryBagItems.tagCount()) {
- val itemStackTag = accessoryBagItems.getCompoundTagAt(j)
- if (!itemStackTag.hasKey("tag")) continue
- val itemTag = itemStackTag.getCompoundTag("tag")
- val itemName = NEUItems.getInternalNameOrNull(itemTag) ?: continue
- val itemAsCropAccessory = CropAccessory.getByName(itemName) ?: continue
- cropAccessories.add(itemAsCropAccessory)
- }
- return cropAccessories
+ var cropAccessory: CropAccessory
+ get() = GardenAPI.storage?.savedCropAccessory ?: CropAccessory.NONE
+ private set(accessory) {
+ GardenAPI.storage?.savedCropAccessory = accessory
}
- }
}