From be406952913c8440ae6061beea82c5a76ef58504 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 24 Aug 2024 03:12:49 -0400 Subject: Slot Text and Item Protection support for the PV (#954) --- .../de/hysky/skyblocker/mixins/InGameHudMixin.java | 5 +---- .../skyblocker/skyblock/item/ItemProtection.java | 5 +++++ .../skyblock/item/slottext/SlotTextManager.java | 8 +++++--- .../skyblock/item/tooltip/BackpackPreview.java | 3 +-- .../profileviewer/inventory/Inventory.java | 23 +++++++++++++++++----- .../profileviewer/inventory/PlayerInventory.java | 23 +++++++++++++++++----- 6 files changed, 48 insertions(+), 19 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java index fffd74f9..5dfc3922 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java @@ -41,9 +41,6 @@ import java.util.regex.Pattern; public abstract class InGameHudMixin { @Unique private static final Supplier SLOT_LOCK_ICON = () -> SkyblockerConfigManager.get().general.itemProtection.slotLockStyle.tex; - - @Unique - private static final Identifier ITEM_PROTECTION = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/item_protection.png"); @Unique private static final Pattern DICER_TITLE_BLACKLIST = Pattern.compile(".+? DROP!"); @@ -71,7 +68,7 @@ public abstract class InGameHudMixin { //item protection if (ItemProtection.isItemProtected(player.getInventory().main.get(index))) { RenderSystem.enableBlend(); - context.drawTexture(ITEM_PROTECTION, x, y, 0, 0, 16, 16, 16, 16); + context.drawTexture(ItemProtection.ITEM_PROTECTION_TEX, x, y, 0, 0, 16, 16, 16, 16); RenderSystem.disableBlend(); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java index 7e04652c..9a6fea7f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java @@ -2,6 +2,8 @@ package de.hysky.skyblocker.skyblock.item; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; + +import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.ItemUtils; @@ -18,9 +20,12 @@ import net.minecraft.command.CommandRegistryAccess; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + import org.lwjgl.glfw.GLFW; public class ItemProtection { + public static final Identifier ITEM_PROTECTION_TEX = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/item_protection.png"); public static KeyBinding itemProtection; public static void init() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index eb3d211d..8eb26acf 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -4,6 +4,7 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper; import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver; import de.hysky.skyblocker.skyblock.item.slottext.adders.*; +import de.hysky.skyblocker.skyblock.profileviewer.ProfileViewerScreen; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.container.SlotTextAdder; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; @@ -11,6 +12,7 @@ import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.fabricmc.fabric.api.client.screen.v1.ScreenKeyboardEvents; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.math.MatrixStack; @@ -55,8 +57,8 @@ public class SlotTextManager { public static void init() { ScreenEvents.AFTER_INIT.register((client, screen, width, height) -> { - if (screen instanceof HandledScreen handledScreen && Utils.isOnSkyblock()) { - onScreenChange(handledScreen); + if ((screen instanceof HandledScreen && Utils.isOnSkyblock()) || screen instanceof ProfileViewerScreen) { + onScreenChange(screen); ScreenEvents.remove(screen).register(ignored -> currentScreenAdders.clear()); } ScreenKeyboardEvents.afterKeyPress(screen).register((screen1, key, scancode, modifiers) -> { @@ -73,7 +75,7 @@ public class SlotTextManager { }); } - private static void onScreenChange(HandledScreen screen) { + private static void onScreenChange(Screen screen) { for (SlotTextAdder adder : adders) { if (adder.isEnabled() && adder.test(screen)) { currentScreenAdders.add(adder); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java index 3fb52b3a..199f9c9e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java @@ -42,7 +42,6 @@ import java.util.stream.Collectors; public class BackpackPreview { private static final Logger LOGGER = LoggerFactory.getLogger(BackpackPreview.class); - private static final Identifier ITEM_PROTECTION = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/item_protection.png"); private static final Identifier TEXTURE = Identifier.ofVanilla("textures/gui/container/generic_54.png"); private static final Pattern ECHEST_PATTERN = Pattern.compile("Ender Chest.*\\((\\d+)/\\d+\\)"); private static final Pattern BACKPACK_PATTERN = Pattern.compile("Backpack.*\\(Slot #(\\d+)\\)"); @@ -167,7 +166,7 @@ public class BackpackPreview { if (ItemProtection.isItemProtected(currentStack)) { RenderSystem.enableBlend(); - context.drawTexture(ITEM_PROTECTION, itemX, itemY, 0, 0, 16, 16, 16, 16); + context.drawTexture(ItemProtection.ITEM_PROTECTION_TEX, itemX, itemY, 0, 0, 16, 16, 16, 16); RenderSystem.disableBlend(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java index dad4e7cb..6d9adfda 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java @@ -1,8 +1,12 @@ package de.hysky.skyblocker.skyblock.profileviewer.inventory; import com.google.gson.JsonObject; +import com.mojang.blaze3d.systems.RenderSystem; + import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.item.ItemProtection; import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextManager; import de.hysky.skyblocker.skyblock.profileviewer.ProfileViewerPage; import de.hysky.skyblocker.skyblock.profileviewer.inventory.itemLoaders.ItemLoader; import it.unimi.dsi.fastutil.ints.IntIntPair; @@ -72,7 +76,9 @@ public class Inventory implements ProfileViewerPage { int endIndex = Math.min(startIndex + itemsPerPage, containerList.size()); List tooltip = Collections.emptyList(); for (int i = 0; i < endIndex - startIndex; i++) { - if (containerList.get(startIndex + i) == ItemStack.EMPTY) continue; + ItemStack stack = containerList.get(startIndex + i); + if (stack.isEmpty()) continue; + int column = i % dimensions.rightInt(); int row = i / dimensions.rightInt(); @@ -80,14 +86,21 @@ public class Inventory implements ProfileViewerPage { int y = rootYAdjusted + 18 + row * 18; if (SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds) { - ItemRarityBackgrounds.tryDraw(containerList.get(startIndex + i), context, x, y); + ItemRarityBackgrounds.tryDraw(stack, context, x, y); + } + + if (ItemProtection.isItemProtected(stack)) { + RenderSystem.enableBlend(); + context.drawTexture(ItemProtection.ITEM_PROTECTION_TEX, x, y, 0, 0, 16, 16, 16, 16); + RenderSystem.disableBlend(); } - context.drawItem(containerList.get(startIndex + i), x, y); - context.drawItemInSlot(textRenderer, containerList.get(startIndex + i), x, y); + context.drawItem(stack, x, y); + context.drawItemInSlot(textRenderer, stack, x, y); + SlotTextManager.renderSlotText(context, textRenderer, null, stack, i, x, y); if (mouseX > x - 2 && mouseX < x + 16 + 1 && mouseY > y - 2 && mouseY < y + 16 + 1) { - tooltip = containerList.get(startIndex + i).getTooltip(Item.TooltipContext.DEFAULT, CLIENT.player, CLIENT.options.advancedItemTooltips ? TooltipType.ADVANCED : TooltipType.BASIC); + tooltip = stack.getTooltip(Item.TooltipContext.DEFAULT, CLIENT.player, CLIENT.options.advancedItemTooltips ? TooltipType.ADVANCED : TooltipType.BASIC); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java index cf88bf0b..980eb52e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java @@ -1,8 +1,12 @@ package de.hysky.skyblocker.skyblock.profileviewer.inventory; import com.google.gson.JsonObject; +import com.mojang.blaze3d.systems.RenderSystem; + import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.item.ItemProtection; import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextManager; import de.hysky.skyblocker.skyblock.profileviewer.ProfileViewerPage; import de.hysky.skyblocker.skyblock.profileviewer.inventory.itemLoaders.InventoryItemLoader; import it.unimi.dsi.fastutil.ints.IntIntPair; @@ -61,7 +65,9 @@ public class PlayerInventory implements ProfileViewerPage { private void drawContainerItems(DrawContext context, int rootX, int rootY, IntIntPair dimensions, int startIndex, int endIndex, int mouseX, int mouseY) { for (int i = 0; i < endIndex - startIndex; i++) { - if (containerList.get(startIndex + i) == ItemStack.EMPTY) continue; + ItemStack stack = containerList.get(startIndex + i); + if (stack.isEmpty()) continue; + int column = i % dimensions.rightInt(); int row = i / dimensions.rightInt(); @@ -69,14 +75,21 @@ public class PlayerInventory implements ProfileViewerPage { int y = (rootY + 18 + row * 18) + (dimensions.leftInt() > 1 && row + 1 == dimensions.leftInt() ? 4 : 0); if (SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds) { - ItemRarityBackgrounds.tryDraw(containerList.get(startIndex + i), context, x, y); + ItemRarityBackgrounds.tryDraw(stack, context, x, y); + } + + if (ItemProtection.isItemProtected(stack)) { + RenderSystem.enableBlend(); + context.drawTexture(ItemProtection.ITEM_PROTECTION_TEX, x, y, 0, 0, 16, 16, 16, 16); + RenderSystem.disableBlend(); } - context.drawItem(containerList.get(startIndex + i), x, y); - context.drawItemInSlot(textRenderer, containerList.get(startIndex + i), x, y); + context.drawItem(stack, x, y); + context.drawItemInSlot(textRenderer, stack, x, y); + SlotTextManager.renderSlotText(context, textRenderer, null, stack, i, x, y); if (mouseX > x - 2 && mouseX < x + 16 + 1 && mouseY > y - 2 && mouseY < y + 16 + 1) { - tooltip = containerList.get(startIndex + i).getTooltip(Item.TooltipContext.DEFAULT, CLIENT.player, CLIENT.options.advancedItemTooltips ? TooltipType.ADVANCED : TooltipType.BASIC); + tooltip = stack.getTooltip(Item.TooltipContext.DEFAULT, CLIENT.player, CLIENT.options.advancedItemTooltips ? TooltipType.ADVANCED : TooltipType.BASIC); } } } -- cgit