From a7ba4feaaacc95b505b75ec78a169fed66aead93 Mon Sep 17 00:00:00 2001 From: victo Date: Wed, 13 Sep 2023 20:16:32 +0200 Subject: Add tooltip display for personal compactor items This update integrates a tooltip display for personal compactor items in the Skyblocker mod. The tooltip shows the contents of the personal compactor when hovered over. This is useful for players to quickly check the contents of their compactor without needing to open it. The commit includes creating a new Java file 'CompactorPreviewTooltipComponent.java' for the compactor tooltip component, adding new inject method 'skyblocker$addTooltipComponent' in 'HandledScreenMixin.java' executed when drawing mouseover tooltip, adding 'DrawContextInvoker.java' for invoking the 'drawTooltip' method in the 'DrawContext' class, and adding 'getItemStack' method in the 'ItemRegistry.java'. --- .../skyblocker/mixin/HandledScreenMixin.java | 115 +++++++++++++++++++-- .../mixin/accessor/DrawContextInvoker.java | 18 ++++ 2 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/DrawContextInvoker.java (limited to 'src/main/java/me/xmrvizzy/skyblocker/mixin') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index eccd63e6..4959f856 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -2,28 +2,33 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.mixin.accessor.DrawContextInvoker; import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; -import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonChestProfit; import me.xmrvizzy.skyblocker.skyblock.experiment.ChronomatronSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.ExperimentSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.SuperpairsSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.UltrasequencerSolver; +import me.xmrvizzy.skyblocker.skyblock.item.CompactorPreviewTooltipComponent; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.utils.Utils; import me.xmrvizzy.skyblocker.utils.render.gui.ContainerSolver; 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.gui.tooltip.HoveredTooltipPositioner; +import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.screen.GenericContainerScreenHandler; -import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.nbt.NbtCompound; import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; +import net.minecraft.text.MutableText; +import net.minecraft.text.Style; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; import org.jetbrains.annotations.Nullable; -import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -34,10 +39,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; - +import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Set; @Mixin(HandledScreen.class) public abstract class HandledScreenMixin extends Screen { @@ -45,6 +50,17 @@ public abstract class HandledScreenMixin extends Screen { @Nullable protected Slot focusedSlot; + @Unique + private static final Map personalCompactorTypeToSlot = new HashMap<>(); + // Lines, and slots per lines + static { + personalCompactorTypeToSlot.put("4000", new int[]{1,1}); + personalCompactorTypeToSlot.put("5000", new int[]{1,3}); + personalCompactorTypeToSlot.put("6000", new int[]{1,7}); + personalCompactorTypeToSlot.put("7000", new int[]{2,6}); + personalCompactorTypeToSlot.put("default", new int[]{1,6}); + } + protected HandledScreenMixin(Text title) { super(title); } @@ -80,6 +96,81 @@ public abstract class HandledScreenMixin extends Screen { return skyblocker$experimentSolvers$getStack(slot, stack); } + @Inject(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;II)V"), cancellable = true) + private void skyblocker$addTooltipComponent(DrawContext context, int x, int y, CallbackInfo ci) { + if (this.focusedSlot == null || this.client == null) return; + ItemStack stack = this.focusedSlot.getStack(); + String internalName = ItemRegistry.getInternalName(stack); + // PERSONAL COMPACTOR + if (internalName.contains("PERSONAL_COMPACTOR_") || internalName.contains("PERSONAL_DELETOR_")) { + String prefix; + String itemSlotPrefix; + if (internalName.contains("PERSONAL_COMPACTOR_")) { + prefix = "PERSONAL_COMPACTOR_"; + itemSlotPrefix = "personal_compact_"; + } else { + prefix = "PERSONAL_DELETOR_"; + itemSlotPrefix = "personal_deletor_"; + } + + // Find the line to insert component + int targetIndex = -1; + int lineCount = 0; + List tooltips = Screen.getTooltipFromItem(this.client, stack); + for (int i = 0; i < tooltips.size(); i++) { + if (tooltips.get(i).getString().isEmpty()) { + lineCount += 1; + } + if (lineCount == 2) { + targetIndex = i; + break; + } + } + if (targetIndex == -1) return; + List components = new java.util.ArrayList<>(tooltips.stream().map(Text::asOrderedText).map(TooltipComponent::of).toList()); + + // STUFF + String internalID = ItemRegistry.getInternalName(stack); + String compactorType = internalID.replaceFirst(prefix, ""); + int[] dimensions = personalCompactorTypeToSlot.containsKey(compactorType) ? personalCompactorTypeToSlot.get(compactorType) : personalCompactorTypeToSlot.get("default"); + + NbtCompound nbt = stack.getNbt(); + if (nbt == null || !nbt.contains("ExtraAttributes", 10)) { + return; + } + NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); + Set attributesKeys = extraAttributes.getKeys(); + List compactorItems = attributesKeys.stream().filter(s -> s.contains(itemSlotPrefix)).toList(); + Map slotAndItem = new HashMap<>(); + + compactorItems.forEach(s -> slotAndItem.put(getNumberAtEnd(s, itemSlotPrefix), ItemRegistry.getItemStack(extraAttributes.getString(s)))); + + + components.add(targetIndex, new CompactorPreviewTooltipComponent(slotAndItem, dimensions)); + components.add(targetIndex, TooltipComponent.of(Text.literal(" ").append( + Text.literal("Contents:").fillStyle(Style.EMPTY + .withItalic(true))) + .asOrderedText())); + if (attributesKeys.stream().anyMatch(s -> s.contains("PERSONAL_DELETOR_ACTIVE"))) { + MutableText isActiveText = Text.literal("Active: "); + if (extraAttributes.getBoolean("PERSONAL_DELETOR_ACTIVE")) { + components.add(targetIndex, TooltipComponent.of(isActiveText.append( + Text.literal("YES").fillStyle(Style.EMPTY.withBold(true).withColor(Formatting.GREEN)) + ).asOrderedText() + )); + } else { + components.add(targetIndex, TooltipComponent.of(isActiveText.append( + Text.literal("NO").fillStyle(Style.EMPTY.withBold(true).withColor(Formatting.RED)) + ).asOrderedText() + )); + } + } + ((DrawContextInvoker) context).invokeDrawTooltip(textRenderer, components, x, y, HoveredTooltipPositioner.INSTANCE); + ci.cancel(); + + } + } + @Unique private ItemStack skyblocker$experimentSolvers$getStack(Slot slot, ItemStack stack) { ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); @@ -110,4 +201,14 @@ public abstract class HandledScreenMixin extends Screen { } } } + + @Unique + private static Integer getNumberAtEnd(String str, String attributesKey) { + try { + String numberPartOfTheString = str.replace(attributesKey, ""); + return Integer.parseInt(numberPartOfTheString); + } catch (NumberFormatException e) { + return 0; + } + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/DrawContextInvoker.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/DrawContextInvoker.java new file mode 100644 index 00000000..55ef0774 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/DrawContextInvoker.java @@ -0,0 +1,18 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.tooltip.TooltipComponent; +import net.minecraft.client.gui.tooltip.TooltipPositioner; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import java.util.List; + +@Mixin(DrawContext.class) +public interface DrawContextInvoker { + + @SuppressWarnings("unused") + @Invoker("drawTooltip") + void invokeDrawTooltip(TextRenderer textRenderer, List components, int x, int y, TooltipPositioner positioner); +} -- cgit From 992178bef293e0b31a2230ff4193d2ed99997bf0 Mon Sep 17 00:00:00 2001 From: victo Date: Wed, 13 Sep 2023 22:04:17 +0200 Subject: Improved personal compactor UI with tooltip display Made it so it doesn't render the slots if no items (mainly for AH) --- .../java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/main/java/me/xmrvizzy/skyblocker/mixin') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 4959f856..e16568a6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -143,6 +143,17 @@ public abstract class HandledScreenMixin extends Screen { List compactorItems = attributesKeys.stream().filter(s -> s.contains(itemSlotPrefix)).toList(); Map slotAndItem = new HashMap<>(); + if (compactorItems.isEmpty()) { + int slotsCount = (dimensions[0] * dimensions[1]); + components.add(targetIndex, TooltipComponent.of(Text.literal( + slotsCount + (slotsCount == 1 ? " slot": " slots")) + .fillStyle(Style.EMPTY.withColor(Formatting.DARK_GRAY)).asOrderedText())); + + ((DrawContextInvoker) context).invokeDrawTooltip(textRenderer, components, x, y, HoveredTooltipPositioner.INSTANCE); + ci.cancel(); + return; + } + compactorItems.forEach(s -> slotAndItem.put(getNumberAtEnd(s, itemSlotPrefix), ItemRegistry.getItemStack(extraAttributes.getString(s)))); -- cgit From df96aa7bb5bb79a78988ba6701e65a5de3a9ecf2 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Thu, 14 Sep 2023 15:54:08 +0200 Subject: "Refactor CompactorDeletorPreview logic for better structure" Split the logic for CompactorDeletorPreview to reduce the complexity within the HandledScreenMixin.java file. This change helps to make the code simpler and easier to maintain. --- .../skyblocker/mixin/HandledScreenMixin.java | 130 +++------------------ 1 file changed, 13 insertions(+), 117 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/mixin') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index e16568a6..ddcbb33f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -8,7 +8,7 @@ import me.xmrvizzy.skyblocker.skyblock.experiment.ChronomatronSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.ExperimentSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.SuperpairsSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.UltrasequencerSolver; -import me.xmrvizzy.skyblocker.skyblock.item.CompactorPreviewTooltipComponent; +import me.xmrvizzy.skyblocker.skyblock.item.CompactorDeletorPreview; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.utils.Utils; @@ -16,18 +16,12 @@ import me.xmrvizzy.skyblocker.utils.render.gui.ContainerSolver; 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.gui.tooltip.HoveredTooltipPositioner; -import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; -import net.minecraft.text.MutableText; -import net.minecraft.text.Style; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,10 +33,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.Set; @Mixin(HandledScreen.class) public abstract class HandledScreenMixin extends Screen { @@ -50,17 +41,6 @@ public abstract class HandledScreenMixin extends Screen { @Nullable protected Slot focusedSlot; - @Unique - private static final Map personalCompactorTypeToSlot = new HashMap<>(); - // Lines, and slots per lines - static { - personalCompactorTypeToSlot.put("4000", new int[]{1,1}); - personalCompactorTypeToSlot.put("5000", new int[]{1,3}); - personalCompactorTypeToSlot.put("6000", new int[]{1,7}); - personalCompactorTypeToSlot.put("7000", new int[]{2,6}); - personalCompactorTypeToSlot.put("default", new int[]{1,6}); - } - protected HandledScreenMixin(Text title) { super(title); } @@ -72,8 +52,12 @@ public abstract class HandledScreenMixin extends Screen { } } - @Inject(at = @At("HEAD"), method = "drawMouseoverTooltip", cancellable = true) + @SuppressWarnings("DataFlowIssue") // makes intellij be quiet about this.focusedSlot maybe being null. It's already null checked in mixined method. + @Inject(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;II)V"), cancellable = true) public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) { + ItemStack stack = this.focusedSlot.getStack(); + String internalName = ItemRegistry.getInternalName(stack); + // Hide Empty Tooltips if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && this.focusedSlot != null && focusedSlot.getStack().getName().getString().equals(" ")) { ci.cancel(); @@ -81,7 +65,13 @@ public abstract class HandledScreenMixin extends Screen { // Backpack Preview boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); - if (this.client != null && this.client.player != null && this.focusedSlot != null && shiftDown && this.getTitle().getString().equals("Storage") && this.focusedSlot.inventory != this.client.player.getInventory() && BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) { + if (this.client == null || this.client.player == null) return; + if (shiftDown && this.getTitle().getString().equals("Storage") && this.focusedSlot.inventory != this.client.player.getInventory() && BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) { + ci.cancel(); + } + + // Compactor Preview + if ((internalName.contains("PERSONAL_COMPACTOR_") || internalName.contains("PERSONAL_DELETOR_")) && CompactorDeletorPreview.displayCompactorDeletorPreview((DrawContextInvoker) context, x, y, stack)) { ci.cancel(); } } @@ -96,91 +86,7 @@ public abstract class HandledScreenMixin extends Screen { return skyblocker$experimentSolvers$getStack(slot, stack); } - @Inject(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;II)V"), cancellable = true) - private void skyblocker$addTooltipComponent(DrawContext context, int x, int y, CallbackInfo ci) { - if (this.focusedSlot == null || this.client == null) return; - ItemStack stack = this.focusedSlot.getStack(); - String internalName = ItemRegistry.getInternalName(stack); - // PERSONAL COMPACTOR - if (internalName.contains("PERSONAL_COMPACTOR_") || internalName.contains("PERSONAL_DELETOR_")) { - String prefix; - String itemSlotPrefix; - if (internalName.contains("PERSONAL_COMPACTOR_")) { - prefix = "PERSONAL_COMPACTOR_"; - itemSlotPrefix = "personal_compact_"; - } else { - prefix = "PERSONAL_DELETOR_"; - itemSlotPrefix = "personal_deletor_"; - } - - // Find the line to insert component - int targetIndex = -1; - int lineCount = 0; - List tooltips = Screen.getTooltipFromItem(this.client, stack); - for (int i = 0; i < tooltips.size(); i++) { - if (tooltips.get(i).getString().isEmpty()) { - lineCount += 1; - } - if (lineCount == 2) { - targetIndex = i; - break; - } - } - if (targetIndex == -1) return; - List components = new java.util.ArrayList<>(tooltips.stream().map(Text::asOrderedText).map(TooltipComponent::of).toList()); - - // STUFF - String internalID = ItemRegistry.getInternalName(stack); - String compactorType = internalID.replaceFirst(prefix, ""); - int[] dimensions = personalCompactorTypeToSlot.containsKey(compactorType) ? personalCompactorTypeToSlot.get(compactorType) : personalCompactorTypeToSlot.get("default"); - - NbtCompound nbt = stack.getNbt(); - if (nbt == null || !nbt.contains("ExtraAttributes", 10)) { - return; - } - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); - Set attributesKeys = extraAttributes.getKeys(); - List compactorItems = attributesKeys.stream().filter(s -> s.contains(itemSlotPrefix)).toList(); - Map slotAndItem = new HashMap<>(); - - if (compactorItems.isEmpty()) { - int slotsCount = (dimensions[0] * dimensions[1]); - components.add(targetIndex, TooltipComponent.of(Text.literal( - slotsCount + (slotsCount == 1 ? " slot": " slots")) - .fillStyle(Style.EMPTY.withColor(Formatting.DARK_GRAY)).asOrderedText())); - - ((DrawContextInvoker) context).invokeDrawTooltip(textRenderer, components, x, y, HoveredTooltipPositioner.INSTANCE); - ci.cancel(); - return; - } - - compactorItems.forEach(s -> slotAndItem.put(getNumberAtEnd(s, itemSlotPrefix), ItemRegistry.getItemStack(extraAttributes.getString(s)))); - - - components.add(targetIndex, new CompactorPreviewTooltipComponent(slotAndItem, dimensions)); - components.add(targetIndex, TooltipComponent.of(Text.literal(" ").append( - Text.literal("Contents:").fillStyle(Style.EMPTY - .withItalic(true))) - .asOrderedText())); - if (attributesKeys.stream().anyMatch(s -> s.contains("PERSONAL_DELETOR_ACTIVE"))) { - MutableText isActiveText = Text.literal("Active: "); - if (extraAttributes.getBoolean("PERSONAL_DELETOR_ACTIVE")) { - components.add(targetIndex, TooltipComponent.of(isActiveText.append( - Text.literal("YES").fillStyle(Style.EMPTY.withBold(true).withColor(Formatting.GREEN)) - ).asOrderedText() - )); - } else { - components.add(targetIndex, TooltipComponent.of(isActiveText.append( - Text.literal("NO").fillStyle(Style.EMPTY.withBold(true).withColor(Formatting.RED)) - ).asOrderedText() - )); - } - } - ((DrawContextInvoker) context).invokeDrawTooltip(textRenderer, components, x, y, HoveredTooltipPositioner.INSTANCE); - ci.cancel(); - } - } @Unique private ItemStack skyblocker$experimentSolvers$getStack(Slot slot, ItemStack stack) { @@ -212,14 +118,4 @@ public abstract class HandledScreenMixin extends Screen { } } } - - @Unique - private static Integer getNumberAtEnd(String str, String attributesKey) { - try { - String numberPartOfTheString = str.replace(attributesKey, ""); - return Integer.parseInt(numberPartOfTheString); - } catch (NumberFormatException e) { - return 0; - } - } } -- cgit From 63f8b9fac7ecb5c37e32031cc6061cbd1c7612c5 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Thu, 14 Sep 2023 15:55:35 +0200 Subject: "Moved BackpackPreview to new sub-package 'item'" Refactored code by moving the BackpackPreview class to a new 'item' sub-package. --- src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/mixin') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index ddcbb33f..48b85dbe 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -3,7 +3,7 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.mixin.accessor.DrawContextInvoker; -import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; +import me.xmrvizzy.skyblocker.skyblock.item.BackpackPreview; import me.xmrvizzy.skyblocker.skyblock.experiment.ChronomatronSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.ExperimentSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.SuperpairsSolver; -- cgit From 3881303e47384cc0b619c9172fcef685f29a56ce Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 15 Sep 2023 00:18:36 -0400 Subject: Refactor CompactorDeletorPreview and add option --- .../skyblocker/mixin/HandledScreenMixin.java | 24 ++++++++++++---------- .../mixin/accessor/DrawContextInvoker.java | 3 +-- 2 files changed, 14 insertions(+), 13 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/mixin') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 48b85dbe..33532788 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -2,12 +2,11 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.mixin.accessor.DrawContextInvoker; -import me.xmrvizzy.skyblocker.skyblock.item.BackpackPreview; import me.xmrvizzy.skyblocker.skyblock.experiment.ChronomatronSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.ExperimentSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.SuperpairsSolver; import me.xmrvizzy.skyblocker.skyblock.experiment.UltrasequencerSolver; +import me.xmrvizzy.skyblocker.skyblock.item.BackpackPreview; import me.xmrvizzy.skyblocker.skyblock.item.CompactorDeletorPreview; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; @@ -34,6 +33,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.Map; +import java.util.regex.Matcher; @Mixin(HandledScreen.class) public abstract class HandledScreenMixin extends Screen { @@ -52,27 +52,30 @@ public abstract class HandledScreenMixin extends Screen { } } - @SuppressWarnings("DataFlowIssue") // makes intellij be quiet about this.focusedSlot maybe being null. It's already null checked in mixined method. + @SuppressWarnings("DataFlowIssue") + // makes intellij be quiet about this.focusedSlot maybe being null. It's already null checked in mixined method. @Inject(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;II)V"), cancellable = true) public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) { - ItemStack stack = this.focusedSlot.getStack(); - String internalName = ItemRegistry.getInternalName(stack); + if (!Utils.isOnSkyblock()) return; // Hide Empty Tooltips - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && this.focusedSlot != null && focusedSlot.getStack().getName().getString().equals(" ")) { + if (SkyblockerConfig.get().general.hideEmptyTooltips && focusedSlot.getStack().getName().getString().equals(" ")) { ci.cancel(); } // Backpack Preview boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); - if (this.client == null || this.client.player == null) return; - if (shiftDown && this.getTitle().getString().equals("Storage") && this.focusedSlot.inventory != this.client.player.getInventory() && BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) { + if (shiftDown && getTitle().getString().equals("Storage") && focusedSlot.inventory != client.player.getInventory() && BackpackPreview.renderPreview(context, focusedSlot.getIndex(), x, y)) { ci.cancel(); } // Compactor Preview - if ((internalName.contains("PERSONAL_COMPACTOR_") || internalName.contains("PERSONAL_DELETOR_")) && CompactorDeletorPreview.displayCompactorDeletorPreview((DrawContextInvoker) context, x, y, stack)) { - ci.cancel(); + if (SkyblockerConfig.get().general.compactorDeletorPreview) { + ItemStack stack = focusedSlot.getStack(); + Matcher matcher = CompactorDeletorPreview.NAME.matcher(ItemRegistry.getInternalName(stack)); + if (matcher.matches() && CompactorDeletorPreview.drawPreview(context, stack, matcher.group("type"), matcher.group("size"), x, y)) { + ci.cancel(); + } } } @@ -87,7 +90,6 @@ public abstract class HandledScreenMixin extends Screen { } - @Unique private ItemStack skyblocker$experimentSolvers$getStack(Slot slot, ItemStack stack) { ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/DrawContextInvoker.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/DrawContextInvoker.java index 55ef0774..f1e5b684 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/DrawContextInvoker.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/DrawContextInvoker.java @@ -12,7 +12,6 @@ import java.util.List; @Mixin(DrawContext.class) public interface DrawContextInvoker { - @SuppressWarnings("unused") - @Invoker("drawTooltip") + @Invoker void invokeDrawTooltip(TextRenderer textRenderer, List components, int x, int y, TooltipPositioner positioner); } -- cgit