aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorviciscat <51047087+viciscat@users.noreply.github.com>2025-03-19 23:12:46 +0100
committerGitHub <noreply@github.com>2025-03-19 23:12:46 +0100
commit5e40b335e228e6927da041a4c18a0a0362b9c1da (patch)
tree1c02d2ac94b7e7a5d1e0ce294a8e9272e2fec451 /src/main/java
parent87341278c2a1c547e1b5785326195620726a0730 (diff)
downloadSkyblocker-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.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/visitor/VisitorHelper.java27
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();