diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/garden/GardenOptimalSpeed.kt | 1 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/minion/MinionCollectLogic.kt | 66 |
2 files changed, 66 insertions, 1 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenOptimalSpeed.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenOptimalSpeed.kt index a1c632725..de36c15a8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenOptimalSpeed.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenOptimalSpeed.kt @@ -39,7 +39,6 @@ class GardenOptimalSpeed { } } - @SubscribeEvent fun onGuiOpen(event: GuiOpenEvent) { rancherOverlayList = CropType.values().map { crop -> diff --git a/src/main/java/at/hannibal2/skyhanni/features/minion/MinionCollectLogic.kt b/src/main/java/at/hannibal2/skyhanni/features/minion/MinionCollectLogic.kt new file mode 100644 index 000000000..d6f971ec3 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/minion/MinionCollectLogic.kt @@ -0,0 +1,66 @@ +package at.hannibal2.skyhanni.features.minion + +import at.hannibal2.skyhanni.api.CollectionAPI +import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.events.GuiContainerEvent +import at.hannibal2.skyhanni.events.InventoryOpenEvent +import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NEUItems +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class MinionCollectLogic { + private var oldMap = mapOf<String, Int>() + + @SubscribeEvent + fun onInventoryOpen(event: InventoryOpenEvent) { + if (!LorenzUtils.inSkyBlock) return + if (LorenzUtils.skyBlockIsland != IslandType.PRIVATE_ISLAND) return + if (!event.inventoryName.contains(" Minion ")) return + + event.inventoryItems[48]?.let { + if ("§aCollect All" == it.name) { + openMinion() + } + } + } + + private fun openMinion() { + if (oldMap.isNotEmpty()) return + oldMap = count() + } + + private fun count(): MutableMap<String, Int> { + val map = mutableMapOf<String, Int>() + for (stack in InventoryUtils.getItemsInOwnInventory()) { + val internalName = stack.getInternalName() + val (newId, amount) = NEUItems.getMultiplier(internalName) + val old = map[newId] ?: 0 + map[newId] = old + amount * stack.stackSize + } + return map + } + + // hypixel opens a new inventory after clicking on an item in minion inventory, InventoryCloseEvent is not usable here + @SubscribeEvent + fun onCloseWindow(event: GuiContainerEvent.CloseWindowEvent) { + closeMinion() + } + + private fun closeMinion() { + if (oldMap.isEmpty()) return + + for ((internalId, amount) in count()) { + val old = oldMap[internalId] ?: 0 + val diff = amount - old + + if (diff > 0) { + CollectionAPI.addFromInventory(internalId, diff) + } + } + + oldMap = emptyMap() + } +}
\ No newline at end of file |