From 040dbca01439e6fd6afbb911beb09d73d2ee0d1e Mon Sep 17 00:00:00 2001 From: nea Date: Sat, 30 Sep 2023 00:09:40 +0200 Subject: Add item rarity backgrounds --- .../nea/firmament/events/HotbarItemRenderEvent.kt | 20 ++++++ .../moe/nea/firmament/features/FeatureManager.kt | 2 + .../features/inventory/ItemRarityCosmetics.kt | 80 ++++++++++++++++++++++ src/main/kotlin/moe/nea/firmament/util/MC.kt | 1 + 4 files changed, 103 insertions(+) create mode 100644 src/main/kotlin/moe/nea/firmament/events/HotbarItemRenderEvent.kt create mode 100644 src/main/kotlin/moe/nea/firmament/features/inventory/ItemRarityCosmetics.kt (limited to 'src/main/kotlin/moe') diff --git a/src/main/kotlin/moe/nea/firmament/events/HotbarItemRenderEvent.kt b/src/main/kotlin/moe/nea/firmament/events/HotbarItemRenderEvent.kt new file mode 100644 index 0000000..59660ce --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/events/HotbarItemRenderEvent.kt @@ -0,0 +1,20 @@ +/* + * SPDX-FileCopyrightText: 2023 Linnea Gräf + * + * 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() +} diff --git a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt index 72f1056..b9d343c 100644 --- a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt +++ b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt @@ -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(serializer(), "feature loadFeature(CustomSkyBlockTextures) loadFeature(PriceData) loadFeature(Fixes) + loadFeature(ItemRarityCosmetics) if (Firmament.DEBUG) { loadFeature(DeveloperFeatures) loadFeature(DebugView) diff --git a/src/main/kotlin/moe/nea/firmament/features/inventory/ItemRarityCosmetics.kt b/src/main/kotlin/moe/nea/firmament/features/inventory/ItemRarityCosmetics.kt new file mode 100644 index 0000000..2017b40 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/features/inventory/ItemRarityCosmetics.kt @@ -0,0 +1,80 @@ +/* + * SPDX-FileCopyrightText: 2023 Linnea Gräf + * + * 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? + 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) + } + } +} diff --git a/src/main/kotlin/moe/nea/firmament/util/MC.kt b/src/main/kotlin/moe/nea/firmament/util/MC.kt index e8611a6..50462f7 100644 --- a/src/main/kotlin/moe/nea/firmament/util/MC.kt +++ b/src/main/kotlin/moe/nea/firmament/util/MC.kt @@ -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 -- cgit