diff options
| author | viciscat <51047087+viciscat@users.noreply.github.com> | 2025-03-19 23:12:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-19 23:12:46 +0100 |
| commit | 5e40b335e228e6927da041a4c18a0a0362b9c1da (patch) | |
| tree | 1c02d2ac94b7e7a5d1e0ce294a8e9272e2fec451 /src/main/java | |
| parent | 87341278c2a1c547e1b5785326195620726a0730 (diff) | |
| download | Skyblocker-5e40b335e228e6927da041a4c18a0a0362b9c1da.tar.gz Skyblocker-5e40b335e228e6927da041a4c18a0a0362b9c1da.tar.bz2 Skyblocker-5e40b335e228e6927da041a4c18a0a0362b9c1da.zip | |
Visitor Helper fixes (#1219)
* fixes
* Update VisitorHelper.java
* oops + comments
* help
* typing is hard okay
* Fix potential NullPointerException
---------
Co-authored-by: Yasin <LifeIsAParadox@users.noreply.github.com>
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java | 2 | ||||
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/garden/visitor/VisitorHelper.java | 27 |
2 files changed, 21 insertions, 8 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java index 1b6842f6..639ad677 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java @@ -290,7 +290,7 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen switch (this.handler) { case GenericContainerScreenHandler genericContainerScreenHandler when genericContainerScreenHandler.getRows() == 6 -> { - VisitorHelper.onSlotClick(slot, slotId, title); + VisitorHelper.onSlotClick(slot, slotId, title, genericContainerScreenHandler.getSlot(13)); // Prevent selling to NPC shops ItemStack sellStack = this.handler.slots.get(49).getStack(); if (sellStack.getName().getString().equals("Sell Item") || ItemUtils.getLoreLineIf(sellStack, text -> text.contains("buyback")) != null) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/visitor/VisitorHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/visitor/VisitorHelper.java index bb9d8ac6..a4a031f0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/visitor/VisitorHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/visitor/VisitorHelper.java @@ -15,8 +15,10 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.component.DataComponentTypes; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.Slot; +import net.minecraft.text.MutableText; import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -33,12 +35,17 @@ public class VisitorHelper { private static final int Y_OFFSET = 4; private static final int ICON_SIZE = 16; private static final int LINE_HEIGHT = 3; + private static final ItemStack BARRIER = new ItemStack(Items.BARRIER); + + // Used to prevent adding the visitor again after the player clicks accept or refuse. + private static boolean processVisitor = false; @Init public static void initialize() { ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (!(screen instanceof HandledScreen<?> handledScreen) || !shouldRender()) return; + processVisitor = true; ScreenEvents.afterTick(screen).register(_screen -> updateVisitors(handledScreen.getScreenHandler())); ScreenEvents.afterRender(screen).register((_screen, context, _x, _y, _d) -> renderVisitorHelper(context, client.textRenderer)); }); @@ -54,6 +61,7 @@ public class VisitorHelper { * Updates the current visitors and their required items. */ private static void updateVisitors(ScreenHandler handler) { + if (!processVisitor) return; ItemStack visitorHead = handler.getSlot(13).getStack(); if (visitorHead == null || !visitorHead.contains(DataComponentTypes.LORE) || ItemUtils.getLoreLineIf(visitorHead, t -> t.contains("Times Visited")) == null) return; @@ -116,7 +124,7 @@ public class VisitorHelper { .findFirst() .map(NEUItem::getSkyblockItemId) .map(ItemRepository::getItemStack) - .orElse(null); + .orElse(BARRIER); }); } @@ -165,10 +173,11 @@ public class VisitorHelper { context.getMatrices().pop(); } + MutableText name = cachedStack != null ? cachedStack.getName().copy() : itemName.copy(); Text itemText = SkyblockerConfigManager.get().farming.visitorHelper.showStacksInVisitorHelper - ? cachedStack.getName().copy() + ? name .append(" x" + (totalAmount / 64) + " stacks + " + (totalAmount % 64)) - : cachedStack.getName().copy() + : name .append(" x" + totalAmount); int itemTextWidth = textRenderer.getWidth(itemText); @@ -223,8 +232,11 @@ public class VisitorHelper { } if (isMouseOverText(mouseX, mouseY, copyTextX, yPosition, textRenderer.getWidth(" [Copy Amount]"), textRenderer.fontHeight)) { - MinecraftClient.getInstance().keyboard.setClipboard(String.valueOf(totalAmount)); - MinecraftClient.getInstance().player.sendMessage(Constants.PREFIX.get().append("Copied amount successfully"), false); + MinecraftClient client = MinecraftClient.getInstance(); + client.keyboard.setClipboard(String.valueOf(totalAmount)); + if (client.player != null) { + client.player.sendMessage(Constants.PREFIX.get().append("Copied amount successfully"), false); + } return; } @@ -238,10 +250,11 @@ public class VisitorHelper { * * @param title The visitor's name to match for removal. */ - public static void onSlotClick(Slot slot, int slotId, String title) { + public static void onSlotClick(Slot slot, int slotId, String title, Slot visitorHeadSlot) { if ((slotId == 29 || slotId == 13 || slotId == 33) && slot.hasStack() && ItemUtils.getLoreLineIf(slot.getStack(), s -> s.equals("Click to give!") || s.equals("Click to refuse!")) != null) { - activeVisitors.removeIf(entry -> entry.name().getString().equals(title)); + activeVisitors.removeIf(entry -> entry.name().getString().equals(title) && visitorHeadSlot.hasStack() && ItemUtils.getHeadTexture(visitorHeadSlot.getStack()).equals(ItemUtils.getHeadTexture(entry.head()))); + processVisitor = false; } updateItems(); |
