From 93229bf2caa30de689664b665b58ee59949137fc Mon Sep 17 00:00:00 2001 From: saga <45262877+saga-00@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:03:22 -0300 Subject: Feature: Favorite Power Stones (#2002) Co-authored-by: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Co-authored-by: Cal Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../features/inventory/FavoritePowerStone.kt | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/inventory/FavoritePowerStone.kt (limited to 'src/main/java/at/hannibal2/skyhanni/features') diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/FavoritePowerStone.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/FavoritePowerStone.kt new file mode 100644 index 000000000..91727dc01 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/FavoritePowerStone.kt @@ -0,0 +1,75 @@ +package at.hannibal2.skyhanni.features.inventory + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.MaxwellAPI +import at.hannibal2.skyhanni.data.ProfileStorageData +import at.hannibal2.skyhanni.events.GuiContainerEvent +import at.hannibal2.skyhanni.events.InventoryCloseEvent +import at.hannibal2.skyhanni.events.InventoryOpenEvent +import at.hannibal2.skyhanni.events.InventoryUpdatedEvent +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.KeyboardManager +import at.hannibal2.skyhanni.utils.LorenzColor +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.RenderUtils.highlight +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +@SkyHanniModule +object FavoritePowerStone { + + private val config get() = SkyHanniMod.feature.inventory + private val storage get() = ProfileStorageData.profileSpecific + + private var highlightedSlots = setOf() + private var inInventory = false + + @SubscribeEvent + fun onBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) { + if (!isEnabled() || !inInventory) return + + highlightedSlots.forEach { event.gui.inventorySlots.inventorySlots[it] highlight LorenzColor.AQUA } + } + + @SubscribeEvent + fun onSlotClick(event: GuiContainerEvent.SlotClickEvent) { + if (!isEnabled() || !KeyboardManager.isShiftKeyDown() || !inInventory) return + + val displayName = event.item?.name?.removeColor()?.trim() ?: return + val power = MaxwellAPI.getPowerByNameOrNull(displayName) ?: return + + if (power in MaxwellAPI.favoritePowers) { + MaxwellAPI.favoritePowers -= power + highlightedSlots -= event.slotId + } else { + MaxwellAPI.favoritePowers += power + highlightedSlots += event.slotId + } + + event.cancel() + } + + @SubscribeEvent + fun onInventoryOpen(event: InventoryOpenEvent) { + if (!isEnabled() || !MaxwellAPI.isThaumaturgyInventory(event.inventoryName)) return + + inInventory = true + } + + @SubscribeEvent + fun onInventoryUpdated(event: InventoryUpdatedEvent) { + if (!isEnabled() || !inInventory) return + + highlightedSlots = event.inventoryItems + .filter { (_, item) -> item.displayName.removeColor() in MaxwellAPI.favoritePowers } + .keys + } + + @SubscribeEvent + fun onInventoryClose(event: InventoryCloseEvent) { + inInventory = false + } + + private fun isEnabled() = LorenzUtils.inSkyBlock && storage != null && config.favoritePowerStone +} -- cgit