aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/util
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-11-17 16:11:21 +0100
committerLinnea Gräf <nea@nea.moe>2024-11-17 16:11:21 +0100
commitffebb438f8d1582ee65936399b79dd714454f223 (patch)
tree57b884d27026f115410743bfd69da983f442f799 /src/main/kotlin/util
parent762fb402151809395cf9883354804e49a9b188a8 (diff)
downloadFirmament-ffebb438f8d1582ee65936399b79dd714454f223.tar.gz
Firmament-ffebb438f8d1582ee65936399b79dd714454f223.tar.bz2
Firmament-ffebb438f8d1582ee65936399b79dd714454f223.zip
fix: Pets missing an item rarity
Diffstat (limited to 'src/main/kotlin/util')
-rw-r--r--src/main/kotlin/util/SkyblockId.kt6
-rw-r--r--src/main/kotlin/util/StringUtil.kt9
-rw-r--r--src/main/kotlin/util/accessors/GetRectangle.kt (renamed from src/main/kotlin/util/GetRectangle.kt)2
-rw-r--r--src/main/kotlin/util/skyblock/ItemType.kt21
-rw-r--r--src/main/kotlin/util/skyblock/Rarity.kt61
5 files changed, 95 insertions, 4 deletions
diff --git a/src/main/kotlin/util/SkyblockId.kt b/src/main/kotlin/util/SkyblockId.kt
index eeca70c..1c1aa77 100644
--- a/src/main/kotlin/util/SkyblockId.kt
+++ b/src/main/kotlin/util/SkyblockId.kt
@@ -101,7 +101,7 @@ data class HypixelPetInfo(
val uuid: UUID? = null,
val active: Boolean = false,
) {
- val skyblockId get() = SkyblockId("${type.uppercase()};${tier.ordinal}")
+ val skyblockId get() = SkyblockId("${type.uppercase()};${tier.ordinal}") // TODO: is this ordinal set up correctly?
}
private val jsonparser = Json { ignoreUnknownKeys = true }
@@ -125,8 +125,8 @@ val ItemStack.skyblockUUID: UUID?
private val petDataCache = WeakCache.memoize<ItemStack, Optional<HypixelPetInfo>>("PetInfo") {
val jsonString = it.extraAttributes.getString("petInfo")
if (jsonString.isNullOrBlank()) return@memoize Optional.empty()
- runCatching { jsonparser.decodeFromString<HypixelPetInfo>(jsonString) }
- .getOrElse { null }.intoOptional()
+ ErrorUtil.catch<HypixelPetInfo?>("Could not decode hypixel pet info") { jsonparser.decodeFromString<HypixelPetInfo>(jsonString) }
+ .or { null }.intoOptional()
}
val ItemStack.petData: HypixelPetInfo?
diff --git a/src/main/kotlin/util/StringUtil.kt b/src/main/kotlin/util/StringUtil.kt
new file mode 100644
index 0000000..d9253cb
--- /dev/null
+++ b/src/main/kotlin/util/StringUtil.kt
@@ -0,0 +1,9 @@
+package moe.nea.firmament.util
+
+object StringUtil {
+ fun String.words(): Sequence<String> {
+ return splitToSequence(" ") // TODO: better boundaries
+ }
+
+ fun Iterable<String>.unwords() = joinToString(" ")
+}
diff --git a/src/main/kotlin/util/GetRectangle.kt b/src/main/kotlin/util/accessors/GetRectangle.kt
index ec64f31..37acfd9 100644
--- a/src/main/kotlin/util/GetRectangle.kt
+++ b/src/main/kotlin/util/accessors/GetRectangle.kt
@@ -1,6 +1,6 @@
-package moe.nea.firmament.util
+package moe.nea.firmament.util.accessors
import me.shedaniel.math.Rectangle
import moe.nea.firmament.mixins.accessor.AccessorHandledScreen
diff --git a/src/main/kotlin/util/skyblock/ItemType.kt b/src/main/kotlin/util/skyblock/ItemType.kt
new file mode 100644
index 0000000..7d53c0d
--- /dev/null
+++ b/src/main/kotlin/util/skyblock/ItemType.kt
@@ -0,0 +1,21 @@
+package moe.nea.firmament.util.skyblock
+
+import kotlin.properties.ReadOnlyProperty
+import kotlin.reflect.KProperty
+
+
+class ItemType(val name: String) {
+ companion object {
+ private val generated = object : ReadOnlyProperty<Any?, ItemType> {
+ override fun getValue(thisRef: Any?, property: KProperty<*>): ItemType {
+ return ItemType.ofName(property.name)
+ }
+ }
+
+ fun ofName(name: String): ItemType {
+ return ItemType(name)
+ }
+
+ val SWORD by generated
+ }
+}
diff --git a/src/main/kotlin/util/skyblock/Rarity.kt b/src/main/kotlin/util/skyblock/Rarity.kt
new file mode 100644
index 0000000..f26cefe
--- /dev/null
+++ b/src/main/kotlin/util/skyblock/Rarity.kt
@@ -0,0 +1,61 @@
+package moe.nea.firmament.util.skyblock
+
+import net.minecraft.item.ItemStack
+import net.minecraft.text.Text
+import moe.nea.firmament.util.StringUtil.words
+import moe.nea.firmament.util.collections.lastNotNullOfOrNull
+import moe.nea.firmament.util.mc.loreAccordingToNbt
+import moe.nea.firmament.util.petData
+import moe.nea.firmament.util.unformattedString
+
+typealias RepoRarity = io.github.moulberry.repo.data.Rarity
+
+enum class Rarity(vararg altNames: String) {
+ COMMON,
+ UNCOMMON,
+ RARE,
+ EPIC,
+ LEGENDARY("LEGENJERRY"),
+ MYTHIC,
+ DIVINE,
+ SUPREME,
+ SPECIAL,
+ VERY_SPECIAL,
+ UNKNOWN
+ ;
+
+ val names = setOf(name) + altNames
+
+ val neuRepoRarity: RepoRarity? = RepoRarity.entries.find { it.name == name }
+
+ companion object {
+ val byName = entries.flatMap { en -> en.names.map { it to en } }.toMap()
+ val fromNeuRepo = entries.associateBy { it.neuRepoRarity }
+
+ fun fromNeuRepo(repo: RepoRarity): Rarity? {
+ return fromNeuRepo[repo]
+ }
+
+ fun fromString(name: String): Rarity? {
+ return byName[name]
+ }
+
+ fun fromTier(tier: Int): Rarity? {
+ return entries.getOrNull(tier)
+ }
+
+ fun fromItem(itemStack: ItemStack): Rarity? {
+ return fromLore(itemStack.loreAccordingToNbt) ?: fromPetItem(itemStack)
+ }
+
+ fun fromPetItem(itemStack: ItemStack): Rarity? =
+ itemStack.petData?.tier?.let(::fromNeuRepo)
+
+ fun fromLore(lore: List<Text>): Rarity? =
+ lore.lastNotNullOfOrNull {
+ it.unformattedString.words()
+ .firstNotNullOfOrNull(::fromString)
+ }
+
+ }
+}