diff options
author | olim88 <bobq4582@gmail.com> | 2024-05-24 03:19:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-23 22:19:48 -0400 |
commit | 5d5d1347644a798551100d22feddc92d4049cb59 (patch) | |
tree | a3bc76cc1bcd58dc31c2c633a30f98357f7a26b9 /src/main/java/de | |
parent | 813df61af0b38371efa38c817fe6d406a37a3317 (diff) | |
download | Skyblocker-5d5d1347644a798551100d22feddc92d4049cb59.tar.gz Skyblocker-5d5d1347644a798551100d22feddc92d4049cb59.tar.bz2 Skyblocker-5d5d1347644a798551100d22feddc92d4049cb59.zip |
fix bugs + refactor (#719)
fix crash when adding new rule after selecting last rule, let location input length be 96, add mineshaft location and stop grabing from api
Diffstat (limited to 'src/main/java/de')
4 files changed, 30 insertions, 34 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRule.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRule.java index 34cc6352..7fd6844d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRule.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRule.java @@ -232,19 +232,19 @@ public class ChatRule { return true; } - String rawLocation = Utils.getLocationRaw(); + String cleanedMapLocation = Utils.getMap().toLowerCase().replace(" ", ""); Boolean isLocationValid = null; - - for (String validLocation : validLocations.replace(" ", "").toLowerCase().split(",")) {//the locations are raw locations split by "," and start with ! if not locations - String rawValidLocation = ChatRulesHandler.locations.get(validLocation.replace("!","")); - if (rawValidLocation == null) continue; + for (String validLocation : validLocations.replace(" ", "").toLowerCase().split(",")) {//the locations are split by "," and start with ! if not locations + if (validLocation == null) continue; if (validLocation.startsWith("!")) {//not location - if (Objects.equals(rawValidLocation, rawLocation.toLowerCase())) { + if (Objects.equals(validLocation.substring(1), cleanedMapLocation)) { isLocationValid = false; break; + } else { + isLocationValid = true; } } else { - if (Objects.equals(rawValidLocation, rawLocation.toLowerCase())) { //normal location + if (Objects.equals(validLocation, cleanedMapLocation)) { //normal location isLocationValid = true; break; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java index cb6e8cc8..9ecb71e2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java @@ -156,6 +156,7 @@ public class ChatRuleConfigScreen extends Screen { locationLabelTextPos = currentPos; lineXOffset = client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.locations")) + SPACER_X; locationsInput = new TextFieldWidget(client.textRenderer, currentPos.leftInt() + lineXOffset, currentPos.rightInt(), 200, 20, Text.of("")); + locationsInput.setMaxLength(96); locationsInput.setText(chatRule.getValidLocations()); MutableText locationToolTip = Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.locations.@Tooltip"); locationToolTip.append("\n"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java index 29c052b8..1fb763e2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java @@ -45,7 +45,7 @@ public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfig protected void addRuleAfterSelected() { hasChanged = true; - int newIndex = children().indexOf(getSelectedOrNull()) + 1; + int newIndex = Math.max(children().indexOf(getSelectedOrNull()), 0); ChatRulesHandler.chatRuleList.add(newIndex, new ChatRule()); children().add(newIndex + 1, new ChatRuleConfigEntry(newIndex)); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java index d1c7f4fd..90a3b641 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java @@ -8,6 +8,7 @@ import com.mojang.serialization.JsonOps; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.mixins.accessors.MessageHandlerAccessor; import de.hysky.skyblocker.utils.Http; +import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.minecraft.client.MinecraftClient; @@ -34,19 +35,33 @@ public class ChatRulesHandler { private static final Path CHAT_RULE_FILE = SkyblockerMod.CONFIG_DIR.resolve("chat_rules.json"); private static final Codec<Map<String, List<ChatRule>>> MAP_CODEC = Codec.unboundedMap(Codec.STRING, ChatRule.LIST_CODEC); /** - * look up table for the locations input by the users to raw locations - */ - protected static final HashMap<String, String> locations = new HashMap<>(); - /** * list of possible locations still formatted for the tool tip */ - protected static final List<String> locationsList = new ArrayList<>(); + protected static final List<String> locationsList = List.of ( + "The Farming Islands", + "Crystal Hollows", + "Jerry's Workshop", + "The Park", + "Dark Auction", + "Dungeons", + "The End", + "Crimson Isle", + "Hub", + "Kuudra's Hollow", + "Private Island", + "Dwarven Mines", + "The Garden", + "Gold Mine", + "Blazing Fortress", + "Deep Caverns", + "Spider's Den", + "Mineshaft" + ); protected static final List<ChatRule> chatRuleList = new ArrayList<>(); public static void init() { CompletableFuture.runAsync(ChatRulesHandler::loadChatRules); - CompletableFuture.runAsync(ChatRulesHandler::loadLocations); ClientReceiveMessageEvents.ALLOW_GAME.register(ChatRulesHandler::checkMessage); } @@ -76,26 +91,6 @@ public class ChatRulesHandler { chatRuleList.add(miningAbilityRule); } - private static void loadLocations() { - try { - String response = Http.sendGetRequest("https://api.hypixel.net/v2/resources/games"); - JsonObject locationsJson = JsonParser.parseString(response).getAsJsonObject().get("games").getAsJsonObject().get("SKYBLOCK").getAsJsonObject().get("modeNames").getAsJsonObject(); - for (Map.Entry<String, JsonElement> entry : locationsJson.entrySet()) { - //fix old naming todo remove when hypixel fix - if (Objects.equals(entry.getKey(), "instanced")) { - locationsList.add(entry.getValue().getAsString()); - locations.put(entry.getValue().getAsString().replace(" ", "").toLowerCase(), "kuudra"); - continue; - } - locationsList.add(entry.getValue().getAsString()); - //add to list in a simplified for so more lenient for user input - locations.put(entry.getValue().getAsString().replace(" ", "").toLowerCase(), entry.getKey()); - } - } catch (Exception e) { - LOGGER.error("[Skyblocker Chat Rules] Failed to load locations!", e); - } - } - protected static void saveChatRules() { JsonObject chatRuleJson = new JsonObject(); chatRuleJson.add("rules", ChatRule.LIST_CODEC.encodeStart(JsonOps.INSTANCE, chatRuleList).getOrThrow()); |