From 3a9f1b393cb8a6bdba2057c6bbd88ef2636f443e Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Fri, 5 Sep 2025 21:24:24 +0200 Subject: feat: show bazaar order size / sack count for stack prices --- src/main/kotlin/util/SkyblockId.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/main/kotlin/util') diff --git a/src/main/kotlin/util/SkyblockId.kt b/src/main/kotlin/util/SkyblockId.kt index 03b8bf4..2a0c477 100644 --- a/src/main/kotlin/util/SkyblockId.kt +++ b/src/main/kotlin/util/SkyblockId.kt @@ -33,6 +33,7 @@ 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 +import moe.nea.firmament.util.mc.loreAccordingToNbt /** * A SkyBlock item id, as used by the NEU repo. @@ -204,6 +205,19 @@ fun ItemStack.setSkyBlockId(skyblockId: SkyblockId): ItemStack { return this } +private val STORED_REGEX = "Stored: ($SHORT_NUMBER_FORMAT)/.+".toPattern() +private val AMOUNT_REGEX = "(?:Offer amount|Amount|Order amount): ($SHORT_NUMBER_FORMAT)x".toPattern() +fun ItemStack.getLogicalStackSize(): Long { + return loreAccordingToNbt.firstNotNullOfOrNull { + val string = it.unformattedString + STORED_REGEX.useMatch(string) { + parseShortNumber(group(1)).toLong() + } ?: AMOUNT_REGEX.useMatch(string) { + parseShortNumber(group(1)).toLong() + } + } ?: count.toLong() +} + val ItemStack.skyBlockId: SkyblockId? get() { return when (val id = extraAttributes.getString("id").getOrNull()) { -- cgit