Skip to content

Commit

Permalink
Feature: Price per Stock of Stonks (#2195)
Browse files Browse the repository at this point in the history
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
  • Loading branch information
Thunderblade73 and hannibal002 authored Jul 31, 2024
1 parent 2b722de commit d7e8075
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 0 deletions.
1 change: 1 addition & 0 deletions .idea/dictionaries/default_user.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -257,4 +257,10 @@ public String toString() {
@ConfigEditorBoolean
@FeatureToggle
public boolean timeHeldInLore = false;

@Expose
@ConfigOption(name = "Stonk of Stonk Price", desc = "Show Price per Stonk when taking the minimum bid in Stonks Auction (Richard).")
@ConfigEditorBoolean
@FeatureToggle
public boolean stonkOfStonkPrice = true;
}
Original file line number Diff line number Diff line change
@@ -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
}
5 changes: 5 additions & 0 deletions src/main/java/at/hannibal2/skyhanni/utils/CollectionUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,11 @@ object CollectionUtils {
return newList
}

inline fun <reified T, reified K : MutableList<T>> K.transformAt(index: Int, transform: T.() -> T): K {
this[index] = transform(this[index])
return this
}

/**
* This does not work inside a [buildList] block
*/
Expand Down

0 comments on commit d7e8075

Please sign in to comment.