Add item rarity backgrounds
This commit is contained in:
3
TODO.txt
3
TODO.txt
@@ -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
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.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)
|
||||||
|
|||||||
@@ -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 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
|
||||||
|
|||||||
@@ -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 |
@@ -0,0 +1,3 @@
|
|||||||
|
SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
Reference in New Issue
Block a user