diff options
| author | CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> | 2024-05-24 23:52:18 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-24 15:52:18 +0200 |
| commit | 1b2325c3d4f52e20bdbe6b823106cd45025dac53 (patch) | |
| tree | 1bae142b40edcfc980deca7c07f6d93e968566f4 /src/main/java/at/hannibal2/skyhanni/data | |
| parent | f7bc3f2f0786a15ce3082df4f8bb766d01b4c5ea (diff) | |
| download | skyhanni-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.kt | 121 |
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 } - } } |
