1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package moe.nea.firmament.features.inventory
import java.awt.Color
import net.minecraft.client.gui.DrawContext
import net.minecraft.item.ItemStack
import net.minecraft.util.Formatting
import net.minecraft.util.Identifier
import moe.nea.firmament.annotations.Subscribe
import moe.nea.firmament.events.HotbarItemRenderEvent
import moe.nea.firmament.events.SlotRenderEvents
import moe.nea.firmament.features.FirmamentFeature
import moe.nea.firmament.features.fixes.CompatibliltyFeatures
import moe.nea.firmament.gui.config.ManagedConfig
import moe.nea.firmament.util.MC
import moe.nea.firmament.util.SBData
import moe.nea.firmament.util.collections.lastNotNullOfOrNull
import moe.nea.firmament.util.collections.memoizeIdentity
import moe.nea.firmament.util.mc.loreAccordingToNbt
import moe.nea.firmament.util.unformattedString
object ItemRarityCosmetics : FirmamentFeature {
override val identifier: String
get() = "item-rarity-cosmetics"
object TConfig : ManagedConfig(identifier) {
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!!)
Triple(c.red / 255F, c.green / 255F, c.blue / 255F)
}
private val tabCubeRarityToColor = mapOf(
"COMMON" to Color.WHITE,
"RELIC" to Color(255, 23, 130),
"BOSS DROP" to Color.YELLOW,
"MYTHIC" to Color.ORANGE,
"RARE" to Color.BLUE,
"UNCOMMON" to Color.GREEN,
"LEGENDARY" to Color(250, 240, 130),
"EPIC" to Color(180, 30, 180),
"ULTIMATE" to Color(255, 130, 0),
"ᴠᴏᴜᴄʜᴇʀ" to Color(80, 120, 255)
).mapValues {
val c = it.value
Triple(c.red / 255F, c.green / 255F, c.blue / 255F)
}
val currentRarities get() = if (CompatibliltyFeatures.TConfig.tapCube && SBData.isTabCube) tabCubeRarityToColor else rarityToColor
private fun getSkyblockRarity0(itemStack: ItemStack): Triple<Float, Float, Float>? {
return itemStack.loreAccordingToNbt.lastNotNullOfOrNull {
val entry = it.unformattedString
currentRarities.entries.find { (k, v) -> k in entry }?.value
}
}
// TODO: replace with weak cache
val getSkyblockRarity = ::getSkyblockRarity0.memoizeIdentity(100)
fun drawItemStackRarity(drawContext: DrawContext, x: Int, y: Int, item: ItemStack) {
val (r, g, b) = getSkyblockRarity(item) ?: return
drawContext.drawSprite(
x, y,
0,
16, 16,
MC.guiAtlasManager.getSprite(Identifier.of("firmament:item_rarity_background")),
r, g, b, 1F
)
}
@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)
}
}
|