Add item rarity backgrounds
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package moe.nea.firmament.events
|
||||
|
||||
import net.minecraft.client.gui.DrawContext
|
||||
import net.minecraft.item.ItemStack
|
||||
|
||||
data class HotbarItemRenderEvent(
|
||||
val item: ItemStack,
|
||||
val context: DrawContext,
|
||||
val x: Int,
|
||||
val y: Int,
|
||||
val tickDelta: Float,
|
||||
) : FirmamentEvent() {
|
||||
companion object : FirmamentEventBus<HotbarItemRenderEvent>()
|
||||
}
|
||||
@@ -18,6 +18,7 @@ import moe.nea.firmament.features.debug.PowerUserTools
|
||||
import moe.nea.firmament.features.fixes.CompatibliltyFeatures
|
||||
import moe.nea.firmament.features.fixes.Fixes
|
||||
import moe.nea.firmament.features.inventory.CraftingOverlay
|
||||
import moe.nea.firmament.features.inventory.ItemRarityCosmetics
|
||||
import moe.nea.firmament.features.inventory.PriceData
|
||||
import moe.nea.firmament.features.inventory.SaveCursorPosition
|
||||
import moe.nea.firmament.features.inventory.SlotLocking
|
||||
@@ -59,6 +60,7 @@ object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "feature
|
||||
loadFeature(CustomSkyBlockTextures)
|
||||
loadFeature(PriceData)
|
||||
loadFeature(Fixes)
|
||||
loadFeature(ItemRarityCosmetics)
|
||||
if (Firmament.DEBUG) {
|
||||
loadFeature(DeveloperFeatures)
|
||||
loadFeature(DebugView)
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package moe.nea.firmament.features.inventory
|
||||
|
||||
import java.awt.Color
|
||||
import net.minecraft.client.gui.DrawContext
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.nbt.NbtElement
|
||||
import net.minecraft.util.Formatting
|
||||
import net.minecraft.util.Identifier
|
||||
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
|
||||
|
||||
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(
|
||||
"COMMON" to Formatting.WHITE,
|
||||
"UNCOMMON" to Formatting.GREEN,
|
||||
"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 ItemStack.skyblockLoreRarityColor: Triple<Float, Float, Float>?
|
||||
get() {
|
||||
val lore =
|
||||
getOrCreateSubNbt(ItemStack.DISPLAY_KEY).getList(ItemStack.LORE_KEY, NbtElement.STRING_TYPE.toInt())
|
||||
val entry = lore.getString(lore.size - 1)
|
||||
return rarityToColor.entries.find { (k, v) -> k in entry }?.value
|
||||
}
|
||||
|
||||
|
||||
fun drawItemStackRarity(drawContext: DrawContext, x: Int, y: Int, item: ItemStack) {
|
||||
val (r, g, b) = item.skyblockLoreRarityColor ?: return
|
||||
drawContext.drawSprite(
|
||||
x, y,
|
||||
0,
|
||||
16, 16,
|
||||
MC.guiAtlasManager.getSprite(Identifier("firmament:item_rarity_background")),
|
||||
r, g, b, 1F
|
||||
)
|
||||
}
|
||||
|
||||
override fun onLoad() {
|
||||
HotbarItemRenderEvent.subscribe {
|
||||
if (!TConfig.showItemRarityInHotbar) return@subscribe
|
||||
val stack = it.item
|
||||
drawItemStackRarity(it.context, it.x, it.y, stack)
|
||||
}
|
||||
SlotRenderEvents.Before.subscribe {
|
||||
if (!TConfig.showItemRarityBackground) return@subscribe
|
||||
val stack = it.slot.stack ?: return@subscribe
|
||||
drawItemStackRarity(it.context, it.slot.x, it.slot.y, stack)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -46,6 +46,7 @@ object MC {
|
||||
inline val soundManager get() = MinecraftClient.getInstance().soundManager
|
||||
inline val player get() = MinecraftClient.getInstance().player
|
||||
inline val camera get() = MinecraftClient.getInstance().cameraEntity
|
||||
inline val guiAtlasManager get() = MinecraftClient.getInstance().guiAtlasManager
|
||||
inline val world get() = MinecraftClient.getInstance().world
|
||||
inline var screen
|
||||
get() = MinecraftClient.getInstance().currentScreen
|
||||
|
||||
Reference in New Issue
Block a user