diff options
author | Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> | 2024-07-31 23:32:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-31 23:32:46 +0200 |
commit | d7e80759a90dd6c4b36a370113e2c81e78601dc6 (patch) | |
tree | e4899b418867163081202f1f970ed4579abe5844 /src/main/java/at/hannibal2/skyhanni/features | |
parent | 2b722de68f5c17481ac4c24c03a2f952623be4a9 (diff) | |
download | skyhanni-d7e80759a90dd6c4b36a370113e2c81e78601dc6.tar.gz skyhanni-d7e80759a90dd6c4b36a370113e2c81e78601dc6.tar.bz2 skyhanni-d7e80759a90dd6c4b36a370113e2c81e78601dc6.zip |
Feature: Price per Stock of Stonks (#2195)
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/inventory/StockOfStonkFeature.kt | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/StockOfStonkFeature.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/StockOfStonkFeature.kt new file mode 100644 index 000000000..4bc8af1e3 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/StockOfStonkFeature.kt @@ -0,0 +1,100 @@ +package at.hannibal2.skyhanni.features.inventory + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.InventoryCloseEvent +import at.hannibal2.skyhanni.events.InventoryOpenEvent +import at.hannibal2.skyhanni.events.LorenzToolTipEvent +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule +import at.hannibal2.skyhanni.utils.CollectionUtils.transformAt +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators +import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher +import at.hannibal2.skyhanni.utils.RegexUtils.matches +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +@SkyHanniModule +object StockOfStonkFeature { + + private val config get() = SkyHanniMod.feature.inventory + + private val repoGroup = RepoPattern.group("inventory.stockofstonks") + + + /** + * REGEX-TEST: Stonks Auction + */ + private val inventoryPattern by repoGroup.pattern( + "inventory", + "Stonks Auction", + ) + + /** + * REGEX-TEST: §dStonks Auction + */ + private val itemPattern by repoGroup.pattern( + "item", + "§dStonks Auction", + ) + + /** + * REGEX-TEST: §5§o§7§7▶ §c§lTOP 5,000§7 - §5Stock of Stonks §8x2 + */ + private val topPattern by repoGroup.pattern( + "top", + "§5§o§7§7▶ §c§lTOP (?<rank>[\\d,]+)§7 - §5Stock of Stonks §8x(?<amount>\\d+)", + ) + + /** + * REGEX-TEST: §5§o§7 Minimum Bid: §62,400,002 Coins + */ + private val bidPattern by repoGroup.pattern( + "bid", + "§5§o§7 Minimum Bid: §6(?<amount>[\\d,]+) Coins", + ) + + var inInventory = false + + @SubscribeEvent + fun onInventoryOpen(event: InventoryOpenEvent) { + if (isEnabled()) { + inInventory = inventoryPattern.matches(event.inventoryName) + } + } + + @SubscribeEvent + fun onInventoryClose(event: InventoryCloseEvent) { + inInventory = false + } + + @SubscribeEvent + fun onLorenzToolTip(event: LorenzToolTipEvent) { + if (!isEnabled()) return + if (!inInventory) return + if (!itemPattern.matches(event.itemStack.displayName)) return + var stonksReward = 0 + var index = 0 + var bestValueIndex = 0 + var bestRatio = Long.MAX_VALUE + loop@ while (index < event.toolTip.size) { + val line = event.toolTip[index] + index++ + topPattern.matchMatcher(line) { + stonksReward = group("amount").toInt() + continue@loop + } + bidPattern.matchMatcher(line) { + val cost = group("amount").replace(",", "").toLong() + val ratio = cost / stonksReward + event.toolTip[index - 1] = line + " §7(§6§6${ratio.addSeparators()} §7per)" // double §6 for the replacement at the end + if (ratio < bestRatio) { + bestValueIndex = index - 1 + bestRatio = ratio + } + } + } + event.toolTip.transformAt(bestValueIndex) { replace("§6§6", "§a") } + } + + private fun isEnabled() = LorenzUtils.inSkyBlock && config.stonkOfStonkPrice +} |