diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java index 872fb8ad6ba1..05f70105900c 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java @@ -212,6 +212,12 @@ public String toString() { @FeatureToggle public boolean powerStoneGuide = true; + @Expose + @ConfigOption(name = "Favorite Power Stone", desc = "Shows your favorite power stones. You can add/remove them by shift clicking a Power Stone.") + @ConfigEditorBoolean + @FeatureToggle + public boolean favoritePowerStone = false; + @Expose @ConfigOption(name = "Shift Click Equipment", desc = "Makes normal clicks to shift clicks in equipment inventory.") @ConfigEditorBoolean diff --git a/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java b/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java index cbdc909787d8..8d8cfe0217f2 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java @@ -151,6 +151,9 @@ public static class MaxwellPowerStorage { @Expose public List tunings = new ArrayList<>(); + + @Expose + public List favoritePowers = new ArrayList<>(); } @Expose diff --git a/src/main/java/at/hannibal2/skyhanni/data/MaxwellAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/MaxwellAPI.kt index cc9a6aa43931..060181815a14 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/MaxwellAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/MaxwellAPI.kt @@ -49,6 +49,12 @@ object MaxwellAPI { storage?.maxwell?.tunings = value ?: return } + var favoritePowers: List + get() = storage?.maxwell?.favoritePowers ?: listOf() + set(value) { + storage?.maxwell?.favoritePowers = value + } + private var powers = mutableListOf() private val patternGroup = RepoPattern.group("data.maxwell") @@ -282,7 +288,7 @@ object MaxwellAPI { if (!foundMagicalPower) magicalPower = 0 } - private fun getPowerByNameOrNull(name: String) = powers.find { it == name } + fun getPowerByNameOrNull(name: String) = powers.find { it == name } private fun isEnabled() = LorenzUtils.inSkyBlock && storage != null 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 000000000000..91727dc01841 --- /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 +}