aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorolim <bobq4582@gmail.com>2024-05-28 15:23:53 +0100
committerolim <bobq4582@gmail.com>2024-05-28 19:57:20 +0100
commitd7cd2aacf94e3064001729f0a2b2e3f064de6d8b (patch)
tree9f0f02c6aa66349af3a3743ffde38c1d579bb9b8 /src/main/java/de
parentfb6beb6b25e8fb71cbc3b6927c65630fa5bc0a8b (diff)
downloadSkyblocker-d7cd2aacf94e3064001729f0a2b2e3f064de6d8b.tar.gz
Skyblocker-d7cd2aacf94e3064001729f0a2b2e3f064de6d8b.tar.bz2
Skyblocker-d7cd2aacf94e3064001729f0a2b2e3f064de6d8b.zip
add pet level filters and star filters
adds the ability to search for max level pet as well as hiding skins when search for a pet. and when i item is starable adds the ability to search for an amount of stars
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java44
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java105
2 files changed, 128 insertions, 21 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java
index a03f3549..489677ec 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java
@@ -1,10 +1,14 @@
package de.hysky.skyblocker.skyblock.searchoverlay;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import dev.isxander.yacl3.gui.TooltipButtonWidget;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.client.gui.tooltip.Tooltip;
import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.client.gui.widget.TextFieldWidget;
+import net.minecraft.client.gui.widget.ToggleButtonWidget;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
@@ -20,6 +24,8 @@ public class OverlayScreen extends Screen {
private static final int rowHeight = 20;
private TextFieldWidget searchField;
private ButtonWidget finishedButton;
+ private ButtonWidget maxPetButton;
+ private TextFieldWidget dungeonStarField;
private ButtonWidget[] suggestionButtons;
private ButtonWidget[] historyButtons;
@@ -48,6 +54,7 @@ public class OverlayScreen extends Screen {
.position(startX + rowWidth - rowHeight, startY)
.size(rowHeight, rowHeight).build();
+
// suggested item buttons
int rowOffset = rowHeight;
int totalSuggestions = SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.maxSuggestions;
@@ -80,6 +87,34 @@ public class OverlayScreen extends Screen {
break;
}
}
+ //auction only elements
+ if (SearchOverManager.isAuction) {
+ //max pet level button
+ maxPetButton = ButtonWidget.builder(Text.literal("temp"), a -> {
+ SearchOverManager.maxPetLevel = !SearchOverManager.maxPetLevel;
+ if (SearchOverManager.maxPetLevel) {
+ maxPetButton.setMessage(Text.literal("Max Pet Level ✔").formatted(Formatting.GREEN));
+ } else {
+ maxPetButton.setMessage(Text.literal("Max Pet Level ❌").formatted(Formatting.RED));
+ }
+ })
+ .position(startX + rowWidth, startY)
+ .size(rowWidth / 2, rowHeight).build();
+ if (SearchOverManager.maxPetLevel) {
+ maxPetButton.setMessage(Text.literal("Max Pet Level ✔").formatted(Formatting.GREEN));
+ } else {
+ maxPetButton.setMessage(Text.literal("Max Pet Level ❌").formatted(Formatting.RED));
+ }
+
+ //dungeon star input
+ this.dungeonStarField = new TextFieldWidget(textRenderer, startX + (int) (rowWidth * 1.25), startY + rowHeight, rowWidth / 4, rowHeight, Text.literal(""));
+ if (SearchOverManager.dungeonStars > 0) {
+ dungeonStarField.setText(String.valueOf(SearchOverManager.dungeonStars));
+ }
+ dungeonStarField.setMaxLength(2);
+ dungeonStarField.setTooltip(Tooltip.of(Text.of("Star count for dungeon items")));
+ dungeonStarField.setChangedListener(SearchOverManager::updateDungeonStars);
+ }
//add drawables in order to make tab navigation sensible
addDrawableChild(searchField);
@@ -93,6 +128,11 @@ public class OverlayScreen extends Screen {
}
addDrawableChild(finishedButton);
+ if (SearchOverManager.isAuction) {
+ addDrawableChild(maxPetButton);
+ addDrawableChild(dungeonStarField);
+ }
+
//focus the search box
this.setInitialFocus(searchField);
}
@@ -105,9 +145,13 @@ public class OverlayScreen extends Screen {
super.render(context, mouseX, mouseY, delta);
int renderOffset = (rowHeight - 16) / 2;
context.drawGuiTexture(SEARCH_ICON_TEXTURE, finishedButton.getX() + renderOffset, finishedButton.getY() + renderOffset, 16, 16);
+ //labels
if (historyButtons.length > 0 && historyButtons[0] != null) {
context.drawText(textRenderer, Text.translatable("skyblocker.config.general.searchOverlay.historyLabel"), historyButtons[0].getX() + renderOffset, historyButtons[0].getY() - rowHeight / 2, 0xFFFFFFFF, true);
}
+ if (SearchOverManager.isAuction) {
+ context.drawText(textRenderer, Text.literal("Stars:"), dungeonStarField.getX() - dungeonStarField.getWidth() + renderOffset, dungeonStarField.getY() + rowHeight / 4, 0xFFFFFFFF, true);
+ }
//draw item stacks and tooltip to buttons
for (int i = 0; i < suggestionButtons.length; i++) {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java
index 917a6aa0..c6cc05aa 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java
@@ -10,6 +10,7 @@ import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
import de.hysky.skyblocker.utils.NEURepoManager;
import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
import io.github.moulberry.repo.data.NEUItem;
+import io.github.moulberry.repo.util.NEUId;
import it.unimi.dsi.fastutil.Pair;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
@@ -24,10 +25,7 @@ import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
+import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -40,8 +38,7 @@ public class SearchOverManager {
private static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Search Overlay");
private static final Pattern BAZAAR_ENCHANTMENT_PATTERN = Pattern.compile("ENCHANTMENT_(\\D*)_(\\d+)");
- private static final Pattern AUCTION_PET_AND_RUNE_PATTERN = Pattern.compile("([A-Z0-9_]+);(\\d+)");
-
+ private static final String PET_NAME_START = "[Lvl {LVL}] ";
/**
* converts index (in array) +1 to a roman numeral
*/
@@ -52,14 +49,18 @@ public class SearchOverManager {
private static @Nullable SignBlockEntity sign = null;
private static boolean signFront = true;
- private static boolean isAuction;
+ protected static boolean isAuction;
private static boolean isCommand;
protected static String search = "";
+ protected static Boolean maxPetLevel = false;
+ protected static int dungeonStars = -1;
// Use non-final variables and swap them to prevent concurrent modification
private static HashSet<String> bazaarItems;
private static HashSet<String> auctionItems;
+ private static HashSet<String> auctionPets;
+ private static HashSet<String> starableItems;
private static HashMap<String, String> namesToId;
public static String[] suggestionsArray = {};
@@ -91,6 +92,8 @@ public class SearchOverManager {
private static void loadItems() {
HashSet<String> bazaarItems = new HashSet<>();
HashSet<String> auctionItems = new HashSet<>();
+ HashSet<String> auctionPets = new HashSet<>();
+ HashSet<String> starableItems = new HashSet<>();
HashMap<String, String> namesToId = new HashMap<>();
//get bazaar items
@@ -138,29 +141,29 @@ public class SearchOverManager {
}
//get auction items
+ Set<@NEUId String> essenceCosts = NEURepoManager.NEU_REPO.getConstants().getEssenceCost().getCosts().keySet();
try {
if (TooltipInfoType.THREE_DAY_AVERAGE.getData() == null) {
TooltipInfoType.THREE_DAY_AVERAGE.run();
}
for (Map.Entry<String, JsonElement> entry : TooltipInfoType.THREE_DAY_AVERAGE.getData().entrySet()) {
String id = entry.getKey();
-
- Matcher matcher = AUCTION_PET_AND_RUNE_PATTERN.matcher(id);
- if (matcher.find()) {//is a pet or rune convert id to name
- String name = matcher.group(1).replace("_", " ");
- name = capitalizeFully(name);
- auctionItems.add(name);
- namesToId.put(name, id);
- continue;
- }
- //something else look up in NEU repo.
+ //look up in NEU repo.
id = id.split("[+-]")[0];
NEUItem neuItem = NEURepoManager.NEU_REPO.getItems().getItemBySkyblockId(id);
if (neuItem != null) {
String name = Formatting.strip(neuItem.getDisplayName());
+ //add names that are pets to the list of pets to work with the lvl 100 button
+ if (name != null && name.startsWith(PET_NAME_START)) {
+ name = name.replace(PET_NAME_START, "");
+ auctionPets.add(name);
+ }
+ //if it has essence cost add to starable items
+ if (essenceCosts.contains(neuItem.getSkyblockItemId())) {
+ starableItems.add(name);
+ }
auctionItems.add(name);
namesToId.put(name, id);
- continue;
}
}
} catch (Exception e) {
@@ -169,11 +172,14 @@ public class SearchOverManager {
SearchOverManager.bazaarItems = bazaarItems;
SearchOverManager.auctionItems = auctionItems;
+ SearchOverManager.auctionPets = auctionPets;
+ SearchOverManager.starableItems = starableItems;
SearchOverManager.namesToId = namesToId;
}
/**
* Capitalizes the first letter off every word in a string
+ *
* @param str string to capitalize
*/
private static String capitalizeFully(String str) {
@@ -188,8 +194,9 @@ public class SearchOverManager {
/**
* Receives data when a search is started and resets values
- * @param sign the sign that is being edited
- * @param front if it's the front of the sign
+ *
+ * @param sign the sign that is being edited
+ * @param front if it's the front of the sign
* @param isAuction if the sign is loaded from the auction house menu or bazaar
*/
public static void updateSign(@NotNull SignBlockEntity sign, boolean front, boolean isAuction) {
@@ -214,6 +221,7 @@ public class SearchOverManager {
/**
* Updates the search value and the suggestions based on that value.
+ *
* @param newValue new search value
*/
protected static void updateSearch(String newValue) {
@@ -224,8 +232,18 @@ public class SearchOverManager {
suggestionsArray = (isAuction ? auctionItems : bazaarItems).stream().filter(item -> item.toLowerCase().contains(search.toLowerCase())).limit(totalSuggestions).toArray(String[]::new);
}
+ protected static void updateDungeonStars(String newValue) {
+ try {
+ dungeonStars = Math.min(Integer.parseInt(newValue), 10);
+ } catch (Exception e) {
+ //not parsable number just set to 0
+ dungeonStars = 0;
+ }
+ }
+
/**
* Gets the suggestion in the suggestion array at the index
+ *
* @param index index of suggestion
*/
protected static String getSuggestion(int index) {
@@ -242,6 +260,7 @@ public class SearchOverManager {
/**
* Gets the item name in the history array at the index
+ *
* @param index index of suggestion
*/
protected static String getHistory(int index) {
@@ -286,13 +305,18 @@ public class SearchOverManager {
}
/**
- *Saves the current value of ({@link SearchOverManager#search}) then pushes it to a command or sign depending on how the gui was opened
+ * Saves the current value of ({@link SearchOverManager#search}) then pushes it to a command or sign depending on how the gui was opened
*/
protected static void pushSearch() {
//save to history
if (!search.isEmpty()) {
saveHistory();
}
+ //add pet level or dungeon starts if in ah
+ if (isAuction) {
+ addExtras();
+ }
+ //push
if (isCommand) {
pushCommand();
} else {
@@ -301,6 +325,45 @@ public class SearchOverManager {
}
/**
+ * Adds pet level 100 or necessary dungeon starts if needed
+ */
+ private static void addExtras() {
+ // pet level
+ if (maxPetLevel) {
+ if (auctionPets.contains(search)) {
+ if (search.equals("Golden Dragon")) {
+ search = "[Lvl 200] " + search;
+ } else {
+ search = "[Lvl 100] " + search;
+ }
+ }
+ } else {
+ // still filter for only pets
+ if (auctionPets.contains(search)) {
+ // add bracket so only get pets
+ search = "] " + search;
+ }
+ }
+
+ // dungeon stars
+ // check if it's a dungeon item and if so add correct stars
+ if (dungeonStars > 0 && starableItems.contains(search)) {
+ StringBuilder starString = new StringBuilder(" ");
+ //add stars up to 5
+ starString.append("✪".repeat(Math.max(0, Math.min(dungeonStars, 5))));
+ //add number for other stars
+ switch (dungeonStars) {
+ case 6 -> starString.append("➊");
+ case 7 -> starString.append("➋");
+ case 8 -> starString.append("➌");
+ case 9 -> starString.append("➍");
+ case 10 -> starString.append("➎");
+ }
+ search += starString.toString();
+ }
+ }
+
+ /**
* runs the command to search for the value in ({@link SearchOverManager#search})
*/
private static void pushCommand() {