diff options
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemRarityBackgrounds.java')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemRarityBackgrounds.java | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemRarityBackgrounds.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemRarityBackgrounds.java deleted file mode 100644 index 837c209a..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemRarityBackgrounds.java +++ /dev/null @@ -1,109 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.item; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.function.Supplier; - -import com.google.common.collect.ImmutableMap; -import com.mojang.blaze3d.systems.RenderSystem; - -import it.unimi.dsi.fastutil.ints.Int2ReferenceOpenHashMap; -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager; -import me.xmrvizzy.skyblocker.utils.Utils; -import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler; -import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.item.TooltipContext; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.texture.Sprite; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - -public class ItemRarityBackgrounds { - private static final Identifier RARITY_BG_TEX = new Identifier(SkyblockerMod.NAMESPACE, "item_rarity_background"); - private static final Supplier<Sprite> SPRITE = () -> MinecraftClient.getInstance().getGuiAtlasManager().getSprite(RARITY_BG_TEX); - private static final ImmutableMap<String, SkyblockItemRarity> LORE_RARITIES = ImmutableMap.ofEntries( - Map.entry("ADMIN", SkyblockItemRarity.ADMIN), - Map.entry("SPECIAL", SkyblockItemRarity.SPECIAL), //Very special is the same color so this will cover it - Map.entry("DIVINE", SkyblockItemRarity.DIVINE), - Map.entry("MYTHIC", SkyblockItemRarity.MYTHIC), - Map.entry("LEGENDARY", SkyblockItemRarity.LEGENDARY), - Map.entry("LEGENJERRY", SkyblockItemRarity.LEGENDARY), - Map.entry("EPIC", SkyblockItemRarity.EPIC), - Map.entry("RARE", SkyblockItemRarity.RARE), - Map.entry("UNCOMMON", SkyblockItemRarity.UNCOMMON), - Map.entry("COMMON", SkyblockItemRarity.COMMON) - ); - private static final Int2ReferenceOpenHashMap<SkyblockItemRarity> CACHE = new Int2ReferenceOpenHashMap<>(); - - public static void init() { - //Clear the cache every 5 minutes, ints are very compact! - Scheduler.INSTANCE.scheduleCyclic(CACHE::clear, 4800); - - //Clear cache after a screen where items can be upgraded in rarity closes - ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { - String title = screen.getTitle().getString(); - - if (Utils.isOnSkyblock() && (title.equals("The Hex") || title.equals("Craft Item") || title.equals("Anvil") || title.equals("Reforge Anvil"))) { - ScreenEvents.remove(screen).register(screen1 -> CACHE.clear()); - } - }); - } - - public static void tryDraw(ItemStack stack, DrawContext context, int x, int y) { - MinecraftClient client = MinecraftClient.getInstance(); - - if (client.player != null) { - SkyblockItemRarity itemRarity = getItemRarity(stack, client.player); - - if (itemRarity != null) draw(context, x, y, itemRarity); - } - } - - private static SkyblockItemRarity getItemRarity(ItemStack stack, ClientPlayerEntity player) { - if (stack == null || stack.isEmpty()) return null; - - int hashCode = 0; - NbtCompound nbt = stack.getNbt(); - - if (nbt != null && nbt.contains("ExtraAttributes")) { - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); - String itemUuid = extraAttributes.getString("uuid"); - - //If the item has an uuid, then use the hash code of the uuid otherwise use the identity hash code of the stack - hashCode = itemUuid.isEmpty() ? System.identityHashCode(stack) : itemUuid.hashCode(); - } - - if (CACHE.containsKey(hashCode)) return CACHE.get(hashCode); - - List<Text> tooltip = stack.getTooltip(player, TooltipContext.BASIC); - String[] stringifiedTooltip = tooltip.stream().map(Text::getString).toArray(String[]::new); - - for (String rarityString : LORE_RARITIES.keySet()) { - if (Arrays.stream(stringifiedTooltip).anyMatch(line -> line.contains(rarityString))) { - SkyblockItemRarity rarity = LORE_RARITIES.get(rarityString); - - CACHE.put(hashCode, rarity); - return rarity; - } - } - - CACHE.put(hashCode, null); - return null; - } - - private static void draw(DrawContext context, int x, int y, SkyblockItemRarity rarity) { - //Enable blending to handle HUD translucency - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - - context.drawSprite(x, y, 0, 16, 16, SPRITE.get(), rarity.r, rarity.g, rarity.b, SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgroundsOpacity); - - RenderSystem.disableBlend(); - } -} |