aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO.txt3
-rw-r--r--src/main/java/moe/nea/firmament/mixins/MixinInGameHud.java11
-rw-r--r--src/main/kotlin/moe/nea/firmament/events/HotbarItemRenderEvent.kt20
-rw-r--r--src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt2
-rw-r--r--src/main/kotlin/moe/nea/firmament/features/inventory/ItemRarityCosmetics.kt80
-rw-r--r--src/main/kotlin/moe/nea/firmament/util/MC.kt1
-rw-r--r--src/main/resources/assets/firmament/lang/en_us.json3
-rw-r--r--src/main/resources/assets/firmament/textures/gui/sprites/item_rarity_background.pngbin0 -> 5061 bytes
-rw-r--r--src/main/resources/assets/firmament/textures/gui/sprites/item_rarity_background.png.license3
9 files changed, 119 insertions, 4 deletions
diff --git a/TODO.txt b/TODO.txt
index 8897bcf..53af8fe 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -38,8 +38,6 @@ Priority 2:
- biome wands
- dirt wand
- block zapper
-- slot binding
-- uuid locking (allow items with that uuid to be moved around but not dropped/sold)
Priority 3:
- 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
spell casting weapons)
-better explosions
client side inventory sorting
diff --git a/src/main/java/moe/nea/firmament/mixins/MixinInGameHud.java b/src/main/java/moe/nea/firmament/mixins/MixinInGameHud.java
index 1aac8ad..826d4e2 100644
--- a/src/main/java/moe/nea/firmament/mixins/MixinInGameHud.java
+++ b/src/main/java/moe/nea/firmament/mixins/MixinInGameHud.java
@@ -6,9 +6,12 @@
package moe.nea.firmament.mixins;
+import moe.nea.firmament.events.HotbarItemRenderEvent;
import moe.nea.firmament.events.HudRenderEvent;
import net.minecraft.client.gui.DrawContext;
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.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@@ -16,8 +19,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(InGameHud.class)
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) {
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));
+ }
}
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 <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>()
+}
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<FeatureManager.Config>(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 <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)
+ }
+ }
+}
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
diff --git a/src/main/resources/assets/firmament/lang/en_us.json b/src/main/resources/assets/firmament/lang/en_us.json
index 82bfb13..ddf459b 100644
--- a/src/main/resources/assets/firmament/lang/en_us.json
+++ b/src/main/resources/assets/firmament/lang/en_us.json
@@ -91,6 +91,9 @@
"firmament.config.chat-links.allow-all-hosts": "Allow all Image Hosts",
"firmament.config.chat-links.allowed-hosts": "Allowed Image Hosts",
"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.keybinding.external": "External",
"firmament.config.slot-locking": "Slot Locking",
diff --git a/src/main/resources/assets/firmament/textures/gui/sprites/item_rarity_background.png b/src/main/resources/assets/firmament/textures/gui/sprites/item_rarity_background.png
new file mode 100644
index 0000000..c7192c3
--- /dev/null
+++ b/src/main/resources/assets/firmament/textures/gui/sprites/item_rarity_background.png
Binary files differ
diff --git a/src/main/resources/assets/firmament/textures/gui/sprites/item_rarity_background.png.license b/src/main/resources/assets/firmament/textures/gui/sprites/item_rarity_background.png.license
new file mode 100644
index 0000000..c01d463
--- /dev/null
+++ b/src/main/resources/assets/firmament/textures/gui/sprites/item_rarity_background.png.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
+
+SPDX-License-Identifier: CC0-1.0