diff options
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt | 16 | ||||
-rw-r--r-- | src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt | 34 |
2 files changed, 44 insertions, 6 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt index 06e7108d9..c81841268 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt @@ -8,6 +8,7 @@ import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.cachedData import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.isRecombobulated import at.hannibal2.skyhanni.utils.StringUtils.matchRegex import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber import com.google.gson.GsonBuilder import com.google.gson.JsonObject import net.minecraft.client.Minecraft @@ -18,6 +19,7 @@ import net.minecraft.nbt.NBTTagList import net.minecraft.nbt.NBTTagString import net.minecraftforge.common.util.Constants import java.util.LinkedList +import java.util.regex.Matcher import kotlin.time.Duration.Companion.seconds object ItemUtils { @@ -239,7 +241,7 @@ object ItemUtils { fun isSkyBlockMenuItem(stack: ItemStack?): Boolean = stack?.getInternalName_old() == "SKYBLOCK_MENU" - private val patternInFront = "(?: *§8(?<amount>[\\d,]+)x )?(?<name>.*)".toPattern() + private val patternInFront = "(?: *§8(\\+§[\\d\\w])?(?<amount>[\\d\\.km,]+)(x )?)?(?<name>.*)".toPattern() private val patternBehind = "(?<name>(?:['\\w-]+ ?)+)(?:§8x(?<amount>[\\d,]+))?".toPattern() private val itemAmountCache = mutableMapOf<String, Pair<String, Int>>() @@ -258,10 +260,7 @@ object ItemUtils { if (matcher.matches()) { val itemName = matcher.group("name") if (!itemName.contains("§8x")) { - val amount = matcher.group("amount")?.replace(",", "")?.toInt() ?: 1 - val pair = Pair(itemName.trim(), amount) - itemAmountCache[input] = pair - return pair + return makePair(input, itemName.trim(), matcher) } } @@ -277,7 +276,12 @@ object ItemUtils { } val itemName = color + matcher.group("name").trim() - val amount = matcher.group("amount")?.replace(",", "")?.toInt() ?: 1 + return makePair(input, itemName, matcher) + } + + private fun makePair(input: String, itemName: String, matcher: Matcher): Pair<String, Int> { + val matcherAmount = matcher.group("amount") + val amount = matcherAmount?.formatNumber()?.toInt() ?: 1; val pair = Pair(itemName, amount) itemAmountCache[input] = pair return pair diff --git a/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt b/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt new file mode 100644 index 000000000..0ac8cc8de --- /dev/null +++ b/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt @@ -0,0 +1,34 @@ +package at.hannibal2.skyhanni.test + +import at.hannibal2.skyhanni.utils.ItemUtils +import org.junit.jupiter.api.Test + +class ItemUtilsTest { + + val items: MutableMap<String, Pair<String, Int>> = mutableMapOf( + "§5Hoe of Greatest Tilling" to Pair("§5Hoe of Greatest Tilling", 1), + "§fSilver medal §8x2" to Pair("§fSilver medal", 2), + "§aJacob's Ticket §8x32" to Pair("§aJacob's Ticket", 32), + "§9Delicate V" to Pair("§9Delicate V", 1), + " §81x §9Enchanted Sugar Cane" to Pair("§9Enchanted Sugar Cane", 1), + "§6Gold medal" to Pair("§6Gold medal", 1), + " §8+§319k §7Farming XP" to Pair("§7Farming XP", 19_000), + " §8+§215 §7Garden Experience" to Pair("§7Garden Experience", 15), + " §8+§c21 Copper" to Pair("Copper", 21), + " §8+§b10 Bits" to Pair("Bits", 10), + " §8+§37.2k §7Farming XP" to Pair("§7Farming XP", 7_200), + ) + + @Test + fun testReadItemAmount() { + for ((itemString, expected) in items) { + val results = ItemUtils.readItemAmount(itemString) + assert(results != null) { + "Could not read item '$itemString'" + } + assert(results?.equals(expected) == true) { + "'${results.toString()}' does not match '$expected'" + } + } + } +}
\ No newline at end of file |