Add item rarity backgrounds

This commit is contained in:
nea
2023-09-30 00:09:40 +02:00
parent f89135db7e
commit 040dbca014
9 changed files with 119 additions and 4 deletions

View File

@@ -38,8 +38,6 @@ Priority 2:
- biome wands - biome wands
- dirt wand - dirt wand
- block zapper - block zapper
- slot binding
- uuid locking (allow items with that uuid to be moved around but not dropped/sold)
Priority 3: Priority 3:
- Item rarity halo - Item rarity halo
@@ -68,5 +66,4 @@ Dungeons (planned in another mod):
Custom animations for certain skyblock items. (vibrating drills for breaking, custom animations for right click and Custom animations for certain skyblock items. (vibrating drills for breaking, custom animations for right click and
spell casting weapons) spell casting weapons)
better explosions
client side inventory sorting client side inventory sorting

View File

@@ -6,9 +6,12 @@
package moe.nea.firmament.mixins; package moe.nea.firmament.mixins;
import moe.nea.firmament.events.HotbarItemRenderEvent;
import moe.nea.firmament.events.HudRenderEvent; import moe.nea.firmament.events.HudRenderEvent;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
@@ -16,8 +19,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(InGameHud.class) @Mixin(InGameHud.class)
public class MixinInGameHud { public class MixinInGameHud {
@Inject(method = "render", at = @At(value = "INVOKE",target = "Lnet/minecraft/client/network/ClientPlayerEntity;getSleepTimer()I")) @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getSleepTimer()I"))
public void renderCallBack(DrawContext context, float tickDelta, CallbackInfo ci) { public void renderCallBack(DrawContext context, float tickDelta, CallbackInfo ci) {
HudRenderEvent.Companion.publish(new HudRenderEvent(context, tickDelta)); HudRenderEvent.Companion.publish(new HudRenderEvent(context, tickDelta));
} }
@Inject(method = "renderHotbarItem", at = @At("HEAD"))
public void onRenderHotbarItem(DrawContext context, int x, int y, float tickDelta, PlayerEntity player, ItemStack stack, int seed,CallbackInfo ci) {
if (stack != null)
HotbarItemRenderEvent.Companion.publish(new HotbarItemRenderEvent(stack, context, x, y, tickDelta));
}
} }

View File

@@ -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>()
}

View File

@@ -18,6 +18,7 @@ import moe.nea.firmament.features.debug.PowerUserTools
import moe.nea.firmament.features.fixes.CompatibliltyFeatures import moe.nea.firmament.features.fixes.CompatibliltyFeatures
import moe.nea.firmament.features.fixes.Fixes import moe.nea.firmament.features.fixes.Fixes
import moe.nea.firmament.features.inventory.CraftingOverlay 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.PriceData
import moe.nea.firmament.features.inventory.SaveCursorPosition import moe.nea.firmament.features.inventory.SaveCursorPosition
import moe.nea.firmament.features.inventory.SlotLocking import moe.nea.firmament.features.inventory.SlotLocking
@@ -59,6 +60,7 @@ object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "feature
loadFeature(CustomSkyBlockTextures) loadFeature(CustomSkyBlockTextures)
loadFeature(PriceData) loadFeature(PriceData)
loadFeature(Fixes) loadFeature(Fixes)
loadFeature(ItemRarityCosmetics)
if (Firmament.DEBUG) { if (Firmament.DEBUG) {
loadFeature(DeveloperFeatures) loadFeature(DeveloperFeatures)
loadFeature(DebugView) loadFeature(DebugView)

View File

@@ -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)
}
}
}

View File

@@ -46,6 +46,7 @@ object MC {
inline val soundManager get() = MinecraftClient.getInstance().soundManager inline val soundManager get() = MinecraftClient.getInstance().soundManager
inline val player get() = MinecraftClient.getInstance().player inline val player get() = MinecraftClient.getInstance().player
inline val camera get() = MinecraftClient.getInstance().cameraEntity inline val camera get() = MinecraftClient.getInstance().cameraEntity
inline val guiAtlasManager get() = MinecraftClient.getInstance().guiAtlasManager
inline val world get() = MinecraftClient.getInstance().world inline val world get() = MinecraftClient.getInstance().world
inline var screen inline var screen
get() = MinecraftClient.getInstance().currentScreen get() = MinecraftClient.getInstance().currentScreen

View File

@@ -91,6 +91,9 @@
"firmament.config.chat-links.allow-all-hosts": "Allow all Image Hosts", "firmament.config.chat-links.allow-all-hosts": "Allow all Image Hosts",
"firmament.config.chat-links.allowed-hosts": "Allowed Image Hosts", "firmament.config.chat-links.allowed-hosts": "Allowed Image Hosts",
"firmament.config.chat-links.position": "Chat Image Preview", "firmament.config.chat-links.position": "Chat Image Preview",
"firmament.config.item-rarity-cosmetics": "Item Rarity Cosmetics",
"firmament.config.item-rarity-cosmetics.background": "Slot Background Rarity",
"firmament.config.item-rarity-cosmetics.background-hotbar": "Hotbar Background Rarity",
"firmament.hud.edit": "Edit %s", "firmament.hud.edit": "Edit %s",
"firmament.keybinding.external": "External", "firmament.keybinding.external": "External",
"firmament.config.slot-locking": "Slot Locking", "firmament.config.slot-locking": "Slot Locking",

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
SPDX-License-Identifier: CC0-1.0