aboutsummaryrefslogtreecommitdiff
path: root/src
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
parent762fb402151809395cf9883354804e49a9b188a8 (diff)
downloadFirmament-ffebb438f8d1582ee65936399b79dd714454f223.tar.gz
Firmament-ffebb438f8d1582ee65936399b79dd714454f223.tar.bz2
Firmament-ffebb438f8d1582ee65936399b79dd714454f223.zip
fix: Pets missing an item rarity
Diffstat (limited to 'src')
-rw-r--r--src/main/kotlin/features/inventory/ItemRarityCosmetics.kt108
-rw-r--r--src/main/kotlin/features/inventory/buttons/InventoryButtons.kt2
-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
7 files changed, 144 insertions, 65 deletions
diff --git a/src/main/kotlin/features/inventory/ItemRarityCosmetics.kt b/src/main/kotlin/features/inventory/ItemRarityCosmetics.kt
index 26712da..a659c79 100644
--- a/src/main/kotlin/features/inventory/ItemRarityCosmetics.kt
+++ b/src/main/kotlin/features/inventory/ItemRarityCosmetics.kt
@@ -1,5 +1,3 @@
-
-
package moe.nea.firmament.features.inventory
import java.awt.Color
@@ -13,74 +11,64 @@ import moe.nea.firmament.events.HotbarItemRenderEvent
import moe.nea.firmament.events.SlotRenderEvents
import moe.nea.firmament.features.FirmamentFeature
import moe.nea.firmament.gui.config.ManagedConfig
-import moe.nea.firmament.util.MC
-import moe.nea.firmament.util.mc.loreAccordingToNbt
import moe.nea.firmament.util.collections.lastNotNullOfOrNull
import moe.nea.firmament.util.collections.memoizeIdentity
-import moe.nea.firmament.util.render.drawGuiTexture
+import moe.nea.firmament.util.mc.loreAccordingToNbt
+import moe.nea.firmament.util.skyblock.Rarity
import moe.nea.firmament.util.unformattedString
object ItemRarityCosmetics : FirmamentFeature {
- override val identifier: String
- get() = "item-rarity-cosmetics"
-
- object TConfig : ManagedConfig(identifier, Category.INVENTORY) {
- val showItemRarityBackground by toggle("background") { false }
- val showItemRarityInHotbar by toggle("background-hotbar") { false }
- }
-
- override val config: ManagedConfig
- get() = TConfig
-
- private val rarityToColor = mapOf(
- "UNCOMMON" to Formatting.GREEN,
- "COMMON" to Formatting.WHITE,
- "RARE" to Formatting.DARK_BLUE,
- "EPIC" to Formatting.DARK_PURPLE,
- "LEGENDARY" to Formatting.GOLD,
- "LEGENJERRY" to Formatting.GOLD,
- "MYTHIC" to Formatting.LIGHT_PURPLE,
- "DIVINE" to Formatting.BLUE,
- "SPECIAL" to Formatting.DARK_RED,
- "SUPREME" to Formatting.DARK_RED,
- ).mapValues {
- val c = Color(it.value.colorValue!!)
- c.rgb
- }
+ override val identifier: String
+ get() = "item-rarity-cosmetics"
- private fun getSkyblockRarity0(itemStack: ItemStack): Int? {
- return itemStack.loreAccordingToNbt.lastNotNullOfOrNull {
- val entry = it.unformattedString
- rarityToColor.entries.find { (k, v) -> k in entry }?.value
- }
- }
+ object TConfig : ManagedConfig(identifier, Category.INVENTORY) {
+ val showItemRarityBackground by toggle("background") { false }
+ val showItemRarityInHotbar by toggle("background-hotbar") { false }
+ }
- val getSkyblockRarity = ::getSkyblockRarity0.memoizeIdentity(100)
+ override val config: ManagedConfig
+ get() = TConfig
+ private val rarityToColor = mapOf(
+ Rarity.UNCOMMON to Formatting.GREEN,
+ Rarity.COMMON to Formatting.WHITE,
+ Rarity.RARE to Formatting.DARK_BLUE,
+ Rarity.EPIC to Formatting.DARK_PURPLE,
+ Rarity.LEGENDARY to Formatting.GOLD,
+ Rarity.MYTHIC to Formatting.LIGHT_PURPLE,
+ Rarity.DIVINE to Formatting.BLUE,
+ Rarity.SPECIAL to Formatting.DARK_RED,
+ Rarity.VERY_SPECIAL to Formatting.DARK_RED,
+ Rarity.SUPREME to Formatting.DARK_RED,
+ ).mapValues {
+ val c = Color(it.value.colorValue!!)
+ c.rgb
+ }
- fun drawItemStackRarity(drawContext: DrawContext, x: Int, y: Int, item: ItemStack) {
- val rgb = getSkyblockRarity(item) ?: return
- drawContext.drawGuiTexture(
- RenderLayer::getGuiTextured,
- Identifier.of("firmament:item_rarity_background"),
- x, y,
- 16, 16,
- rgb
- )
- }
+ fun drawItemStackRarity(drawContext: DrawContext, x: Int, y: Int, item: ItemStack) {
+ val rarity = Rarity.fromItem(item) ?: return
+ val rgb = rarityToColor[rarity] ?: 0xFF00FF80.toInt()
+ drawContext.drawGuiTexture(
+ RenderLayer::getGuiTextured,
+ Identifier.of("firmament:item_rarity_background"),
+ x, y,
+ 16, 16,
+ rgb
+ )
+ }
- @Subscribe
- fun onRenderSlot(it: SlotRenderEvents.Before) {
- if (!TConfig.showItemRarityBackground) return
- val stack = it.slot.stack ?: return
- drawItemStackRarity(it.context, it.slot.x, it.slot.y, stack)
- }
+ @Subscribe
+ fun onRenderSlot(it: SlotRenderEvents.Before) {
+ if (!TConfig.showItemRarityBackground) return
+ val stack = it.slot.stack ?: return
+ drawItemStackRarity(it.context, it.slot.x, it.slot.y, stack)
+ }
- @Subscribe
- fun onRenderHotbarItem(it: HotbarItemRenderEvent) {
- if (!TConfig.showItemRarityInHotbar) return
- val stack = it.item
- drawItemStackRarity(it.context, it.x, it.y, stack)
- }
+ @Subscribe
+ fun onRenderHotbarItem(it: HotbarItemRenderEvent) {
+ if (!TConfig.showItemRarityInHotbar) return
+ val stack = it.item
+ drawItemStackRarity(it.context, it.x, it.y, stack)
+ }
}
diff --git a/src/main/kotlin/features/inventory/buttons/InventoryButtons.kt b/src/main/kotlin/features/inventory/buttons/InventoryButtons.kt
index ca64f80..d5b5417 100644
--- a/src/main/kotlin/features/inventory/buttons/InventoryButtons.kt
+++ b/src/main/kotlin/features/inventory/buttons/InventoryButtons.kt
@@ -14,7 +14,7 @@ import moe.nea.firmament.gui.config.ManagedConfig
import moe.nea.firmament.util.MC
import moe.nea.firmament.util.ScreenUtil
import moe.nea.firmament.util.data.DataHolder
-import moe.nea.firmament.util.getRectangle
+import moe.nea.firmament.util.accessors.getRectangle
object InventoryButtons : FirmamentFeature {
override val identifier: String
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)
+ }
+
+ }
+}