feat: Make use of bazaar stocks for better bazaar prices
This commit is contained in:
@@ -58,7 +58,7 @@ devauth = "1.2.1"
|
||||
ktor = "3.1.2"
|
||||
|
||||
# Update from https://repo.nea.moe/#/releases/moe/nea/neurepoparser
|
||||
neurepoparser = "1.7.0"
|
||||
neurepoparser = "1.8.0"
|
||||
|
||||
# Update from https://github.com/HotswapProjects/HotswapAgent/releases
|
||||
# TODO: bump to 2.0.1
|
||||
|
||||
@@ -35,6 +35,7 @@ import moe.nea.firmament.util.SBData
|
||||
import moe.nea.firmament.util.ScreenUtil
|
||||
import moe.nea.firmament.util.SkyblockId
|
||||
import moe.nea.firmament.util.accessors.messages
|
||||
import moe.nea.firmament.util.asBazaarStock
|
||||
import moe.nea.firmament.util.collections.InstanceList
|
||||
import moe.nea.firmament.util.collections.WeakCache
|
||||
import moe.nea.firmament.util.mc.SNbtFormatter
|
||||
@@ -160,7 +161,7 @@ fun firmamentCommand() = literal("firmament") {
|
||||
thenExecute {
|
||||
val itemName = SkyblockId(get(item))
|
||||
source.sendFeedback(Text.stringifiedTranslatable("firmament.price", itemName.neuItem))
|
||||
val bazaarData = HypixelStaticData.bazaarData[itemName]
|
||||
val bazaarData = HypixelStaticData.bazaarData[itemName.asBazaarStock]
|
||||
if (bazaarData != null) {
|
||||
source.sendFeedback(Text.translatable("firmament.price.bazaar"))
|
||||
source.sendFeedback(
|
||||
|
||||
@@ -10,6 +10,7 @@ import moe.nea.firmament.repo.ItemCache.asItemStack
|
||||
import moe.nea.firmament.repo.ItemCache.isBroken
|
||||
import moe.nea.firmament.repo.RepoManager
|
||||
import moe.nea.firmament.util.MC
|
||||
import moe.nea.firmament.util.asBazaarStock
|
||||
import moe.nea.firmament.util.focusedItemStack
|
||||
import moe.nea.firmament.util.skyBlockId
|
||||
import moe.nea.firmament.util.skyblock.SBItemUtil.getSearchName
|
||||
@@ -28,7 +29,7 @@ object ItemHotkeys {
|
||||
var item = event.screen.focusedItemStack ?: return
|
||||
val skyblockId = item.skyBlockId ?: return
|
||||
item = RepoManager.getNEUItem(skyblockId)?.asItemStack()?.takeIf { !it.isBroken } ?: item
|
||||
if (HypixelStaticData.hasBazaarStock(skyblockId)) {
|
||||
if (HypixelStaticData.hasBazaarStock(skyblockId.asBazaarStock)) {
|
||||
MC.sendCommand("bz ${item.getSearchName()}")
|
||||
} else if (HypixelStaticData.hasAuctionHouseOffers(skyblockId)) {
|
||||
MC.sendCommand("ahs ${item.getSearchName()}")
|
||||
|
||||
@@ -9,6 +9,7 @@ import moe.nea.firmament.features.FirmamentFeature
|
||||
import moe.nea.firmament.gui.config.ManagedConfig
|
||||
import moe.nea.firmament.repo.HypixelStaticData
|
||||
import moe.nea.firmament.util.FirmFormatters.formatCommas
|
||||
import moe.nea.firmament.util.asBazaarStock
|
||||
import moe.nea.firmament.util.bold
|
||||
import moe.nea.firmament.util.darkGrey
|
||||
import moe.nea.firmament.util.gold
|
||||
@@ -75,7 +76,7 @@ object PriceData : FirmamentFeature {
|
||||
"firmament.tooltip.multiply.hint",
|
||||
"[${TConfig.stackSizeKey.format()}] to show x${stackSize}"
|
||||
).darkGrey()
|
||||
val bazaarData = HypixelStaticData.bazaarData[sbId]
|
||||
val bazaarData = HypixelStaticData.bazaarData[sbId?.asBazaarStock]
|
||||
val lowestBin = HypixelStaticData.lowestBin[sbId]
|
||||
val avgBinValue: Double? = when (TConfig.avgLowestBin) {
|
||||
AvgLowestBin.ONEDAYAVGLOWESTBIN -> HypixelStaticData.avg1dlowestBin[sbId]
|
||||
|
||||
@@ -27,7 +27,7 @@ object HypixelStaticData {
|
||||
private set
|
||||
var avg7dlowestBin: Map<SkyblockId, Double> = mapOf()
|
||||
private set
|
||||
var bazaarData: Map<SkyblockId, BazaarData> = mapOf()
|
||||
var bazaarData: Map<SkyblockId.BazaarStock, BazaarData> = mapOf()
|
||||
private set
|
||||
var collectionData: Map<String, CollectionSkillData> = mapOf()
|
||||
private set
|
||||
@@ -58,9 +58,10 @@ object HypixelStaticData {
|
||||
val products: Map<SkyblockId.BazaarStock, BazaarData> = mapOf(),
|
||||
)
|
||||
|
||||
fun getPriceOfItem(item: SkyblockId): Double? = bazaarData[item]?.quickStatus?.buyPrice ?: lowestBin[item]
|
||||
|
||||
fun hasBazaarStock(item: SkyblockId): Boolean {
|
||||
fun getPriceOfItem(item: SkyblockId): Double? = bazaarData[SkyblockId.BazaarStock.fromSkyBlockId(item)]?.quickStatus?.buyPrice ?: lowestBin[item]
|
||||
|
||||
fun hasBazaarStock(item: SkyblockId.BazaarStock): Boolean {
|
||||
return item in bazaarData
|
||||
}
|
||||
|
||||
@@ -105,7 +106,7 @@ object HypixelStaticData {
|
||||
if (!response.success) {
|
||||
logger.warn("Retrieved unsuccessful bazaar data")
|
||||
}
|
||||
bazaarData = response.products.mapKeys { it.key.toRepoId() }
|
||||
bazaarData = response.products
|
||||
}
|
||||
|
||||
private suspend fun updateCollectionData() {
|
||||
|
||||
@@ -9,7 +9,7 @@ enum class BazaarPriceStrategy {
|
||||
NPC_SELL;
|
||||
|
||||
fun getSellPrice(skyblockId: SkyblockId): Double {
|
||||
val bazaarEntry = HypixelStaticData.bazaarData[skyblockId] ?: return 0.0
|
||||
val bazaarEntry = HypixelStaticData.bazaarData[skyblockId.asBazaarStock] ?: return 0.0
|
||||
return when (this) {
|
||||
BUY_ORDER -> bazaarEntry.quickStatus.sellPrice
|
||||
SELL_ORDER -> bazaarEntry.quickStatus.buyPrice
|
||||
|
||||
@@ -29,6 +29,7 @@ import net.minecraft.util.Identifier
|
||||
import moe.nea.firmament.repo.ExpLadders
|
||||
import moe.nea.firmament.repo.ExpensiveItemCacheApi
|
||||
import moe.nea.firmament.repo.ItemCache.asItemStack
|
||||
import moe.nea.firmament.repo.RepoManager
|
||||
import moe.nea.firmament.repo.set
|
||||
import moe.nea.firmament.util.collections.WeakCache
|
||||
import moe.nea.firmament.util.json.DashlessUUIDSerializer
|
||||
@@ -69,11 +70,10 @@ value class SkyblockId(val neuItem: String) : Comparable<SkyblockId> {
|
||||
@JvmInline
|
||||
@Serializable
|
||||
value class BazaarStock(val bazaarId: String) {
|
||||
fun toRepoId(): SkyblockId {
|
||||
bazaarEnchantmentRegex.matchEntire(bazaarId)?.let {
|
||||
return SkyblockId("${it.groupValues[1]};${it.groupValues[2]}")
|
||||
companion object {
|
||||
fun fromSkyBlockId(skyblockId: SkyblockId): BazaarStock {
|
||||
return BazaarStock(RepoManager.neuRepo.constants.bazaarStocks.getBazaarStockOrDefault(skyblockId.neuItem))
|
||||
}
|
||||
return SkyblockId(bazaarId.replace(":", "-"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,6 +92,7 @@ value class SkyblockId(val neuItem: String) : Comparable<SkyblockId> {
|
||||
|
||||
val NEUItem.skyblockId get() = SkyblockId(skyblockItemId)
|
||||
val NEUIngredient.skyblockId get() = SkyblockId(itemId)
|
||||
val SkyblockId.asBazaarStock get() = SkyblockId.BazaarStock.fromSkyBlockId(this)
|
||||
|
||||
@ExpensiveItemCacheApi
|
||||
fun NEUItem.guessRecipeId(): String? {
|
||||
|
||||
Reference in New Issue
Block a user