From 2ec071136965e45db2447be781b6805b134d5d49 Mon Sep 17 00:00:00 2001 From: viciscat <51047087+viciscat@users.noreply.github.com> Date: Sat, 27 Apr 2024 18:32:00 +0200 Subject: possible kuudra crash fix --- .../hysky/skyblocker/mixins/HandledScreenProviderMixin.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/main/java/de/hysky') diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java index be1fdf8d..2b576da1 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java @@ -32,17 +32,20 @@ public interface HandledScreenProviderMixin { T screenHandler = type.create(id, player.getInventory()); String nameLowercase = name.getString().toLowerCase(); + if (screenHandler instanceof GenericContainerScreenHandler) { + if (nameLowercase.contains("select tier")) { + PartyFinderScreen.isInKuudraPartyFinder = true; + } else if (nameLowercase.contains("catacombs")) { + PartyFinderScreen.isInKuudraPartyFinder = false; + } + } + switch (screenHandler) { // Better party finder case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.betterPartyFinder && PartyFinderScreen.possibleInventoryNames.contains(nameLowercase) -> { if (client.currentScreen != null) { String lowerCase = client.currentScreen.getTitle().getString().toLowerCase(); if (lowerCase.contains("group builder")) return; - if (lowerCase.contains("select tier")) { - PartyFinderScreen.isInKuudraPartyFinder = true; - } else if (lowerCase.contains("catacombs")) { - PartyFinderScreen.isInKuudraPartyFinder = false; - } } if (PartyFinderScreen.isInKuudraPartyFinder) return; -- cgit From 69476a65e6831c0d857877e7d95519c1334239ec Mon Sep 17 00:00:00 2001 From: viciscat <51047087+viciscat@users.noreply.github.com> Date: Sat, 27 Apr 2024 20:14:54 +0200 Subject: possible royal resident fix --- .../skyblocker/mixins/HandledScreenMixin.java | 2 +- .../skyblocker/skyblock/garden/VisitorHelper.java | 40 +++++++++++++++------- 2 files changed, 28 insertions(+), 14 deletions(-) (limited to 'src/main/java/de/hysky') diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java index cbc29974..49632919 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java @@ -203,7 +203,7 @@ public abstract class HandledScreenMixin extends Screen return; } if (this.handler instanceof GenericContainerScreenHandler genericContainerScreenHandler && genericContainerScreenHandler.getRows() == 6) { - VisitorHelper.onSlotClick(slot, slotId, title); + VisitorHelper.onSlotClick(genericContainerScreenHandler.getSlot(13), slotId, title); // Prevent selling to NPC shops ItemStack sellStack = this.handler.slots.get(49).getStack(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java index 2805cb0e..770c7b02 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java @@ -1,5 +1,6 @@ package de.hysky.skyblocker.skyblock.garden; +import com.mojang.authlib.properties.Property; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.utils.ItemUtils; @@ -7,14 +8,17 @@ import de.hysky.skyblocker.utils.NEURepoManager; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.scheduler.MessageScheduler; import io.github.moulberry.repo.data.NEUItem; +import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectObjectImmutablePair; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.font.TextRenderer; 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.Text; @@ -33,7 +37,8 @@ import java.util.Map; public class VisitorHelper { private static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Visitor Helper"); - private static final Map> itemMap = new HashMap<>(); + // The pair contains the name of the visitor and the texture if the icon is a player head + private static final Map, Object2IntMap> itemMap = new HashMap<>(); private static final Map itemCache = new HashMap<>(); private static final int TEXT_START_X = 4; private static final int TEXT_START_Y = 4; @@ -57,7 +62,7 @@ public class VisitorHelper { public static void onMouseClicked(double mouseX, double mouseY, int mouseButton, TextRenderer textRenderer) { int yPosition = TEXT_START_Y; - for (Map.Entry> visitorEntry : itemMap.entrySet()) { + for (Map.Entry, Object2IntMap> visitorEntry : itemMap.entrySet()) { int textWidth; int textHeight = textRenderer.fontHeight; @@ -76,9 +81,9 @@ public class VisitorHelper { } } - public static void onSlotClick(Slot slot, int slotId, String title) { + public static void onSlotClick(Slot visitorSlot, int slotId, String title) { if (slotId == 29 || slotId == 13 || slotId == 33) { - itemMap.remove(title); + itemMap.remove(new ObjectObjectImmutablePair<>(title, getTextureOrNull(visitorSlot.getStack()))); } } @@ -87,10 +92,18 @@ public class VisitorHelper { if (visitorItem == null || !visitorItem.contains(DataComponentTypes.LORE) || ItemUtils.getLoreLineIf(visitorItem, t -> t.contains("Times Visited")) == null) return; ItemStack acceptButton = handler.getSlot(29).getStack(); if (acceptButton == null) return; - processLore(visitorName, ItemUtils.getLore(acceptButton)); + processLore(visitorName, getTextureOrNull(visitorItem), ItemUtils.getLore(acceptButton)); } - private static void processLore(String visitorName, List loreList) { + private static @Nullable String getTextureOrNull(ItemStack stack) { + if (!stack.isOf(Items.PLAYER_HEAD) || stack.get(DataComponentTypes.PROFILE) == null) return null; + return stack.get(DataComponentTypes.PROFILE).properties().get("textures").stream() + .map(Property::value) + .findFirst() + .orElse(null); + } + + private static void processLore(String visitorName, @Nullable String visitorTexture, List loreList) { boolean saveRequiredItems = false; for (int i = 0; i < loreList.size(); i++) { String lore = loreList.get(i).getString(); @@ -99,19 +112,20 @@ public class VisitorHelper { else if (lore.contains("Rewards")) break; else if (saveRequiredItems) - updateItemMap(visitorName, loreList.get(i)); + updateItemMap(visitorName, visitorTexture, loreList.get(i)); } } - private static void updateItemMap(String visitorName, Text lore) { + private static void updateItemMap(String visitorName, @Nullable String visitorTexture, Text lore) { String[] splitItemText = lore.getString().split(" x"); String itemName = splitItemText[0].trim(); if (itemName.isEmpty()) return; try { int amount = splitItemText.length == 2 ? NumberFormat.getInstance(Locale.US).parse(splitItemText[1].trim()).intValue() : 1; - Object2IntMap visitorMap = itemMap.getOrDefault(visitorName, new Object2IntOpenHashMap<>()); + ObjectObjectImmutablePair key = new ObjectObjectImmutablePair<>(visitorName, visitorTexture); + Object2IntMap visitorMap = itemMap.getOrDefault(key, new Object2IntOpenHashMap<>()); visitorMap.putIfAbsent(itemName, amount); - itemMap.putIfAbsent(visitorName, visitorMap); + itemMap.putIfAbsent(key, visitorMap); } catch (Exception e) { LOGGER.error("[Skyblocker Visitor Helper] Failed to parse item: " + lore.getString(), e); } @@ -121,9 +135,9 @@ public class VisitorHelper { context.getMatrices().push(); context.getMatrices().translate(0, 0, 200); int index = 0; - for (Map.Entry> visitorEntry : itemMap.entrySet()) { - String visitorName = visitorEntry.getKey(); - drawTextWithOptionalUnderline(context, textRenderer, Text.literal(visitorName), TEXT_START_X, TEXT_START_Y + index * (LINE_SPACING + textRenderer.fontHeight), mouseX, mouseY); + for (Map.Entry, Object2IntMap> visitorEntry : itemMap.entrySet()) { + Pair visitorName = visitorEntry.getKey(); + drawTextWithOptionalUnderline(context, textRenderer, Text.literal(visitorName.left()), TEXT_START_X, TEXT_START_Y + index * (LINE_SPACING + textRenderer.fontHeight), mouseX, mouseY); index++; for (Object2IntMap.Entry itemEntry : visitorEntry.getValue().object2IntEntrySet()) { -- cgit From 718eba960649c793c4b90822e61a194f569fa269 Mon Sep 17 00:00:00 2001 From: viciscat <51047087+viciscat@users.noreply.github.com> Date: Sat, 27 Apr 2024 22:17:43 +0200 Subject: possible fix for crafting in mirrorverse --- .../skyblock/item/SkyblockCraftingTableScreen.java | 15 ++++++---- .../item/SkyblockCraftingTableScreenHandler.java | 35 +++++++++++++++++----- 2 files changed, 36 insertions(+), 14 deletions(-) (limited to 'src/main/java/de/hysky') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java index ad4f8b30..a09b260a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java @@ -23,6 +23,7 @@ import net.minecraft.screen.AbstractRecipeScreenHandler; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; +import net.minecraft.text.OrderedText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -56,11 +57,13 @@ public class SkyblockCraftingTableScreen extends HandledScreen this.onMouseClick(handler.slots.get(26), handler.slots.get(26).id, 0, SlotActionType.PICKUP)); - moreCraftsButton.setTooltipDelay(Duration.ofMillis(250L)); - moreCraftsButton.setTooltip(Tooltip.of(Text.literal("More Crafts"))); - this.addDrawableChild(moreCraftsButton); + if (!handler.mirrorverse) { + moreCraftsButton = new TexturedButtonWidget(this.x + 174, y + 62, 16, 16, MORE_CRAFTS_TEXTURES, + button -> this.onMouseClick(handler.slots.get(26), handler.slots.get(26).id, 0, SlotActionType.PICKUP)); + moreCraftsButton.setTooltipDelay(Duration.ofMillis(250L)); + moreCraftsButton.setTooltip(Tooltip.of(Text.literal("More Crafts"))); + this.addDrawableChild(moreCraftsButton); + } assert (client != null ? client.player : null) != null; client.player.currentScreenHandler = handler; // recipe book replaces it with the Dummy one fucking DUMBASS this.addSelectableChild(this.recipeBook); @@ -103,7 +106,7 @@ public class SkyblockCraftingTableScreen extends HandledScreen type, int syncId, PlayerInventory playerInventory, Inventory inventory, int rows) { super(type, syncId, playerInventory, inventory, rows); + mirrorverse = Utils.getIslandArea().toLowerCase().contains("mirrorverse"); + int[] activeSlots = mirrorverse ? riftNormalSlots: normalSlots; + for (int i = 0; i < rows * 9; i++) { Slot originalSlot = slots.get(i); - if (Arrays.binarySearch(normalSlots, i) >= 0) { + if (Arrays.binarySearch(activeSlots, i) >= 0) { int[] coords = getCoords(i); Slot slot = new Slot(originalSlot.inventory, originalSlot.getIndex(), coords[0], coords[1]); slot.id = i; @@ -45,14 +57,21 @@ public class SkyblockCraftingTableScreenHandler extends GenericContainerScreenHa } private int[] getCoords(int slot) { - if (slot == 23) return new int[]{124, 35}; - if (slot == 16 || slot == 25 || slot == 34) { - int y = (slot / 9 - 1) * 18 + 8; - return new int[]{174, y}; + if (mirrorverse) { + if (slot == 24) return new int[]{124, 35}; + int gridX = slot % 9 - 2; + int gridY = slot / 9 - 1; + return new int[]{30 + gridX * 18, 17 + gridY * 18}; + } else { + if (slot == 23) return new int[]{124, 35}; + if (slot == 16 || slot == 25 || slot == 34) { + int y = (slot / 9 - 1) * 18 + 8; + return new int[]{174, y}; + } + int gridX = slot % 9 - 1; + int gridY = slot / 9 - 1; + return new int[]{30 + gridX * 18, 17 + gridY * 18}; } - int gridX = slot % 9 - 1; - int gridY = slot / 9 - 1; - return new int[]{30 + gridX * 18, 17 + gridY * 18}; } public static class DisabledSlot extends Slot { -- cgit From 0c6bae00eff8b5ab4010aec46237deaae75c6088 Mon Sep 17 00:00:00 2001 From: viciscat <51047087+viciscat@users.noreply.github.com> Date: Sun, 28 Apr 2024 20:26:49 +0200 Subject: put in switch to make aaron happy --- .../hysky/skyblocker/mixins/HandledScreenProviderMixin.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'src/main/java/de/hysky') diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java index 2b576da1..da87c2a3 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java @@ -32,16 +32,11 @@ public interface HandledScreenProviderMixin { T screenHandler = type.create(id, player.getInventory()); String nameLowercase = name.getString().toLowerCase(); - if (screenHandler instanceof GenericContainerScreenHandler) { - if (nameLowercase.contains("select tier")) { - PartyFinderScreen.isInKuudraPartyFinder = true; - } else if (nameLowercase.contains("catacombs")) { - PartyFinderScreen.isInKuudraPartyFinder = false; - } - } - switch (screenHandler) { // Better party finder + case GenericContainerScreenHandler ignored when SkyblockerConfigManager.get().general.betterPartyFinder && nameLowercase.contains("select tier") -> PartyFinderScreen.isInKuudraPartyFinder = true; + case GenericContainerScreenHandler ignored when SkyblockerConfigManager.get().general.betterPartyFinder && nameLowercase.contains("catacombs") -> PartyFinderScreen.isInKuudraPartyFinder = false; + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.betterPartyFinder && PartyFinderScreen.possibleInventoryNames.contains(nameLowercase) -> { if (client.currentScreen != null) { String lowerCase = client.currentScreen.getTitle().getString().toLowerCase(); -- cgit From 76d03afae9e757510fae0ae5ac701c26d19f6327 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sun, 28 Apr 2024 14:42:06 -0400 Subject: Refactor VisitorHelper and head detection --- .../de/hysky/skyblocker/mixins/HandledScreenMixin.java | 2 +- .../de/hysky/skyblocker/skyblock/garden/VisitorHelper.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'src/main/java/de/hysky') diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java index 49632919..ff510cf4 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java @@ -203,7 +203,7 @@ public abstract class HandledScreenMixin extends Screen return; } if (this.handler instanceof GenericContainerScreenHandler genericContainerScreenHandler && genericContainerScreenHandler.getRows() == 6) { - VisitorHelper.onSlotClick(genericContainerScreenHandler.getSlot(13), slotId, title); + VisitorHelper.onSlotClick(slot, slotId, title, genericContainerScreenHandler.getSlot(13).getStack()); // Prevent selling to NPC shops ItemStack sellStack = this.handler.slots.get(49).getStack(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java index 770c7b02..ff6086d3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java @@ -81,9 +81,9 @@ public class VisitorHelper { } } - public static void onSlotClick(Slot visitorSlot, int slotId, String title) { + public static void onSlotClick(Slot slot, int slotId, String title, ItemStack visitorHeadStack) { if (slotId == 29 || slotId == 13 || slotId == 33) { - itemMap.remove(new ObjectObjectImmutablePair<>(title, getTextureOrNull(visitorSlot.getStack()))); + itemMap.remove(new ObjectObjectImmutablePair<>(title, getTextureOrNull(visitorHeadStack))); } } @@ -105,14 +105,14 @@ public class VisitorHelper { private static void processLore(String visitorName, @Nullable String visitorTexture, List loreList) { boolean saveRequiredItems = false; - for (int i = 0; i < loreList.size(); i++) { - String lore = loreList.get(i).getString(); + for (Text text : loreList) { + String lore = text.getString(); if (lore.contains("Items Required")) saveRequiredItems = true; else if (lore.contains("Rewards")) break; else if (saveRequiredItems) - updateItemMap(visitorName, visitorTexture, loreList.get(i)); + updateItemMap(visitorName, visitorTexture, text); } } @@ -122,12 +122,12 @@ public class VisitorHelper { if (itemName.isEmpty()) return; try { int amount = splitItemText.length == 2 ? NumberFormat.getInstance(Locale.US).parse(splitItemText[1].trim()).intValue() : 1; - ObjectObjectImmutablePair key = new ObjectObjectImmutablePair<>(visitorName, visitorTexture); + Pair key = Pair.of(visitorName, visitorTexture); Object2IntMap visitorMap = itemMap.getOrDefault(key, new Object2IntOpenHashMap<>()); visitorMap.putIfAbsent(itemName, amount); itemMap.putIfAbsent(key, visitorMap); } catch (Exception e) { - LOGGER.error("[Skyblocker Visitor Helper] Failed to parse item: " + lore.getString(), e); + LOGGER.error("[Skyblocker Visitor Helper] Failed to parse item: {}", lore.getString(), e); } } -- cgit