From 13b09e3be36ab38b92e14c7d808fb04ecdc65b82 Mon Sep 17 00:00:00 2001 From: Fix3d Date: Wed, 22 Mar 2023 12:01:14 +0300 Subject: a cleaner PriceInfoTooltip --- .../skyblocker/config/SkyblockerConfig.java | 5 +- .../skyblocker/skyblock/item/PriceInfoTooltip.java | 134 +++++++-------------- 2 files changed, 44 insertions(+), 95 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 97284bc1..4d3ce5e9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -6,7 +6,6 @@ import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.annotation.ConfigEntry; import me.shedaniel.autoconfig.serializer.GsonConfigSerializer; import me.xmrvizzy.skyblocker.chat.ChatFilterResult; -import net.minecraft.item.ItemStack; import java.util.ArrayList; import java.util.List; @@ -219,8 +218,8 @@ public class SkyblockerConfig implements ConfigData { public String toString() { return switch (this) { - case ONE_DAY -> "1 day price"; - case THREE_DAY -> "3 day price"; + case ONE_DAY -> "1 day avg"; + case THREE_DAY -> "3 day avg"; case BOTH -> "Both"; }; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java index dfc498a1..c7df6a99 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java @@ -9,10 +9,8 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; -import net.minecraft.text.LiteralTextContent; import net.minecraft.text.MutableText; import net.minecraft.text.Text; -import net.minecraft.text.TranslatableTextContent; import net.minecraft.util.Formatting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,8 +23,10 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.zip.GZIPInputStream; @@ -42,6 +42,7 @@ public class PriceInfoTooltip { private static JsonObject isMuseumJson; private static boolean nullMsgSend = false; private final static Gson gson = new Gson(); + private static final Map apiAddresses; public static void onInjectTooltip(ItemStack stack, TooltipContext context, List lines) { if (!Utils.isOnSkyblock || client.player == null) return; @@ -184,7 +185,7 @@ public class PriceInfoTooltip { /** * this method converts the "timestamp" variable into the same date format as Hypixel represents it in the museum. - * Currently there are two types of timestamps the legacy which is built like this + * Currently, there are two types of timestamps the legacy which is built like this * "dd/MM/yy hh:mm" ("25/04/20 16:38") and the current which is built like this * "MM/dd/yy hh:mm aa" ("12/24/20 11:08 PM"). Since Hypixel transforms the two formats into one format without * taking into account of their formats, we do the same. The final result looks like this @@ -194,7 +195,7 @@ public class PriceInfoTooltip { * This causes the museum rank to be much worse than it should be. * * @param stack the item under the pointer - * @return if the item have an "Timestamp" it will be shown formated on the tooltip + * @return if the item have a "Timestamp" it will be shown formated on the tooltip */ public static String getTimestamp(ItemStack stack) { NbtCompound tag = getInternalNameForItem(stack); @@ -289,108 +290,57 @@ public class PriceInfoTooltip { SkyblockerConfig.Average type = SkyblockerConfig.get().general.itemTooltip.avg; if (type == SkyblockerConfig.Average.BOTH || oneDayAvgPricesJson == null || threeDayAvgPricesJson == null) { - futureList.add(CompletableFuture.runAsync(() -> downloadAvgPrices(SkyblockerConfig.Average.THREE_DAY))); - futureList.add(CompletableFuture.runAsync(() -> downloadAvgPrices(SkyblockerConfig.Average.ONE_DAY))); - } else { - futureList.add(CompletableFuture.runAsync(() -> downloadAvgPrices(type))); + futureList.add(CompletableFuture.runAsync(() -> oneDayAvgPricesJson = downloadPrices("1 day avg"))); + futureList.add(CompletableFuture.runAsync(() -> threeDayAvgPricesJson = downloadPrices("3 day avg"))); + } else if (type == SkyblockerConfig.Average.ONE_DAY) { + futureList.add(CompletableFuture.runAsync(() -> oneDayAvgPricesJson = downloadPrices("1 day avg"))); + } else if (type == SkyblockerConfig.Average.THREE_DAY) { + futureList.add(CompletableFuture.runAsync(() -> threeDayAvgPricesJson = downloadPrices("3 day avg"))); } } - if (SkyblockerConfig.get().general.itemTooltip.enableLowestBIN) { - futureList.add(CompletableFuture.runAsync(PriceInfoTooltip::downloadLowestPrices)); - } - if (SkyblockerConfig.get().general.itemTooltip.enableBazaarPrice) { - futureList.add(CompletableFuture.runAsync(PriceInfoTooltip::downloadBazaarPrices)); - } - if (SkyblockerConfig.get().general.itemTooltip.enableNPCPrice && npcPricesJson == null) { - futureList.add(CompletableFuture.runAsync(PriceInfoTooltip::downloadNPCPrices)); - } - if (SkyblockerConfig.get().general.itemTooltip.enableMuseumDate && isMuseumJson == null) { - futureList.add(CompletableFuture.runAsync(PriceInfoTooltip::downloadIsMuseum)); - } + if (SkyblockerConfig.get().general.itemTooltip.enableLowestBIN) + futureList.add(CompletableFuture.runAsync(() -> lowestPricesJson = downloadPrices("lowest bin"))); + + if (SkyblockerConfig.get().general.itemTooltip.enableBazaarPrice) + futureList.add(CompletableFuture.runAsync(() -> bazaarPricesJson = downloadPrices("bazaar"))); + + if (SkyblockerConfig.get().general.itemTooltip.enableNPCPrice && npcPricesJson == null) + futureList.add(CompletableFuture.runAsync(() -> npcPricesJson = downloadPrices("npc"))); + + if (SkyblockerConfig.get().general.itemTooltip.enableMuseumDate && isMuseumJson == null) + futureList.add(CompletableFuture.runAsync(() -> isMuseumJson = downloadPrices("museum"))); + minute++; CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])) .whenComplete((unused, throwable) -> nullMsgSend = false); }, 1200); } - private static void downloadAvgPrices(SkyblockerConfig.Average type) { - JsonObject result = null; - String avgDay = null; - switch (type) { - case ONE_DAY -> avgDay = "1day.json.gz"; - case THREE_DAY -> avgDay = "3day.json.gz"; - } + private static JsonObject downloadPrices(String type) { try { - URL apiAddr = new URL("https://moulberry.codes/auction_averages_lbin/" + avgDay); - try (InputStream src = apiAddr.openStream()) { - try (GZIPInputStream gzipOutput = new GZIPInputStream(src)) { - try (InputStreamReader reader = new InputStreamReader(gzipOutput)) { - result = new Gson().fromJson(reader, JsonObject.class); - } - } - } + String url = apiAddresses.get(type); + URL apiAddress = new URL(url); + InputStream src = apiAddress.openStream(); + InputStreamReader reader = new InputStreamReader(url.contains(".gz") ? new GZIPInputStream(src) : src); + return new Gson().fromJson(reader, JsonObject.class); } catch (IOException e) { - LOGGER.warn("[Skyblocker] Failed to download average BIN prices!", e); - } - switch (type) { - case ONE_DAY -> oneDayAvgPricesJson = result; - case THREE_DAY -> threeDayAvgPricesJson = result; - } - } + LOGGER.warn("[Skyblocker] Failed to download " + type + " prices!", e); - private static void downloadBazaarPrices() { - JsonObject result = null; - try { - URL apiAddr = new URL("https://hysky.de/api/bazaar"); - InputStreamReader reader = new InputStreamReader(apiAddr.openStream()); - result = new Gson().fromJson(reader, JsonObject.class); - } catch (IOException e) { - LOGGER.warn("[Skyblocker] Failed to download bazaar prices!", e); - } - bazaarPricesJson = result; - } + if (type.equals("lowest bin")) + lowestPricesJson = downloadPrices("lowest bin backup"); - private static void downloadLowestPrices() { - JsonObject result = null; - try { - URL apiAddr = new URL("https://lb.tricked.pro/lowestbins"); - InputStreamReader reader = new InputStreamReader(apiAddr.openStream()); - result = new Gson().fromJson(reader, JsonObject.class); - } catch (IOException e) { - LOGGER.warn("[Skyblocker] Failed to download lowest BIN prices from the main source!", e); - try { - URL apiAddr = new URL("https://lb2.tricked.pro/lowestbins"); - InputStreamReader reader = new InputStreamReader(apiAddr.openStream()); - result = new Gson().fromJson(reader, JsonObject.class); - } catch (IOException e2) { - LOGGER.warn("[Skyblocker] Failed to download lowest BIN prices from the backup source!", e2); - } + return null; } - lowestPricesJson = result; } - private static void downloadNPCPrices() { - JsonObject result = null; - try { - URL apiAddr = new URL("https://hysky.de/api/npcprice"); - InputStreamReader reader = new InputStreamReader(apiAddr.openStream()); - result = new Gson().fromJson(reader, JsonObject.class); - } catch (IOException e) { - LOGGER.warn("[Skyblocker] Failed to download NPC prices!", e); - } - npcPricesJson = result; + static { + apiAddresses = new HashMap<>(); + apiAddresses.put("1 day avg", "https://moulberry.codes/auction_averages_lbin/1day.json.gz"); + apiAddresses.put("3 day avg", "https://moulberry.codes/auction_averages_lbin/3day.json.gz"); + apiAddresses.put("bazaar", "https://hysky.de/api/bazaar"); + apiAddresses.put("lowest bin", "https://lb.tricked.pro/lowestbins"); + apiAddresses.put("lowest bin backup", "https://lb2.tricked.pro/lowestbins"); + apiAddresses.put("npc", "https://hysky.de/api/npcprice"); + apiAddresses.put("museum", "https://hysky.de/api/museum"); } - - private static void downloadIsMuseum() { - JsonObject result = null; - try { - URL apiAddr = new URL("https://hysky.de/api/museum"); - InputStreamReader reader = new InputStreamReader(apiAddr.openStream()); - result = new Gson().fromJson(reader, JsonObject.class); - } catch (IOException e) { - LOGGER.warn("[Skyblocker] Failed to download museum items!", e); - } - isMuseumJson = result; - } - } -- cgit From f362d95f9b8477c1f8190e79ca390a09adb658c5 Mon Sep 17 00:00:00 2001 From: Fix3d Date: Wed, 22 Mar 2023 12:33:17 +0300 Subject: fix recipe book --- .../java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index 17e9aebc..7bfa0997 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -16,7 +16,7 @@ import java.nio.file.Path; import java.util.*; public class ItemRegistry { - protected static final String REMOTE_ITEM_REPO = "https://github.com/KonaeAkira/NotEnoughUpdates-REPO.git"; + protected static final String REMOTE_ITEM_REPO = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO"; protected static final Path LOCAL_ITEM_REPO_DIR = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/item-repo"); private static final Path ITEM_LIST_DIR = LOCAL_ITEM_REPO_DIR.resolve("items"); @@ -135,7 +135,7 @@ class Recipe { private static ItemStack getItemStack(String internalName) { try { if (internalName.length() > 0) { - int count = Integer.parseInt(internalName.split(":")[1]); + int count = Integer.parseInt(internalName.split(":").length > 1 ? internalName.split(":")[1] : "1"); internalName = internalName.split(":")[0]; ItemStack itemStack = ItemRegistry.itemsMap.get(internalName).copy(); itemStack.setCount(count); -- cgit From 4a3b5a00c174d9c7abe2cfaed84ac09bf464650a Mon Sep 17 00:00:00 2001 From: Fix3d Date: Wed, 22 Mar 2023 13:55:34 +0300 Subject: fix freezing while open wiki and... get wiki link from local repo which is same and exist for recipe book --- .../skyblocker/skyblock/item/WikiLookup.java | 29 +++++----------------- .../skyblocker/skyblock/itemlist/ItemRegistry.java | 16 ++++++++++++ 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java index afaf487f..76b4e7c3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java @@ -1,9 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.item; import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.minecraft.client.MinecraftClient; @@ -16,11 +14,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Util; import org.lwjgl.glfw.GLFW; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; +import java.util.concurrent.CompletableFuture; public class WikiLookup { public static KeyBinding wikiLookup; @@ -51,23 +45,12 @@ public class WikiLookup { if (Utils.isOnSkyblock) { id = getSkyblockId(slot); try { - //Setting up a connection with the repo - String urlString = "https://raw.githubusercontent.com/NotEnoughUpdates/NotEnoughUpdates-REPO/master/items/" + id + ".json"; - URL url = new URL(urlString); - URLConnection request = url.openConnection(); - request.connect(); - - //yoinking the wiki link - JsonElement root = JsonParser.parseReader(new InputStreamReader((InputStream) request.getContent())); - JsonObject rootobj = root.getAsJsonObject(); - String wikiLink = rootobj.get("info").getAsJsonArray().get(1).getAsString(); - Util.getOperatingSystem().open(wikiLink); - } catch (IOException | NullPointerException e) { - e.printStackTrace(); - client.player.sendMessage(Text.of("Can't locate a wiki article for this item..."), false); + String wikiLink = ItemRegistry.getWikiLink(id); + CompletableFuture.runAsync(() -> Util.getOperatingSystem().open(wikiLink)); } catch (IndexOutOfBoundsException | IllegalStateException e) { e.printStackTrace(); - client.player.sendMessage(Text.of("Error while retrieving wiki article..."), false); + if (client.player != null) + client.player.sendMessage(Text.of("Error while retrieving wiki article..."), false); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index 7bfa0997..2bb16a34 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -4,13 +4,16 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.text.Text; import org.eclipse.jgit.api.Git; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.*; @@ -24,6 +27,7 @@ public class ItemRegistry { protected static List items = new ArrayList<>(); protected static Map itemsMap = new HashMap<>(); protected static List recipes = new ArrayList<>(); + static final MinecraftClient client = MinecraftClient.getInstance(); // TODO: make async public static void init() { @@ -95,6 +99,18 @@ public class ItemRegistry { }); } + public static String getWikiLink(String internalName) { + try { + String fileContent = Files.readString(ITEM_LIST_DIR.resolve(internalName + ".json")); + JsonObject fileJson = JsonParser.parseString(fileContent).getAsJsonObject(); + return fileJson.get("info").getAsJsonArray().get(1).getAsString(); + } catch (IOException | NullPointerException e) { + e.printStackTrace(); + client.player.sendMessage(Text.of("Can't locate a wiki article for this item..."), false); + return null; + } + } + public static List getRecipes(String internalName) { List result = new ArrayList<>(); for (Recipe recipe : recipes) -- cgit From 47e9ec4135540eb03e2363ddfc6ca7535e77377e Mon Sep 17 00:00:00 2001 From: Fix3d Date: Fri, 24 Mar 2023 19:15:34 +0300 Subject: more readability for PriceInfoTooltip --- .../skyblocker/skyblock/item/PriceInfoTooltip.java | 157 +++++++++++---------- 1 file changed, 81 insertions(+), 76 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java index c7df6a99..608122ad 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java @@ -56,11 +56,9 @@ public class PriceInfoTooltip { if (SkyblockerConfig.get().general.itemTooltip.enableNPCPrice) { if (npcPricesJson == null) { - if (!nullMsgSend) { - client.player.sendMessage(Text.translatable("skyblocker.itemTooltip.nullMessage"), false); - nullMsgSend = true; - } - } else if (npcPricesJson.has(name)) { + nullWarning(); + } + else if (npcPricesJson.has(name)) { lines.add(Text.literal(String.format("%-21s", "NPC Price:")) .formatted(Formatting.YELLOW) .append(getCoinsMessage(npcPricesJson.get(name).getAsDouble(), count))); @@ -70,11 +68,9 @@ public class PriceInfoTooltip { boolean bazaarExist = false; if (SkyblockerConfig.get().general.itemTooltip.enableBazaarPrice && !bazaarOpened) { if (bazaarPricesJson == null) { - if (!nullMsgSend) { - client.player.sendMessage(Text.translatable("skyblocker.itemTooltip.nullMessage"), false); - nullMsgSend = true; - } - } else if (bazaarPricesJson.has(name)) { + nullWarning(); + } + else if (bazaarPricesJson.has(name)) { JsonObject getItem = bazaarPricesJson.getAsJsonObject(name); lines.add(Text.literal(String.format("%-18s", "Bazaar buy Price:")) .formatted(Formatting.GOLD) @@ -93,11 +89,9 @@ public class PriceInfoTooltip { // bazaarOpened & bazaarExist check for lbin, because Skytils keeps some bazaar item data in lbin api if (SkyblockerConfig.get().general.itemTooltip.enableLowestBIN && !bazaarOpened && !bazaarExist) { if (lowestPricesJson == null) { - if (!nullMsgSend) { - client.player.sendMessage(Text.translatable("skyblocker.itemTooltip.nullMessage"), false); - nullMsgSend = true; - } - } else if (lowestPricesJson.has(name)) { + nullWarning(); + } + else if (lowestPricesJson.has(name)) { lines.add(Text.literal(String.format("%-19s", "Lowest BIN Price:")) .formatted(Formatting.GOLD) .append(getCoinsMessage(lowestPricesJson.get(name).getAsDouble(), count))); @@ -106,11 +100,9 @@ public class PriceInfoTooltip { if (SkyblockerConfig.get().general.itemTooltip.enableAvgBIN) { if (threeDayAvgPricesJson == null || oneDayAvgPricesJson == null) { - if (!nullMsgSend) { - client.player.sendMessage(Text.translatable("skyblocker.itemTooltip.nullMessage"), false); - nullMsgSend = true; - } - } else if (threeDayAvgPricesJson.has(name) || oneDayAvgPricesJson.has(name)) { + nullWarning(); + } + else if (threeDayAvgPricesJson.has(name) || oneDayAvgPricesJson.has(name)) { /* We are skipping check average prices for potions and runes because there is no data for their in API. @@ -156,11 +148,9 @@ public class PriceInfoTooltip { if (SkyblockerConfig.get().general.itemTooltip.enableMuseumDate && !bazaarOpened) { if (isMuseumJson == null) { - if (!nullMsgSend) { - client.player.sendMessage(Text.translatable("skyblocker.itemTooltip.nullMessage"), false); - nullMsgSend = true; - } - } else if (isMuseumJson.has(name)) { + nullWarning(); + } + else if (isMuseumJson.has(name)) { String itemCategory = isMuseumJson.get(name).toString().replaceAll("\"", ""); String format = switch (itemCategory) { case "Weapons" -> "%-18s"; @@ -170,15 +160,23 @@ public class PriceInfoTooltip { lines.add(Text.literal(String.format(format, "Museum: (" + itemCategory + ")")) .formatted(Formatting.LIGHT_PURPLE) .append(Text.literal(timestamp != null ? timestamp : "").formatted(Formatting.RED))); - } else if (timestamp != null) { + } + else if (timestamp != null) { lines.add(Text.literal(String.format("%-21s", "Obtained: ")) .formatted(Formatting.LIGHT_PURPLE) .append(Text.literal(timestamp).formatted(Formatting.RED))); } } } + + private static void nullWarning() { + if (!nullMsgSend && client.player != null) { + client.player.sendMessage(Text.translatable("skyblocker.itemTooltip.nullMessage"), false); + nullMsgSend = true; + } + } - public static NbtCompound getInternalNameForItem(ItemStack stack) { + public static NbtCompound getItemNBT(ItemStack stack) { if (stack == null) return null; return stack.getNbt(); } @@ -198,80 +196,85 @@ public class PriceInfoTooltip { * @return if the item have a "Timestamp" it will be shown formated on the tooltip */ public static String getTimestamp(ItemStack stack) { - NbtCompound tag = getInternalNameForItem(stack); - String internalName = null; + NbtCompound tag = getItemNBT(stack); + if (tag != null && tag.contains("ExtraAttributes", 10)) { NbtCompound ea = tag.getCompound("ExtraAttributes"); if (ea.contains("timestamp", 8)) { - internalName = ea.getString("timestamp"); - SimpleDateFormat dt = new SimpleDateFormat("MM/dd/yy"); + SimpleDateFormat nbtFormat = new SimpleDateFormat("MM/dd/yy"); try { - Date date = dt.parse(internalName); - SimpleDateFormat dt1 = new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH); - internalName = dt1.format(date); + Date date = nbtFormat.parse(ea.getString("timestamp")); + SimpleDateFormat skyblockerFormat = new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH); + return skyblockerFormat.format(date); } catch (ParseException e) { LOGGER.warn("[Skyblocker-tooltip] getTimestamp", e); } } } - return internalName; + + return null; } public static String getInternalNameFromNBT(ItemStack stack) { - NbtCompound tag = getInternalNameForItem(stack); - String internalName = null; + NbtCompound tag = getItemNBT(stack); if (tag != null && tag.contains("ExtraAttributes", 10)) { NbtCompound ea = tag.getCompound("ExtraAttributes"); if (ea.contains("id", 8)) { - internalName = ea.getString("id"); - } else { - return null; - } - - if ("ENCHANTED_BOOK".equals(internalName)) { - if (ea.contains("enchantments")) { - NbtCompound enchants = ea.getCompound("enchantments"); - String enchant = enchants.getKeys().stream().findFirst().get(); - internalName += "-" + enchant.toUpperCase(Locale.ENGLISH) + "-" + enchants.getInt(enchant); - } - } else if ("PET".equals(internalName)) { - if (ea.contains("petInfo")) { - JsonObject petInfo = gson.fromJson(ea.getString("petInfo"), JsonObject.class); - internalName += "-" + petInfo.get("type").getAsString() + "-" + petInfo.get("tier").getAsString(); - } - } else if ("POTION".equals(internalName)) { - String enhanced = ea.contains("enhanced") ? "-ENHANCED" : ""; - String extended = ea.contains("extended") ? "-EXTENDED" : ""; - String splash = ea.contains("splash") ? "-SPLASH" : ""; - if (ea.contains("potion") && ea.contains("potion_level")) { - internalName += "-" + ea.getString("potion").toUpperCase(Locale.ENGLISH) + "-" + ea.getInt("potion_level") - + enhanced + extended + splash; + String internalName = ea.getString("id"); + + // Transformation to API format. + if ("ENCHANTED_BOOK".equals(internalName)) { + if (ea.contains("enchantments")) { + NbtCompound enchants = ea.getCompound("enchantments"); + String enchant = enchants.getKeys().stream().findFirst().get(); + return internalName + "-" + enchant.toUpperCase(Locale.ENGLISH) + "-" + enchants.getInt(enchant); + } + } else if ("PET".equals(internalName)) { + if (ea.contains("petInfo")) { + JsonObject petInfo = gson.fromJson(ea.getString("petInfo"), JsonObject.class); + return internalName + "-" + petInfo.get("type").getAsString() + "-" + petInfo.get("tier").getAsString(); + } + } else if ("POTION".equals(internalName)) { + String enhanced = ea.contains("enhanced") ? "-ENHANCED" : ""; + String extended = ea.contains("extended") ? "-EXTENDED" : ""; + String splash = ea.contains("splash") ? "-SPLASH" : ""; + if (ea.contains("potion") && ea.contains("potion_level")) { + return internalName + "-" + ea.getString("potion").toUpperCase(Locale.ENGLISH) + "-" + ea.getInt("potion_level") + + enhanced + extended + splash; + } + } else if ("RUNE".equals(internalName)) { + if (ea.contains("runes")) { + NbtCompound runes = ea.getCompound("runes"); + String rune = runes.getKeys().stream().findFirst().get(); + return internalName + "-" + rune.toUpperCase(Locale.ENGLISH) + "-" + runes.getInt(rune); + } } - } else if ("RUNE".equals(internalName)) { - if (ea.contains("runes")) { - NbtCompound runes = ea.getCompound("runes"); - String rune = runes.getKeys().stream().findFirst().get(); - internalName += "-" + rune.toUpperCase(Locale.ENGLISH) + "-" + runes.getInt(rune); - } - } + return internalName; + } + else + return null; } - return internalName; + else + return null; } private static Text getCoinsMessage(double price, int count) { if (count == 1) { String priceString = String.format(Locale.ENGLISH, "%1$,.1f", price); return Text.literal(priceString + " Coins").formatted(Formatting.DARK_AQUA); - } else { - String priceString = String.format(Locale.ENGLISH, "%1$,.1f", price * count); - MutableText priceText = Text.literal(priceString + " Coins ").formatted(Formatting.DARK_AQUA); - priceString = String.format(Locale.ENGLISH, "%1$,.1f", price); - MutableText priceText2 = Text.literal( "(" + priceString + " each)").formatted(Formatting.GRAY); - return priceText.append(priceText2); + } + else { + String priceStringTotal = String.format(Locale.ENGLISH, "%1$,.1f", price * count); + MutableText priceTextTotal = Text.literal(priceStringTotal + " Coins ").formatted(Formatting.DARK_AQUA); + + String priceStringEach = String.format(Locale.ENGLISH, "%1$,.1f", price); + MutableText priceTextEach = Text.literal( "(" + priceStringEach + " each)").formatted(Formatting.GRAY); + + return priceTextTotal.append(priceTextEach); } } @@ -292,9 +295,11 @@ public class PriceInfoTooltip { if (type == SkyblockerConfig.Average.BOTH || oneDayAvgPricesJson == null || threeDayAvgPricesJson == null) { futureList.add(CompletableFuture.runAsync(() -> oneDayAvgPricesJson = downloadPrices("1 day avg"))); futureList.add(CompletableFuture.runAsync(() -> threeDayAvgPricesJson = downloadPrices("3 day avg"))); - } else if (type == SkyblockerConfig.Average.ONE_DAY) { + } + else if (type == SkyblockerConfig.Average.ONE_DAY) { futureList.add(CompletableFuture.runAsync(() -> oneDayAvgPricesJson = downloadPrices("1 day avg"))); - } else if (type == SkyblockerConfig.Average.THREE_DAY) { + } + else if (type == SkyblockerConfig.Average.THREE_DAY) { futureList.add(CompletableFuture.runAsync(() -> threeDayAvgPricesJson = downloadPrices("3 day avg"))); } } -- cgit From ea05cbb827c06ec7480a3006e39ccfec1c7bf137 Mon Sep 17 00:00:00 2001 From: Fix3d Date: Tue, 28 Mar 2023 10:54:30 +0300 Subject: async updateItemRepo --- .../skyblock/itemlist/ItemListWidget.java | 25 ++++++++++++++-------- .../skyblocker/skyblock/itemlist/ItemRegistry.java | 20 ++++++++++++----- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java index a635cea2..75d53323 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java @@ -13,7 +13,6 @@ import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.screen.AbstractRecipeScreenHandler; import net.minecraft.text.Text; -import net.minecraft.text.TranslatableTextContent; import net.minecraft.util.Formatting; @Environment(value= EnvType.CLIENT) @@ -39,8 +38,10 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); int x = (this.parentWidth - 147) / 2 - this.leftOffset; int y = (this.parentHeight - 166) / 2; - this.results = new SearchResultsWidget(this.client, x , y); - this.updateSearchResult(); + if (ItemRegistry.filesImported) { + this.results = new SearchResultsWidget(this.client, x, y); + this.updateSearchResult(); + } } @Override @@ -56,33 +57,39 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select int j = (this.parentHeight - 166) / 2; this.drawTexture(matrices, i, j, 1, 1, 147, 166); this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); - if (!this.searchField.isFocused() && this.searchField.getText().isEmpty()) { + + if (!ItemRegistry.filesImported && !this.searchField.isFocused() && this.searchField.getText().isEmpty()) { + Text hintText = (Text.literal("Loading...")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY); + drawTextWithShadow(matrices, this.client.textRenderer, hintText, i + 25, j + 14, -1); + } else if (!this.searchField.isFocused() && this.searchField.getText().isEmpty()) { Text hintText = (Text.translatable("gui.recipebook.search_hint")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY); drawTextWithShadow(matrices, this.client.textRenderer, hintText, i + 25, j + 14, -1); } else { this.searchField.render(matrices, mouseX, mouseY, delta); } - this.updateSearchResult(); - this.results.render(matrices, mouseX, mouseY, delta); + if (ItemRegistry.filesImported && results != null){ + this.updateSearchResult(); + this.results.render(matrices, mouseX, mouseY, delta); + } matrices.pop(); } } @Override public void drawTooltip(MatrixStack matrices, int x, int y, int mouseX, int mouseY) { - if (this.isOpen()) { + if (this.isOpen() && ItemRegistry.filesImported && results != null) { this.results.drawTooltip(matrices, mouseX, mouseY); } } @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (this.isOpen() && !this.client.player.isSpectator()) { + if (this.isOpen() && !this.client.player.isSpectator() && ItemRegistry.filesImported && results != null) { if (this.searchField.mouseClicked(mouseX, mouseY, button)) { this.results.closeRecipeView(); return true; } - if (this.results.mouseClicked(mouseX, mouseY, button)) return true; + return this.results.mouseClicked(mouseX, mouseY, button); } return false; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index 2bb16a34..f0958514 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -17,8 +17,10 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.*; +import java.util.concurrent.CompletableFuture; public class ItemRegistry { + private static final Logger LOGGER = LoggerFactory.getLogger(ItemRegistry.class); protected static final String REMOTE_ITEM_REPO = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO"; protected static final Path LOCAL_ITEM_REPO_DIR = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/item-repo"); @@ -27,13 +29,20 @@ public class ItemRegistry { protected static List items = new ArrayList<>(); protected static Map itemsMap = new HashMap<>(); protected static List recipes = new ArrayList<>(); - static final MinecraftClient client = MinecraftClient.getInstance(); + protected static final MinecraftClient client = MinecraftClient.getInstance(); + static boolean filesImported = false; - // TODO: make async public static void init() { - updateItemRepo(); - ItemStackBuilder.init(); - importItemFiles(); + CompletableFuture.runAsync(ItemRegistry::updateItemRepo) + .whenComplete((result, ex) -> { + if (ex == null) { + ItemStackBuilder.init(); + importItemFiles(); + } + else { + LOGGER.error("[Skyblocker-ItemRegistry] " + ex); + } + }); } private static void updateItemRepo() { @@ -97,6 +106,7 @@ public class ItemRegistry { } return lhsFamilyName.compareTo(rhsFamilyName); }); + filesImported = true; } public static String getWikiLink(String internalName) { -- cgit From 16e61da08b98ecaaff5ce71458958178732f6d29 Mon Sep 17 00:00:00 2001 From: Fix3d Date: Wed, 29 Mar 2023 17:17:51 +0300 Subject: conflicts resolved --- .../java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java | 4 +++- .../skyblocker/skyblock/itemlist/ItemListWidget.java | 12 ++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 4d3ce5e9..e711e681 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -66,7 +66,7 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Category("button8") @ConfigEntry.Gui.CollapsibleObject(startExpanded = false) - public QuickNavItem button8 = new QuickNavItem(true, new ItemData("player_head", 1, "tag:{SkullOwner:{Id:[I;1605800870,415127827,-1236127084,15358548],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}}}"), "none", "/warp dungeon"); + public QuickNavItem button8 = new QuickNavItem(true, new ItemData("player_head", 1, "tag:{SkullOwner:{Id:[I;1605800870,415127827,-1236127084,15358548],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}}}"), "none", "/warp dungeon_hub"); @ConfigEntry.Category("button9") @ConfigEntry.Gui.CollapsibleObject(startExpanded = false) @@ -174,6 +174,7 @@ public class SkyblockerConfig implements ConfigData { RIGHT, NONE; + @Override public String toString() { return switch (this) { case LAYER1 -> "Layer 1"; @@ -216,6 +217,7 @@ public class SkyblockerConfig implements ConfigData { THREE_DAY, BOTH; + @Override public String toString() { return switch (this) { case ONE_DAY -> "1 day avg"; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java index 75d53323..7434b92b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java @@ -49,7 +49,7 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select if (this.isOpen()) { matrices.push(); matrices.translate(0.0D, 0.0D, 100.0D); - RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShader(GameRenderer::getPositionTexProgram); RenderSystem.setShaderTexture(0, TEXTURE); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); @@ -88,9 +88,9 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select if (this.searchField.mouseClicked(mouseX, mouseY, button)) { this.results.closeRecipeView(); return true; - } - return this.results.mouseClicked(mouseX, mouseY, button); - } - return false; + } else + return this.results.mouseClicked(mouseX, mouseY, button); + } else + return false; } -} +} \ No newline at end of file -- cgit From da7f2e8dc92f40764d71a1408dd5d4a9add7625f Mon Sep 17 00:00:00 2001 From: Fix3d Date: Wed, 29 Mar 2023 17:45:11 +0300 Subject: forgotten null check --- .../java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java index 7434b92b..86fe580d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java @@ -85,7 +85,7 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { if (this.isOpen() && !this.client.player.isSpectator() && ItemRegistry.filesImported && results != null) { - if (this.searchField.mouseClicked(mouseX, mouseY, button)) { + if (this.searchField != null && this.searchField.mouseClicked(mouseX, mouseY, button)) { this.results.closeRecipeView(); return true; } else -- cgit From bd8415eafe741d37f658c3235658a1f2d9fb4ed2 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 1 Apr 2023 13:22:24 -0400 Subject: Migrated to ClientReceiveMessageEvents and some fixes (cherry picked from commit 9a8799ac40b12bed3e5e4d7aa32054eba7882580) --- .../skyblocker/chat/ChatMessageListener.java | 38 +++++++++++++++++++- .../skyblocker/mixin/ChatHudListenerMixin.java | 41 ---------------------- src/main/resources/skyblocker.mixins.json | 1 - 3 files changed, 37 insertions(+), 43 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java index 2e23bf31..a5d3aa41 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -7,11 +7,19 @@ import me.xmrvizzy.skyblocker.skyblock.dungeon.ThreeWeirdos; import me.xmrvizzy.skyblocker.skyblock.dungeon.Trivia; import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur; import me.xmrvizzy.skyblocker.skyblock.dwarven.Puzzler; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.text.Text; +@FunctionalInterface public interface ChatMessageListener { + /** + * An event called when a game message is received. Register your listeners in {@link ChatMessageListener#init()}. + */ Event EVENT = EventFactory.createArrayBacked(ChatMessageListener.class, (listeners) -> (message, asString) -> { for (ChatMessageListener listener : listeners) { @@ -21,6 +29,9 @@ public interface ChatMessageListener { return ChatFilterResult.PASS; }); + /** + * Registers {@link ChatMessageListener}s to {@link ChatMessageListener#EVENT} and registers {@link ChatMessageListener#EVENT} to {@link ClientReceiveMessageEvents#ALLOW_GAME} + */ static void init() { ChatMessageListener[] listeners = new ChatMessageListener[]{ // Features @@ -41,8 +52,33 @@ public interface ChatMessageListener { new TeleportPadFilter(), new AutopetFilter(), }; - for (ChatMessageListener listener : listeners) + // Register all listeners to EVENT + for (ChatMessageListener listener : listeners) { EVENT.register(listener); + } + // Register EVENT to ClientReceiveMessageEvents.ALLOW_GAME from fabric api + ClientReceiveMessageEvents.ALLOW_GAME.register((message, overlay) -> { + if (!Utils.isOnSkyblock) { + return true; + } + ChatFilterResult result = EVENT.invoker().onMessage(message, message.getString()); + switch (result) { + case ACTION_BAR -> { + if (overlay) { + return true; + } + ClientPlayerEntity player = MinecraftClient.getInstance().player; + if (player != null) { + player.sendMessage(message, true); + return false; + } + } + case FILTER -> { + return false; + } + } + return true; + }); } ChatFilterResult onMessage(Text message, String asString); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java deleted file mode 100644 index 8176a810..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java +++ /dev/null @@ -1,41 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import me.xmrvizzy.skyblocker.chat.ChatFilterResult; -import me.xmrvizzy.skyblocker.chat.ChatMessageListener; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.hud.ChatHud; -import net.minecraft.client.gui.hud.MessageIndicator; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.network.message.MessageSignatureData; -import net.minecraft.text.Text; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ChatHud.class) -public abstract class ChatHudListenerMixin { - @Shadow - @Final - private MinecraftClient client; - - @Inject(method = "addMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;ILnet/minecraft/client/gui/hud/MessageIndicator;Z)V", at = @At("HEAD"), cancellable = true) - public void skyblocker$onMessage(Text message, MessageSignatureData signature, int ticks, MessageIndicator indicator, boolean refresh, CallbackInfo ci) { - if (!Utils.isOnSkyblock) - return; - String asString = message.getString(); - ChatFilterResult result = ChatMessageListener.EVENT.invoker().onMessage(message, asString); - switch (result) { - case ACTION_BAR: - ClientPlayerEntity player = client.player; - if (player != null) - player.sendMessage(message, true); - case FILTER: - ci.cancel(); - } - } - -} diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index fc37cfb0..b54d5eb0 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -3,7 +3,6 @@ "package": "me.xmrvizzy.skyblocker.mixin", "compatibilityLevel": "JAVA_17", "client": [ - "ChatHudListenerMixin", "ClientPlayerEntityMixin", "InGameHudMixin", "ItemRendererMixin", -- cgit From 9cbce39d68c1c766e20819101fbb803ad05e8fdc Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 2 Apr 2023 14:58:42 +0200 Subject: Merging SkyHyTab into Skyblocker: Initial commit Needs cleanup --- .../xmrvizzy/skyblocker/SkyblockerInitializer.java | 2 + .../skyblocker/config/SkyblockerConfig.java | 2 + .../skyblocker/mixin/PlayerListHudAccessor.java | 18 ++ .../skyblocker/mixin/PlayerListHudMixin.java | 70 ++++++ .../skyblocker/skyblock/tabhud/TabHud.java | 40 ++++ .../skyblock/tabhud/screens/DungeonHubScreen.java | 24 ++ .../tabhud/screens/DungeonPlayerScreen.java | 30 +++ .../skyblock/tabhud/screens/DungeonScreen.java | 37 +++ .../skyblock/tabhud/screens/EmptyScreen.java | 19 ++ .../tabhud/screens/FarmingServerScreen.java | 23 ++ .../skyblock/tabhud/screens/GardenScreen.java | 23 ++ .../skyblock/tabhud/screens/GenericInfoScreen.java | 51 +++++ .../tabhud/screens/GenericServerScreen.java | 19 ++ .../skyblock/tabhud/screens/GuestPlayerScreen.java | 23 ++ .../skyblock/tabhud/screens/GuestServerScreen.java | 19 ++ .../skyblock/tabhud/screens/HomePlayerScreen.java | 22 ++ .../skyblock/tabhud/screens/HomeServerScreen.java | 24 ++ .../skyblock/tabhud/screens/HubServerScreen.java | 23 ++ .../skyblock/tabhud/screens/MineServerScreen.java | 30 +++ .../skyblock/tabhud/screens/ParkServerScreen.java | 19 ++ .../skyblock/tabhud/screens/PlayerListScreen.java | 19 ++ .../skyblocker/skyblock/tabhud/screens/Screen.java | 250 +++++++++++++++++++++ .../skyblocker/skyblock/tabhud/util/Ico.java | 50 +++++ .../skyblocker/skyblock/tabhud/util/StrMan.java | 64 ++++++ .../skyblock/tabhud/widget/CommsWidget.java | 53 +++++ .../skyblock/tabhud/widget/ComposterWidget.java | 44 ++++ .../skyblock/tabhud/widget/CookieWidget.java | 33 +++ .../skyblock/tabhud/widget/DungeonDeathWidget.java | 53 +++++ .../tabhud/widget/DungeonDownedWidget.java | 42 ++++ .../tabhud/widget/DungeonPlayerWidget.java | 83 +++++++ .../tabhud/widget/DungeonPuzzleWidget.java | 51 +++++ .../tabhud/widget/DungeonSecretWidget.java | 35 +++ .../tabhud/widget/DungeonServerWidget.java | 56 +++++ .../skyblock/tabhud/widget/EffectWidget.java | 40 ++++ .../skyblock/tabhud/widget/ElectionWidget.java | 97 ++++++++ .../skyblock/tabhud/widget/EmptyWidget.java | 27 +++ .../skyblock/tabhud/widget/EssenceWidget.java | 48 ++++ .../skyblock/tabhud/widget/EventWidget.java | 33 +++ .../skyblock/tabhud/widget/FireSaleWidget.java | 56 +++++ .../skyblock/tabhud/widget/ForgeWidget.java | 60 +++++ .../skyblock/tabhud/widget/GardenServerWidget.java | 59 +++++ .../skyblock/tabhud/widget/GuestServerWidget.java | 41 ++++ .../skyblock/tabhud/widget/IslandGuestsWidget.java | 44 ++++ .../skyblock/tabhud/widget/IslandOwnersWidget.java | 47 ++++ .../skyblock/tabhud/widget/IslandSelfWidget.java | 40 ++++ .../skyblock/tabhud/widget/IslandServerWidget.java | 47 ++++ .../skyblock/tabhud/widget/MinionWidget.java | 135 +++++++++++ .../skyblock/tabhud/widget/ParkServerWidget.java | 42 ++++ .../skyblock/tabhud/widget/PlayerListWidget.java | 61 +++++ .../skyblock/tabhud/widget/PowderWidget.java | 35 +++ .../skyblock/tabhud/widget/ProfileWidget.java | 42 ++++ .../skyblock/tabhud/widget/ServerWidget.java | 40 ++++ .../skyblock/tabhud/widget/SkillsWidget.java | 63 ++++++ .../skyblock/tabhud/widget/TrapperWidget.java | 29 +++ .../skyblock/tabhud/widget/UpgradeWidget.java | 38 ++++ .../skyblocker/skyblock/tabhud/widget/Widget.java | 183 +++++++++++++++ .../tabhud/widget/component/Component.java | 29 +++ .../widget/component/IcoFatTextComponent.java | 30 +++ .../tabhud/widget/component/IcoTextComponent.java | 26 +++ .../widget/component/PlainTextComponent.java | 22 ++ .../tabhud/widget/component/PlayerComponent.java | 33 +++ .../tabhud/widget/component/ProgressComponent.java | 49 ++++ .../tabhud/widget/component/TableComponent.java | 53 +++++ src/main/resources/skyblocker.mixins.json | 4 +- 64 files changed, 2903 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestPlayerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomePlayerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomeServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HubServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/MineServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ParkServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlayerListScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java index 3d713727..c866ea01 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java @@ -9,6 +9,7 @@ import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.utils.UpdateChecker; import net.fabricmc.api.ClientModInitializer; @@ -25,5 +26,6 @@ public class SkyblockerInitializer implements ClientModInitializer { ChatMessageListener.init(); UpdateChecker.init(); DiscordRPCManager.init(); + TabHud.init(); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 21322c81..41ac7f2d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -125,6 +125,8 @@ public class SkyblockerConfig implements ConfigData { public final boolean enableUpdateNotification = true; public final boolean backpackPreviewWithoutShift = false; + public boolean tabHudEnabled = true; + @ConfigEntry.Gui.Excluded public String apiKey; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java new file mode 100644 index 00000000..e96e4ede --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java @@ -0,0 +1,18 @@ +package me.xmrvizzy.skyblocker.mixin; + +import java.util.Comparator; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.client.gui.hud.PlayerListHud; +import net.minecraft.client.network.PlayerListEntry; + +@Mixin(PlayerListHud.class) +public interface PlayerListHudAccessor { + + @Accessor("ENTRY_ORDERING") + public static Comparator getOrdering() { + throw new AssertionError(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java new file mode 100644 index 00000000..36d4a375 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -0,0 +1,70 @@ +package me.xmrvizzy.skyblocker.mixin; + +import java.util.List; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.hud.PlayerListHud; +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.scoreboard.ScoreboardObjective; +import net.minecraft.text.Text; + +@Environment(EnvType.CLIENT) +@Mixin(PlayerListHud.class) +public class PlayerListHudMixin { + + @Shadow + private Text footer; + + boolean ok = true; + @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/util/math/MatrixStack;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true) + public void skyblocker$renderTabHud(MatrixStack ms, int scaledW, Scoreboard sb, ScoreboardObjective sbo, CallbackInfo info) { + + if (!Utils.isOnSkyblock) { + return; + } + + if (TabHud.defaultTgl.isPressed()) { + return; + } + + MinecraftClient client = MinecraftClient.getInstance(); + ClientPlayNetworkHandler nwH = client.getNetworkHandler(); + if (nwH == null) { + return; + } + + List list = nwH.getListedPlayerListEntries().stream().sorted(PlayerListHudAccessor.getOrdering()).toList(); + int w = scaledW; + int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); + + try { + + Screen screen = Screen.getCorrect(w, h, list, footer); + if (screen != null) { + screen.render(ms); + info.cancel(); + } + } catch (Exception e) { + e.printStackTrace(); + SkyblockerConfig.get().general.tabHudEnabled = false; + MinecraftClient.getInstance().player.sendMessage(Text.of("The tab HUD has crashed due to some unexpected text, see log! :(")); + } + + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java new file mode 100644 index 00000000..3cc75e00 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java @@ -0,0 +1,40 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud; + +import org.lwjgl.glfw.GLFW; + +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.util.InputUtil; + +public class TabHud { + + public static KeyBinding playerTgl; + public static KeyBinding genericTgl; + // public static KeyBinding mapTgl; + public static KeyBinding defaultTgl; + + public static void init() { + + playerTgl = KeyBindingHelper.registerKeyBinding( + new KeyBinding("key.skyhytab.playerTgl", + InputUtil.Type.KEYSYM, + GLFW.GLFW_KEY_LEFT_SHIFT, + "key.categories.skyblocker")); + genericTgl = KeyBindingHelper.registerKeyBinding( + new KeyBinding("key.tabhud.genericTgl", + InputUtil.Type.KEYSYM, + GLFW.GLFW_KEY_LEFT_ALT, + "key.categories.skyblocker")); + // mapTgl = KeyBindingHelper.registerKeyBinding( + // new KeyBinding("key.tabhud.mapTgl", + // InputUtil.Type.KEYSYM, + // GLFW.GLFW_KEY_LEFT_ALT, + // "key.categories.skyblocker")); + defaultTgl = KeyBindingHelper.registerKeyBinding( + new KeyBinding("key.tabhud.defaultTgl", + InputUtil.Type.KEYSYM, + GLFW.GLFW_KEY_B, + "key.categories.skyblocker")); + + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java new file mode 100644 index 00000000..4bd48f89 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java @@ -0,0 +1,24 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EssenceWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class DungeonHubScreen extends Screen{ + + public DungeonHubScreen(int w, int h, List list, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(list); + EssenceWidget ew = new EssenceWidget(list); + centerW(sw); + centerW(ew); + stackWidgetsH(sw, ew); + this.addWidget(ew); + this.addWidget(sw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java new file mode 100644 index 00000000..ce87a035 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class DungeonPlayerScreen extends Screen { + + public DungeonPlayerScreen(int w, int h, List ple, Text footer) { + super(w, h); + DungeonPlayerWidget dpw1 = new DungeonPlayerWidget(ple, 1); + DungeonPlayerWidget dpw2 = new DungeonPlayerWidget(ple, 2); + DungeonPlayerWidget dpw3 = new DungeonPlayerWidget(ple, 3); + DungeonPlayerWidget dpw4 = new DungeonPlayerWidget(ple, 4); + DungeonPlayerWidget dpw5 = new DungeonPlayerWidget(ple, 5); + + offCenterL(dpw1); + offCenterL(dpw2); + offCenterL(dpw3); + offCenterR(dpw4); + offCenterR(dpw5); + stackWidgetsH(dpw1, dpw2, dpw3); + stackWidgetsH(dpw4, dpw5); + addWidgets(dpw1, dpw2, dpw3, dpw4, dpw5); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java new file mode 100644 index 00000000..bb80b01b --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java @@ -0,0 +1,37 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDeathWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDownedWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPuzzleWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonSecretWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class DungeonScreen extends Screen { + + public DungeonScreen(int w, int h, List ple, Text footer) { + super(w, h); + DungeonDownedWidget ddow = new DungeonDownedWidget(ple); + DungeonDeathWidget ddew = new DungeonDeathWidget(ple); + DungeonSecretWidget dscw = new DungeonSecretWidget(ple); + DungeonServerWidget dsrw = new DungeonServerWidget(ple); + DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget(ple); + + offCenterL(ddow); + offCenterL(ddew); + offCenterL(dscw); + offCenterR(dsrw); + offCenterR(dpuw); + + stackWidgetsH(ddow, ddew, dscw); + stackWidgetsH(dsrw, dpuw); + + addWidgets(ddow, ddew, dscw, dsrw, dpuw); + + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java new file mode 100644 index 00000000..07162834 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java @@ -0,0 +1,19 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EmptyWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class EmptyScreen extends Screen { + + public EmptyScreen(int w, int h, List ple, Text footer) { + super(w, h); + EmptyWidget ew = new EmptyWidget(ple); + this.center(ew); + this.addWidget(ew); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java new file mode 100644 index 00000000..f66638a9 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java @@ -0,0 +1,23 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.TrapperWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class FarmingServerScreen extends Screen{ + + public FarmingServerScreen(int w, int h, List list, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(list); + TrapperWidget tw = new TrapperWidget(list); + centerW(sw); + centerW(tw); + stackWidgetsH(sw, tw); + this.addWidgets(tw, sw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java new file mode 100644 index 00000000..30f4bbc3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java @@ -0,0 +1,23 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ComposterWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenServerWidget; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GardenScreen extends Screen{ + + public GardenScreen(int w, int h, List ple, Text footer) { + super(w, h); + GardenServerWidget gsw = new GardenServerWidget(ple); + ComposterWidget cw = new ComposterWidget(ple); + + this.stackWidgetsH(gsw, cw); + this.centerW(gsw); + this.centerW(cw); + this.addWidgets(gsw, cw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java new file mode 100644 index 00000000..01b159e2 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java @@ -0,0 +1,51 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ElectionWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.SkillsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GenericInfoScreen extends Screen { + + public GenericInfoScreen(int w, int h, List ple, Text footer) { + super(w, h); + + String f = footer.getString(); + + SkillsWidget sw = new SkillsWidget(ple); + EventWidget evw = new EventWidget(ple); + UpgradeWidget uw = new UpgradeWidget(f); + + ProfileWidget pw = new ProfileWidget(ple); + EffectWidget efw = new EffectWidget(f); + + ElectionWidget elw = new ElectionWidget(ple); + CookieWidget cw = new CookieWidget(f); + + // goofy ahh layout code incoming + this.stackWidgetsH(sw, evw, uw); + this.stackWidgetsH(pw, efw); + this.stackWidgetsH(elw, cw); + + this.centerW(sw); + this.centerW(evw); + this.centerW(uw); + + this.collideAgainstL(pw, sw, evw, uw); + this.collideAgainstL(efw, sw, evw, uw); + + this.collideAgainstR(elw, sw, evw, uw); + this.collideAgainstR(cw, sw, evw, uw); + + this.addWidgets(sw, evw, uw, pw, efw, elw, cw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericServerScreen.java new file mode 100644 index 00000000..fee4a9f8 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericServerScreen.java @@ -0,0 +1,19 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GenericServerScreen extends Screen { + + public GenericServerScreen(int w, int h, List ple, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(ple); + this.center(sw); + this.addWidget(sw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestPlayerScreen.java new file mode 100644 index 00000000..4647da7a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestPlayerScreen.java @@ -0,0 +1,23 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandGuestsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandOwnersWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GuestPlayerScreen extends Screen{ + + public GuestPlayerScreen(int w, int h, List list, Text footer) { + super(w, h); + IslandGuestsWidget igw = new IslandGuestsWidget(list); + IslandOwnersWidget iow = new IslandOwnersWidget(list); + this.centerH(iow); + this.centerH(igw); + this.stackWidgetsW(igw, iow); + this.addWidgets(iow, igw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestServerScreen.java new file mode 100644 index 00000000..03e22292 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestServerScreen.java @@ -0,0 +1,19 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GuestServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GuestServerScreen extends Screen{ + + public GuestServerScreen(int w, int h, List list, Text footer) { + super(w, h); + GuestServerWidget gsw = new GuestServerWidget(list); + this.center(gsw); + this.addWidget(gsw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomePlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomePlayerScreen.java new file mode 100644 index 00000000..506f773f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomePlayerScreen.java @@ -0,0 +1,22 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandGuestsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandSelfWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class HomePlayerScreen extends Screen { + + public HomePlayerScreen(int w, int h, List list, Text footer) { + super(w, h); + IslandSelfWidget isw = new IslandSelfWidget(list); + IslandGuestsWidget igw = new IslandGuestsWidget(list); + this.centerH(isw); + this.centerH(igw); + this.stackWidgetsW(isw, igw); + this.addWidgets(isw, igw); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomeServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomeServerScreen.java new file mode 100644 index 00000000..6d67f829 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomeServerScreen.java @@ -0,0 +1,24 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandServerWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.MinionWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class HomeServerScreen extends Screen { + + public HomeServerScreen(int w, int h, List list, Text footer) { + super(w, h); + + IslandServerWidget isw = new IslandServerWidget(list); + MinionWidget mw = new MinionWidget(list); + this.centerH(isw); + this.centerH(mw); + this.stackWidgetsW(isw, mw); + this.addWidgets(isw, mw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HubServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HubServerScreen.java new file mode 100644 index 00000000..15ac3183 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HubServerScreen.java @@ -0,0 +1,23 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.FireSaleWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class HubServerScreen extends Screen { + + public HubServerScreen(int w, int h, List ple, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(ple); + FireSaleWidget fsw = new FireSaleWidget(ple); + this.centerW(sw); + this.centerW(fsw); + this.stackWidgetsH(sw, fsw); + this.addWidgets(sw, fsw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/MineServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/MineServerScreen.java new file mode 100644 index 00000000..0e581852 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/MineServerScreen.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ForgeWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PowderWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class MineServerScreen extends Screen{ + + public MineServerScreen(int w, int h, List list, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(list); + PowderWidget pw = new PowderWidget(list); + CommsWidget cw = new CommsWidget(list); + ForgeWidget fw = new ForgeWidget(list); + stackWidgetsH(sw, pw, cw); + centerH(fw); + offCenterL(sw); + offCenterL(pw); + offCenterL(cw); + offCenterR(fw); + this.addWidgets(fw, cw, pw, sw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ParkServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ParkServerScreen.java new file mode 100644 index 00000000..bb601251 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ParkServerScreen.java @@ -0,0 +1,19 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ParkServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class ParkServerScreen extends Screen{ + + public ParkServerScreen(int w, int h, List ple, Text footer) { + super(w, h); + ParkServerWidget sw = new ParkServerWidget(ple); + this.center(sw); + this.addWidget(sw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlayerListScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlayerListScreen.java new file mode 100644 index 00000000..14adc322 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlayerListScreen.java @@ -0,0 +1,19 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PlayerListWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class PlayerListScreen extends Screen { + + public PlayerListScreen(int w, int h, List ple, Text footer) { + super(w, h); + PlayerListWidget plw = new PlayerListWidget(ple); + this.center(plw); + this.addWidget(plw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java new file mode 100644 index 00000000..8e99698b --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -0,0 +1,250 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.ArrayList; +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; + +public class Screen { + + private enum ScreenType { + DUNGEON, + GUEST_ISLAND, + HOME_ISLAND, + CRIMSON_ISLE, + DUNGEON_HUB, + FARMING_ISLAND, + PARK, + DWARVEN_MINES, + CRYSTAL_HOLLOWS, + END, + GOLD_MINE, + DEEP_CAVERNS, + HUB, + SPIDER_DEN, + JERRY, + GARDEN, + NONE + } + + private ArrayList widgets = new ArrayList<>(); + private int w, h; + + public Screen(int w, int h) { + this.w = w; + this.h = h; + } + + public void addWidget(Widget w) { + widgets.add(w); + } + + public void addWidgets(Widget... ws) { + for (Widget w : ws) { + widgets.add(w); + } + } + + public void render(MatrixStack ms) { + for (Widget w : widgets) { + w.render(ms); + } + } + + public void stackWidgetsH(Widget... list) { + int compHeight = -5; + for (Widget wid : list) { + compHeight += wid.getHeight() + 5; + } + + int y = (h - compHeight) / 2; + for (Widget wid : list) { + wid.setY(y); + y += wid.getHeight() + 5; + } + } + + public void stackWidgetsW(Widget... list) { + // TODO not centered + int compWidth = -5; + for (Widget wid : list) { + compWidth += wid.getWidth() + 5; + } + + int x = (w - compWidth) / 2; + for (Widget wid : list) { + wid.setX(x); + x += wid.getWidth() + 5; + } + } + + public void centerH(Widget wid) { + wid.setY((h - wid.getHeight()) / 2); + } + + public void centerW(Widget wid) { + wid.setX((w - wid.getWidth()) / 2); + } + + public void center(Widget wid) { + this.centerH(wid); + this.centerW(wid); + } + + public void offCenterL(Widget wid) { + int wHalf = this.w / 2; + wid.setX(wHalf - 3 - wid.getWidth()); + } + + public void offCenterR(Widget wid) { + int wHalf = this.w / 2; + wid.setX(wHalf + 3); + } + + public void collideAgainstL(Widget w, Widget... others) { + int yMin = w.getY(); + int yMax = w.getY() + w.getHeight(); + + int xCor = this.w / 2; + + // assume others to be sorted top-bottom. + for (Widget other : others) { + if (other.getY() + other.getHeight() + 5 < yMin) { + // too high, next one + continue; + } + + if (other.getY() - 5 > yMax) { + // too low, no more collisions possible + break; + } + + int xPos = other.getX() - 5 - w.getWidth(); + xCor = Math.min(xCor, xPos); + } + w.setX(xCor); + } + + public void collideAgainstR(Widget w, Widget... others) { + int yMin = w.getY(); + int yMax = w.getY() + w.getHeight(); + + int xCor = this.w / 2; + + // assume others to be sorted top-bottom. + for (Widget other : others) { + if (other.getY() + other.getHeight() + 5 < yMin) { + // too high, next one + continue; + } + + if (other.getY() - 5 > yMax) { + // too low, no more collisions possible + break; + } + + int xPos = other.getX() + other.getWidth() + 5; + xCor = Math.max(xCor, xPos); + } + w.setX(xCor); + } + + public static Screen getCorrect(int w, int h, List ple, Text footer) { + if (TabHud.genericTgl.isPressed()) { + return new GenericInfoScreen(w, h, ple, footer); + // } else if (TabHud.mapTgl.isPressed()) { + // return Screen.correctMapScrn(w, h, ple, footer); + } else if (TabHud.playerTgl.isPressed()) { + return Screen.correctPlayerScrn(w, h, ple, footer); + } else { + return Screen.correctMainScrn(w, h, ple, footer); + } + } + + private static ScreenType getScreenType(List ple) { + String cat2Name = StrMan.strAt(ple, 40); + + if (cat2Name.contains("Dungeon Stats")) { + return ScreenType.DUNGEON; + } + + String areaDesciptor = StrMan.strAt(ple, 41).substring(6); + switch (areaDesciptor) { + case "Private Island": + if (ple.get(44).getDisplayName().getString().endsWith("Guest")) { + return ScreenType.GUEST_ISLAND; + } else { + return ScreenType.HOME_ISLAND; + } + case "Crimson Isle": + return ScreenType.CRIMSON_ISLE; + case "Dungeon Hub": + return ScreenType.DUNGEON_HUB; + case "The Farming Islands": + return ScreenType.FARMING_ISLAND; + case "The Park": + return ScreenType.PARK; + case "Dwarven Mines": + return ScreenType.DWARVEN_MINES; + case "Crystal Hollows": + return ScreenType.CRYSTAL_HOLLOWS; + case "The End": + return ScreenType.END; + case "Gold Mine": + return ScreenType.GOLD_MINE; + case "Deep Caverns": + return ScreenType.DEEP_CAVERNS; + case "Hub": + return ScreenType.HUB; + case "Spider's Den": + return ScreenType.SPIDER_DEN; + case "Jerry's Workshop": + return ScreenType.JERRY; + case "Garden": + return ScreenType.GARDEN; + default: + return ScreenType.NONE; + } + } + + // private static Screen correctMapScrn(int w, int h, List list, Text footer) { + // // return switch (getScreenType(list)) { + // // case CRYSTAL_HOLLOWS -> null; + // // case DUNGEON -> null; + // // default -> new EmptyScreen(w, h, list, footer); + // // }; + // return new EmptyScreen(w, h, list, footer); + // } + + private static Screen correctPlayerScrn(int w, int h, List list, Text footer) { + return switch (getScreenType(list)) { + case GUEST_ISLAND -> new GuestPlayerScreen(w, h, list, footer); // ok + case HOME_ISLAND -> new HomePlayerScreen(w, h, list, footer); // ok + case DUNGEON -> new DungeonPlayerScreen(w, h, list, footer); + default -> new PlayerListScreen(w, h, list, footer); // ok + }; + } + + private static Screen correctMainScrn(int w, int h, List list, Text footer) { + return switch (getScreenType(list)) { + case PARK -> new ParkServerScreen(w, h, list, footer); // ok + case HUB -> new HubServerScreen(w, h, list, footer); // ok + case HOME_ISLAND -> new HomeServerScreen(w, h, list, footer); // ok + case GUEST_ISLAND -> new GuestServerScreen(w, h, list, footer); // ok + case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, list, footer); + case FARMING_ISLAND -> new FarmingServerScreen(w, h, list, footer); // ok + case DUNGEON_HUB -> new DungeonHubScreen(w, h, list, footer); // ok + case DUNGEON -> new DungeonScreen(w, h, list, footer); + case CRIMSON_ISLE -> null; // TODO + case GARDEN -> new GardenScreen(w, h, list, footer); + default -> new GenericServerScreen(w, h, list, footer); // ok + }; + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java new file mode 100644 index 00000000..a9f8e22f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java @@ -0,0 +1,50 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; + +public class Ico { + public static final ItemStack MAP = new ItemStack(Items.FILLED_MAP); + public static final ItemStack NTAG = new ItemStack(Items.NAME_TAG); + public static final ItemStack EMERALD = new ItemStack(Items.EMERALD); + public static final ItemStack CLOCK = new ItemStack(Items.CLOCK); + public static final ItemStack DIASWORD = new ItemStack(Items.DIAMOND_SWORD); + public static final ItemStack DBUSH = new ItemStack(Items.DEAD_BUSH); + public static final ItemStack VILLAGER = new ItemStack(Items.VILLAGER_SPAWN_EGG); + public static final ItemStack MOREGOLD = new ItemStack(Items.GOLDEN_APPLE); + public static final ItemStack COMPASS = new ItemStack(Items.COMPASS); + public static final ItemStack SUGAR = new ItemStack(Items.SUGAR); + public static final ItemStack HOE = new ItemStack(Items.IRON_HOE); + public static final ItemStack GOLD = new ItemStack(Items.GOLD_INGOT); + public static final ItemStack BONE = new ItemStack(Items.BONE); + public static final ItemStack SIGN = new ItemStack(Items.OAK_SIGN); + public static final ItemStack FISH_ROD = new ItemStack(Items.FISHING_ROD); + public static final ItemStack SWORD = new ItemStack(Items.IRON_SWORD); + public static final ItemStack LANTERN = new ItemStack(Items.LANTERN); + public static final ItemStack COOKIE = new ItemStack(Items.COOKIE); + public static final ItemStack POTION = new ItemStack(Items.POTION); + public static final ItemStack BARRIER = new ItemStack(Items.BARRIER); + public static final ItemStack PLAYER = new ItemStack(Items.PLAYER_HEAD); + public static final ItemStack WATER = new ItemStack(Items.WATER_BUCKET); + public static final ItemStack LEATHER = new ItemStack(Items.LEATHER); + public static final ItemStack MITHRIL = new ItemStack(Items.PRISMARINE_CRYSTALS); + public static final ItemStack REDSTONE = new ItemStack(Items.REDSTONE); + public static final ItemStack FIRE = new ItemStack(Items.CAMPFIRE); + public static final ItemStack STRING = new ItemStack(Items.STRING); + public static final ItemStack WITHER = new ItemStack(Items.WITHER_SKELETON_SKULL); + public static final ItemStack FLESH = new ItemStack(Items.ROTTEN_FLESH); + public static final ItemStack DRAGON = new ItemStack(Items.DRAGON_HEAD); + public static final ItemStack DIAMOND = new ItemStack(Items.DIAMOND); + public static final ItemStack ICE = new ItemStack(Items.ICE); + public static final ItemStack CHEST = new ItemStack(Items.CHEST); + public static final ItemStack COMMAND = new ItemStack(Items.COMMAND_BLOCK); + public static final ItemStack SKULL = new ItemStack(Items.SKELETON_SKULL); + public static final ItemStack BOOK = new ItemStack(Items.WRITABLE_BOOK); + public static final ItemStack FURNACE = new ItemStack(Items.FURNACE); + public static final ItemStack CHESTPLATE = new ItemStack(Items.IRON_CHESTPLATE); + public static final ItemStack B_ROD = new ItemStack(Items.BLAZE_ROD); + public static final ItemStack BOW = new ItemStack(Items.BOW); + public static final ItemStack COPPER = new ItemStack(Items.COPPER_INGOT); + public static final ItemStack COMPOSTER = new ItemStack(Items.COMPOSTER); + public static final ItemStack SAPLING = new ItemStack(Items.OAK_SAPLING); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java new file mode 100644 index 00000000..8cd77ac2 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java @@ -0,0 +1,64 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.util; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class StrMan { + + private static final Logger LOGGER = LoggerFactory.getLogger(StrMan.class.getName()); + private static final Text ERROR_TXT = Text.literal("[ERROR]").formatted(Formatting.RED, Formatting.BOLD); + + public static Text stdEntry(List ple, int idx, String entryName, Formatting contentFmt) { + Text txt = ple.get(idx).getDisplayName(); + if (txt == null) { + return ERROR_TXT; + } + String src = txt.getString(); + src = src.substring(src.indexOf(':') + 1); + return StrMan.stdEntry(src, entryName, contentFmt); + } + + public static Text stdEntry(String entryContent, String entryName, Formatting contentFmt) { + return Text.literal(entryName).append(Text.literal(entryContent).formatted(contentFmt)); + } + + public static Text plainEntry(List ple, int idx) { + Text txt = ple.get(idx).getDisplayName(); + if (txt == null) { + return ERROR_TXT; + } + return Text.of(txt.getString().trim()); + } + + public static Matcher regexAt(List ple, int idx, Pattern p) { + Text txt = ple.get(idx).getDisplayName(); + if (txt == null) { + return null; + } + String str = txt.getString(); + Matcher m = p.matcher(str); + if (!m.matches()) { + LOGGER.error("ERROR: Regex {} failed for input \"{}\"", p.pattern(), str); + return null; + } else { + return m; + } + } + + public static String strAt(List ple, int idx) { + Text txt = ple.get(idx).getDisplayName(); + if (txt == null) { + return null; + } + return txt.getString(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java new file mode 100644 index 00000000..ef86b8f0 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java @@ -0,0 +1,53 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.math.MathHelper; + +// this widget shows the status of the king's commissions. +// works in both the dwarven mines and the CH + +public class CommsWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Commissions").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + // match a comm + // group 1: comm name + // group 2: comm progress (without "%" for comms that show a percentage) + private static final Pattern COMM_PATTERN = Pattern.compile(" (.*): (.*)%?"); + + public CommsWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + for (int i = 50; i <= 51; i++) { + Matcher m = StrMan.regexAt(list, i, COMM_PATTERN); + + String g2 = m.group(2); + ProgressComponent pc; + if (g2.equals("DONE")) { + pc = new ProgressComponent(Ico.BOOK, Text.of(m.group(1)), Text.of(g2), 100f, pcntToCol(100)); + } else { + float pcnt = Float.parseFloat(g2.substring(0, g2.length() - 1)); + pc = new ProgressComponent(Ico.BOOK, Text.of(m.group(1)), pcnt, pcntToCol(pcnt)); + } + this.addComponent(pc); + } + this.pack(); + } + + private int pcntToCol(float pcnt) { + return MathHelper.hsvToRgb(pcnt / 300f, 0.9f, 0.9f); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java new file mode 100644 index 00000000..2537b90a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java @@ -0,0 +1,44 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about the garden's composter + +public class ComposterWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Composter").formatted(Formatting.GREEN, + Formatting.BOLD); + + + public ComposterWidget(List list) { + super(TITLE, Formatting.GREEN.getColorValue()); + + Text matter = StrMan.stdEntry(list, 48, "Organic Matter:", Formatting.YELLOW); + IcoTextComponent mat = new IcoTextComponent(Ico.SAPLING, matter); + this.addComponent(mat); + + Text fuel = StrMan.stdEntry(list, 49, "Fuel:", Formatting.BLUE); + IcoTextComponent f = new IcoTextComponent(Ico.FURNACE, fuel); + this.addComponent(f); + + Text timeLeft = StrMan.stdEntry(list, 50, "Time Left:", Formatting.RED); + IcoTextComponent time = new IcoTextComponent(Ico.CLOCK, timeLeft); + this.addComponent(time); + + Text compost = StrMan.stdEntry(list, 51, "Stored Compost:", Formatting.DARK_GREEN); + IcoTextComponent comp = new IcoTextComponent(Ico.COMPOSTER, compost); + this.addComponent(comp); + + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java new file mode 100644 index 00000000..86d9dd7f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java @@ -0,0 +1,33 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about active super cookies +// or not, if you're unwilling to buy one +// TODO: test with active cookie. I'm not buying one. + +public class CookieWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Cookie Info").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + public CookieWidget(String footertext) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + + String interesting = footertext.split("Cookie Buff")[1]; + String[] lines = interesting.split("\n"); + if (lines[1].startsWith("Not")) { + this.addComponent(new IcoTextComponent(Ico.COOKIE, Text.of("Not active"))); + } else { + Text cookie = Text.literal("Time Left: ").append(lines[2]); + this.addComponent(new IcoTextComponent(Ico.COOKIE, cookie)); + } + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java new file mode 100644 index 00000000..928d9f76 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java @@ -0,0 +1,53 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows various dungeon info +// deaths, healing, dmg taken, milestones + +public class DungeonDeathWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Death").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + // match the deaths entry + // group 1: amount of deaths + private static final Pattern DEATH_PATTERN = Pattern.compile("\\S*: \\((\\d+)\\).*"); + + public DungeonDeathWidget(List list) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + + Matcher m = StrMan.regexAt(list, 25, DEATH_PATTERN); + Formatting f = (m.group(1).equals("0")) ? Formatting.GREEN : Formatting.RED; + Text d = Text.literal("Deaths: ").append(Text.literal(m.group(1)).formatted(f)); + IcoTextComponent deaths = new IcoTextComponent(Ico.SKULL, d); + this.addComponent(deaths); + + Text dealt = StrMan.stdEntry(list, 26, "Damage Dealt:", Formatting.RED); + IcoTextComponent de = new IcoTextComponent(Ico.SWORD, dealt); + this.addComponent(de); + + Text heal = StrMan.stdEntry(list, 27, "Healing Done:", Formatting.RED); + IcoTextComponent he = new IcoTextComponent(Ico.POTION, heal); + this.addComponent(he); + + Text mile = StrMan.stdEntry(list, 28, "Milestone:", Formatting.YELLOW); + IcoTextComponent mi = new IcoTextComponent(Ico.NTAG, mile); + this.addComponent(mi); + + this.pack(); + + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java new file mode 100644 index 00000000..9146fdbb --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java @@ -0,0 +1,42 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about... something? +// TODO: test this. + +public class DungeonDownedWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Downed").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + public DungeonDownedWidget(List list) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + Formatting format = Formatting.RED; + if (StrMan.strAt(list, 21).endsWith("NONE")) { + format = Formatting.GRAY; + } + Text downed = StrMan.stdEntry(list, 21, "Downed:", format); + IcoTextComponent down = new IcoTextComponent(Ico.SKULL, downed); + this.addComponent(down); + + Text time = StrMan.stdEntry(list, 22, "Time:", Formatting.GRAY); + IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); + this.addComponent(t); + + Text revive = StrMan.stdEntry(list, 23, "Revive:", Formatting.GRAY); + IcoTextComponent rev = new IcoTextComponent(Ico.POTION, revive); + this.addComponent(rev); + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java new file mode 100644 index 00000000..ce7b13bd --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java @@ -0,0 +1,83 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.HashMap; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.item.ItemStack; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about a player in the current dungeon group +// when inside a dungeon + +public class DungeonPlayerWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Player").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + // match a player entry + // group 1: name + // group 2: class (or literal "EMPTY" pre dungeon start) + // group 3: level (or nothing, if pre dungeon start) + // as a side effect, this regex keeps the iron man icon in the name + // not sure if that should be + private static final Pattern PLAYER_PATTERN = Pattern.compile("\\[\\d*\\] (.*) \\((\\S*) ?([XVI]*)\\)"); + + private static final HashMap ICOS = new HashMap<>(); + static { + ICOS.put("Tank", Ico.CHESTPLATE); + ICOS.put("Mage", Ico.B_ROD); + ICOS.put("Berserk", Ico.DIASWORD); + ICOS.put("Archer", Ico.BOW); + ICOS.put("Healer", Ico.POTION); + } + + // title needs to be changeable here + public DungeonPlayerWidget(List list, int player) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + + int start = 1 + (player - 1) * 4; + + if (list.get(start).getDisplayName().getString().length() < 2) { + this.addComponent( + new IcoTextComponent(Ico.SIGN, Text.literal("PRESS A TO JOIN").formatted(Formatting.GRAY))); + } else { + Matcher m = StrMan.regexAt(list, start, PLAYER_PATTERN); + + Text name = Text.literal("Name: ").append(Text.literal(m.group(1)).formatted(Formatting.YELLOW)); + this.addComponent(new IcoTextComponent(Ico.PLAYER, name)); + + String cl = m.group(2); + Formatting clf = Formatting.GRAY; + ItemStack cli = Ico.BARRIER; + if (!cl.equals("EMPTY")) { + cli = ICOS.get(cl); + clf = Formatting.LIGHT_PURPLE; + cl += " " + m.group(3); + } + + Text class_ = Text.literal("Class: ").append(Text.literal(cl).formatted(clf)); + IcoTextComponent itclass = new IcoTextComponent(cli, class_); + this.addComponent(itclass); + + Text ult = StrMan.stdEntry(list, start + 1, "Ult Cooldown:", Formatting.GOLD); + IcoTextComponent ul = new IcoTextComponent(Ico.CLOCK, ult); + this.addComponent(ul); + + Text revive = StrMan.stdEntry(list, start + 2, "Revives:", Formatting.DARK_PURPLE); + IcoTextComponent re = new IcoTextComponent(Ico.POTION, revive); + this.addComponent(re); + + } + this.pack(); + + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java new file mode 100644 index 00000000..906d449b --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java @@ -0,0 +1,51 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about all puzzeles in the dungeon (name and status) +// TODO: if puzzle was failed, show player name + +public class DungeonPuzzleWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Puzzles").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + // match a puzzle entry + // group 1: name + // group 2: status + // yes, that " ?" is needed. + // the teleport maze has a trailing whitespace that messes with the regex + private static final Pattern PUZZLE_PATTERN = Pattern.compile(" (.*): \\[(.*)\\] ?"); + + public DungeonPuzzleWidget(List list) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + + int pos = 48; + + while (pos < 60) { + Matcher m = StrMan.regexAt(list, pos, PUZZLE_PATTERN); + if (m == null) { + break; + } + Text t = Text.literal(m.group(1) + ": ").append(Text.literal("[").formatted(Formatting.GRAY)) + .append(m.group(2)).append(Text.literal("]").formatted(Formatting.GRAY)); + IcoTextComponent itc = new IcoTextComponent(Ico.SIGN, t); + this.addComponent(itc); + pos++; + } + this.pack(); + + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java new file mode 100644 index 00000000..fed6b0b2 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java @@ -0,0 +1,35 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about secrets of the dungeon + +public class DungeonSecretWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Discoveries").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + public DungeonSecretWidget(List list) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + + Text secrets = StrMan.stdEntry(list, 31, "Secrets:", Formatting.YELLOW); + IcoTextComponent sec = new IcoTextComponent(Ico.CHEST, secrets); + this.addComponent(sec); + + Text crypts = StrMan.stdEntry(list, 32, "Crypts:", Formatting.YELLOW); + IcoTextComponent cry = new IcoTextComponent(Ico.SKULL, crypts); + this.addComponent(cry); + + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java new file mode 100644 index 00000000..89d3b1ca --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java @@ -0,0 +1,56 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows broad info about the current dungeon +// opened/completed rooms, % of secrets found and time taken + +public class DungeonServerWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Dungeon Info").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + // match the secrets text + // group 1: % of secrets found (without "%") + private static final Pattern SECRET_PATTERN = Pattern.compile(" Secrets Found: (.*)%"); + + public DungeonServerWidget(List list) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + Text name = StrMan.stdEntry(list, 41, "Name:", Formatting.AQUA); + IcoTextComponent na = new IcoTextComponent(Ico.NTAG, name); + this.addComponent(na); + + Text open = StrMan.stdEntry(list, 42, "Rooms Visited:", Formatting.DARK_PURPLE); + IcoTextComponent op = new IcoTextComponent(Ico.SIGN, open); + this.addComponent(op); + + Text compl = StrMan.stdEntry(list, 43, "Rooms Completed:", Formatting.LIGHT_PURPLE); + IcoTextComponent co = new IcoTextComponent(Ico.SIGN, compl); + this.addComponent(co); + + Matcher m = StrMan.regexAt(list, 44, SECRET_PATTERN); + Text secrets = Text.of("Secrets found:"); + ProgressComponent scp = new ProgressComponent(Ico.CHEST, secrets, Float.parseFloat(m.group(1)), + Formatting.DARK_PURPLE.getColorValue()); + this.addComponent(scp); + + Text time = StrMan.stdEntry(list, 45, "Time:", Formatting.GOLD); + IcoTextComponent ti = new IcoTextComponent(Ico.CLOCK, time); + this.addComponent(ti); + + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java new file mode 100644 index 00000000..54b49465 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java @@ -0,0 +1,40 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoFatTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widgte shows, how many active effects you have +// it also shows one of those in detail + +public class EffectWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Effect Info").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + public EffectWidget(String footertext) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + + String interesting = footertext.split("Active Effects")[1]; + String[] lines = interesting.split("\n"); + + if (lines[1].startsWith("No")) { + Text txt = Text.literal("No effects active").formatted(Formatting.GRAY); + this.addComponent(new IcoTextComponent(Ico.POTION, txt)); + } else { + String number = lines[1].substring("You have ".length()); + number = number.substring(0, number.indexOf(' ')); + Text active = Text.literal("Active Effects: ").append(Text.literal(number).formatted(Formatting.YELLOW)); + + IcoFatTextComponent iftc = new IcoFatTextComponent(Ico.POTION, active, + Text.literal(lines[3]).formatted(Formatting.AQUA)); + this.addComponent(iftc); + } + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java new file mode 100644 index 00000000..e75b7152 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java @@ -0,0 +1,97 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.HashMap; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.item.ItemStack; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// XXX crashes when in garden, as this shows jacob's farming info there... +// "starts in", then the three farmable things +// this widget shows the status or results of the current election + +public class ElectionWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Election Info").formatted(Formatting.YELLOW, + Formatting.BOLD); + + private static final HashMap MAYOR_DATA = new HashMap<>(); + + private static final Text EL_OVER = Text.literal("Election ") + .append(Text.literal("over!").formatted(Formatting.RED)); + + // pattern matching a candidate while people are voting + // group 1: name + // group 2: % of votes + private static final Pattern VOTE_PATTERN = Pattern.compile(" (\\S*): \\|+ \\((\\d*)%\\)"); + + static { + MAYOR_DATA.put("Aatrox", Ico.DIASWORD); + MAYOR_DATA.put("Diana", Ico.BONE); + MAYOR_DATA.put("Diaz", Ico.GOLD); + MAYOR_DATA.put("Finnegan", Ico.HOE); + MAYOR_DATA.put("Foxy", Ico.SUGAR); + MAYOR_DATA.put("Paul", Ico.COMPASS); + MAYOR_DATA.put("Scorpius", Ico.MOREGOLD); + MAYOR_DATA.put("Jerry", Ico.VILLAGER); + MAYOR_DATA.put("Derpy", Ico.DBUSH); + MAYOR_DATA.put("Marina", Ico.FISH_ROD); + } + + private static final Formatting[] COLS = { Formatting.GOLD, Formatting.RED, Formatting.LIGHT_PURPLE }; + + public ElectionWidget(List list) { + super(TITLE, Formatting.YELLOW.getColorValue()); + + if (StrMan.strAt(list, 76).contains("Over!")) { + // election is over + + IcoTextComponent over = new IcoTextComponent(Ico.BARRIER, EL_OVER); + this.addComponent(over); + + String winnername = StrMan.strAt(list, 77).split(": ")[1]; + Text winnertext = Text.literal("Winner: ") + .append(Text.literal(winnername).formatted(Formatting.GREEN)); + IcoTextComponent winner = new IcoTextComponent(MAYOR_DATA.get(winnername), winnertext); + this.addComponent(winner); + + Text participants = StrMan.stdEntry(list, 78, "Participants:", Formatting.AQUA); + IcoTextComponent part = new IcoTextComponent(Ico.PLAYER, participants); + this.addComponent(part); + + Text year = StrMan.stdEntry(list, 79, "Year:", Formatting.LIGHT_PURPLE); + IcoTextComponent y = new IcoTextComponent(Ico.SIGN, year); + this.addComponent(y); + + } else { + // election is going on + Text time = StrMan.stdEntry(list, 76, "End in:", Formatting.GOLD); + IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); + this.addComponent(t); + + for (int i = 77; i <= 79; i++) { + Matcher m = StrMan.regexAt(list, i, VOTE_PATTERN); + String g1 = m.group(1); + String g2 = m.group(2); + float pcnt = Float.parseFloat(g2); + Text candidate = Text.literal(g1).formatted(COLS[i - 77]); + ProgressComponent pc = new ProgressComponent(MAYOR_DATA.get(g1), candidate, pcnt, + COLS[i - 77].getColorValue()); + this.addComponent(pc); + + } + } + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java new file mode 100644 index 00000000..584a593e --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java @@ -0,0 +1,27 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// empty widget for when nothing can be shown + +public class EmptyWidget extends Widget { + private static final MutableText TITLE = Text.literal("Empty").formatted(Formatting.RED, + Formatting.BOLD); + + public EmptyWidget(List list) { + super(TITLE, Formatting.RED.getColorValue()); + + Text info = Text.of("No info for this area!"); + PlainTextComponent inf = new PlainTextComponent(info); + this.addComponent(inf); + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java new file mode 100644 index 00000000..903c3a3d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java @@ -0,0 +1,48 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows your dungeon essences + +public class EssenceWidget extends Widget { + + private Text undead, wither, diamond, gold, dragon, spider, ice, crimson; + + private static final MutableText TITLE = Text.literal("Essences").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + public EssenceWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + wither = StrMan.stdEntry(list, 46, "Wither:", Formatting.DARK_PURPLE); + spider = StrMan.stdEntry(list, 47, "Spider:", Formatting.DARK_PURPLE); + undead = StrMan.stdEntry(list, 48, "Undead:", Formatting.DARK_PURPLE); + dragon = StrMan.stdEntry(list, 49, "Dragon:", Formatting.DARK_PURPLE); + gold = StrMan.stdEntry(list, 50, "Gold:", Formatting.DARK_PURPLE); + diamond = StrMan.stdEntry(list, 51, "Diamond:", Formatting.DARK_PURPLE); + ice = StrMan.stdEntry(list, 52, "Ice:", Formatting.DARK_PURPLE); + crimson = StrMan.stdEntry(list, 53, "Crimson:", Formatting.DARK_PURPLE); + + TableComponent tc = new TableComponent(2, 4, Formatting.DARK_AQUA.getColorValue()); + + tc.addToCell(0, 0, new IcoTextComponent(Ico.WITHER, wither)); + tc.addToCell(0, 1, new IcoTextComponent(Ico.STRING, spider)); + tc.addToCell(0, 2, new IcoTextComponent(Ico.FLESH, undead)); + tc.addToCell(0, 3, new IcoTextComponent(Ico.DRAGON, dragon)); + tc.addToCell(1, 0, new IcoTextComponent(Ico.GOLD, gold)); + tc.addToCell(1, 1, new IcoTextComponent(Ico.DIAMOND, diamond)); + tc.addToCell(1, 2, new IcoTextComponent(Ico.ICE, ice)); + tc.addToCell(1, 3, new IcoTextComponent(Ico.REDSTONE, crimson)); + this.addComponent(tc); + this.pack(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java new file mode 100644 index 00000000..051ce11c --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java @@ -0,0 +1,33 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about ongoing events (e.g. jacob's farming) + +public class EventWidget extends Widget { + private static final MutableText TITLE = Text.literal("Event Info").formatted(Formatting.YELLOW, Formatting.BOLD); + + public EventWidget(List list) { + super(TITLE, Formatting.YELLOW.getColorValue()); + + Text eventName = StrMan.stdEntry(list, 73, "Name:", Formatting.YELLOW); + IcoTextComponent event = new IcoTextComponent(Ico.NTAG, eventName); + this.addComponent(event); + + // this could look better + Text time = StrMan.plainEntry(list, 74); + IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); + this.addComponent(t); + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java new file mode 100644 index 00000000..7531b071 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java @@ -0,0 +1,56 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// TODO: untested with active fire sales +// this widget shows info about fire sales when in the hub +// or not, if there isn't one going on + +public class FireSaleWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Fire Sale").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + // matches a fire sale item + // group 1: item name + // group 2: # items bought + // group 1: # items available in total (1 digit + "k") + private static final Pattern FIRE_PATTERN = Pattern.compile(" (.*): (\\d*)/(\\d)k"); + + public FireSaleWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + boolean found = false; + + for (int i = 46;; i++) { + Matcher m = StrMan.regexAt(list, i, FIRE_PATTERN); + if (m == null ||!m.matches()) { + break; + } + found = true; + Text a = Text.literal(m.group(1)); + Text b = Text.literal(m.group(2) + "/" + m.group(3) + "000"); + float pcnt = (1 - (Float.parseFloat(m.group(2)) / (Float.parseFloat(m.group(3)) * 1000)))/100f; + ProgressComponent pc = new ProgressComponent(Ico.GOLD, a, b, pcnt, Formatting.LIGHT_PURPLE.getColorValue()); + this.addComponent(pc); + } + if (!found) { + this.addComponent(new PlainTextComponent(Text.literal("No Fire Sale!").formatted(Formatting.GRAY))); + } + this.pack(); + + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java new file mode 100644 index 00000000..553a001f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java @@ -0,0 +1,60 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoFatTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows what you're forging right now +// for locked slots, the unlock requirement is shown + +public class ForgeWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Forge Status").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + public ForgeWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + for (int i = 0; i < 5; i++) { + String fstr = StrMan.strAt(list, i + 54).substring(4); + Component c; + Text l1, l2; + + switch (fstr) { + case "LOCKED": + l1 = Text.literal("Locked").formatted(Formatting.RED); + l2 = switch (i + 1) { + case 3 -> Text.literal("Req. HotM 3").formatted(Formatting.GRAY); + case 4 -> Text.literal("Req. HotM 4").formatted(Formatting.GRAY); + case 5 -> Text.literal("Req. PotM 2").formatted(Formatting.GRAY); + default -> + Text.literal("This message should not appear").formatted(Formatting.RED, Formatting.BOLD); + }; + c = new IcoFatTextComponent(Ico.BARRIER, l1, l2); + break; + case "EMPTY": + l1 = Text.literal("Empty").formatted(Formatting.GRAY); + c = new IcoTextComponent(Ico.FURNACE, l1); + break; + default: + String[] parts = fstr.split(": "); + l1 = Text.of(parts[0]); + l2 = Text.literal(parts[1]).formatted(Formatting.YELLOW); + c = new IcoFatTextComponent(Ico.FIRE, l1, l2); + break; + } + this.addComponent(c); + } + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java new file mode 100644 index 00000000..c6c334d5 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java @@ -0,0 +1,59 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about the garden server + +public class GardenServerWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Server Info").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + private static final Pattern VISITOR_PATTERN = Pattern.compile(" Next Visitor: (.*)$"); + + public GardenServerWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); + IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); + this.addComponent(area); + + Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); + IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); + this.addComponent(server); + + Text amtGems = StrMan.stdEntry(list, 43, "Gems:", Formatting.GREEN); + IcoTextComponent gems = new IcoTextComponent(Ico.EMERALD, amtGems); + this.addComponent(gems); + + Text copper = StrMan.stdEntry(list, 44, "Copper:", Formatting.GOLD); + IcoTextComponent co = new IcoTextComponent(Ico.COPPER, copper); + this.addComponent(co); + + Matcher v = StrMan.regexAt(list, 45, VISITOR_PATTERN); + String vString = v.group(1); + Formatting col; + if (vString.equals("Not Unlocked!")) { + col = Formatting.RED; + } else { + col = Formatting.GREEN; + } + MutableText visitor = Text.literal("Next Visitor: ") + .append(Text.literal(vString).formatted(col)); + IcoTextComponent vis = new IcoTextComponent(Ico.PLAYER, visitor); + this.addComponent(vis); + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java new file mode 100644 index 00000000..67b61667 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java @@ -0,0 +1,41 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about the private island you're visiting + +public class GuestServerWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Island Info").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + public GuestServerWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); + IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); + this.addComponent(area); + + Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); + IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); + this.addComponent(server); + + Text owner = StrMan.stdEntry(list, 43, "Owner:", Formatting.GREEN); + IcoTextComponent own = new IcoTextComponent(Ico.SIGN, owner); + this.addComponent(own); + + Text status = StrMan.stdEntry(list, 44, "Status:", Formatting.BLUE); + IcoTextComponent stat = new IcoTextComponent(Ico.SIGN, status); + this.addComponent(stat); + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java new file mode 100644 index 00000000..5814c15c --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java @@ -0,0 +1,44 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows a list of all people visiting +// the same private island as you + +public class IslandGuestsWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Guests").formatted(Formatting.AQUA, + Formatting.BOLD); + + // matches a player entry, removing their level and the hand icon + // group 1: player name + private static final Pattern GUEST_PATTERN = Pattern.compile("\\[\\d*\\] (.*) \\[.\\]"); + + public IslandGuestsWidget(List list) { + super(TITLE, Formatting.AQUA.getColorValue()); + for (int i = 21; i < 40; i++) { + String str = list.get(i).getDisplayName().getString(); + if (str.length() == 0) { + if (i == 21) { + this.addComponent(new PlainTextComponent(Text.literal("No Visitors!").formatted(Formatting.GRAY))); + } + break; + } + Matcher m = StrMan.regexAt(list, i, GUEST_PATTERN); + PlainTextComponent ptc = new PlainTextComponent(Text.of(m.group(1))); + this.addComponent(ptc); + } + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java new file mode 100644 index 00000000..a0056a06 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java @@ -0,0 +1,47 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows a list of the owners of a private island +// when you're visiting someone else + +public class IslandOwnersWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Owners").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + // matches an owner + // group 1: player name (cut off by hypixel for some reason) + // group 2: last seem + // TODO: test with owner online + private static final Pattern OWNER_PATTERN = Pattern.compile("(.*) \\((.*)\\)"); + + public IslandOwnersWidget(List list) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + for (int i = 1; i < 20; i++) { + if (list.get(i).getDisplayName().getString().length() == 0) { + break; + } + + Matcher m = StrMan.regexAt(list, i, OWNER_PATTERN); + Text entry = Text.literal(m.group(1)) + .append( + Text.literal(" (" + m.group(2) + ")") + .formatted(Formatting.GRAY)); + PlainTextComponent ptc = new PlainTextComponent(entry); + this.addComponent(ptc); + } + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java new file mode 100644 index 00000000..96ec8ba5 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java @@ -0,0 +1,40 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows a list of the owners of your home island + +public class IslandSelfWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Owners").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + // matches an owner + // group 1: player name + private static final Pattern OWNER_PATTERN = Pattern.compile("\\[\\d*\\] (.*)"); + + public IslandSelfWidget(List list) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + for (int i = 1; i < 20; i++) { + String str = list.get(i).getDisplayName().getString(); + if (str.length() == 0) { + break; + } + Matcher m = StrMan.regexAt(list, i, OWNER_PATTERN); + PlainTextComponent ptc = new PlainTextComponent(Text.of(m.group(1))); + this.addComponent(ptc); + } + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java new file mode 100644 index 00000000..1bbe0ed7 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java @@ -0,0 +1,47 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about your home island + +public class IslandServerWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Island Info").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + public IslandServerWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); + IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); + this.addComponent(area); + + Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); + IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); + this.addComponent(server); + + Text crystals = StrMan.stdEntry(list, 43, "Crystals:", Formatting.DARK_PURPLE); + IcoTextComponent crys = new IcoTextComponent(Ico.EMERALD, crystals); + this.addComponent(crys); + + Text stash = StrMan.stdEntry(list, 44, "Stash:", Formatting.GREEN); + IcoTextComponent st = new IcoTextComponent(Ico.CHEST, stash); + this.addComponent(st); + + Text minions = StrMan.stdEntry(list, 45, "Minions:", Formatting.BLUE); + IcoTextComponent min = new IcoTextComponent(Ico.COMMAND, minions); + this.addComponent(min); + this.pack(); + + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java new file mode 100644 index 00000000..2ba94b48 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java @@ -0,0 +1,135 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.HashMap; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about minions placed on the home island + +public class MinionWidget extends Widget { + private static final MutableText TITLE = Text.literal("Minions").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + private static final HashMap MIN_ICOS = new HashMap<>(); + + // hmm... + static { + MIN_ICOS.put("Blaze", new ItemStack(Items.BLAZE_ROD)); + MIN_ICOS.put("Cave Spider", new ItemStack(Items.SPIDER_EYE)); + MIN_ICOS.put("Creeper", new ItemStack(Items.GUNPOWDER)); + MIN_ICOS.put("Enderman", new ItemStack(Items.ENDER_PEARL)); + MIN_ICOS.put("Ghast", new ItemStack(Items.GHAST_TEAR)); + MIN_ICOS.put("Magma Cube", new ItemStack(Items.MAGMA_CREAM)); + MIN_ICOS.put("Skeleton", new ItemStack(Items.BONE)); + MIN_ICOS.put("Slime", new ItemStack(Items.SLIME_BALL)); + MIN_ICOS.put("Spider", new ItemStack(Items.STRING)); + MIN_ICOS.put("Zombie", new ItemStack(Items.ROTTEN_FLESH)); + MIN_ICOS.put("Cactus", new ItemStack(Items.CACTUS)); + MIN_ICOS.put("Carrot", new ItemStack(Items.CARROT)); + MIN_ICOS.put("Chicken", new ItemStack(Items.CHICKEN)); + MIN_ICOS.put("Cocoa Beans", new ItemStack(Items.COCOA_BEANS)); + MIN_ICOS.put("Cow", new ItemStack(Items.BEEF)); + MIN_ICOS.put("Melon", new ItemStack(Items.MELON_SLICE)); + MIN_ICOS.put("Mushroom", new ItemStack(Items.RED_MUSHROOM)); + MIN_ICOS.put("Nether Wart", new ItemStack(Items.NETHER_WART)); + MIN_ICOS.put("Pig", new ItemStack(Items.PORKCHOP)); + MIN_ICOS.put("Potato", new ItemStack(Items.POTATO)); + MIN_ICOS.put("Pumpkin", new ItemStack(Items.PUMPKIN)); + MIN_ICOS.put("Rabbit", new ItemStack(Items.RABBIT)); + MIN_ICOS.put("Sheep", new ItemStack(Items.WHITE_WOOL)); + MIN_ICOS.put("Sugar Cane", new ItemStack(Items.SUGAR_CANE)); + MIN_ICOS.put("Wheat", new ItemStack(Items.WHEAT)); + MIN_ICOS.put("Clay", new ItemStack(Items.CLAY)); + MIN_ICOS.put("Fishing", new ItemStack(Items.FISHING_ROD)); + MIN_ICOS.put("Coal", new ItemStack(Items.COAL)); + MIN_ICOS.put("Cobblestone", new ItemStack(Items.COBBLESTONE)); + MIN_ICOS.put("Diamond", new ItemStack(Items.DIAMOND)); + MIN_ICOS.put("Emerald", new ItemStack(Items.EMERALD)); + MIN_ICOS.put("End Stone", new ItemStack(Items.END_STONE)); + MIN_ICOS.put("Glowstone", new ItemStack(Items.GLOWSTONE_DUST)); + MIN_ICOS.put("Gold", new ItemStack(Items.GOLD_INGOT)); + MIN_ICOS.put("Gravel", new ItemStack(Items.GRAVEL)); + MIN_ICOS.put("Hard Stone", new ItemStack(Items.STONE)); + MIN_ICOS.put("Ice", new ItemStack(Items.ICE)); + MIN_ICOS.put("Iron", new ItemStack(Items.IRON_INGOT)); + MIN_ICOS.put("Lapis", new ItemStack(Items.LAPIS_LAZULI)); + MIN_ICOS.put("Mithril", new ItemStack(Items.PRISMARINE_CRYSTALS)); + MIN_ICOS.put("Mycelium", new ItemStack(Items.MYCELIUM)); + MIN_ICOS.put("Obsidian", new ItemStack(Items.OBSIDIAN)); + MIN_ICOS.put("Quartz", new ItemStack(Items.QUARTZ)); + MIN_ICOS.put("Red Sand", new ItemStack(Items.RED_SAND)); + MIN_ICOS.put("Redstone", new ItemStack(Items.REDSTONE)); + MIN_ICOS.put("Sand", new ItemStack(Items.SAND)); + MIN_ICOS.put("Snow", new ItemStack(Items.SNOWBALL)); + MIN_ICOS.put("Inferno", new ItemStack(Items.BLAZE_SPAWN_EGG)); + MIN_ICOS.put("Revenant", new ItemStack(Items.ZOMBIE_SPAWN_EGG)); + MIN_ICOS.put("Tarantula", new ItemStack(Items.SPIDER_SPAWN_EGG)); + MIN_ICOS.put("Voidling", new ItemStack(Items.ENDERMAN_SPAWN_EGG)); + MIN_ICOS.put("Acacia", new ItemStack(Items.ACACIA_LOG)); + MIN_ICOS.put("Birch", new ItemStack(Items.BIRCH_LOG)); + MIN_ICOS.put("Dark Oak", new ItemStack(Items.DARK_OAK_LOG)); + MIN_ICOS.put("Flower", new ItemStack(Items.POPPY)); + MIN_ICOS.put("Jungle", new ItemStack(Items.JUNGLE_LOG)); + MIN_ICOS.put("Oak", new ItemStack(Items.OAK_LOG)); + MIN_ICOS.put("Spruce", new ItemStack(Items.SPRUCE_LOG)); + } + + // matches a minion entry + // group 1: name + // group 2: level + // group 3: status + public static final Pattern MINION_PATTERN = Pattern.compile(" (.*) ([XVI]*) \\[(.*)\\]"); + + public MinionWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + for (int i = 48; i < 59; i++) { + Matcher m = StrMan.regexAt(list, i, MINION_PATTERN); + if (m != null) { + + String min = m.group(1); + String lvl = m.group(2); + String stat = m.group(3); + + MutableText mt = Text.literal(min + " " + lvl).append(Text.literal(": ")); + + Formatting format = Formatting.RED; + if (stat.equals("ACTIVE")) { + format = Formatting.GREEN; + } else if (stat.equals("SLOW")) { + format = Formatting.YELLOW; + } + // makes "BLOCKED" also red. in reality, it's some kind of crimson + mt.append(Text.literal(stat).formatted(format)); + + IcoTextComponent itc = new IcoTextComponent(MIN_ICOS.get(min), mt); + this.addComponent(itc); + + } else { + break; + } + } + + // if more minions are placed than the tab menu can display, + // a "And X more..." text is shown + // look for that and add it to the widget + if (list.get(59).getDisplayName() != null) { + String other = list.get(59).getDisplayName().getString(); + this.addComponent(new PlainTextComponent(Text.of(other.trim()))); + } + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java new file mode 100644 index 00000000..a94b5948 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java @@ -0,0 +1,42 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about the park server + +public class ParkServerWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Server Info").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + public ParkServerWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); + IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); + this.addComponent(area); + + Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); + IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); + this.addComponent(server); + + Text amtGems = StrMan.stdEntry(list, 43, "Gems:", Formatting.GREEN); + IcoTextComponent gems = new IcoTextComponent(Ico.EMERALD, amtGems); + this.addComponent(gems); + + Text rain = StrMan.stdEntry(list, 44, "Rain:", Formatting.BLUE); + IcoTextComponent ra = new IcoTextComponent(Ico.WATER, rain); + this.addComponent(ra); + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java new file mode 100644 index 00000000..27c69567 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java @@ -0,0 +1,61 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlayerComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows a list of players with their skins +// in most areas + +public class PlayerListWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Players").formatted(Formatting.GREEN, + Formatting.BOLD); + + private ArrayList list = new ArrayList<>(); + + public PlayerListWidget(List l) { + super(TITLE, Formatting.GREEN.getColorValue()); + + // unintuitive int ceil division stolen from + // https://stackoverflow.com/questions/7139382/java-rounding-up-to-an-int-using-math-ceil#21830188 + int tblW = ((l.size() - 80) - 1) / 20 + 1; + + TableComponent tc = new TableComponent(tblW, (l.size() - 80 >= 20) ? 20 : l.size() - 80, + Formatting.GREEN.getColorValue()); + + for (int i = 80; i < l.size(); i++) { + list.add(l.get(i)); + } + + Collections.sort(list, new Comparator() { + @Override + public int compare(PlayerListEntry o1, PlayerListEntry o2) { + return o1.getProfile().getName().toLowerCase().compareTo(o2.getProfile().getName().toLowerCase()); + } + }); + + int x = 0, y = 0; + + for (PlayerListEntry ple : list) { + tc.addToCell(x, y, new PlayerComponent(ple)); + y++; + if (y >= 20) { + y = 0; + x++; + } + } + + this.addComponent(tc); + this.pack(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java new file mode 100644 index 00000000..97485b4f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java @@ -0,0 +1,35 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows how much mithril and gemstone powder you have + +public class PowderWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Powders").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + public PowderWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + Text amtMith = StrMan.stdEntry(list, 46, "Mithril:", Formatting.AQUA); + IcoTextComponent mith = new IcoTextComponent(Ico.MITHRIL, amtMith); + this.addComponent(mith); + + Text amtGem = StrMan.stdEntry(list, 47, "Gemstone:", Formatting.DARK_PURPLE); + IcoTextComponent gem = new IcoTextComponent(Ico.EMERALD, amtGem); + this.addComponent(gem); + this.pack(); + + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java new file mode 100644 index 00000000..59342b9d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java @@ -0,0 +1,42 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about your profile and bank + +public class ProfileWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Profile").formatted(Formatting.YELLOW, Formatting.BOLD); + + public ProfileWidget(List list) { + super(TITLE, Formatting.YELLOW.getColorValue()); + + Text profileType = StrMan.stdEntry(list, 61, "Type:", Formatting.GREEN); + IcoTextComponent profile = new IcoTextComponent(Ico.SIGN, profileType); + this.addComponent(profile); + + Text petInfo = StrMan.stdEntry(list, 62, "Pet Sitter:", Formatting.AQUA); + IcoTextComponent pet = new IcoTextComponent(Ico.BONE, petInfo); + this.addComponent(pet); + + Text bankAmt = StrMan.stdEntry(list, 63, "Balance:", Formatting.GOLD); + IcoTextComponent bank = new IcoTextComponent(Ico.EMERALD, bankAmt); + this.addComponent(bank); + + Text interest = StrMan.stdEntry(list, 64, "Interest in:", Formatting.GOLD); + IcoTextComponent inter = new IcoTextComponent(Ico.CLOCK, interest); + this.addComponent(inter); + this.pack(); + } + + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java new file mode 100644 index 00000000..ce7bc56f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java @@ -0,0 +1,40 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about "generic" servers +// a server is "generic", when only name, server ID and gems are shown +// in the thrid column of the tab menu + +public class ServerWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Server Info").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + public ServerWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); + IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); + this.addComponent(area); + + Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); + IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); + this.addComponent(server); + + Text amtGems = StrMan.stdEntry(list, 43, "Gems:", Formatting.GREEN); + IcoTextComponent gems = new IcoTextComponent(Ico.EMERALD, amtGems); + this.addComponent(gems); + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java new file mode 100644 index 00000000..85bd630b --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java @@ -0,0 +1,63 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about a skill and some stats + +public class SkillsWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Skill Info").formatted(Formatting.YELLOW, + Formatting.BOLD); + + // match the skill entry + // group 1: skill name and level + // group 2: progress to next level (without "%") + private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); + + public SkillsWidget(List list) { + super(TITLE, Formatting.YELLOW.getColorValue()); + + Matcher m = StrMan.regexAt(list, 66, SKILL_PATTERN); + + float pcnt = Float.parseFloat(m.group(2)); + String skill = m.group(1); + + ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(skill), pcnt, Formatting.GOLD.getColorValue()); + + this.addComponent(pc); + + Text speed = StrMan.stdEntry(list, 67, "SPD", Formatting.WHITE); + IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); + Text strength = StrMan.stdEntry(list, 68, "STR", Formatting.RED); + IcoTextComponent str = new IcoTextComponent(Ico.SWORD, strength); + Text critDmg = StrMan.stdEntry(list, 69, "CDG", Formatting.BLUE); + IcoTextComponent cdg = new IcoTextComponent(Ico.SWORD, critDmg); + Text critCh = StrMan.stdEntry(list, 70, "CCH", Formatting.BLUE); + IcoTextComponent cch = new IcoTextComponent(Ico.SWORD, critCh); + Text aSpeed = StrMan.stdEntry(list, 71, "ASP", Formatting.YELLOW); + IcoTextComponent asp = new IcoTextComponent(Ico.HOE, aSpeed); + + TableComponent tc = new TableComponent(2, 3, Formatting.YELLOW.getColorValue()); + tc.addToCell(0, 0, spd); + tc.addToCell(0, 1, str); + tc.addToCell(0, 2, asp); + tc.addToCell(1, 0, cdg); + tc.addToCell(1, 1, cch); + this.addComponent(tc); + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java new file mode 100644 index 00000000..981e4eef --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java @@ -0,0 +1,29 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows, how meny pelts you have (farming island only) + +public class TrapperWidget extends Widget { + private static final MutableText TITLE = Text.literal("Trapper").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); + + public TrapperWidget(List list) { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + Text amtPelts = StrMan.stdEntry(list, 46, "Pelts:", Formatting.AQUA); + IcoTextComponent pelts = new IcoTextComponent(Ico.LEATHER, amtPelts); + this.addComponent(pelts); + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java new file mode 100644 index 00000000..9f3be82a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java @@ -0,0 +1,38 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; + +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows info about current profile/account upgrades +// or not, if there aren't any +// TODO: not very pretty atm + +public class UpgradeWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Upgrade Info").formatted(Formatting.GOLD, + Formatting.BOLD); + + public UpgradeWidget(String footertext) { + super(TITLE, Formatting.GOLD.getColorValue()); + String[] interesting = footertext.split("Upgrades"); + if (interesting.length < 2) { + this.addComponent(new PlainTextComponent(Text.of("Currently no upgrades..."))); + this.pack(); + return; + } + String[] lines = interesting[1].split("\n"); + IcoTextComponent u1 = new IcoTextComponent(Ico.SIGN, Text.of(lines[1])); + this.addComponent(u1); + if (lines.length == 5) { + IcoTextComponent u2 = new IcoTextComponent(Ico.SIGN, Text.of(lines[2])); + this.addComponent(u2); + } + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java new file mode 100644 index 00000000..1fdad37a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -0,0 +1,183 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.ArrayList; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; + +public abstract class Widget { + + private ArrayList components = new ArrayList<>(); + private int w = 0, h = 0; + private int x = 0, y = 0; + private int color; + private Text title; + + private static TextRenderer txtRend = MinecraftClient.getInstance().textRenderer; + + static final int BORDER_SZE_N = txtRend.fontHeight + 4; + static final int BORDER_SZE_S = 4; + static final int BORDER_SZE_W = 4; + static final int BORDER_SZE_E = 4; + static final int COL_BG_BOX = 0xc00c0c0c; + + public Widget(MutableText title, Integer colorValue) { + this.title = title; + this.color = 0xff000000 | colorValue; + } + + public final void addComponent(Component c) { + components.add(c); + } + + public final void pack() { + for (Component c : components) { + h += c.getHeight() + 4; + w = Math.max(w, c.getWidth()); + } + h += BORDER_SZE_N + BORDER_SZE_S - 2; + w += BORDER_SZE_E + BORDER_SZE_W; + + // min width is dependent on title + w = Math.max(w, BORDER_SZE_W + BORDER_SZE_E + Widget.txtRend.getWidth(title) + 4 + 4 + 1); + } + + public final void setX(int x) { + this.x = x; + } + + public final int getY() { + return this.y; + } + + public final int getX() { + return this.x; + } + + public final void setY(int y) { + this.y = y; + } + + public final int getWidth() { + return this.w; + } + + public final int getHeight() { + return this.h; + } + + public final void render(MatrixStack ms) { + + DrawableHelper.fill(ms, x + 1, y, x + w - 1, y + h, COL_BG_BOX); + DrawableHelper.fill(ms, x, y + 1, x + 1, y + h - 1, COL_BG_BOX); + DrawableHelper.fill(ms, x + w - 1, y + 1, x + w, y + h - 1, COL_BG_BOX); + + int strHeightHalf = Widget.txtRend.fontHeight / 2; + int strAreaWidth = Widget.txtRend.getWidth(title) + 4; + + txtRend.draw(ms, title, x + 8, y + 2, this.color); + + DrawableHelper.fill(ms, x + 2, y + 1 + strHeightHalf, strAreaWidth, strHeightHalf, strAreaWidth); + + this.drawHLine(ms, x + 2, y + 1 + strHeightHalf, 4); + this.drawHLine(ms, x + 2 + strAreaWidth + 4, y + 1 + strHeightHalf, w - 4 - 4 - strAreaWidth); + this.drawHLine(ms, x + 2, y + h - 2, w - 4); + + this.drawVLine(ms, x + 1, y + 2 + strHeightHalf, h - 4 - strHeightHalf); + this.drawVLine(ms, x + w - 2, y + 2 + strHeightHalf, h - 4 - strHeightHalf); + + int yOffs = y + BORDER_SZE_N; + + for (Component c : components) { + c.render(ms, x + BORDER_SZE_W, yOffs); + yOffs += c.getHeight() + 4; + } + } + + private void drawHLine(MatrixStack ms, int xpos, int ypos, int width) { + DrawableHelper.fill(ms, xpos, ypos, xpos + width, ypos + 1, this.color); + } + + private void drawVLine(MatrixStack ms, int xpos, int ypos, int height) { + DrawableHelper.fill(ms, xpos, ypos, xpos + 1, ypos + height, this.color); + } + + // static final int ICO_DIM = 16; + // static final int PAD_S = 2; + // static final int PAD_L = 4; + // static final int SKIN_ICO_DIM = 8; + + // static final int TEXT_H = txtRend.fontHeight; + // static final int BAR_H = TEXT_H; + + // static final int TITLED_BAR_H = TEXT_H + PAD_S + BAR_H + PAD_L; + // static final int ICO_LINE_H = ICO_DIM + PAD_L; + + // public void drawRect(MatrixStack ms, int x, int y, int w, int h) { + // DrawableHelper.fill(ms, x + xpos + CONTENT_OFFS_X, y + ypos + CONTENT_OFFS_Y, + // x + xpos + CONTENT_OFFS_X + w, + // y + ypos + CONTENT_OFFS_Y + h, this.color); + // } + + // void drawIcon(ItemStack ico, int x, int y) { + // itmRend.renderGuiItemIcon(ico, x + x + CONTENT_OFFS_X, y + y + // + CONTENT_OFFS_Y); + // } + + // void drawText(MatrixStack ms, Text text, int x, int y, int color) { + // txtRend.draw(ms, text, x + x + CONTENT_OFFS_X, y + y + + // CONTENT_OFFS_Y, 0xff000000 | color); + // } + + // void drawText(MatrixStack ms, Text text, int x, int y) { + // this.drawText(ms, text, x, y, 0xffffffff); + // } + + // void drawIcoText(MatrixStack ms, ItemStack ico, Text text, int x, int y) { + // this.drawIcon(ico, x, y); + // this.drawText(ms, text, x + ICO_DIM + PAD_L, y + 5); + // } + + // void fill(MatrixStack ms, int x1, int y1, int x2, int y2, int color) { + // DrawableHelper.fill(ms, x1 + x + CONTENT_OFFS_X, y1 + y + + // CONTENT_OFFS_Y, + // x2 + x + CONTENT_OFFS_X, y2 + y + CONTENT_OFFS_Y, 0xff000000 + // | color); + // } + + // void drawBar(MatrixStack ms, int x, int y, int width, float fillPcnt, int + // color) { + // this.fill(ms, x, y, x + width, y + 10, COL_BG_BAR); + // this.fill(ms, x, y, x + (int) (width * (fillPcnt / 100f)), y + 10, color); + // } + + // void drawTitledIcoBar(MatrixStack ms, ItemStack ico, Text title, int width, + // float pcnt, int x, int y, int color) { + // final int ICO_OFFS = 3; + // this.drawIcon(ico, x, y + ICO_OFFS); + // this.drawText(ms, title, x + ICO_DIM + PAD_L, y); + // this.drawBar(ms, x + ICO_DIM + PAD_L, y + TEXT_H + PAD_S, width, pcnt, + // color); + // } + + // void drawIcoFatText(MatrixStack ms, ItemStack ico, Text line1, Text line2, + // int x, int y) { + // final int ICO_OFFS = 1; + // this.drawIcon(ico, x, y + ICO_OFFS); + // this.drawText(ms, line1, x + ICO_DIM + PAD_L, y); + // this.drawText(ms, line2, x + ICO_DIM + PAD_L, y + TEXT_H + PAD_S); + // } + + // public void drawPlayerIco(MatrixStack ms, int x, int y, Identifier + // skinTexture) { + // RenderSystem.setShaderTexture(0, skinTexture); + // PlayerSkinDrawer.draw(ms, x + x + CONTENT_OFFS_X, y + y + + // CONTENT_OFFS_Y, SKIN_ICO_DIM); + // } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java new file mode 100644 index 00000000..92b7ed1b --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java @@ -0,0 +1,29 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.util.math.MatrixStack; + +public abstract class Component { + + static final int ICO_DIM = 16; + static final int PAD_S = 2; + static final int PAD_L = 4; + + static TextRenderer txtRend = MinecraftClient.getInstance().textRenderer; + static ItemRenderer itmRend = MinecraftClient.getInstance().getItemRenderer(); + + int width, height; + + public abstract void render(MatrixStack ms, int x, int y); + + public int getWidth() { + return this.width; + } + + public int getHeight() { + return this.height; + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java new file mode 100644 index 00000000..5865138c --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; + +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; + +public class IcoFatTextComponent extends Component { + + private static final int ICO_OFFS = 1; + + private ItemStack ico; + private Text l1, l2; + + public IcoFatTextComponent(ItemStack ico, Text l1, Text l2) { + this.ico = ico; + this.l1 = l1; + this.l2 = l2; + + this.width = ICO_DIM + PAD_L + Math.max(txtRend.getWidth(l1), txtRend.getWidth(l2)) + PAD_S; + this.height = txtRend.fontHeight * 2 + PAD_S; + } + + @Override + public void render(MatrixStack ms, int x, int y) { + itmRend.renderGuiItemIcon(ms, ico, x, y + ICO_OFFS); + txtRend.draw(ms, l1, x + ICO_DIM + PAD_L, y, 0xffffffff); + txtRend.draw(ms, l2, x + ICO_DIM + PAD_L, y + txtRend.fontHeight + PAD_S, 0xffffffff); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java new file mode 100644 index 00000000..66f15479 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java @@ -0,0 +1,26 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; + +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; + +public class IcoTextComponent extends Component { + + private ItemStack ico; + private Text text; + + public IcoTextComponent(ItemStack ico, Text text) { + this.ico = ico; + this.text = text; + + this.width = ICO_DIM + PAD_L + txtRend.getWidth(text) + PAD_S; + this.height = ICO_DIM; + } + + @Override + public void render(MatrixStack ms, int x, int y) { + itmRend.renderGuiItemIcon(ms, ico, x, y); + txtRend.draw(ms, text, x + ICO_DIM + PAD_L, y + 5, 0xffffffff); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java new file mode 100644 index 00000000..b801f3aa --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java @@ -0,0 +1,22 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; + +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; + +public class PlainTextComponent extends Component { + + private Text text; + + public PlainTextComponent(Text text) { + this.text = text; + + this.width = PAD_S + txtRend.getWidth(text) + PAD_S; + this.height = txtRend.fontHeight; + } + + @Override + public void render(MatrixStack ms, int x, int y) { + txtRend.draw(ms, text, x + PAD_S, y, 0xffffffff); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java new file mode 100644 index 00000000..7e1fd399 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java @@ -0,0 +1,33 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; + +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.client.gui.PlayerSkinDrawer; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.Identifier; + +public class PlayerComponent extends Component { + + private static final int SKIN_ICO_DIM = 8; + + private String name; + private Identifier tex; + + public PlayerComponent(PlayerListEntry ple) { + + name = ple.getProfile().getName(); + tex = ple.getSkinTexture(); + + this.width = txtRend.getWidth(name) + PAD_S + SKIN_ICO_DIM; + this.height = txtRend.fontHeight; + } + + @Override + public void render(MatrixStack ms, int x, int y) { + RenderSystem.setShaderTexture(0, tex); + PlayerSkinDrawer.draw(ms, x, y, SKIN_ICO_DIM); + txtRend.draw(ms, name, x + SKIN_ICO_DIM + PAD_S, y, 0xffffffff); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java new file mode 100644 index 00000000..41539d1c --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java @@ -0,0 +1,49 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; + +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; + +public class ProgressComponent extends Component { + + private static final int BAR_WIDTH = 100; + private static final int BAR_HEIGHT = txtRend.fontHeight + 3; + private static final int ICO_OFFS = 4; + private static final int COL_BG_BAR = 0xf0101010; + + private ItemStack ico; + private Text desc, bar; + private float pcnt; + private int color; + private int barW; + + public ProgressComponent(ItemStack ico, Text desc, Text bar, float pcnt, int color) { + this.ico = ico; + this.desc = desc; + this.bar = bar; + this.color = 0xff000000 | color; + this.pcnt = pcnt; + + this.barW = BAR_WIDTH; + this.height = txtRend.fontHeight + PAD_S + 2 + txtRend.fontHeight + 2; + this.width = ICO_DIM + PAD_L + Math.max(this.barW, txtRend.getWidth(desc)) + PAD_S; + } + + public ProgressComponent(ItemStack ico, Text text, float pcnt, int color) { + this(ico, text, Text.of(pcnt + "%"), pcnt, color); + } + + @Override + public void render(MatrixStack ms, int x, int y) { + itmRend.renderGuiItemIcon(ms, ico, x, y + ICO_OFFS); + txtRend.draw(ms, desc, x + ICO_DIM + PAD_L, y, 0xffffffff); + + int barX = x + ICO_DIM + PAD_L; + int barY = y + txtRend.fontHeight + PAD_S; + DrawableHelper.fill(ms, barX, barY, barX + this.barW, barY + BAR_HEIGHT, COL_BG_BAR); + DrawableHelper.fill(ms, barX, barY, barX + ((int) (this.barW * (this.pcnt / 100f))), barY + BAR_HEIGHT, + this.color); + txtRend.drawWithShadow(ms, bar, barX + 3, barY + 2, 0xffffffff); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java new file mode 100644 index 00000000..66c1b73b --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java @@ -0,0 +1,53 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; + +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.util.math.MatrixStack; + +// FIXME: table isn't wide enough sometimes +// FIXME: dividers drift when there are >2 cols +public class TableComponent extends Component { + + private Component[][] comps; + private int color; + private int tw, th; + private int cellW, cellH; + + public TableComponent(int w, int h, int col) { + comps = new Component[w][h]; + color = 0xff000000 | col; + tw = w; + th = h; + } + + public void addToCell(int x, int y, Component c) { + comps[x][y] = c; + + // are tables still too wide? + cellW = Math.max(cellW, c.width + PAD_S); + + // assume all rows are equally high so overwriting doesn't matter + // if this wasn't the case, drawing would need more math + // not doing any of that if it's not needed + cellH = c.height; + + this.width = cellW * tw; + this.height = (cellH + PAD_S) * th - PAD_S; + + } + + @Override + public void render(MatrixStack ms, int xpos, int ypos) { + for (int x = 0; x < tw; x++) { + for (int y = 0; y < th; y++) { + if (comps[x][y] != null) { + comps[x][y].render(ms, xpos + x * cellW + x * PAD_L, ypos + y * cellH + y * PAD_S); + } + } + if (x != tw - 1) { + DrawableHelper.fill(ms, xpos + ((x + 1) * (cellW + PAD_S)) - 1, ypos + 1, + xpos + ((x + 1) * (cellW + PAD_S)), ypos + this.height - 1, color); + } + } + } + +} diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index fc37cfb0..6d3fd9ee 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -16,7 +16,9 @@ "HandledScreenMixin", "InventoryScreenMixin", "RecipeBookWidgetAccessor", - "HandledScreenAccessor" + "HandledScreenAccessor", + "PlayerListHudAccessor", + "PlayerListHudMixin" ], "injectors": { "defaultRequire": 1 -- cgit From 96789bb84ae43ba71ea8ac45cdf4561513ee3234 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 2 Apr 2023 15:15:08 +0200 Subject: Fix fire sale progress bar not working --- .../skyblocker/skyblock/tabhud/widget/FireSaleWidget.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java index 7531b071..97b0e8a2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java @@ -12,6 +12,7 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.Formatting; // TODO: untested with active fire sales @@ -42,8 +43,8 @@ public class FireSaleWidget extends Widget { found = true; Text a = Text.literal(m.group(1)); Text b = Text.literal(m.group(2) + "/" + m.group(3) + "000"); - float pcnt = (1 - (Float.parseFloat(m.group(2)) / (Float.parseFloat(m.group(3)) * 1000)))/100f; - ProgressComponent pc = new ProgressComponent(Ico.GOLD, a, b, pcnt, Formatting.LIGHT_PURPLE.getColorValue()); + float pcnt = (1 - (Float.parseFloat(m.group(2)) / (Float.parseFloat(m.group(3)) * 1000)))*100f; + ProgressComponent pc = new ProgressComponent(Ico.GOLD, a, b, pcnt, pcntToCol(pcnt)); this.addComponent(pc); } if (!found) { @@ -53,4 +54,8 @@ public class FireSaleWidget extends Widget { } + private int pcntToCol(float pcnt) { + return MathHelper.hsvToRgb(pcnt / 300f, 0.9f, 0.9f); + } + } -- cgit From 2f7f51273a0b41c2fff665228a8e4921a6d91d58 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 4 Apr 2023 18:34:08 +0200 Subject: Update readme with fork info --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index b1137f37..72f6b792 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ +## Skyblocker Tab Menu Fork +This will be merged into Skyblocker when ready. It's not at the moment, but you can help by testing and opening issues. + +### Known Issues +* Crimson Isle is not yet supported. (Getting Combat 24 is just... oof) +* Garden isn't entirely supported. (I only recently got back into SB, this was new) +* Scraping the entire player list every frame isn't ideal. (possible optimisation for later) + +------------------------ + ## Skyblocker -- cgit From a45e3f0cb14e337ff6fa98b38ce294e0612dffe0 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 4 Apr 2023 18:53:43 +0200 Subject: Update readme with more known issues. Is anything even working in this mod? grr... --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 72f6b792..a8877e7f 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,15 @@ ## Skyblocker Tab Menu Fork -This will be merged into Skyblocker when ready. It's not at the moment, but you can help by testing and opening issues. +This will be merged into Skyblocker when ready. It's not at the moment, more of a proof of conecpt, really, but you can help by testing and opening issues. ### Known Issues * Crimson Isle is not yet supported. (Getting Combat 24 is just... oof) * Garden isn't entirely supported. (I only recently got back into SB, this was new) * Scraping the entire player list every frame isn't ideal. (possible optimisation for later) +* Settings and keybinds aren't at the right place and don't have the correct text (this is a quick fix) +* The election widget is broken due to a recent change in its layout. (`:(`) +* The error catching is broken and fails to deactivate the mod on parse failure. (causing chat spam on error) + +Apart from that, it's working! ------------------------ -- cgit From 628796313982af2228bbb3561aaf5f09c05328c9 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 4 Apr 2023 18:54:13 +0200 Subject: Add temp version label to distinguish from other skyblocker builds --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 139c0e46..075253a0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,7 @@ clothconfig_version=10.0.96 mod_menu_version=6.1.0-rc.4 # Mod Properties -mod_version = 1.8.3-beta +mod_version = 1.8.3-beta-tabmenu maven_group = me.xmrvizzy archives_base_name = skyblocker modrinth_id=y6DuFGwJ \ No newline at end of file -- cgit From c97e7033aebadfcaa9827b7264fe03c24581757e Mon Sep 17 00:00:00 2001 From: msg-programs Date: Fri, 7 Apr 2023 12:18:23 +0200 Subject: Improve support for garden area, works fully now --- .../skyblock/tabhud/screens/GardenInfoScreen.java | 50 +++++++++++++++++ .../skyblock/tabhud/screens/GenericInfoScreen.java | 2 +- .../skyblocker/skyblock/tabhud/screens/Screen.java | 11 +++- .../skyblocker/skyblock/tabhud/util/Ico.java | 1 + .../skyblock/tabhud/widget/EventWidget.java | 10 ++-- .../skyblock/tabhud/widget/GardenSkillsWidget.java | 63 ++++++++++++++++++++++ .../tabhud/widget/JacobsContestWidget.java | 56 +++++++++++++++++++ 7 files changed, 188 insertions(+), 5 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java new file mode 100644 index 00000000..a9547283 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java @@ -0,0 +1,50 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenSkillsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.JacobsContestWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GardenInfoScreen extends Screen { + + public GardenInfoScreen(int w, int h, List ple, Text footer) { + super(w, h); + + String f = footer.getString(); + + GardenSkillsWidget gsw = new GardenSkillsWidget(ple); + EventWidget evw = new EventWidget(ple, true); + UpgradeWidget uw = new UpgradeWidget(f); + + ProfileWidget pw = new ProfileWidget(ple); + EffectWidget efw = new EffectWidget(f); + + JacobsContestWidget jcw = new JacobsContestWidget(ple); + CookieWidget cw = new CookieWidget(f); + + // goofy ahh layout code incoming + this.stackWidgetsH(gsw, evw, uw); + this.stackWidgetsH(pw, efw); + this.stackWidgetsH(jcw, cw); + + this.centerW(gsw); + this.centerW(evw); + this.centerW(uw); + + this.collideAgainstL(pw, gsw, evw, uw); + this.collideAgainstL(efw, gsw, evw, uw); + + this.collideAgainstR(jcw, gsw, evw, uw); + this.collideAgainstR(cw, gsw, evw, uw); + + this.addWidgets(gsw, evw, uw, pw, efw, jcw, cw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java index 01b159e2..b9b03a75 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java @@ -21,7 +21,7 @@ public class GenericInfoScreen extends Screen { String f = footer.getString(); SkillsWidget sw = new SkillsWidget(ple); - EventWidget evw = new EventWidget(ple); + EventWidget evw = new EventWidget(ple, false); UpgradeWidget uw = new UpgradeWidget(f); ProfileWidget pw = new ProfileWidget(ple); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index 8e99698b..fb5159a8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -157,7 +157,7 @@ public class Screen { public static Screen getCorrect(int w, int h, List ple, Text footer) { if (TabHud.genericTgl.isPressed()) { - return new GenericInfoScreen(w, h, ple, footer); + return Screen.correctGenericScrn(w, h, ple, footer); // } else if (TabHud.mapTgl.isPressed()) { // return Screen.correctMapScrn(w, h, ple, footer); } else if (TabHud.playerTgl.isPressed()) { @@ -167,6 +167,7 @@ public class Screen { } } + private static ScreenType getScreenType(List ple) { String cat2Name = StrMan.strAt(ple, 40); @@ -222,6 +223,14 @@ public class Screen { // return new EmptyScreen(w, h, list, footer); // } + private static Screen correctGenericScrn(int w, int h, List list, Text footer) { + return switch (getScreenType(list)) { + case GARDEN -> new GardenInfoScreen(w, h, list, footer); + default -> new GenericInfoScreen(w, h, list, footer); // ok + }; + } + + private static Screen correctPlayerScrn(int w, int h, List list, Text footer) { return switch (getScreenType(list)) { case GUEST_ISLAND -> new GuestPlayerScreen(w, h, list, footer); // ok diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java index a9f8e22f..f3e18b44 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java @@ -47,4 +47,5 @@ public class Ico { public static final ItemStack COPPER = new ItemStack(Items.COPPER_INGOT); public static final ItemStack COMPOSTER = new ItemStack(Items.COMPOSTER); public static final ItemStack SAPLING = new ItemStack(Items.OAK_SAPLING); + public static final ItemStack MILESTONE = new ItemStack(Items.LODESTONE); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java index 051ce11c..7fcbe1c1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java @@ -16,15 +16,19 @@ import net.minecraft.util.Formatting; public class EventWidget extends Widget { private static final MutableText TITLE = Text.literal("Event Info").formatted(Formatting.YELLOW, Formatting.BOLD); - public EventWidget(List list) { + public EventWidget(List list, boolean isInGarden) { super(TITLE, Formatting.YELLOW.getColorValue()); - Text eventName = StrMan.stdEntry(list, 73, "Name:", Formatting.YELLOW); + // hypixel devs carefully inserting the most random edge cases #317: + // the event info is placed a bit differently when in the garden. + int offset = (isInGarden) ? -1 : 0; + + Text eventName = StrMan.stdEntry(list, 73 + offset, "Name:", Formatting.YELLOW); IcoTextComponent event = new IcoTextComponent(Ico.NTAG, eventName); this.addComponent(event); // this could look better - Text time = StrMan.plainEntry(list, 74); + Text time = StrMan.plainEntry(list, 74 + offset); IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); this.addComponent(t); this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java new file mode 100644 index 00000000..99011616 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java @@ -0,0 +1,63 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + + +public class GardenSkillsWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Skill Info").formatted(Formatting.YELLOW, + Formatting.BOLD); + + // match the skill entry + // group 1: skill name and level + // group 2: progress to next level (without "%") + private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); + // same with leading space + // TODO: make better, maybe + private static final Pattern MS_PATTERN = Pattern.compile(" \\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); + + public GardenSkillsWidget(List list) { + super(TITLE, Formatting.YELLOW.getColorValue()); + + Matcher m = StrMan.regexAt(list, 66, SKILL_PATTERN); + + float pcnt = Float.parseFloat(m.group(2)); + String skill = m.group(1); + + ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(skill), pcnt, Formatting.GOLD.getColorValue()); + this.addComponent(pc); + + Text speed = StrMan.stdEntry(list, 67, "SPD", Formatting.WHITE); + IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); + Text farmfort = StrMan.stdEntry(list, 68, "FFO", Formatting.GOLD); + IcoTextComponent ffo = new IcoTextComponent(Ico.HOE, farmfort); + + TableComponent tc = new TableComponent(2, 1, Formatting.YELLOW.getColorValue()); + tc.addToCell(0, 0, spd); + tc.addToCell(1, 0, ffo); + this.addComponent(tc); + + m = StrMan.regexAt(list, 69, MS_PATTERN); + pcnt = Float.parseFloat(m.group(2)); + skill = m.group(1); + + ProgressComponent pc2 = new ProgressComponent(Ico.MILESTONE, Text.of(skill), pcnt, Formatting.GREEN.getColorValue()); + this.addComponent(pc2); + + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java new file mode 100644 index 00000000..11817662 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java @@ -0,0 +1,56 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.HashMap; +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class JacobsContestWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Jacob's Contest").formatted(Formatting.YELLOW, + Formatting.BOLD); + + private static final HashMap FARM_DATA = new HashMap<>(); + + // again, there HAS to be a better way to do this + static { + FARM_DATA.put("Wheat", new ItemStack(Items.WHEAT)); + FARM_DATA.put("Sugar Cane", new ItemStack(Items.SUGAR_CANE)); + FARM_DATA.put("Carrot", new ItemStack(Items.CARROT)); + FARM_DATA.put("Potato", new ItemStack(Items.POTATO)); + FARM_DATA.put("Melon", new ItemStack(Items.MELON_SLICE)); + FARM_DATA.put("Pumpkin", new ItemStack(Items.PUMPKIN)); + FARM_DATA.put("Cocoa Beans", new ItemStack(Items.COCOA_BEANS)); + FARM_DATA.put("Nether Wart", new ItemStack(Items.NETHER_WART)); + FARM_DATA.put("Cactus", new ItemStack(Items.CACTUS)); + FARM_DATA.put("Mushroom", new ItemStack(Items.RED_MUSHROOM)); + } + + public JacobsContestWidget(List list) { + super(TITLE, Formatting.YELLOW.getColorValue()); + + Text time = StrMan.stdEntry(list, 76, "Starts in:", Formatting.GOLD); + IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); + this.addComponent(t); + + TableComponent tc = new TableComponent(1, 3, Formatting.YELLOW .getColorValue()); + + for (int i = 77; i < 80; i++) { + String item = StrMan.strAt(list, i).trim(); + tc.addToCell(0, i - 77, new IcoTextComponent(FARM_DATA.get(item), Text.of(item))); + } + this.addComponent(tc); + + this.pack(); + } + +} -- cgit From 06846ed4d80943961552357c68866d3f1d2a9f95 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Fri, 7 Apr 2023 12:31:38 +0200 Subject: Put screens in respective packages to make src navigation simpler --- .../skyblock/tabhud/screens/DungeonHubScreen.java | 24 ---------- .../tabhud/screens/DungeonPlayerScreen.java | 30 ------------- .../skyblock/tabhud/screens/DungeonScreen.java | 37 --------------- .../tabhud/screens/FarmingServerScreen.java | 23 ---------- .../skyblock/tabhud/screens/GardenInfoScreen.java | 50 --------------------- .../skyblock/tabhud/screens/GardenScreen.java | 23 ---------- .../skyblock/tabhud/screens/GenericInfoScreen.java | 51 --------------------- .../tabhud/screens/GenericServerScreen.java | 19 -------- .../skyblock/tabhud/screens/GuestPlayerScreen.java | 23 ---------- .../skyblock/tabhud/screens/GuestServerScreen.java | 19 -------- .../skyblock/tabhud/screens/HomePlayerScreen.java | 22 --------- .../skyblock/tabhud/screens/HomeServerScreen.java | 24 ---------- .../skyblock/tabhud/screens/HubServerScreen.java | 23 ---------- .../skyblock/tabhud/screens/MineServerScreen.java | 30 ------------- .../skyblock/tabhud/screens/ParkServerScreen.java | 19 -------- .../skyblock/tabhud/screens/PlayerListScreen.java | 19 -------- .../skyblocker/skyblock/tabhud/screens/Screen.java | 5 ++- .../screens/genericInfo/GardenInfoScreen.java | 51 +++++++++++++++++++++ .../screens/genericInfo/GenericInfoScreen.java | 52 ++++++++++++++++++++++ .../tabhud/screens/main/DungeonHubScreen.java | 25 +++++++++++ .../tabhud/screens/main/DungeonScreen.java | 38 ++++++++++++++++ .../tabhud/screens/main/FarmingServerScreen.java | 24 ++++++++++ .../skyblock/tabhud/screens/main/GardenScreen.java | 24 ++++++++++ .../tabhud/screens/main/GenericServerScreen.java | 20 +++++++++ .../tabhud/screens/main/GuestServerScreen.java | 20 +++++++++ .../tabhud/screens/main/HomeServerScreen.java | 25 +++++++++++ .../tabhud/screens/main/HubServerScreen.java | 24 ++++++++++ .../tabhud/screens/main/MineServerScreen.java | 31 +++++++++++++ .../tabhud/screens/main/ParkServerScreen.java | 20 +++++++++ .../screens/playerList/DungeonPlayerScreen.java | 31 +++++++++++++ .../screens/playerList/GuestPlayerScreen.java | 24 ++++++++++ .../screens/playerList/HomePlayerScreen.java | 23 ++++++++++ .../screens/playerList/PlayerListScreen.java | 20 +++++++++ 33 files changed, 456 insertions(+), 437 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericServerScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestPlayerScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestServerScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomePlayerScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomeServerScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HubServerScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/MineServerScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ParkServerScreen.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlayerListScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java deleted file mode 100644 index 4bd48f89..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EssenceWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class DungeonHubScreen extends Screen{ - - public DungeonHubScreen(int w, int h, List list, Text footer) { - super(w, h); - ServerWidget sw = new ServerWidget(list); - EssenceWidget ew = new EssenceWidget(list); - centerW(sw); - centerW(ew); - stackWidgetsH(sw, ew); - this.addWidget(ew); - this.addWidget(sw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java deleted file mode 100644 index ce87a035..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java +++ /dev/null @@ -1,30 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class DungeonPlayerScreen extends Screen { - - public DungeonPlayerScreen(int w, int h, List ple, Text footer) { - super(w, h); - DungeonPlayerWidget dpw1 = new DungeonPlayerWidget(ple, 1); - DungeonPlayerWidget dpw2 = new DungeonPlayerWidget(ple, 2); - DungeonPlayerWidget dpw3 = new DungeonPlayerWidget(ple, 3); - DungeonPlayerWidget dpw4 = new DungeonPlayerWidget(ple, 4); - DungeonPlayerWidget dpw5 = new DungeonPlayerWidget(ple, 5); - - offCenterL(dpw1); - offCenterL(dpw2); - offCenterL(dpw3); - offCenterR(dpw4); - offCenterR(dpw5); - stackWidgetsH(dpw1, dpw2, dpw3); - stackWidgetsH(dpw4, dpw5); - addWidgets(dpw1, dpw2, dpw3, dpw4, dpw5); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java deleted file mode 100644 index bb80b01b..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java +++ /dev/null @@ -1,37 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDeathWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDownedWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPuzzleWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonSecretWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonServerWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class DungeonScreen extends Screen { - - public DungeonScreen(int w, int h, List ple, Text footer) { - super(w, h); - DungeonDownedWidget ddow = new DungeonDownedWidget(ple); - DungeonDeathWidget ddew = new DungeonDeathWidget(ple); - DungeonSecretWidget dscw = new DungeonSecretWidget(ple); - DungeonServerWidget dsrw = new DungeonServerWidget(ple); - DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget(ple); - - offCenterL(ddow); - offCenterL(ddew); - offCenterL(dscw); - offCenterR(dsrw); - offCenterR(dpuw); - - stackWidgetsH(ddow, ddew, dscw); - stackWidgetsH(dsrw, dpuw); - - addWidgets(ddow, ddew, dscw, dsrw, dpuw); - - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java deleted file mode 100644 index f66638a9..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java +++ /dev/null @@ -1,23 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.TrapperWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class FarmingServerScreen extends Screen{ - - public FarmingServerScreen(int w, int h, List list, Text footer) { - super(w, h); - ServerWidget sw = new ServerWidget(list); - TrapperWidget tw = new TrapperWidget(list); - centerW(sw); - centerW(tw); - stackWidgetsH(sw, tw); - this.addWidgets(tw, sw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java deleted file mode 100644 index a9547283..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java +++ /dev/null @@ -1,50 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenSkillsWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.JacobsContestWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class GardenInfoScreen extends Screen { - - public GardenInfoScreen(int w, int h, List ple, Text footer) { - super(w, h); - - String f = footer.getString(); - - GardenSkillsWidget gsw = new GardenSkillsWidget(ple); - EventWidget evw = new EventWidget(ple, true); - UpgradeWidget uw = new UpgradeWidget(f); - - ProfileWidget pw = new ProfileWidget(ple); - EffectWidget efw = new EffectWidget(f); - - JacobsContestWidget jcw = new JacobsContestWidget(ple); - CookieWidget cw = new CookieWidget(f); - - // goofy ahh layout code incoming - this.stackWidgetsH(gsw, evw, uw); - this.stackWidgetsH(pw, efw); - this.stackWidgetsH(jcw, cw); - - this.centerW(gsw); - this.centerW(evw); - this.centerW(uw); - - this.collideAgainstL(pw, gsw, evw, uw); - this.collideAgainstL(efw, gsw, evw, uw); - - this.collideAgainstR(jcw, gsw, evw, uw); - this.collideAgainstR(cw, gsw, evw, uw); - - this.addWidgets(gsw, evw, uw, pw, efw, jcw, cw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java deleted file mode 100644 index 30f4bbc3..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java +++ /dev/null @@ -1,23 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ComposterWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenServerWidget; -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class GardenScreen extends Screen{ - - public GardenScreen(int w, int h, List ple, Text footer) { - super(w, h); - GardenServerWidget gsw = new GardenServerWidget(ple); - ComposterWidget cw = new ComposterWidget(ple); - - this.stackWidgetsH(gsw, cw); - this.centerW(gsw); - this.centerW(cw); - this.addWidgets(gsw, cw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java deleted file mode 100644 index b9b03a75..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java +++ /dev/null @@ -1,51 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ElectionWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.SkillsWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class GenericInfoScreen extends Screen { - - public GenericInfoScreen(int w, int h, List ple, Text footer) { - super(w, h); - - String f = footer.getString(); - - SkillsWidget sw = new SkillsWidget(ple); - EventWidget evw = new EventWidget(ple, false); - UpgradeWidget uw = new UpgradeWidget(f); - - ProfileWidget pw = new ProfileWidget(ple); - EffectWidget efw = new EffectWidget(f); - - ElectionWidget elw = new ElectionWidget(ple); - CookieWidget cw = new CookieWidget(f); - - // goofy ahh layout code incoming - this.stackWidgetsH(sw, evw, uw); - this.stackWidgetsH(pw, efw); - this.stackWidgetsH(elw, cw); - - this.centerW(sw); - this.centerW(evw); - this.centerW(uw); - - this.collideAgainstL(pw, sw, evw, uw); - this.collideAgainstL(efw, sw, evw, uw); - - this.collideAgainstR(elw, sw, evw, uw); - this.collideAgainstR(cw, sw, evw, uw); - - this.addWidgets(sw, evw, uw, pw, efw, elw, cw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericServerScreen.java deleted file mode 100644 index fee4a9f8..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericServerScreen.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class GenericServerScreen extends Screen { - - public GenericServerScreen(int w, int h, List ple, Text footer) { - super(w, h); - ServerWidget sw = new ServerWidget(ple); - this.center(sw); - this.addWidget(sw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestPlayerScreen.java deleted file mode 100644 index 4647da7a..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestPlayerScreen.java +++ /dev/null @@ -1,23 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandGuestsWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandOwnersWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class GuestPlayerScreen extends Screen{ - - public GuestPlayerScreen(int w, int h, List list, Text footer) { - super(w, h); - IslandGuestsWidget igw = new IslandGuestsWidget(list); - IslandOwnersWidget iow = new IslandOwnersWidget(list); - this.centerH(iow); - this.centerH(igw); - this.stackWidgetsW(igw, iow); - this.addWidgets(iow, igw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestServerScreen.java deleted file mode 100644 index 03e22292..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestServerScreen.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GuestServerWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class GuestServerScreen extends Screen{ - - public GuestServerScreen(int w, int h, List list, Text footer) { - super(w, h); - GuestServerWidget gsw = new GuestServerWidget(list); - this.center(gsw); - this.addWidget(gsw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomePlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomePlayerScreen.java deleted file mode 100644 index 506f773f..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomePlayerScreen.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandGuestsWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandSelfWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class HomePlayerScreen extends Screen { - - public HomePlayerScreen(int w, int h, List list, Text footer) { - super(w, h); - IslandSelfWidget isw = new IslandSelfWidget(list); - IslandGuestsWidget igw = new IslandGuestsWidget(list); - this.centerH(isw); - this.centerH(igw); - this.stackWidgetsW(isw, igw); - this.addWidgets(isw, igw); - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomeServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomeServerScreen.java deleted file mode 100644 index 6d67f829..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomeServerScreen.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandServerWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.MinionWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class HomeServerScreen extends Screen { - - public HomeServerScreen(int w, int h, List list, Text footer) { - super(w, h); - - IslandServerWidget isw = new IslandServerWidget(list); - MinionWidget mw = new MinionWidget(list); - this.centerH(isw); - this.centerH(mw); - this.stackWidgetsW(isw, mw); - this.addWidgets(isw, mw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HubServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HubServerScreen.java deleted file mode 100644 index 15ac3183..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HubServerScreen.java +++ /dev/null @@ -1,23 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.FireSaleWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class HubServerScreen extends Screen { - - public HubServerScreen(int w, int h, List ple, Text footer) { - super(w, h); - ServerWidget sw = new ServerWidget(ple); - FireSaleWidget fsw = new FireSaleWidget(ple); - this.centerW(sw); - this.centerW(fsw); - this.stackWidgetsH(sw, fsw); - this.addWidgets(sw, fsw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/MineServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/MineServerScreen.java deleted file mode 100644 index 0e581852..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/MineServerScreen.java +++ /dev/null @@ -1,30 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ForgeWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PowderWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class MineServerScreen extends Screen{ - - public MineServerScreen(int w, int h, List list, Text footer) { - super(w, h); - ServerWidget sw = new ServerWidget(list); - PowderWidget pw = new PowderWidget(list); - CommsWidget cw = new CommsWidget(list); - ForgeWidget fw = new ForgeWidget(list); - stackWidgetsH(sw, pw, cw); - centerH(fw); - offCenterL(sw); - offCenterL(pw); - offCenterL(cw); - offCenterR(fw); - this.addWidgets(fw, cw, pw, sw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ParkServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ParkServerScreen.java deleted file mode 100644 index bb601251..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ParkServerScreen.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ParkServerWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class ParkServerScreen extends Screen{ - - public ParkServerScreen(int w, int h, List ple, Text footer) { - super(w, h); - ParkServerWidget sw = new ParkServerWidget(ple); - this.center(sw); - this.addWidget(sw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlayerListScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlayerListScreen.java deleted file mode 100644 index 14adc322..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlayerListScreen.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.List; - -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PlayerListWidget; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; - -public class PlayerListScreen extends Screen { - - public PlayerListScreen(int w, int h, List ple, Text footer) { - super(w, h); - PlayerListWidget plw = new PlayerListWidget(ple); - this.center(plw); - this.addWidget(plw); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index fb5159a8..0274f839 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -4,6 +4,9 @@ import java.util.ArrayList; import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.*; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.*; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.*; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; @@ -225,7 +228,7 @@ public class Screen { private static Screen correctGenericScrn(int w, int h, List list, Text footer) { return switch (getScreenType(list)) { - case GARDEN -> new GardenInfoScreen(w, h, list, footer); + case GARDEN -> new GardenInfoScreen(w, h, list, footer); // ok default -> new GenericInfoScreen(w, h, list, footer); // ok }; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java new file mode 100644 index 00000000..639bc135 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java @@ -0,0 +1,51 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenSkillsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.JacobsContestWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GardenInfoScreen extends Screen { + + public GardenInfoScreen(int w, int h, List ple, Text footer) { + super(w, h); + + String f = footer.getString(); + + GardenSkillsWidget gsw = new GardenSkillsWidget(ple); + EventWidget evw = new EventWidget(ple, true); + UpgradeWidget uw = new UpgradeWidget(f); + + ProfileWidget pw = new ProfileWidget(ple); + EffectWidget efw = new EffectWidget(f); + + JacobsContestWidget jcw = new JacobsContestWidget(ple); + CookieWidget cw = new CookieWidget(f); + + // goofy ahh layout code incoming + this.stackWidgetsH(gsw, evw, uw); + this.stackWidgetsH(pw, efw); + this.stackWidgetsH(jcw, cw); + + this.centerW(gsw); + this.centerW(evw); + this.centerW(uw); + + this.collideAgainstL(pw, gsw, evw, uw); + this.collideAgainstL(efw, gsw, evw, uw); + + this.collideAgainstR(jcw, gsw, evw, uw); + this.collideAgainstR(cw, gsw, evw, uw); + + this.addWidgets(gsw, evw, uw, pw, efw, jcw, cw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java new file mode 100644 index 00000000..dda4b401 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java @@ -0,0 +1,52 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ElectionWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.SkillsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GenericInfoScreen extends Screen { + + public GenericInfoScreen(int w, int h, List ple, Text footer) { + super(w, h); + + String f = footer.getString(); + + SkillsWidget sw = new SkillsWidget(ple); + EventWidget evw = new EventWidget(ple, false); + UpgradeWidget uw = new UpgradeWidget(f); + + ProfileWidget pw = new ProfileWidget(ple); + EffectWidget efw = new EffectWidget(f); + + ElectionWidget elw = new ElectionWidget(ple); + CookieWidget cw = new CookieWidget(f); + + // goofy ahh layout code incoming + this.stackWidgetsH(sw, evw, uw); + this.stackWidgetsH(pw, efw); + this.stackWidgetsH(elw, cw); + + this.centerW(sw); + this.centerW(evw); + this.centerW(uw); + + this.collideAgainstL(pw, sw, evw, uw); + this.collideAgainstL(efw, sw, evw, uw); + + this.collideAgainstR(elw, sw, evw, uw); + this.collideAgainstR(cw, sw, evw, uw); + + this.addWidgets(sw, evw, uw, pw, efw, elw, cw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java new file mode 100644 index 00000000..5279f196 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java @@ -0,0 +1,25 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EssenceWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class DungeonHubScreen extends Screen{ + + public DungeonHubScreen(int w, int h, List list, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(list); + EssenceWidget ew = new EssenceWidget(list); + centerW(sw); + centerW(ew); + stackWidgetsH(sw, ew); + this.addWidget(ew); + this.addWidget(sw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java new file mode 100644 index 00000000..ed8160cb --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java @@ -0,0 +1,38 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDeathWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDownedWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPuzzleWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonSecretWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class DungeonScreen extends Screen { + + public DungeonScreen(int w, int h, List ple, Text footer) { + super(w, h); + DungeonDownedWidget ddow = new DungeonDownedWidget(ple); + DungeonDeathWidget ddew = new DungeonDeathWidget(ple); + DungeonSecretWidget dscw = new DungeonSecretWidget(ple); + DungeonServerWidget dsrw = new DungeonServerWidget(ple); + DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget(ple); + + offCenterL(ddow); + offCenterL(ddew); + offCenterL(dscw); + offCenterR(dsrw); + offCenterR(dpuw); + + stackWidgetsH(ddow, ddew, dscw); + stackWidgetsH(dsrw, dpuw); + + addWidgets(ddow, ddew, dscw, dsrw, dpuw); + + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java new file mode 100644 index 00000000..ea374c6d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java @@ -0,0 +1,24 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.TrapperWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class FarmingServerScreen extends Screen{ + + public FarmingServerScreen(int w, int h, List list, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(list); + TrapperWidget tw = new TrapperWidget(list); + centerW(sw); + centerW(tw); + stackWidgetsH(sw, tw); + this.addWidgets(tw, sw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java new file mode 100644 index 00000000..4ea11109 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java @@ -0,0 +1,24 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ComposterWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenServerWidget; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GardenScreen extends Screen{ + + public GardenScreen(int w, int h, List ple, Text footer) { + super(w, h); + GardenServerWidget gsw = new GardenServerWidget(ple); + ComposterWidget cw = new ComposterWidget(ple); + + this.stackWidgetsH(gsw, cw); + this.centerW(gsw); + this.centerW(cw); + this.addWidgets(gsw, cw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java new file mode 100644 index 00000000..c8cc60a6 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java @@ -0,0 +1,20 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GenericServerScreen extends Screen { + + public GenericServerScreen(int w, int h, List ple, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(ple); + this.center(sw); + this.addWidget(sw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java new file mode 100644 index 00000000..6a583c38 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java @@ -0,0 +1,20 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GuestServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GuestServerScreen extends Screen{ + + public GuestServerScreen(int w, int h, List list, Text footer) { + super(w, h); + GuestServerWidget gsw = new GuestServerWidget(list); + this.center(gsw); + this.addWidget(gsw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java new file mode 100644 index 00000000..3c2b8fac --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java @@ -0,0 +1,25 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandServerWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.MinionWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class HomeServerScreen extends Screen { + + public HomeServerScreen(int w, int h, List list, Text footer) { + super(w, h); + + IslandServerWidget isw = new IslandServerWidget(list); + MinionWidget mw = new MinionWidget(list); + this.centerH(isw); + this.centerH(mw); + this.stackWidgetsW(isw, mw); + this.addWidgets(isw, mw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java new file mode 100644 index 00000000..0a488d1d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java @@ -0,0 +1,24 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.FireSaleWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class HubServerScreen extends Screen { + + public HubServerScreen(int w, int h, List ple, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(ple); + FireSaleWidget fsw = new FireSaleWidget(ple); + this.centerW(sw); + this.centerW(fsw); + this.stackWidgetsH(sw, fsw); + this.addWidgets(sw, fsw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java new file mode 100644 index 00000000..0fe408bc --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java @@ -0,0 +1,31 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ForgeWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PowderWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class MineServerScreen extends Screen{ + + public MineServerScreen(int w, int h, List list, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(list); + PowderWidget pw = new PowderWidget(list); + CommsWidget cw = new CommsWidget(list); + ForgeWidget fw = new ForgeWidget(list); + stackWidgetsH(sw, pw, cw); + centerH(fw); + offCenterL(sw); + offCenterL(pw); + offCenterL(cw); + offCenterR(fw); + this.addWidgets(fw, cw, pw, sw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java new file mode 100644 index 00000000..90ab9edb --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java @@ -0,0 +1,20 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ParkServerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class ParkServerScreen extends Screen{ + + public ParkServerScreen(int w, int h, List ple, Text footer) { + super(w, h); + ParkServerWidget sw = new ParkServerWidget(ple); + this.center(sw); + this.addWidget(sw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java new file mode 100644 index 00000000..a7aa970d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java @@ -0,0 +1,31 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class DungeonPlayerScreen extends Screen { + + public DungeonPlayerScreen(int w, int h, List ple, Text footer) { + super(w, h); + DungeonPlayerWidget dpw1 = new DungeonPlayerWidget(ple, 1); + DungeonPlayerWidget dpw2 = new DungeonPlayerWidget(ple, 2); + DungeonPlayerWidget dpw3 = new DungeonPlayerWidget(ple, 3); + DungeonPlayerWidget dpw4 = new DungeonPlayerWidget(ple, 4); + DungeonPlayerWidget dpw5 = new DungeonPlayerWidget(ple, 5); + + offCenterL(dpw1); + offCenterL(dpw2); + offCenterL(dpw3); + offCenterR(dpw4); + offCenterR(dpw5); + stackWidgetsH(dpw1, dpw2, dpw3); + stackWidgetsH(dpw4, dpw5); + addWidgets(dpw1, dpw2, dpw3, dpw4, dpw5); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java new file mode 100644 index 00000000..30c3a4ba --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java @@ -0,0 +1,24 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandGuestsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandOwnersWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GuestPlayerScreen extends Screen{ + + public GuestPlayerScreen(int w, int h, List list, Text footer) { + super(w, h); + IslandGuestsWidget igw = new IslandGuestsWidget(list); + IslandOwnersWidget iow = new IslandOwnersWidget(list); + this.centerH(iow); + this.centerH(igw); + this.stackWidgetsW(igw, iow); + this.addWidgets(iow, igw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java new file mode 100644 index 00000000..08f44d8f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java @@ -0,0 +1,23 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandGuestsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandSelfWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class HomePlayerScreen extends Screen { + + public HomePlayerScreen(int w, int h, List list, Text footer) { + super(w, h); + IslandSelfWidget isw = new IslandSelfWidget(list); + IslandGuestsWidget igw = new IslandGuestsWidget(list); + this.centerH(isw); + this.centerH(igw); + this.stackWidgetsW(isw, igw); + this.addWidgets(isw, igw); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java new file mode 100644 index 00000000..d40353b8 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java @@ -0,0 +1,20 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PlayerListWidget; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class PlayerListScreen extends Screen { + + public PlayerListScreen(int w, int h, List ple, Text footer) { + super(w, h); + PlayerListWidget plw = new PlayerListWidget(ple); + this.center(plw); + this.addWidget(plw); + } + +} -- cgit From f78cc478ff901668a9b839a3b0e9401dc08454c7 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Fri, 7 Apr 2023 15:37:01 +0200 Subject: Update known issues in readme (Garden is supported now) --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index a8877e7f..7b7ef5ad 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ This will be merged into Skyblocker when ready. It's not at the moment, more of ### Known Issues * Crimson Isle is not yet supported. (Getting Combat 24 is just... oof) -* Garden isn't entirely supported. (I only recently got back into SB, this was new) * Scraping the entire player list every frame isn't ideal. (possible optimisation for later) * Settings and keybinds aren't at the right place and don't have the correct text (this is a quick fix) * The election widget is broken due to a recent change in its layout. (`:(`) -- cgit From 20ef6eaf4672fac2d98022f9f2368b3b83868ab0 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 8 Apr 2023 20:20:07 +0200 Subject: Cleanup unused things in the mixin, reword crashing text --- src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index 36d4a375..ca6c9b41 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -30,7 +30,6 @@ public class PlayerListHudMixin { @Shadow private Text footer; - boolean ok = true; @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/util/math/MatrixStack;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true) public void skyblocker$renderTabHud(MatrixStack ms, int scaledW, Scoreboard sb, ScoreboardObjective sbo, CallbackInfo info) { @@ -61,8 +60,7 @@ public class PlayerListHudMixin { } } catch (Exception e) { e.printStackTrace(); - SkyblockerConfig.get().general.tabHudEnabled = false; - MinecraftClient.getInstance().player.sendMessage(Text.of("The tab HUD has crashed due to some unexpected text, see log! :(")); + MinecraftClient.getInstance().player.sendMessage(Text.of("The tab HUD has encountered unexpected text, see log! :(")); } } -- cgit From 122db60f573737502842f95089b68ba5bc8920dd Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 8 Apr 2023 20:22:06 +0200 Subject: Set correct translation keys for keybinds. --- src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java index 3cc75e00..01c196f7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java @@ -16,12 +16,12 @@ public class TabHud { public static void init() { playerTgl = KeyBindingHelper.registerKeyBinding( - new KeyBinding("key.skyhytab.playerTgl", + new KeyBinding("key.skyblocker.playerTgl", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_LEFT_SHIFT, "key.categories.skyblocker")); genericTgl = KeyBindingHelper.registerKeyBinding( - new KeyBinding("key.tabhud.genericTgl", + new KeyBinding("key.skyblocker.genericTgl", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_LEFT_ALT, "key.categories.skyblocker")); @@ -31,7 +31,7 @@ public class TabHud { // GLFW.GLFW_KEY_LEFT_ALT, // "key.categories.skyblocker")); defaultTgl = KeyBindingHelper.registerKeyBinding( - new KeyBinding("key.tabhud.defaultTgl", + new KeyBinding("key.skyblocker.defaultTgl", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_B, "key.categories.skyblocker")); -- cgit From 0b081f416c3da1aa3fa35a875649b570e29362b3 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 8 Apr 2023 20:22:47 +0200 Subject: Add required translation text for en_us and de_de --- src/main/resources/assets/skyblocker/lang/de_de.json | 4 ++++ src/main/resources/assets/skyblocker/lang/en_us.json | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/main/resources/assets/skyblocker/lang/de_de.json b/src/main/resources/assets/skyblocker/lang/de_de.json index a74b39ff..c678b353 100644 --- a/src/main/resources/assets/skyblocker/lang/de_de.json +++ b/src/main/resources/assets/skyblocker/lang/de_de.json @@ -1,10 +1,14 @@ { "key.categories.skyblocker": "Skyblocker", "key.hotbarSlotLock": "Schlitzsperre (Hotbar)", + "key.skyblocker.playerTgl": "Tab-HUD auf Spielerliste umstellen", + "key.skyblocker.defaultTgl": "Tab-HUD auf Standard umstellen", + "key.skyblocker.genericTgl": "Tab-HUD auf allgemeine Infos umstellen", "text.autoconfig.skyblocker.title": "Skyblocker-Einstellungen", "text.autoconfig.skyblocker.category.general": "Allgemein", + "text.autoconfig.skyblocker.option.general.tabHudEnabled": "Schöneres Tab-HUD aktivieren", "text.autoconfig.skyblocker.option.general.bars": "Gesundheits-, Mana-, Verteidigungs- und XP-Balken", "text.autoconfig.skyblocker.option.general.bars.enableBars": "Balken aktivieren", diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 8e7e4041..143cac3b 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -1,6 +1,9 @@ { "key.categories.skyblocker": "Skyblocker", "key.hotbarSlotLock": "Slot Lock (Hotbar)", + "key.skyblocker.playerTgl": "Switch tab HUD to player list", + "key.skyblocker.defaultTgl": "Switch tab HUD to default view", + "key.skyblocker.genericTgl": "Switch tab HUD to general info", "key.wikiLookup": "Wiki Lookup", "text.autoconfig.skyblocker.title": "Skyblocker Settings", @@ -16,6 +19,7 @@ "text.autoconfig.skyblocker.option.general.quicknav": "Quicknav", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Enable Quicknav", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "View backpack preview without holding Shift", + "text.autoconfig.skyblocker.option.general.tabHudEnabled": "Enable fancy tab HUD", "text.autoconfig.skyblocker.option.general.itemTooltip": "Item Tooltip", "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Enable NPC Price", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Enable Avg. BIN Price", -- cgit From 0f49a755cd93ad11d37290a7744a36297df1960b Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 8 Apr 2023 20:23:16 +0200 Subject: Fix crashing election widget. Cole was missing from the mayor list --- src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java | 1 + .../me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java index f3e18b44..120cabd8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java @@ -48,4 +48,5 @@ public class Ico { public static final ItemStack COMPOSTER = new ItemStack(Items.COMPOSTER); public static final ItemStack SAPLING = new ItemStack(Items.OAK_SAPLING); public static final ItemStack MILESTONE = new ItemStack(Items.LODESTONE); + public static final ItemStack PICKAXE = new ItemStack(Items.IRON_PICKAXE); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java index e75b7152..1c845467 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java @@ -16,8 +16,6 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// XXX crashes when in garden, as this shows jacob's farming info there... -// "starts in", then the three farmable things // this widget shows the status or results of the current election public class ElectionWidget extends Widget { @@ -37,6 +35,7 @@ public class ElectionWidget extends Widget { static { MAYOR_DATA.put("Aatrox", Ico.DIASWORD); + MAYOR_DATA.put("Cole", Ico.PICKAXE); MAYOR_DATA.put("Diana", Ico.BONE); MAYOR_DATA.put("Diaz", Ico.GOLD); MAYOR_DATA.put("Finnegan", Ico.HOE); @@ -55,7 +54,6 @@ public class ElectionWidget extends Widget { if (StrMan.strAt(list, 76).contains("Over!")) { // election is over - IcoTextComponent over = new IcoTextComponent(Ico.BARRIER, EL_OVER); this.addComponent(over); -- cgit From 44d88c9789cfe3bff5bad1df1c8170e98fd7b478 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 8 Apr 2023 20:23:49 +0200 Subject: Update readme to reflect recent updates --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7b7ef5ad..54b608e6 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ ## Skyblocker Tab Menu Fork -This will be merged into Skyblocker when ready. It's not at the moment, more of a proof of conecpt, really, but you can help by testing and opening issues. +This will be merged into Skyblocker when ready. It's not at the moment, but you can help by testing and opening issues. ### Known Issues -* Crimson Isle is not yet supported. (Getting Combat 24 is just... oof) -* Scraping the entire player list every frame isn't ideal. (possible optimisation for later) -* Settings and keybinds aren't at the right place and don't have the correct text (this is a quick fix) -* The election widget is broken due to a recent change in its layout. (`:(`) -* The error catching is broken and fails to deactivate the mod on parse failure. (causing chat spam on error) +* Relevant for players: + * Crimson Isle is not yet supported. (Getting Combat 24 is just... oof) +* Relevant for devs: + * Scraping the entire player list every frame isn't ideal. (possible optimisation for later) + * The error catching is broken and fails to deactivate the mod on parse failure. (this won't be in the final release anyways) + * Placement of the text and icons for rendering should probably be done with the `MatrixStack` arg and not with my hacky "external" solution (`ItemRenderer.render()` couldn't accept one pre 1.19.4) Apart from that, it's working! -- cgit From d7a62f213b0bddae9b1cc925b7626b8f4cb25823 Mon Sep 17 00:00:00 2001 From: Fix3d Date: Sat, 15 Apr 2023 00:33:36 +0300 Subject: fix average price on pets and some cleanup for timestamp --- .../skyblocker/skyblock/item/PriceInfoTooltip.java | 92 ++++++++++++---------- 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java index 608122ad..e0cb97aa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java @@ -51,7 +51,6 @@ public class PriceInfoTooltip { if (name == null) return; int count = stack.getCount(); - String timestamp = getTimestamp(stack); boolean bazaarOpened = lines.stream().anyMatch(each -> each.getString().contains("Buy price:") || each.getString().contains("Sell price:")); if (SkyblockerConfig.get().general.itemTooltip.enableNPCPrice) { @@ -102,46 +101,50 @@ public class PriceInfoTooltip { if (threeDayAvgPricesJson == null || oneDayAvgPricesJson == null) { nullWarning(); } - else if (threeDayAvgPricesJson.has(name) || oneDayAvgPricesJson.has(name)) { + else { /* - We are skipping check average prices for potions and runes - because there is no data for their in API. + We are skipping check average prices for potions, runes + and enchanted books because there is no data for their in API. */ if (name.contains("PET-")) { name = name.replace("PET-", "") - .replace("COMMON", "0") .replace("UNCOMMON", "1") + .replace("COMMON", "0") .replace("RARE", "2") .replace("EPIC", "3") .replace("LEGENDARY", "4") .replace("MYTHIC", "5") .replace("-", ";"); - } else if (name.contains("ENCHANTED_BOOK-")) { - name = name.replace("ENCHANTED_BOOK-", "").replace("-", ";"); - } else if (name.contains("POTION-")) { - name = ""; - } else if (name.contains("RUNE-")) { + } else if (name.contains("POTION-") || name.contains("RUNE-") || name.contains("ENCHANTED_BOOK-")) { name = ""; } else { name = name.replace(":", "-"); } - SkyblockerConfig.Average type = SkyblockerConfig.get().general.itemTooltip.avg; - - // "No data" line because of API not keeping old data, it causes NullPointerException - if (!name.isEmpty() && (type == SkyblockerConfig.Average.ONE_DAY || type == SkyblockerConfig.Average.BOTH)) { - lines.add(Text.literal(String.format("%-19s", "1 Day Avg. Price:")) - .formatted(Formatting.GOLD) - .append(oneDayAvgPricesJson.get(name) == null - ? Text.literal("No data").formatted(Formatting.RED) - : getCoinsMessage(oneDayAvgPricesJson.get(name).getAsDouble(), count))); - } - if (!name.isEmpty() && (type == SkyblockerConfig.Average.THREE_DAY || type == SkyblockerConfig.Average.BOTH)) { - lines.add(Text.literal(String.format("%-19s", "3 Day Avg. Price:")) - .formatted(Formatting.GOLD) - .append(threeDayAvgPricesJson.get(name) == null - ? Text.literal("No data").formatted(Formatting.RED) - : getCoinsMessage(threeDayAvgPricesJson.get(name).getAsDouble(), count))); + if (!name.isEmpty() && (threeDayAvgPricesJson.has(name) || oneDayAvgPricesJson.has(name))) { + SkyblockerConfig.Average type = SkyblockerConfig.get().general.itemTooltip.avg; + + // "No data" line because of API not keeping old data, it causes NullPointerException + if (type == SkyblockerConfig.Average.ONE_DAY || type == SkyblockerConfig.Average.BOTH) { + lines.add( + Text.literal(String.format("%-19s", "1 Day Avg. Price:")) + .formatted(Formatting.GOLD) + .append(oneDayAvgPricesJson.get(name) == null + ? Text.literal("No data").formatted(Formatting.RED) + : getCoinsMessage(oneDayAvgPricesJson.get(name).getAsDouble(), count) + ) + ); + } + if (type == SkyblockerConfig.Average.THREE_DAY || type == SkyblockerConfig.Average.BOTH) { + lines.add( + Text.literal(String.format("%-19s", "3 Day Avg. Price:")) + .formatted(Formatting.GOLD) + .append(threeDayAvgPricesJson.get(name) == null + ? Text.literal("No data").formatted(Formatting.RED) + : getCoinsMessage(threeDayAvgPricesJson.get(name).getAsDouble(), count) + ) + ); + } } } } @@ -149,22 +152,25 @@ public class PriceInfoTooltip { if (SkyblockerConfig.get().general.itemTooltip.enableMuseumDate && !bazaarOpened) { if (isMuseumJson == null) { nullWarning(); - } - else if (isMuseumJson.has(name)) { - String itemCategory = isMuseumJson.get(name).toString().replaceAll("\"", ""); - String format = switch (itemCategory) { - case "Weapons" -> "%-18s"; - case "Armor" -> "%-19s"; - default -> "%-20s"; - }; - lines.add(Text.literal(String.format(format, "Museum: (" + itemCategory + ")")) - .formatted(Formatting.LIGHT_PURPLE) - .append(Text.literal(timestamp != null ? timestamp : "").formatted(Formatting.RED))); - } - else if (timestamp != null) { - lines.add(Text.literal(String.format("%-21s", "Obtained: ")) - .formatted(Formatting.LIGHT_PURPLE) - .append(Text.literal(timestamp).formatted(Formatting.RED))); + } + else { + String timestamp = getTimestamp(stack); + + if (isMuseumJson.has(name)) { + String itemCategory = isMuseumJson.get(name).toString().replaceAll("\"", ""); + String format = switch (itemCategory) { + case "Weapons" -> "%-18s"; + case "Armor" -> "%-19s"; + default -> "%-20s"; + }; + lines.add(Text.literal(String.format(format, "Museum: (" + itemCategory + ")")) + .formatted(Formatting.LIGHT_PURPLE) + .append(Text.literal(timestamp).formatted(Formatting.RED))); + } else if (!timestamp.isEmpty()) { + lines.add(Text.literal(String.format("%-21s", "Obtained: ")) + .formatted(Formatting.LIGHT_PURPLE) + .append(Text.literal(timestamp).formatted(Formatting.RED))); + } } } } @@ -214,7 +220,7 @@ public class PriceInfoTooltip { } } - return null; + return ""; } public static String getInternalNameFromNBT(ItemStack stack) { -- cgit From 0249b4c809ef017949b280fcf5deaf973bb1eb87 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 15 Apr 2023 16:39:28 +0200 Subject: Add new "tab-menu-like" style options to dwarven mines HUD. --- .../skyblocker/config/SkyblockerConfig.java | 18 +++++++ .../skyblocker/skyblock/dwarven/DwarvenHud.java | 59 ++++++++++++++++------ .../skyblock/tabhud/widget/CommsWidget.java | 30 ++++++++++- .../skyblocker/skyblock/tabhud/widget/Widget.java | 12 +++-- .../resources/assets/skyblocker/lang/en_us.json | 4 ++ 5 files changed, 103 insertions(+), 20 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index ae96a8f7..089f67c8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -277,11 +277,29 @@ public class SkyblockerConfig implements ConfigData { public static class DwarvenHud { public boolean enabled = true; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + @ConfigEntry.Gui.Tooltip(count = 3) + public Style style = Style.SIMPLE; public boolean enableBackground = true; public int x = 10; public int y = 10; } + public enum Style { + SIMPLE, + FANCY, + CLASSIC; + + @Override + public String toString() { + return switch (this) { + case SIMPLE -> "Simple"; + case FANCY -> "Fancy"; + case CLASSIC -> "Classic"; + }; + } + } + public static class Messages { @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) public ChatFilterResult hideAbility = ChatFilterResult.PASS; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java index 86fe58fe..9f1e783c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; @@ -55,17 +56,49 @@ public class DwarvenHud { } public static void render(MatrixStack matrixStack, int hudX, int hudY, List commissions) { - if (commissions.size() > 0){ - if (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground) - DrawableHelper.fill(matrixStack, hudX, hudY, hudX + 200, hudY + (20 * commissions.size()), 0x64000000); - int y = 0; - for (Commission commission : commissions) { - client.textRenderer.drawWithShadow(matrixStack, Text.literal(commission.commission).styled(style -> style.withColor(Formatting.AQUA)).append(Text.literal(": " + commission.progression).styled(style -> style.withColor(Formatting.GREEN))), hudX + 5, hudY + y + 5, 0xFFFFFFFF); - y += 20; - } + if (commissions.size() <= 0) { + return; + } + + switch(SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { + case SIMPLE -> renderSimple(matrixStack, hudX, hudY, commissions); + case FANCY -> renderFancy(matrixStack, hudX, hudY, commissions); + case CLASSIC -> renderClassic(matrixStack, hudX, hudY, commissions); + } + } + + public static void renderClassic(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + if (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground) { + DrawableHelper.fill(matrixStack, hudX, hudY, hudX + 200, hudY + (20 * commissions.size()), 0x64000000); + } + + int y = 0; + for (Commission commission : commissions) { + client.textRenderer + .drawWithShadow(matrixStack, + Text.literal(commission.commission + ": ") + .styled(style -> style.withColor(Formatting.AQUA)) + .append(Text.literal(commission.progression) + .styled(style -> style.withColor(Formatting.GREEN))), + hudX + 5, hudY + y + 5, 0xFFFFFFFF); + y += 20; } } + public static void renderSimple(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + CommsWidget cw = new CommsWidget(commissions, false); + cw.setX(hudX); + cw.setY(hudY); + cw.render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); + } + + public static void renderFancy(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + CommsWidget cw = new CommsWidget(commissions, true); + cw.setX(hudX); + cw.setY(hudY); + cw.render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); + } + public static void update() { commissionList = new ArrayList<>(); if (client.player == null || !SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled) return; @@ -83,13 +116,7 @@ public class DwarvenHud { }); } - public static class Commission{ - final String commission; - final String progression; + // steamroller tactics to get visibility from outside classes + public static record Commission(String commission, String progression){} - public Commission(String commission, String progression){ - this.commission = commission; - this.progression = progression; - } - } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java index ef86b8f0..120c53d8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java @@ -4,10 +4,12 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud.Commission; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; - import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; @@ -46,6 +48,32 @@ public class CommsWidget extends Widget { this.pack(); } + // for the dwarven hud + public CommsWidget(List commissions, boolean isFancy) { + super(TITLE, Formatting.AQUA.getColorValue()); + for (Commission comm : commissions) { + + Text c = Text.literal(comm.commission()); + + float p = 100f; + if (!comm.progression().contains("DONE")) { + p = Float.parseFloat(comm.progression().substring(0, comm.progression().length() - 1)); + } + + Component comp; + if (isFancy) { + comp = new ProgressComponent(Ico.BOOK, c, p, pcntToCol(p)); + } else { + comp = new PlainTextComponent( + Text.literal(comm.commission() + ": ") + .append(Text.literal(comm.progression()).formatted(Formatting.GREEN))); + } + this.addComponent(comp); + } + this.pack(); + + } + private int pcntToCol(float pcnt) { return MathHelper.hsvToRgb(pcnt / 300f, 0.9f, 0.9f); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index 1fdad37a..63a72563 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -73,10 +73,16 @@ public abstract class Widget { } public final void render(MatrixStack ms) { + this.render(ms, true); + } + + public final void render(MatrixStack ms, boolean hasBG) { - DrawableHelper.fill(ms, x + 1, y, x + w - 1, y + h, COL_BG_BOX); - DrawableHelper.fill(ms, x, y + 1, x + 1, y + h - 1, COL_BG_BOX); - DrawableHelper.fill(ms, x + w - 1, y + 1, x + w, y + h - 1, COL_BG_BOX); + if (hasBG) { + DrawableHelper.fill(ms, x + 1, y, x + w - 1, y + h, COL_BG_BOX); + DrawableHelper.fill(ms, x, y + 1, x + 1, y + h - 1, COL_BG_BOX); + DrawableHelper.fill(ms, x + w - 1, y + 1, x + w, y + h - 1, COL_BG_BOX); + } int strHeightHalf = Widget.txtRend.fontHeight / 2; int strAreaWidth = Widget.txtRend.getWidth(title) + 4; diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 143cac3b..a33fd125 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -77,6 +77,10 @@ "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Solve Puzzler Puzzle", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Enabled", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style": "Style for HUD", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style.@Tooltip[0]": "Simple: Shows name and percentage.", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style.@Tooltip[1]": "Fancy: Shows name, percentage, progress bar and an icon.", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style.@Tooltip[2]": "Classic: Shows name and percentage in a very simple box.", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Enable Background", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", -- cgit From a77c69d50dd0c3d38bbf2d17f32e65a245c1cafe Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 15 Apr 2023 16:41:38 +0200 Subject: Update issue list in readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 54b608e6..eac4ec16 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ This will be merged into Skyblocker when ready. It's not at the moment, but you ### Known Issues * Relevant for players: * Crimson Isle is not yet supported. (Getting Combat 24 is just... oof) + * Dungeon puzzles HUD isn't working correctly + * Minor visual bugs when using ImmediatelyFast * Relevant for devs: * Scraping the entire player list every frame isn't ideal. (possible optimisation for later) * The error catching is broken and fails to deactivate the mod on parse failure. (this won't be in the final release anyways) -- cgit From 21b64be8d85d37e107ffd628416031e0839c9990 Mon Sep 17 00:00:00 2001 From: Fix3d Date: Sun, 16 Apr 2023 05:39:40 +0300 Subject: add update repository command "/skyblocker updaterepository" --- .../me/xmrvizzy/skyblocker/SkyblockerInitializer.java | 2 ++ .../skyblocker/skyblock/itemlist/ItemRegistry.java | 18 +++++++----------- src/main/resources/assets/skyblocker/lang/en_us.json | 2 ++ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java index 3d713727..f17ab1fb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java @@ -4,6 +4,7 @@ import me.xmrvizzy.skyblocker.chat.ChatMessageListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.discord.DiscordRPCManager; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; +import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate; import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand; import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; @@ -20,6 +21,7 @@ public class SkyblockerInitializer implements ClientModInitializer { PriceInfoTooltip.init(); WikiLookup.init(); ItemRegistry.init(); + RepositoryUpdate.init(); StatsCommand.init(); DwarvenHud.init(); ChatMessageListener.init(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index ea7184cc..91a59fcb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -22,15 +22,15 @@ import java.util.concurrent.CompletableFuture; public class ItemRegistry { private static final Logger LOGGER = LoggerFactory.getLogger(ItemRegistry.class); protected static final String REMOTE_ITEM_REPO = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO"; - protected static final Path LOCAL_ITEM_REPO_DIR = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/item-repo"); + public static final Path LOCAL_ITEM_REPO_DIR = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/item-repo"); - private static final Path ITEM_LIST_DIR = LOCAL_ITEM_REPO_DIR.resolve("items"); + protected static final Path ITEM_LIST_DIR = LOCAL_ITEM_REPO_DIR.resolve("items"); protected static final List items = new ArrayList<>(); protected static final Map itemsMap = new HashMap<>(); protected static final List recipes = new ArrayList<>(); - protected static final MinecraftClient client = MinecraftClient.getInstance(); - static boolean filesImported = false; + public static final MinecraftClient client = MinecraftClient.getInstance(); + public static boolean filesImported = false; public static void init() { CompletableFuture.runAsync(ItemRegistry::updateItemRepo) @@ -46,20 +46,16 @@ public class ItemRegistry { } private static void updateItemRepo() { + Git git; if (!Files.isDirectory(LOCAL_ITEM_REPO_DIR)) { try { - Git.cloneRepository() + git = Git.cloneRepository() .setURI(REMOTE_ITEM_REPO) .setDirectory(LOCAL_ITEM_REPO_DIR.toFile()) .setBranchesToClone(List.of("refs/heads/master")) .setBranch("refs/heads/master") .call(); - } catch (Exception e) { - e.printStackTrace(); - } - } else { - try { - Git.open(LOCAL_ITEM_REPO_DIR.toFile()).pull().call(); + git.close(); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 8e7e4041..c0f540b6 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -96,5 +96,7 @@ "skyblocker.update.hover_text": "Open Modrinth", "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Update Notification", + "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cUpdating local repository failed. Remove files manually and restart game.", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Automatically set your API key!" } -- cgit From a32e5f58919d7af7a2a86e5a3152146e54f0c552 Mon Sep 17 00:00:00 2001 From: Fix3d Date: Sun, 16 Apr 2023 05:48:36 +0300 Subject: forgot unversioned files :P --- .../skyblocker/skyblock/api/RepositoryUpdate.java | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java new file mode 100644 index 00000000..db039559 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java @@ -0,0 +1,52 @@ +package me.xmrvizzy.skyblocker.skyblock.api; + +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.minecraft.text.Text; + +import java.io.File; +import java.nio.file.Files; +import java.util.concurrent.CompletableFuture; + +public class RepositoryUpdate { + + //TODO add button to config for this + public static void init(){ + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register( + ClientCommandManager.literal("skyblocker") + .then(ClientCommandManager.literal("updaterepository") + .executes(context -> { + CompletableFuture.runAsync(() -> { + try { + ItemRegistry.filesImported = false; + File dir = ItemRegistry.LOCAL_ITEM_REPO_DIR.toFile(); + recursiveDelete(dir); + } catch (Exception ex) { + ItemRegistry.client.player.sendMessage( + Text.translatable("skyblocker.updaterepository.failed") + , false + ); + return; + } + + ItemRegistry.init(); + }); + + return 1; + }) + ) + ) + ); + + } + + private static void recursiveDelete(File dir) { + if (dir.isDirectory() && !Files.isSymbolicLink(dir.toPath())) { + for (File child : dir.listFiles()) { + recursiveDelete(child); + } + } + dir.delete(); + } +} -- cgit From 06db7ab46b5d6bd33bbc584172c43e88dce998e1 Mon Sep 17 00:00:00 2001 From: Fix3d Date: Sat, 22 Apr 2023 13:54:53 +0300 Subject: now runes have avg prices --- .../skyblocker/skyblock/item/PriceInfoTooltip.java | 26 +++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java index e0cb97aa..d9263f9a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java @@ -86,6 +86,7 @@ public class PriceInfoTooltip { } // bazaarOpened & bazaarExist check for lbin, because Skytils keeps some bazaar item data in lbin api + boolean lbinExist = false; if (SkyblockerConfig.get().general.itemTooltip.enableLowestBIN && !bazaarOpened && !bazaarExist) { if (lowestPricesJson == null) { nullWarning(); @@ -94,6 +95,7 @@ public class PriceInfoTooltip { lines.add(Text.literal(String.format("%-19s", "Lowest BIN Price:")) .formatted(Formatting.GOLD) .append(getCoinsMessage(lowestPricesJson.get(name).getAsDouble(), count))); + lbinExist = true; } } @@ -115,13 +117,16 @@ public class PriceInfoTooltip { .replace("LEGENDARY", "4") .replace("MYTHIC", "5") .replace("-", ";"); - } else if (name.contains("POTION-") || name.contains("RUNE-") || name.contains("ENCHANTED_BOOK-")) { + } else if (name.contains("RUNE-")) { + name = name.replace("RUNE-", ""); + name = name.substring(0, name.indexOf("-")) + "_RUNE;" + name.substring(name.lastIndexOf("-") + 1); + } else if (name.contains("POTION-") || name.contains("ENCHANTED_BOOK-")) { name = ""; } else { name = name.replace(":", "-"); } - if (!name.isEmpty() && (threeDayAvgPricesJson.has(name) || oneDayAvgPricesJson.has(name))) { + if (!name.isEmpty() && lbinExist) { SkyblockerConfig.Average type = SkyblockerConfig.get().general.itemTooltip.avg; // "No data" line because of API not keeping old data, it causes NullPointerException @@ -244,12 +249,13 @@ public class PriceInfoTooltip { return internalName + "-" + petInfo.get("type").getAsString() + "-" + petInfo.get("tier").getAsString(); } } else if ("POTION".equals(internalName)) { + // New API just contains 'enhanced' tag. String enhanced = ea.contains("enhanced") ? "-ENHANCED" : ""; - String extended = ea.contains("extended") ? "-EXTENDED" : ""; - String splash = ea.contains("splash") ? "-SPLASH" : ""; + //String extended = ea.contains("extended") ? "-EXTENDED" : ""; + //String splash = ea.contains("splash") ? "-SPLASH" : ""; if (ea.contains("potion") && ea.contains("potion_level")) { return internalName + "-" + ea.getString("potion").toUpperCase(Locale.ENGLISH) + "-" + ea.getInt("potion_level") - + enhanced + extended + splash; + + enhanced; //+ extended + splash; } } else if ("RUNE".equals(internalName)) { if (ea.contains("runes")) { @@ -310,7 +316,7 @@ public class PriceInfoTooltip { } } if (SkyblockerConfig.get().general.itemTooltip.enableLowestBIN) - futureList.add(CompletableFuture.runAsync(() -> lowestPricesJson = downloadPrices("lowest bin"))); + futureList.add(CompletableFuture.runAsync(() -> lowestPricesJson = downloadPrices("lowest bins"))); if (SkyblockerConfig.get().general.itemTooltip.enableBazaarPrice) futureList.add(CompletableFuture.runAsync(() -> bazaarPricesJson = downloadPrices("bazaar"))); @@ -337,8 +343,8 @@ public class PriceInfoTooltip { } catch (IOException e) { LOGGER.warn("[Skyblocker] Failed to download " + type + " prices!", e); - if (type.equals("lowest bin")) - lowestPricesJson = downloadPrices("lowest bin backup"); + if (type.equals("lowest bins")) + lowestPricesJson = downloadPrices("lowest bins backup"); return null; } @@ -349,8 +355,8 @@ public class PriceInfoTooltip { apiAddresses.put("1 day avg", "https://moulberry.codes/auction_averages_lbin/1day.json.gz"); apiAddresses.put("3 day avg", "https://moulberry.codes/auction_averages_lbin/3day.json.gz"); apiAddresses.put("bazaar", "https://hysky.de/api/bazaar"); - apiAddresses.put("lowest bin", "https://lb.tricked.pro/lowestbins"); - apiAddresses.put("lowest bin backup", "https://lb2.tricked.pro/lowestbins"); + apiAddresses.put("lowest bins", "https://lb.tricked.pro/lowestbins"); + apiAddresses.put("lowest bins backup", "https://lb2.tricked.pro/lowestbins"); apiAddresses.put("npc", "https://hysky.de/api/npcprice"); apiAddresses.put("museum", "https://hysky.de/api/museum"); } -- cgit From 6e58eddaab6d2830976ee06ae1f3b2801308408c Mon Sep 17 00:00:00 2001 From: Fix3d Date: Sat, 22 Apr 2023 14:21:49 +0300 Subject: fix wikiLink --- .../me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index 91a59fcb..0a581da8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -109,7 +109,12 @@ public class ItemRegistry { try { String fileContent = Files.readString(ITEM_LIST_DIR.resolve(internalName + ".json")); JsonObject fileJson = JsonParser.parseString(fileContent).getAsJsonObject(); - return fileJson.get("info").getAsJsonArray().get(1).getAsString(); + //TODO optional official or unofficial wiki link + try { + return fileJson.get("info").getAsJsonArray().get(1).getAsString(); + } catch (IndexOutOfBoundsException e) { + return fileJson.get("info").getAsJsonArray().get(0).getAsString(); + } } catch (IOException | NullPointerException e) { e.printStackTrace(); client.player.sendMessage(Text.of("Can't locate a wiki article for this item..."), false); -- cgit From 54935e6e6e17f9f7ca54b3bef53b24f65278e86d Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 23 Apr 2023 12:21:34 +0200 Subject: Dungeon puzzle widget now works as intended. --- README.md | 1 - .../java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java | 4 ++++ .../skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java | 7 +++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index eac4ec16..4b28a2e8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ This will be merged into Skyblocker when ready. It's not at the moment, but you ### Known Issues * Relevant for players: * Crimson Isle is not yet supported. (Getting Combat 24 is just... oof) - * Dungeon puzzles HUD isn't working correctly * Minor visual bugs when using ImmediatelyFast * Relevant for devs: * Scraping the entire player list every frame isn't ideal. (possible optimisation for later) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java index 8cd77ac2..4a30cf0f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java @@ -44,6 +44,10 @@ public class StrMan { return null; } String str = txt.getString(); + if (str.length() == 0) { + return null; + } + Matcher m = p.matcher(str); if (!m.matches()) { LOGGER.error("ERROR: Regex {} failed for input \"{}\"", p.pattern(), str); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java index 906d449b..3aba547c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java @@ -24,9 +24,9 @@ public class DungeonPuzzleWidget extends Widget { // match a puzzle entry // group 1: name // group 2: status - // yes, that " ?" is needed. + // " ?.*" to diescard the solver's name if present // the teleport maze has a trailing whitespace that messes with the regex - private static final Pattern PUZZLE_PATTERN = Pattern.compile(" (.*): \\[(.*)\\] ?"); + private static final Pattern PUZZLE_PATTERN = Pattern.compile(" (.*): \\[(.*)\\] ?.*"); public DungeonPuzzleWidget(List list) { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); @@ -43,6 +43,9 @@ public class DungeonPuzzleWidget extends Widget { IcoTextComponent itc = new IcoTextComponent(Ico.SIGN, t); this.addComponent(itc); pos++; + // code points for puzzle status chars unsolved and solved: 10022, 10004 + // not sure which one is which + // still need to find out codepoint for the puzzle failed char } this.pack(); -- cgit From 19247f09636e10ab673a0f49bc364bd1c3ac518d Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 29 Apr 2023 08:57:23 +0200 Subject: Add untested crimson isle support --- .../skyblocker/skyblock/tabhud/screens/Screen.java | 4 +- .../tabhud/screens/main/CrimsonIsleScreen.java | 30 ++++++++++++ .../skyblock/tabhud/widget/QuestWidget.java | 33 +++++++++++++ .../skyblock/tabhud/widget/ReputationWidget.java | 51 ++++++++++++++++++++ .../skyblock/tabhud/widget/VolcanoWidget.java | 55 ++++++++++++++++++++++ 5 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index 0274f839..f5a620bf 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -252,8 +252,8 @@ public class Screen { case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, list, footer); case FARMING_ISLAND -> new FarmingServerScreen(w, h, list, footer); // ok case DUNGEON_HUB -> new DungeonHubScreen(w, h, list, footer); // ok - case DUNGEON -> new DungeonScreen(w, h, list, footer); - case CRIMSON_ISLE -> null; // TODO + case DUNGEON -> new DungeonScreen(w, h, list, footer); // ok + case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, list, footer); // ??? case GARDEN -> new GardenScreen(w, h, list, footer); default -> new GenericServerScreen(w, h, list, footer); // ok }; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java new file mode 100644 index 00000000..182f6897 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.QuestWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ReputationWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.VolcanoWidget; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class CrimsonIsleScreen extends Screen { + + public CrimsonIsleScreen(int w, int h, List ple, Text footer) { + super(w, h); + ServerWidget sw = new ServerWidget(ple); + ReputationWidget rw = new ReputationWidget(ple); + QuestWidget qw = new QuestWidget(ple); + VolcanoWidget vw = new VolcanoWidget(ple); + this.stackWidgetsH(sw, rw, vw); + this.offCenterL(sw); + this.offCenterL(rw); + this.offCenterL(vw); + this.offCenterR(qw); + this.centerH(qw); + this.addWidgets(sw, rw, qw, vw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java new file mode 100644 index 00000000..e2bd7fd3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java @@ -0,0 +1,33 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows your Crimson Isle suests + +public class QuestWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Faction Quests").formatted(Formatting.AQUA, + Formatting.BOLD); + + public QuestWidget(List list) { + super(TITLE, Formatting.AQUA.getColorValue()); + + for (int i = 51; i<56; i++) { + String q = StrMan.strAt(list, i).trim(); + IcoTextComponent itc = new IcoTextComponent(Ico.BOOK, Text.literal(q)); + this.addComponent(itc); + } + this.pack(); + + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java new file mode 100644 index 00000000..09e1bb00 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java @@ -0,0 +1,51 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows your faction status + +public class ReputationWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Faction Status").formatted(Formatting.AQUA, + Formatting.BOLD); + + private static final Pattern PROGRESS_PATTERN = Pattern.compile(" \\|+ \\((\\d+%)\\)"); + private static final Pattern STATE_PATTERN = Pattern.compile("(\\S*) *(\\S*)"); + + public ReputationWidget(List list) { + super(TITLE, Formatting.AQUA.getColorValue()); + + String fname = StrMan.strAt(list, 45).split(" ")[0]; + String rep = StrMan.strAt(list, 46).trim(); + Matcher prog = StrMan.regexAt(list, 47, PROGRESS_PATTERN); + Matcher state = StrMan.regexAt(list, 48, STATE_PATTERN); + + IcoTextComponent faction; + if (fname.equals("Mage")) { + faction = new IcoTextComponent(Ico.POTION, Text.literal(fname).formatted(Formatting.DARK_AQUA)); + } else { + faction = new IcoTextComponent(Ico.SWORD, Text.literal(fname).formatted(Formatting.RED)); + } + this.addComponent(faction); + + float pcnt = Float.parseFloat(prog.group(1)); + + ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(state.group(1) + " -> " + state.group(2)), pcnt, Formatting.AQUA.getColorValue()); + this.addComponent(pc); + + this.pack(); + + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java new file mode 100644 index 00000000..9c81133f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java @@ -0,0 +1,55 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.HashMap; +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.Pair; + +// this widget shows the volcano status + +public class VolcanoWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Volcano Status").formatted(Formatting.AQUA, + Formatting.BOLD); + + private static final HashMap> BOOM_TYPE = new HashMap<>(); + + static { + BOOM_TYPE.put("INACTIVE", + new Pair(new ItemStack(Items.BARRIER), Formatting.DARK_GRAY)); + BOOM_TYPE.put("CHILL", + new Pair(new ItemStack(Items.ICE), Formatting.AQUA)); + BOOM_TYPE.put("LOW", + new Pair(new ItemStack(Items.FLINT_AND_STEEL), Formatting.GRAY)); + BOOM_TYPE.put("DISRUPTIVE", + new Pair(new ItemStack(Items.CAMPFIRE), Formatting.WHITE)); + BOOM_TYPE.put("MEDIUM", + new Pair(new ItemStack(Items.LAVA_BUCKET), Formatting.YELLOW)); + BOOM_TYPE.put("HIGH", + new Pair(new ItemStack(Items.FIRE_CHARGE), Formatting.GOLD)); + BOOM_TYPE.put("EXPLOSIVE", + new Pair(new ItemStack(Items.TNT), Formatting.RED)); + BOOM_TYPE.put("CATACLYSMIC", + new Pair(new ItemStack(Items.SKELETON_SKULL), Formatting.DARK_RED)); + } + + public VolcanoWidget(List list) { + super(TITLE, Formatting.AQUA.getColorValue()); + + String s = StrMan.strAt(list, 58).trim(); + Pair p = BOOM_TYPE.get(s); + IcoTextComponent itc = new IcoTextComponent(p.getLeft(), Text.literal(s).formatted(p.getRight())); + this.addComponent(itc); + this.pack(); + + } + +} -- cgit From 46170500518e94e86758af11267fb08021d48170 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 2 May 2023 18:12:56 -0400 Subject: Added Container Solver docs --- src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java | 3 +++ .../java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java index ec086934..ecec2449 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java @@ -6,6 +6,9 @@ import java.util.List; import java.util.Map; import java.util.regex.Pattern; +/** + * Abstract class for container solvers. Extend this class to add a new container solver, like terminal solvers or experiment solvers. + */ public abstract class ContainerSolver { private final Pattern CONTAINER_NAME; protected final static int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java index 276ac3b9..b50231fb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java @@ -18,6 +18,9 @@ import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; +/** + * Manager class for {@link ContainerSolver}s like terminal solvers and experiment solvers. To add a new container solver, extend {@link ContainerSolver} and register it in {@link #ContainerSolverManager()}. + */ public class ContainerSolverManager extends DrawableHelper { private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile(""); private final ContainerSolver[] solvers; -- cgit From 9c1d500ff84641612c178f883e2dbeb2f3bfef84 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 3 May 2023 17:14:28 -0400 Subject: Refactored container to gui --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 +- .../skyblocker/container/ColorHighlight.java | 4 - .../skyblocker/container/ContainerSolver.java | 39 ---------- .../container/ContainerSolverManager.java | 89 ---------------------- .../me/xmrvizzy/skyblocker/gui/ColorHighlight.java | 4 + .../xmrvizzy/skyblocker/gui/ContainerSolver.java | 39 ++++++++++ .../skyblocker/gui/ContainerSolverManager.java | 89 ++++++++++++++++++++++ .../skyblocker/mixin/MinecraftClientMixin.java | 2 +- .../skyblocker/skyblock/dungeon/CroesusHelper.java | 4 +- .../skyblock/dungeon/terminal/ColorTerminal.java | 4 +- .../skyblock/dungeon/terminal/OrderTerminal.java | 4 +- .../dungeon/terminal/StartsWithTerminal.java | 4 +- .../skyblock/quicknav/QuickNavButton.java | 2 +- 13 files changed, 143 insertions(+), 143 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index f804d90e..c519109a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker; -import me.xmrvizzy.skyblocker.container.ContainerSolverManager; +import me.xmrvizzy.skyblocker.gui.ContainerSolverManager; import me.xmrvizzy.skyblocker.discord.DiscordRPCManager; import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java b/src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java deleted file mode 100644 index c4380eab..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/container/ColorHighlight.java +++ /dev/null @@ -1,4 +0,0 @@ -package me.xmrvizzy.skyblocker.container; - -public record ColorHighlight(int slot, int color) { -} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java deleted file mode 100644 index ecec2449..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolver.java +++ /dev/null @@ -1,39 +0,0 @@ -package me.xmrvizzy.skyblocker.container; - -import net.minecraft.item.ItemStack; - -import java.util.List; -import java.util.Map; -import java.util.regex.Pattern; - -/** - * Abstract class for container solvers. Extend this class to add a new container solver, like terminal solvers or experiment solvers. - */ -public abstract class ContainerSolver { - private final Pattern CONTAINER_NAME; - protected final static int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; - protected final static int GRAY_HIGHLIGHT = 128 << 24 | 64 << 16 | 64 << 8 | 64; - - public ContainerSolver(String containerName) { - CONTAINER_NAME = Pattern.compile(containerName); - } - - public abstract boolean isEnabled(); - - public Pattern getName() { - return CONTAINER_NAME; - } - - public abstract List getColors(String[] groups, Map slots); - - public void trimEdges(Map slots, int rows) { - for (int i = 0; i < rows; i++) { - slots.remove(9 * i); - slots.remove(9 * i + 8); - } - for (int i = 1; i < 8; i++) { - slots.remove(i); - slots.remove((rows - 1) * 9 + i); - } - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java deleted file mode 100644 index b50231fb..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java +++ /dev/null @@ -1,89 +0,0 @@ -package me.xmrvizzy.skyblocker.container; - -import com.mojang.blaze3d.systems.RenderSystem; -import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper; -import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; -import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; -import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.slot.Slot; -import org.jetbrains.annotations.NotNull; - -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Manager class for {@link ContainerSolver}s like terminal solvers and experiment solvers. To add a new container solver, extend {@link ContainerSolver} and register it in {@link #ContainerSolverManager()}. - */ -public class ContainerSolverManager extends DrawableHelper { - private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile(""); - private final ContainerSolver[] solvers; - private ContainerSolver currentSolver = null; - private String[] groups; - private List highlights; - - public ContainerSolverManager() { - solvers = new ContainerSolver[]{ - new ColorTerminal(), - new OrderTerminal(), - new StartsWithTerminal(), - new CroesusHelper() - }; - } - - public void onSetScreen(@NotNull GenericContainerScreen screen) { - String screenName = screen.getTitle().getString(); - Matcher matcher = PLACEHOLDER_PATTERN.matcher(screenName); - for (ContainerSolver solver : solvers) { - if (solver.isEnabled()) { - matcher.usePattern(solver.getName()); - matcher.reset(); - if (matcher.matches()) { - currentSolver = solver; - groups = new String[matcher.groupCount()]; - for (int i = 0; i < groups.length; i++) - groups[i] = matcher.group(i + 1); - return; - } - } - } - currentSolver = null; - } - - public void clearScreen() { - currentSolver = null; - } - - public void markDirty() { - highlights = null; - } - - public void onDraw(MatrixStack matrices, List slots) { - if (currentSolver == null) - return; - if (highlights == null) - highlights = currentSolver.getColors(groups, slotMap(slots)); - RenderSystem.disableDepthTest(); - RenderSystem.colorMask(true, true, true, false); - for (ColorHighlight highlight : highlights) { - Slot slot = slots.get(highlight.slot()); - int color = highlight.color(); - fillGradient(matrices, slot.x, slot.y, slot.x + 16, slot.y + 16, color, color); - } - RenderSystem.colorMask(true, true, true, true); - RenderSystem.enableDepthTest(); - } - - private Map slotMap(List slots) { - Map slotMap = new TreeMap<>(); - for (int i = 0; i < slots.size(); i++) - slotMap.put(i, slots.get(i).getStack()); - return slotMap; - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java new file mode 100644 index 00000000..5120ceac --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java @@ -0,0 +1,4 @@ +package me.xmrvizzy.skyblocker.gui; + +public record ColorHighlight(int slot, int color) { +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java new file mode 100644 index 00000000..84de64eb --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java @@ -0,0 +1,39 @@ +package me.xmrvizzy.skyblocker.gui; + +import net.minecraft.item.ItemStack; + +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +/** + * Abstract class for gui solvers. Extend this class to add a new gui solver, like terminal solvers or experiment solvers. + */ +public abstract class ContainerSolver { + private final Pattern CONTAINER_NAME; + protected final static int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; + protected final static int GRAY_HIGHLIGHT = 128 << 24 | 64 << 16 | 64 << 8 | 64; + + public ContainerSolver(String containerName) { + CONTAINER_NAME = Pattern.compile(containerName); + } + + public abstract boolean isEnabled(); + + public Pattern getName() { + return CONTAINER_NAME; + } + + public abstract List getColors(String[] groups, Map slots); + + public void trimEdges(Map slots, int rows) { + for (int i = 0; i < rows; i++) { + slots.remove(9 * i); + slots.remove(9 * i + 8); + } + for (int i = 1; i < 8; i++) { + slots.remove(i); + slots.remove((rows - 1) * 9 + i); + } + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java new file mode 100644 index 00000000..c965154f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -0,0 +1,89 @@ +package me.xmrvizzy.skyblocker.gui; + +import com.mojang.blaze3d.systems.RenderSystem; +import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper; +import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; +import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; +import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Manager class for {@link ContainerSolver}s like terminal solvers and experiment solvers. To add a new gui solver, extend {@link ContainerSolver} and register it in {@link #ContainerSolverManager()}. + */ +public class ContainerSolverManager extends DrawableHelper { + private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile(""); + private final ContainerSolver[] solvers; + private ContainerSolver currentSolver = null; + private String[] groups; + private List highlights; + + public ContainerSolverManager() { + solvers = new ContainerSolver[]{ + new ColorTerminal(), + new OrderTerminal(), + new StartsWithTerminal(), + new CroesusHelper() + }; + } + + public void onSetScreen(@NotNull GenericContainerScreen screen) { + String screenName = screen.getTitle().getString(); + Matcher matcher = PLACEHOLDER_PATTERN.matcher(screenName); + for (ContainerSolver solver : solvers) { + if (solver.isEnabled()) { + matcher.usePattern(solver.getName()); + matcher.reset(); + if (matcher.matches()) { + currentSolver = solver; + groups = new String[matcher.groupCount()]; + for (int i = 0; i < groups.length; i++) + groups[i] = matcher.group(i + 1); + return; + } + } + } + currentSolver = null; + } + + public void clearScreen() { + currentSolver = null; + } + + public void markDirty() { + highlights = null; + } + + public void onDraw(MatrixStack matrices, List slots) { + if (currentSolver == null) + return; + if (highlights == null) + highlights = currentSolver.getColors(groups, slotMap(slots)); + RenderSystem.disableDepthTest(); + RenderSystem.colorMask(true, true, true, false); + for (ColorHighlight highlight : highlights) { + Slot slot = slots.get(highlight.slot()); + int color = highlight.color(); + fillGradient(matrices, slot.x, slot.y, slot.x + 16, slot.y + 16, color, color); + } + RenderSystem.colorMask(true, true, true, true); + RenderSystem.enableDepthTest(); + } + + private Map slotMap(List slots) { + Map slotMap = new TreeMap<>(); + for (int i = 0; i < slots.size(); i++) + slotMap.put(i, slots.get(i).getStack()); + return slotMap; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java index 2bc47bba..1f9009b7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java @@ -1,7 +1,7 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.container.ContainerSolverManager; +import me.xmrvizzy.skyblocker.gui.ContainerSolverManager; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java index c536542b..ec3655f0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -1,8 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.container.ColorHighlight; -import me.xmrvizzy.skyblocker.container.ContainerSolver; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import me.xmrvizzy.skyblocker.gui.ContainerSolver; import net.minecraft.item.ItemStack; import java.util.ArrayList; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java index f5c97738..0bfc0d60 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -1,8 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.container.ColorHighlight; -import me.xmrvizzy.skyblocker.container.ContainerSolver; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import me.xmrvizzy.skyblocker.gui.ContainerSolver; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java index c61395f4..1cf0dcfc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java @@ -1,8 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.container.ColorHighlight; -import me.xmrvizzy.skyblocker.container.ContainerSolver; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import me.xmrvizzy.skyblocker.gui.ContainerSolver; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java index 7c56746f..26d2a2c4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -1,8 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.container.ColorHighlight; -import me.xmrvizzy.skyblocker.container.ContainerSolver; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import me.xmrvizzy.skyblocker.gui.ContainerSolver; import net.minecraft.item.ItemStack; import java.util.ArrayList; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java index e31827ab..042d96d9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -19,7 +19,7 @@ import net.minecraft.util.Identifier; @Environment(value=EnvType.CLIENT) public class QuickNavButton extends ClickableWidget { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final Identifier BUTTON_TEXTURE = new Identifier("textures/gui/container/creative_inventory/tabs.png"); + private static final Identifier BUTTON_TEXTURE = new Identifier("textures/gui/gui/creative_inventory/tabs.png"); private final int index; private boolean toggled; -- cgit From fca101c2d22c682856f7097a1c013c59d0850e0d Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 3 May 2023 17:35:43 -0400 Subject: Migrated client tick and container mixins to ClientTickEvents and ScreenEvents --- .../xmrvizzy/skyblocker/SkyblockerInitializer.java | 29 ------------------- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 33 ++++++++++++++++++++-- .../container/ContainerSolverManager.java | 15 ++++++++++ .../mixin/GenericContainerScreenMixin.java | 31 -------------------- .../skyblocker/mixin/MinecraftClientMixin.java | 22 ++------------- src/main/resources/fabric.mod.json | 2 +- src/main/resources/skyblocker.mixins.json | 1 - 7 files changed, 50 insertions(+), 83 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java deleted file mode 100644 index 3d713727..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package me.xmrvizzy.skyblocker; - -import me.xmrvizzy.skyblocker.chat.ChatMessageListener; -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.discord.DiscordRPCManager; -import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; -import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand; -import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; -import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; -import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; -import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; -import me.xmrvizzy.skyblocker.utils.UpdateChecker; -import net.fabricmc.api.ClientModInitializer; - -public class SkyblockerInitializer implements ClientModInitializer { - @Override - public void onInitializeClient() { - HotbarSlotLock.init(); - SkyblockerConfig.init(); - PriceInfoTooltip.init(); - WikiLookup.init(); - ItemRegistry.init(); - StatsCommand.init(); - DwarvenHud.init(); - ChatMessageListener.init(); - UpdateChecker.init(); - DiscordRPCManager.init(); - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index f804d90e..f91192ba 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -1,15 +1,28 @@ package me.xmrvizzy.skyblocker; +import me.xmrvizzy.skyblocker.chat.ChatMessageListener; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.container.ContainerSolverManager; import me.xmrvizzy.skyblocker.discord.DiscordRPCManager; import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; +import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; +import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze; import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; +import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; +import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.utils.Scheduler; +import me.xmrvizzy.skyblocker.utils.UpdateChecker; import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.minecraft.client.MinecraftClient; -public class SkyblockerMod { +import java.awt.*; + +public class SkyblockerMod implements ClientModInitializer { public static final String NAMESPACE = "skyblocker"; private static final SkyblockerMod instance = new SkyblockerMod(); @@ -29,7 +42,23 @@ public class SkyblockerMod { return instance; } - public void onTick() { + @Override + public void onInitializeClient() { + ClientTickEvents.END_CLIENT_TICK.register(this::tick); + HotbarSlotLock.init(); + SkyblockerConfig.init(); + PriceInfoTooltip.init(); + WikiLookup.init(); + ItemRegistry.init(); + ContainerSolverManager.init(); + StatsCommand.init(); + DwarvenHud.init(); + ChatMessageListener.init(); + UpdateChecker.init(); + DiscordRPCManager.init(); + } + + public void tick(MinecraftClient client) { scheduler.tick(); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java index 276ac3b9..e2bf359f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java @@ -1,10 +1,13 @@ package me.xmrvizzy.skyblocker.container; import com.mojang.blaze3d.systems.RenderSystem; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.util.math.MatrixStack; @@ -34,6 +37,18 @@ public class ContainerSolverManager extends DrawableHelper { }; } + public static void init() { + ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { + ContainerSolverManager containerSolverManager = SkyblockerMod.getInstance().containerSolverManager; + if (Utils.isOnSkyblock && screen instanceof GenericContainerScreen genericContainerScreen) { + ScreenEvents.afterRender(screen).register((screen1, matrices, mouseX, mouseY, delta) -> containerSolverManager.onDraw(matrices, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9))); + containerSolverManager.onSetScreen(genericContainerScreen); + } else { + containerSolverManager.clearScreen(); + } + }); + } + public void onSetScreen(@NotNull GenericContainerScreen screen) { String screenName = screen.getTitle().getString(); Matcher matcher = PLACEHOLDER_PATTERN.matcher(screenName); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java deleted file mode 100644 index d63d17b8..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/GenericContainerScreenMixin.java +++ /dev/null @@ -1,31 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.screen.GenericContainerScreenHandler; -import net.minecraft.text.Text; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(GenericContainerScreen.class) -public abstract class GenericContainerScreenMixin extends HandledScreen { - @Shadow - @Final - private int rows; - - public GenericContainerScreenMixin(GenericContainerScreenHandler handler, PlayerInventory inventory, Text title) { - super(handler, inventory, title); - } - - @Override - protected void drawForeground(MatrixStack matrices, int mouseX, int mouseY) { - super.drawForeground(matrices, mouseX, mouseY); - if (Utils.isOnSkyblock) - SkyblockerMod.getInstance().containerSolverManager.onDraw(matrices, this.handler.slots.subList(0, rows * 9)); - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java index 2bc47bba..24e27c08 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.mixin; -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.container.ContainerSolverManager; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.network.ClientPlayerEntity; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; @@ -22,22 +18,10 @@ public abstract class MinecraftClientMixin { @Nullable public ClientPlayerEntity player; - @Inject(method = "tick", at = @At("HEAD")) - public void skyblocker$tick(CallbackInfo ci) { - SkyblockerMod.getInstance().onTick(); - } - @Inject(method = "handleInputEvents", at = @At("HEAD")) public void skyblocker$handleInputEvents(CallbackInfo ci) { - if (Utils.isOnSkyblock) HotbarSlotLock.handleInputEvents(player); - } - - @Inject(method = "setScreen", at = @At("HEAD")) - public void skyblocker$onSetScreen(Screen screen, CallbackInfo ci) { - ContainerSolverManager manager = SkyblockerMod.getInstance().containerSolverManager; - if (Utils.isOnSkyblock && screen instanceof GenericContainerScreen) - manager.onSetScreen((GenericContainerScreen) screen); - else - manager.clearScreen(); + if (Utils.isOnSkyblock) { + HotbarSlotLock.handleInputEvents(player); + } } } \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index d8ef4941..00bf5b57 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "environment": "client", "entrypoints": { "client": [ - "me.xmrvizzy.skyblocker.SkyblockerInitializer" + "me.xmrvizzy.skyblocker.SkyblockerMod" ], "modmenu": [ "me.xmrvizzy.skyblocker.config.modmenu.ModMenuEntry" diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 4a6be779..24feafda 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -11,7 +11,6 @@ "FarmlandBlockMixin", "MinecraftClientMixin", "AccessorWorldRenderer", - "GenericContainerScreenMixin", "GenericContainerScreenHandlerMixin", "HandledScreenMixin", "InventoryScreenMixin", -- cgit From 38d19549c1f02dee99d803e735d7989f528637f6 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 3 May 2023 17:55:23 -0400 Subject: Migrated backpack and QuickNav mixins to ScreenEvents --- src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 5 +++-- .../xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 17 ----------------- .../xmrvizzy/skyblocker/skyblock/BackpackPreview.java | 9 +++++++++ .../xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java | 17 +++++++++++++++-- 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index f91192ba..80b02eee 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -13,6 +13,7 @@ import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav; import me.xmrvizzy.skyblocker.utils.Scheduler; import me.xmrvizzy.skyblocker.utils.UpdateChecker; import me.xmrvizzy.skyblocker.utils.Utils; @@ -20,8 +21,6 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.minecraft.client.MinecraftClient; -import java.awt.*; - public class SkyblockerMod implements ClientModInitializer { public static final String NAMESPACE = "skyblocker"; private static final SkyblockerMod instance = new SkyblockerMod(); @@ -51,6 +50,8 @@ public class SkyblockerMod implements ClientModInitializer { WikiLookup.init(); ItemRegistry.init(); ContainerSolverManager.init(); + BackpackPreview.init(); + QuickNav.init(); StatsCommand.init(); DwarvenHud.init(); ChatMessageListener.init(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 44b1b5c8..2d200a86 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -3,9 +3,6 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; -import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav; -import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNavButton; -import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.util.math.MatrixStack; @@ -19,8 +16,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.List; - @Mixin(HandledScreen.class) public abstract class HandledScreenMixin extends Screen { protected HandledScreenMixin(Text title) { @@ -31,18 +26,6 @@ public abstract class HandledScreenMixin extends Screen { @Nullable protected Slot focusedSlot; - @Inject(method = "init()V", at = @At("TAIL")) - private void skyblocker$init(CallbackInfo ci) { - // quicknav - if (Utils.isOnSkyblock && SkyblockerConfig.get().quickNav.enableQuickNav) { - String screenTitle = super.getTitle().getString().trim(); - List buttons = QuickNav.init(screenTitle); - for (QuickNavButton button : buttons) super.addDrawableChild(button); - } - // backpack preview - BackpackPreview.updateStorage((HandledScreen) (Object) this); - } - @Inject(at = @At("HEAD"), method = "keyPressed") public void skyblocker$keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { if (this.focusedSlot != null) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java index d8cca051..a6dfe31d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java @@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock; import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; @@ -40,6 +41,14 @@ public class BackpackPreview extends DrawableHelper { private static String loaded = ""; // uuid + sb profile currently loaded private static Path save_dir = null; + public static void init() { + ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { + if (screen instanceof HandledScreen handledScreen) { + updateStorage(handledScreen); + } + }); + } + public static void tick() { Utils.sbChecker(); // force update isOnSkyblock to prevent crash on disconnect if (Utils.isOnSkyblock) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java index 99e1c529..8ab49754 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java @@ -1,9 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.quicknav; import com.mojang.brigadier.exceptions.CommandSyntaxException; - import me.xmrvizzy.skyblocker.config.SkyblockerConfig; - +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; +import net.fabricmc.fabric.api.client.screen.v1.Screens; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.item.ItemStack; import net.minecraft.nbt.StringNbtReader; @@ -14,6 +16,17 @@ import java.util.Locale; public class QuickNav { private static final String skyblockHubIconNbt = "{id:\"minecraft:player_head\",Count:1,tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}}"; private static final String dungeonHubIconNbt = "{id:\"minecraft:player_head\",Count:1,tag:{SkullOwner:{Id:[I;1605800870,415127827,-1236127084,15358548],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}}}}"; + + public static void init() { + ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { + if (Utils.isOnSkyblock && SkyblockerConfig.get().quickNav.enableQuickNav && screen instanceof HandledScreen) { + String screenTitle = screen.getTitle().getString().trim(); + List buttons = QuickNav.init(screenTitle); + for (QuickNavButton button : buttons) Screens.getButtons(screen).add(button); + } + }); + } + public static List init(String screenTitle) { List buttons = new ArrayList<>(); SkyblockerConfig.QuickNav data = SkyblockerConfig.get().quickNav; -- cgit From ea8a507b8a2cc7d59d0bf3b13e3d9f9f17b16703 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 10:48:23 +0200 Subject: Fire sale widget now correctly shows time until event start. --- .../xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java index 97b0e8a2..2f982c61 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java @@ -6,6 +6,7 @@ import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; @@ -34,6 +35,12 @@ public class FireSaleWidget extends Widget { super(TITLE, Formatting.DARK_AQUA.getColorValue()); boolean found = false; + if (StrMan.strAt(list, 46).contains("Starts In")) { + IcoTextComponent start = new IcoTextComponent(Ico.CLOCK, StrMan.stdEntry(list, 46, "Starts in", Formatting.DARK_AQUA)); + this.addComponent(start); + this.pack(); + return; + } for (int i = 46;; i++) { Matcher m = StrMan.regexAt(list, i, FIRE_PATTERN); -- cgit From 13c394fbf2afe77bce080ffdcff99d59d7d8b33d Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 10:49:13 +0200 Subject: Skills widget should now handle maxxed skills correctly --- .../skyblock/tabhud/widget/SkillsWidget.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java index 85bd630b..c2eedfa4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java @@ -6,6 +6,8 @@ import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoFatTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; @@ -25,19 +27,25 @@ public class SkillsWidget extends Widget { // match the skill entry // group 1: skill name and level // group 2: progress to next level (without "%") - private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); + private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): ([0-9.]*)%?"); public SkillsWidget(List list) { super(TITLE, Formatting.YELLOW.getColorValue()); Matcher m = StrMan.regexAt(list, 66, SKILL_PATTERN); - - float pcnt = Float.parseFloat(m.group(2)); String skill = m.group(1); + String pcntStr = m.group(2); - ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(skill), pcnt, Formatting.GOLD.getColorValue()); + Component progress; + if (!pcntStr.equals("MAX")) { + float pcnt = Float.parseFloat(pcntStr); + progress = new ProgressComponent(Ico.LANTERN, Text.of(skill), + Text.of(pcntStr), pcnt, Formatting.GOLD.getColorValue()); + } else { + progress = new IcoFatTextComponent(Ico.LANTERN, Text.of(skill), Text.literal(pcntStr).formatted(Formatting.RED)); + } - this.addComponent(pc); + this.addComponent(progress); Text speed = StrMan.stdEntry(list, 67, "SPD", Formatting.WHITE); IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); -- cgit From b1e5e212242bf06c763196743c44b71d92458bb9 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 10:55:35 +0200 Subject: Hopefully fix CI reputation progress regex. --- .../xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java index 09e1bb00..121e41e8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java @@ -20,7 +20,7 @@ public class ReputationWidget extends Widget { private static final MutableText TITLE = Text.literal("Faction Status").formatted(Formatting.AQUA, Formatting.BOLD); - private static final Pattern PROGRESS_PATTERN = Pattern.compile(" \\|+ \\((\\d+%)\\)"); + private static final Pattern PROGRESS_PATTERN = Pattern.compile(" \\|+ \\(([0-9.]*%)\\)"); private static final Pattern STATE_PATTERN = Pattern.compile("(\\S*) *(\\S*)"); public ReputationWidget(List list) { @@ -41,7 +41,7 @@ public class ReputationWidget extends Widget { float pcnt = Float.parseFloat(prog.group(1)); - ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(state.group(1) + " -> " + state.group(2)), pcnt, Formatting.AQUA.getColorValue()); + ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(state.group(1) + " -> " + state.group(2)), Text.of(rep), pcnt, Formatting.AQUA.getColorValue()); this.addComponent(pc); this.pack(); -- cgit From abde3072657817ce3cec3480e02969b57f7214ca Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 11:31:58 +0200 Subject: Make code style in screen classes more consistent --- .../skyblocker/skyblock/tabhud/screens/EmptyScreen.java | 2 +- .../tabhud/screens/genericInfo/GardenInfoScreen.java | 4 ++-- .../tabhud/screens/genericInfo/GenericInfoScreen.java | 3 +-- .../skyblock/tabhud/screens/main/CrimsonIsleScreen.java | 2 ++ .../skyblock/tabhud/screens/main/DungeonHubScreen.java | 8 +++++--- .../skyblock/tabhud/screens/main/DungeonScreen.java | 16 ++++++++-------- .../tabhud/screens/main/FarmingServerScreen.java | 8 +++++--- .../skyblock/tabhud/screens/main/GardenScreen.java | 1 + .../tabhud/screens/main/GenericServerScreen.java | 2 ++ .../skyblock/tabhud/screens/main/GuestServerScreen.java | 2 ++ .../skyblock/tabhud/screens/main/HomeServerScreen.java | 1 + .../skyblock/tabhud/screens/main/HubServerScreen.java | 2 ++ .../skyblock/tabhud/screens/main/MineServerScreen.java | 14 ++++++++------ .../skyblock/tabhud/screens/main/ParkServerScreen.java | 2 ++ .../tabhud/screens/playerList/DungeonPlayerScreen.java | 17 +++++++++-------- .../tabhud/screens/playerList/GuestPlayerScreen.java | 2 ++ .../tabhud/screens/playerList/HomePlayerScreen.java | 2 ++ .../tabhud/screens/playerList/PlayerListScreen.java | 2 ++ 18 files changed, 57 insertions(+), 33 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java index 07162834..efc64a70 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java @@ -8,7 +8,7 @@ import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class EmptyScreen extends Screen { - + public EmptyScreen(int w, int h, List ple, Text footer) { super(w, h); EmptyWidget ew = new EmptyWidget(ple); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java index 639bc135..f24fb82a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java @@ -29,8 +29,8 @@ public class GardenInfoScreen extends Screen { JacobsContestWidget jcw = new JacobsContestWidget(ple); CookieWidget cw = new CookieWidget(f); - - // goofy ahh layout code incoming + + // layout code incoming this.stackWidgetsH(gsw, evw, uw); this.stackWidgetsH(pw, efw); this.stackWidgetsH(jcw, cw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java index dda4b401..764397ae 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java @@ -30,8 +30,7 @@ public class GenericInfoScreen extends Screen { ElectionWidget elw = new ElectionWidget(ple); CookieWidget cw = new CookieWidget(f); - - // goofy ahh layout code incoming + this.stackWidgetsH(sw, evw, uw); this.stackWidgetsH(pw, efw); this.stackWidgetsH(elw, cw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java index 182f6897..7e6e03af 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java @@ -14,10 +14,12 @@ public class CrimsonIsleScreen extends Screen { public CrimsonIsleScreen(int w, int h, List ple, Text footer) { super(w, h); + ServerWidget sw = new ServerWidget(ple); ReputationWidget rw = new ReputationWidget(ple); QuestWidget qw = new QuestWidget(ple); VolcanoWidget vw = new VolcanoWidget(ple); + this.stackWidgetsH(sw, rw, vw); this.offCenterL(sw); this.offCenterL(rw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java index 5279f196..4f721dfc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java @@ -13,11 +13,13 @@ public class DungeonHubScreen extends Screen{ public DungeonHubScreen(int w, int h, List list, Text footer) { super(w, h); + ServerWidget sw = new ServerWidget(list); EssenceWidget ew = new EssenceWidget(list); - centerW(sw); - centerW(ew); - stackWidgetsH(sw, ew); + + this.centerW(sw); + this.centerW(ew); + this.stackWidgetsH(sw, ew); this.addWidget(ew); this.addWidget(sw); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java index ed8160cb..35383f1b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java @@ -22,16 +22,16 @@ public class DungeonScreen extends Screen { DungeonServerWidget dsrw = new DungeonServerWidget(ple); DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget(ple); - offCenterL(ddow); - offCenterL(ddew); - offCenterL(dscw); - offCenterR(dsrw); - offCenterR(dpuw); + this.offCenterL(ddow); + this.offCenterL(ddew); + this.offCenterL(dscw); + this.offCenterR(dsrw); + this.offCenterR(dpuw); - stackWidgetsH(ddow, ddew, dscw); - stackWidgetsH(dsrw, dpuw); + this.stackWidgetsH(ddow, ddew, dscw); + this.stackWidgetsH(dsrw, dpuw); - addWidgets(ddow, ddew, dscw, dsrw, dpuw); + this.addWidgets(ddow, ddew, dscw, dsrw, dpuw); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java index ea374c6d..206af26c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java @@ -13,11 +13,13 @@ public class FarmingServerScreen extends Screen{ public FarmingServerScreen(int w, int h, List list, Text footer) { super(w, h); + ServerWidget sw = new ServerWidget(list); TrapperWidget tw = new TrapperWidget(list); - centerW(sw); - centerW(tw); - stackWidgetsH(sw, tw); + + this.centerW(sw); + this.centerW(tw); + this.stackWidgetsH(sw, tw); this.addWidgets(tw, sw); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java index 4ea11109..3debf905 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java @@ -12,6 +12,7 @@ public class GardenScreen extends Screen{ public GardenScreen(int w, int h, List ple, Text footer) { super(w, h); + GardenServerWidget gsw = new GardenServerWidget(ple); ComposterWidget cw = new ComposterWidget(ple); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java index c8cc60a6..8afdcac5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java @@ -12,7 +12,9 @@ public class GenericServerScreen extends Screen { public GenericServerScreen(int w, int h, List ple, Text footer) { super(w, h); + ServerWidget sw = new ServerWidget(ple); + this.center(sw); this.addWidget(sw); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java index 6a583c38..b6388be9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java @@ -12,7 +12,9 @@ public class GuestServerScreen extends Screen{ public GuestServerScreen(int w, int h, List list, Text footer) { super(w, h); + GuestServerWidget gsw = new GuestServerWidget(list); + this.center(gsw); this.addWidget(gsw); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java index 3c2b8fac..9ce8ee0e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java @@ -16,6 +16,7 @@ public class HomeServerScreen extends Screen { IslandServerWidget isw = new IslandServerWidget(list); MinionWidget mw = new MinionWidget(list); + this.centerH(isw); this.centerH(mw); this.stackWidgetsW(isw, mw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java index 0a488d1d..3ba8fc47 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java @@ -13,8 +13,10 @@ public class HubServerScreen extends Screen { public HubServerScreen(int w, int h, List ple, Text footer) { super(w, h); + ServerWidget sw = new ServerWidget(ple); FireSaleWidget fsw = new FireSaleWidget(ple); + this.centerW(sw); this.centerW(fsw); this.stackWidgetsH(sw, fsw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java index 0fe408bc..f0dd6e0a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java @@ -15,16 +15,18 @@ public class MineServerScreen extends Screen{ public MineServerScreen(int w, int h, List list, Text footer) { super(w, h); + ServerWidget sw = new ServerWidget(list); PowderWidget pw = new PowderWidget(list); CommsWidget cw = new CommsWidget(list); ForgeWidget fw = new ForgeWidget(list); - stackWidgetsH(sw, pw, cw); - centerH(fw); - offCenterL(sw); - offCenterL(pw); - offCenterL(cw); - offCenterR(fw); + + this.stackWidgetsH(sw, pw, cw); + this.centerH(fw); + this.offCenterL(sw); + this.offCenterL(pw); + this.offCenterL(cw); + this.offCenterR(fw); this.addWidgets(fw, cw, pw, sw); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java index 90ab9edb..c1d09f6c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java @@ -12,7 +12,9 @@ public class ParkServerScreen extends Screen{ public ParkServerScreen(int w, int h, List ple, Text footer) { super(w, h); + ParkServerWidget sw = new ParkServerWidget(ple); + this.center(sw); this.addWidget(sw); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java index a7aa970d..aba19c56 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java @@ -12,20 +12,21 @@ public class DungeonPlayerScreen extends Screen { public DungeonPlayerScreen(int w, int h, List ple, Text footer) { super(w, h); + DungeonPlayerWidget dpw1 = new DungeonPlayerWidget(ple, 1); DungeonPlayerWidget dpw2 = new DungeonPlayerWidget(ple, 2); DungeonPlayerWidget dpw3 = new DungeonPlayerWidget(ple, 3); DungeonPlayerWidget dpw4 = new DungeonPlayerWidget(ple, 4); DungeonPlayerWidget dpw5 = new DungeonPlayerWidget(ple, 5); - offCenterL(dpw1); - offCenterL(dpw2); - offCenterL(dpw3); - offCenterR(dpw4); - offCenterR(dpw5); - stackWidgetsH(dpw1, dpw2, dpw3); - stackWidgetsH(dpw4, dpw5); - addWidgets(dpw1, dpw2, dpw3, dpw4, dpw5); + this.offCenterL(dpw1); + this.offCenterL(dpw2); + this.offCenterL(dpw3); + this.offCenterR(dpw4); + this.offCenterR(dpw5); + this.stackWidgetsH(dpw1, dpw2, dpw3); + this.stackWidgetsH(dpw4, dpw5); + this.addWidgets(dpw1, dpw2, dpw3, dpw4, dpw5); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java index 30c3a4ba..f8210443 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java @@ -13,8 +13,10 @@ public class GuestPlayerScreen extends Screen{ public GuestPlayerScreen(int w, int h, List list, Text footer) { super(w, h); + IslandGuestsWidget igw = new IslandGuestsWidget(list); IslandOwnersWidget iow = new IslandOwnersWidget(list); + this.centerH(iow); this.centerH(igw); this.stackWidgetsW(igw, iow); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java index 08f44d8f..d89f6d6a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java @@ -13,8 +13,10 @@ public class HomePlayerScreen extends Screen { public HomePlayerScreen(int w, int h, List list, Text footer) { super(w, h); + IslandSelfWidget isw = new IslandSelfWidget(list); IslandGuestsWidget igw = new IslandGuestsWidget(list); + this.centerH(isw); this.centerH(igw); this.stackWidgetsW(isw, igw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java index d40353b8..eca2e4aa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java @@ -12,7 +12,9 @@ public class PlayerListScreen extends Screen { public PlayerListScreen(int w, int h, List ple, Text footer) { super(w, h); + PlayerListWidget plw = new PlayerListWidget(ple); + this.center(plw); this.addWidget(plw); } -- cgit From 0c3831ee62f933963d176129d63da35b302482d0 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 11:32:37 +0200 Subject: Add more info to comment about Commission record --- src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java index 9f1e783c..142a1856 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -116,7 +116,7 @@ public class DwarvenHud { }); } - // steamroller tactics to get visibility from outside classes + // steamroller tactics to get visibility from outside classes (CommsWidget) public static record Commission(String commission, String progression){} } -- cgit From 763507b427d151c77a3c5a1b8dfe03f0a4a059e1 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 11:32:50 +0200 Subject: Minor refactoring --- .../me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index ca6c9b41..f4089f83 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -31,13 +31,12 @@ public class PlayerListHudMixin { private Text footer; @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/util/math/MatrixStack;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true) - public void skyblocker$renderTabHud(MatrixStack ms, int scaledW, Scoreboard sb, ScoreboardObjective sbo, CallbackInfo info) { + public void skyblocker$renderTabHud(MatrixStack ms, int scaledW, Scoreboard sb, ScoreboardObjective sbo, + CallbackInfo info) { - if (!Utils.isOnSkyblock) { - return; - } - - if (TabHud.defaultTgl.isPressed()) { + if (!Utils.isOnSkyblock + || !SkyblockerConfig.get().general.tabHudEnabled + || TabHud.defaultTgl.isPressed()) { return; } @@ -47,7 +46,8 @@ public class PlayerListHudMixin { return; } - List list = nwH.getListedPlayerListEntries().stream().sorted(PlayerListHudAccessor.getOrdering()).toList(); + List list = nwH.getListedPlayerListEntries().stream() + .sorted(PlayerListHudAccessor.getOrdering()).toList(); int w = scaledW; int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); @@ -60,7 +60,7 @@ public class PlayerListHudMixin { } } catch (Exception e) { e.printStackTrace(); - MinecraftClient.getInstance().player.sendMessage(Text.of("The tab HUD has encountered unexpected text, see log! :(")); + client.player.sendMessage(Text.of("The tab HUD has encountered unexpected text, see log! :(")); } } -- cgit From cff839b60cc2d5c09defcf7b4608022ebc1e4fdb Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 11:33:24 +0200 Subject: Move logic to find the player's location to it's own class --- .../skyblocker/skyblock/tabhud/screens/Screen.java | 179 +++++++-------------- .../skyblock/tabhud/util/PlayerLocator.java | 86 ++++++++++ 2 files changed, 142 insertions(+), 123 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index f5a620bf..f60af79d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -7,7 +7,7 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.*; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.*; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.*; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; import net.minecraft.client.network.PlayerListEntry; @@ -16,26 +16,6 @@ import net.minecraft.text.Text; public class Screen { - private enum ScreenType { - DUNGEON, - GUEST_ISLAND, - HOME_ISLAND, - CRIMSON_ISLE, - DUNGEON_HUB, - FARMING_ISLAND, - PARK, - DWARVEN_MINES, - CRYSTAL_HOLLOWS, - END, - GOLD_MINE, - DEEP_CAVERNS, - HUB, - SPIDER_DEN, - JERRY, - GARDEN, - NONE - } - private ArrayList widgets = new ArrayList<>(); private int w, h; @@ -44,6 +24,61 @@ public class Screen { this.h = h; } + public static Screen getCorrect(int w, int h, List ple, Text footer) { + if (TabHud.genericTgl.isPressed()) { + return Screen.correctGenericScrn(w, h, ple, footer); + // } else if (TabHud.mapTgl.isPressed()) { + // return Screen.correctMapScrn(w, h, ple, footer); + } else if (TabHud.playerTgl.isPressed()) { + return Screen.correctPlayerScrn(w, h, ple, footer); + } else { + return Screen.correctMainScrn(w, h, ple, footer); + } + } + + + // private static Screen correctMapScrn(int w, int h, List list, Text footer) { + // // return switch (getScreenType(list)) { + // // case CRYSTAL_HOLLOWS -> null; + // // case DUNGEON -> null; + // // default -> new EmptyScreen(w, h, list, footer); + // // }; + // return new EmptyScreen(w, h, list, footer); + // } + + private static Screen correctGenericScrn(int w, int h, List list, Text footer) { + return switch (PlayerLocator.getPlayerLocation()) { + case GARDEN -> new GardenInfoScreen(w, h, list, footer); // ok + default -> new GenericInfoScreen(w, h, list, footer); // ok + }; + } + + + private static Screen correctPlayerScrn(int w, int h, List list, Text footer) { + return switch (PlayerLocator.getPlayerLocation()) { + case GUEST_ISLAND -> new GuestPlayerScreen(w, h, list, footer); // ok + case HOME_ISLAND -> new HomePlayerScreen(w, h, list, footer); // ok + case DUNGEON -> new DungeonPlayerScreen(w, h, list, footer); + default -> new PlayerListScreen(w, h, list, footer); // ok + }; + } + + private static Screen correctMainScrn(int w, int h, List list, Text footer) { + return switch (PlayerLocator.getPlayerLocation()) { + case PARK -> new ParkServerScreen(w, h, list, footer); // ok + case HUB -> new HubServerScreen(w, h, list, footer); // ok + case HOME_ISLAND -> new HomeServerScreen(w, h, list, footer); // ok + case GUEST_ISLAND -> new GuestServerScreen(w, h, list, footer); // ok + case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, list, footer); + case FARMING_ISLAND -> new FarmingServerScreen(w, h, list, footer); // ok + case DUNGEON_HUB -> new DungeonHubScreen(w, h, list, footer); // ok + case DUNGEON -> new DungeonScreen(w, h, list, footer); // ok + case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, list, footer); // ??? + case GARDEN -> new GardenScreen(w, h, list, footer); + default -> new GenericServerScreen(w, h, list, footer); // ok + }; + } + public void addWidget(Widget w) { widgets.add(w); } @@ -157,106 +192,4 @@ public class Screen { } w.setX(xCor); } - - public static Screen getCorrect(int w, int h, List ple, Text footer) { - if (TabHud.genericTgl.isPressed()) { - return Screen.correctGenericScrn(w, h, ple, footer); - // } else if (TabHud.mapTgl.isPressed()) { - // return Screen.correctMapScrn(w, h, ple, footer); - } else if (TabHud.playerTgl.isPressed()) { - return Screen.correctPlayerScrn(w, h, ple, footer); - } else { - return Screen.correctMainScrn(w, h, ple, footer); - } - } - - - private static ScreenType getScreenType(List ple) { - String cat2Name = StrMan.strAt(ple, 40); - - if (cat2Name.contains("Dungeon Stats")) { - return ScreenType.DUNGEON; - } - - String areaDesciptor = StrMan.strAt(ple, 41).substring(6); - switch (areaDesciptor) { - case "Private Island": - if (ple.get(44).getDisplayName().getString().endsWith("Guest")) { - return ScreenType.GUEST_ISLAND; - } else { - return ScreenType.HOME_ISLAND; - } - case "Crimson Isle": - return ScreenType.CRIMSON_ISLE; - case "Dungeon Hub": - return ScreenType.DUNGEON_HUB; - case "The Farming Islands": - return ScreenType.FARMING_ISLAND; - case "The Park": - return ScreenType.PARK; - case "Dwarven Mines": - return ScreenType.DWARVEN_MINES; - case "Crystal Hollows": - return ScreenType.CRYSTAL_HOLLOWS; - case "The End": - return ScreenType.END; - case "Gold Mine": - return ScreenType.GOLD_MINE; - case "Deep Caverns": - return ScreenType.DEEP_CAVERNS; - case "Hub": - return ScreenType.HUB; - case "Spider's Den": - return ScreenType.SPIDER_DEN; - case "Jerry's Workshop": - return ScreenType.JERRY; - case "Garden": - return ScreenType.GARDEN; - default: - return ScreenType.NONE; - } - } - - // private static Screen correctMapScrn(int w, int h, List list, Text footer) { - // // return switch (getScreenType(list)) { - // // case CRYSTAL_HOLLOWS -> null; - // // case DUNGEON -> null; - // // default -> new EmptyScreen(w, h, list, footer); - // // }; - // return new EmptyScreen(w, h, list, footer); - // } - - private static Screen correctGenericScrn(int w, int h, List list, Text footer) { - return switch (getScreenType(list)) { - case GARDEN -> new GardenInfoScreen(w, h, list, footer); // ok - default -> new GenericInfoScreen(w, h, list, footer); // ok - }; - } - - - private static Screen correctPlayerScrn(int w, int h, List list, Text footer) { - return switch (getScreenType(list)) { - case GUEST_ISLAND -> new GuestPlayerScreen(w, h, list, footer); // ok - case HOME_ISLAND -> new HomePlayerScreen(w, h, list, footer); // ok - case DUNGEON -> new DungeonPlayerScreen(w, h, list, footer); - default -> new PlayerListScreen(w, h, list, footer); // ok - }; - } - - private static Screen correctMainScrn(int w, int h, List list, Text footer) { - return switch (getScreenType(list)) { - case PARK -> new ParkServerScreen(w, h, list, footer); // ok - case HUB -> new HubServerScreen(w, h, list, footer); // ok - case HOME_ISLAND -> new HomeServerScreen(w, h, list, footer); // ok - case GUEST_ISLAND -> new GuestServerScreen(w, h, list, footer); // ok - case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, list, footer); - case FARMING_ISLAND -> new FarmingServerScreen(w, h, list, footer); // ok - case DUNGEON_HUB -> new DungeonHubScreen(w, h, list, footer); // ok - case DUNGEON -> new DungeonScreen(w, h, list, footer); // ok - case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, list, footer); // ??? - case GARDEN -> new GardenScreen(w, h, list, footer); - default -> new GenericServerScreen(w, h, list, footer); // ok - }; - } - } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java new file mode 100644 index 00000000..cffac5c4 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java @@ -0,0 +1,86 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.util; + +import java.util.List; + +import me.xmrvizzy.skyblocker.mixin.PlayerListHudAccessor; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.PlayerListEntry; + +public class PlayerLocator { + + public static enum Location { + DUNGEON, + GUEST_ISLAND, + HOME_ISLAND, + CRIMSON_ISLE, + DUNGEON_HUB, + FARMING_ISLAND, + PARK, + DWARVEN_MINES, + CRYSTAL_HOLLOWS, + END, + GOLD_MINE, + DEEP_CAVERNS, + HUB, + SPIDER_DEN, + JERRY, + GARDEN, + UNKNOWN, + NONE + } + + public static Location getPlayerLocation() { + + if (!Utils.isOnSkyblock) { + return Location.UNKNOWN; + } + + List ple = MinecraftClient.getInstance().getNetworkHandler().getPlayerList().stream() + .sorted(PlayerListHudAccessor.getOrdering()).toList(); + + String cat2Name = StrMan.strAt(ple, 40); + + if (cat2Name.contains("Dungeon Stats")) { + return Location.DUNGEON; + } + + String areaDesciptor = StrMan.strAt(ple, 41).substring(6); + switch (areaDesciptor) { + case "Private Island": + if (ple.get(44).getDisplayName().getString().endsWith("Guest")) { + return Location.GUEST_ISLAND; + } else { + return Location.HOME_ISLAND; + } + case "Crimson Isle": + return Location.CRIMSON_ISLE; + case "Dungeon Hub": + return Location.DUNGEON_HUB; + case "The Farming Islands": + return Location.FARMING_ISLAND; + case "The Park": + return Location.PARK; + case "Dwarven Mines": + return Location.DWARVEN_MINES; + case "Crystal Hollows": + return Location.CRYSTAL_HOLLOWS; + case "The End": + return Location.END; + case "Gold Mine": + return Location.GOLD_MINE; + case "Deep Caverns": + return Location.DEEP_CAVERNS; + case "Hub": + return Location.HUB; + case "Spider's Den": + return Location.SPIDER_DEN; + case "Jerry's Workshop": + return Location.JERRY; + case "Garden": + return Location.GARDEN; + default: + return Location.NONE; + } + } +} -- cgit From af26bd68e8a7b3f2b4691640d81360c3c31ea003 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 12:22:17 +0200 Subject: Enable depth test to fix Z-layering issues The HUD is now drawn above the hotbar and chat. Blocks in the HUD aren't drawn behind the BG anymore. --- .../skyblocker/skyblock/tabhud/widget/Widget.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index 63a72563..55b2aa94 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -2,8 +2,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.ArrayList; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; +import com.mojang.blaze3d.systems.RenderSystem; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawableHelper; @@ -78,19 +79,25 @@ public abstract class Widget { public final void render(MatrixStack ms, boolean hasBG) { + // not sure if this is the way to go, but it fixes Z-layer issues + // like blocks being rendered behind the BG and the hotbar clipping into things + RenderSystem.enableDepthTest(); + ms.push(); + // move above other UI elements + ms.translate(0, 0, 200); if (hasBG) { DrawableHelper.fill(ms, x + 1, y, x + w - 1, y + h, COL_BG_BOX); DrawableHelper.fill(ms, x, y + 1, x + 1, y + h - 1, COL_BG_BOX); DrawableHelper.fill(ms, x + w - 1, y + 1, x + w, y + h - 1, COL_BG_BOX); } + // move above background (if exists) + ms.translate(0, 0, 100); int strHeightHalf = Widget.txtRend.fontHeight / 2; int strAreaWidth = Widget.txtRend.getWidth(title) + 4; txtRend.draw(ms, title, x + 8, y + 2, this.color); - DrawableHelper.fill(ms, x + 2, y + 1 + strHeightHalf, strAreaWidth, strHeightHalf, strAreaWidth); - this.drawHLine(ms, x + 2, y + 1 + strHeightHalf, 4); this.drawHLine(ms, x + 2 + strAreaWidth + 4, y + 1 + strHeightHalf, w - 4 - 4 - strAreaWidth); this.drawHLine(ms, x + 2, y + h - 2, w - 4); @@ -104,6 +111,8 @@ public abstract class Widget { c.render(ms, x + BORDER_SZE_W, yOffs); yOffs += c.getHeight() + 4; } + // pop manipulations above + ms.pop(); } private void drawHLine(MatrixStack ms, int xpos, int ypos, int width) { -- cgit From e04bf9b49857a6e94755e0d488ac232afe89afe6 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 12:23:04 +0200 Subject: Update README to reflect recent fixes --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 0b0a8e12..1b3e7163 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,8 @@ This will be merged into Skyblocker when ready. It's not at the moment, but you ### Known Issues * Relevant for players: * Crimson Isle is not yet supported. (Getting Combat 24 is just... oof) - * Minor visual bugs when using ImmediatelyFast * Relevant for devs: - * Scraping the entire player list every frame isn't ideal. (possible optimisation for later) + * Scraping the entire player list multiple times every frame isn't ideal. (possible optimisation for later) * The error catching is broken and fails to deactivate the mod on parse failure. (this won't be in the final release anyways) * Placement of the text and icons for rendering should probably be done with the `MatrixStack` arg and not with my hacky "external" solution (`ItemRenderer.render()` couldn't accept one pre 1.19.4) -- cgit From 4825f2044b4cc674f4147a73ebdae08874cf8563 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 13:15:15 +0200 Subject: Add option to scale HUD relatively to the vanilla GUI scale --- .../skyblocker/config/SkyblockerConfig.java | 3 ++ .../skyblocker/skyblock/tabhud/screens/Screen.java | 48 ++++++++++++++-------- .../skyblocker/skyblock/tabhud/widget/Widget.java | 5 +++ .../resources/assets/skyblocker/lang/de_de.json | 2 + .../resources/assets/skyblocker/lang/en_us.json | 2 + 5 files changed, 43 insertions(+), 17 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 6d43eff8..f612ae08 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -128,6 +128,9 @@ public class SkyblockerConfig implements ConfigData { public boolean hideEmptyTooltips = true; public boolean tabHudEnabled = true; + @ConfigEntry.BoundedDiscrete(min=10, max=200) + @ConfigEntry.Gui.Tooltip() + public int tabHudScale = 100; @ConfigEntry.Gui.Excluded public String apiKey; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index f60af79d..8edfbb56 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -3,13 +3,27 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; import java.util.ArrayList; import java.util.List; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.*; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.*; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.*; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GardenInfoScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GenericInfoScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.CrimsonIsleScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonHubScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.FarmingServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GardenScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GenericServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GuestServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HomeServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HubServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.MineServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.ParkServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.DungeonPlayerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.GuestPlayerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.HomePlayerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.PlayerListScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; - import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @@ -20,15 +34,16 @@ public class Screen { private int w, h; public Screen(int w, int h) { - this.w = w; - this.h = h; + float scale = SkyblockerConfig.get().general.tabHudScale / 100f; + this.w = (int) (w / scale); + this.h = (int) (h / scale); } public static Screen getCorrect(int w, int h, List ple, Text footer) { if (TabHud.genericTgl.isPressed()) { return Screen.correctGenericScrn(w, h, ple, footer); - // } else if (TabHud.mapTgl.isPressed()) { - // return Screen.correctMapScrn(w, h, ple, footer); + // } else if (TabHud.mapTgl.isPressed()) { + // return Screen.correctMapScrn(w, h, ple, footer); } else if (TabHud.playerTgl.isPressed()) { return Screen.correctPlayerScrn(w, h, ple, footer); } else { @@ -36,14 +51,14 @@ public class Screen { } } - - // private static Screen correctMapScrn(int w, int h, List list, Text footer) { - // // return switch (getScreenType(list)) { - // // case CRYSTAL_HOLLOWS -> null; - // // case DUNGEON -> null; - // // default -> new EmptyScreen(w, h, list, footer); - // // }; - // return new EmptyScreen(w, h, list, footer); + // private static Screen correctMapScrn(int w, int h, List + // list, Text footer) { + // // return switch (getScreenType(list)) { + // // case CRYSTAL_HOLLOWS -> null; + // // case DUNGEON -> null; + // // default -> new EmptyScreen(w, h, list, footer); + // // }; + // return new EmptyScreen(w, h, list, footer); // } private static Screen correctGenericScrn(int w, int h, List list, Text footer) { @@ -53,7 +68,6 @@ public class Screen { }; } - private static Screen correctPlayerScrn(int w, int h, List list, Text footer) { return switch (PlayerLocator.getPlayerLocation()) { case GUEST_ISLAND -> new GuestPlayerScreen(w, h, list, footer); // ok diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index 55b2aa94..f7f24db2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import com.mojang.blaze3d.systems.RenderSystem; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; @@ -83,6 +84,10 @@ public abstract class Widget { // like blocks being rendered behind the BG and the hotbar clipping into things RenderSystem.enableDepthTest(); ms.push(); + + float scale = SkyblockerConfig.get().general.tabHudScale / 100f; + ms.scale(scale, scale, 1); + // move above other UI elements ms.translate(0, 0, 200); if (hasBG) { diff --git a/src/main/resources/assets/skyblocker/lang/de_de.json b/src/main/resources/assets/skyblocker/lang/de_de.json index 15bbf13a..1b6b75ac 100644 --- a/src/main/resources/assets/skyblocker/lang/de_de.json +++ b/src/main/resources/assets/skyblocker/lang/de_de.json @@ -5,6 +5,8 @@ "text.autoconfig.skyblocker.category.general": "Allgemein", "text.autoconfig.skyblocker.option.general.bars": "Gesundheits-, Mana-, Verteidigungs- und XP-Balken", "text.autoconfig.skyblocker.option.general.tabHudEnabled": "Schöneres Tab-HUD aktivieren", + "text.autoconfig.skyblocker.option.general.tabHudScale": "Skalierungsfaktor für schöners Tab-HUD", + "text.autoconfig.skyblocker.option.general.tabHudScale.@Tooltip": "Wert in %, relativ zur Skalierung des Vanilla-GUIs", "text.autoconfig.skyblocker.option.general.bars.enableBars": "Balken aktivieren", "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "Leere Item-Tooltips in Menüs verstecken", diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 80e247a4..ae1b2719 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -24,6 +24,8 @@ "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Enable Quicknav", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "View backpack preview without holding Shift", "text.autoconfig.skyblocker.option.general.tabHudEnabled": "Enable fancy tab HUD", + "text.autoconfig.skyblocker.option.general.tabHudScale": "Scale factor of fancy tab HUD", + "text.autoconfig.skyblocker.option.general.tabHudScale.@Tooltip": "Value in %, relative to your vanilla GUI scale", "text.autoconfig.skyblocker.option.general.itemTooltip": "Item Tooltip", "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Enable NPC Price", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Enable Avg. BIN Price", -- cgit From e332b243dcea6ec567bd38db99ec3cfa35a57fe1 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 13:15:51 +0200 Subject: Minor foramtting and code style changes --- .../me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java | 4 ++-- .../skyblock/tabhud/widget/component/TableComponent.java | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java index e96e4ede..db329775 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java @@ -10,9 +10,9 @@ import net.minecraft.client.network.PlayerListEntry; @Mixin(PlayerListHud.class) public interface PlayerListHudAccessor { - + @Accessor("ENTRY_ORDERING") public static Comparator getOrdering() { - throw new AssertionError(); + throw new AssertionError(); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java index 66c1b73b..2d367b11 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java @@ -20,18 +20,18 @@ public class TableComponent extends Component { } public void addToCell(int x, int y, Component c) { - comps[x][y] = c; + this.comps[x][y] = c; // are tables still too wide? - cellW = Math.max(cellW, c.width + PAD_S); + this.cellW = Math.max(this.cellW, c.width + PAD_S); // assume all rows are equally high so overwriting doesn't matter // if this wasn't the case, drawing would need more math // not doing any of that if it's not needed - cellH = c.height; + this.cellH = c.height; - this.width = cellW * tw; - this.height = (cellH + PAD_S) * th - PAD_S; + this.width = this.cellW * this.tw; + this.height = (this.cellH + PAD_S) * this.th - PAD_S; } @@ -45,7 +45,7 @@ public class TableComponent extends Component { } if (x != tw - 1) { DrawableHelper.fill(ms, xpos + ((x + 1) * (cellW + PAD_S)) - 1, ypos + 1, - xpos + ((x + 1) * (cellW + PAD_S)), ypos + this.height - 1, color); + xpos + ((x + 1) * (cellW + PAD_S)), ypos + this.height - 1, this.color); } } } -- cgit From 50991fa867d3816475b9011df571b545842a95f2 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 13:16:48 +0200 Subject: Update README with recent changes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b3e7163..0239a89a 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ This will be merged into Skyblocker when ready. It's not at the moment, but you ### Known Issues * Relevant for players: * Crimson Isle is not yet supported. (Getting Combat 24 is just... oof) + * Some names clip outside of the player list screen sometimes * Relevant for devs: * Scraping the entire player list multiple times every frame isn't ideal. (possible optimisation for later) * The error catching is broken and fails to deactivate the mod on parse failure. (this won't be in the final release anyways) - * Placement of the text and icons for rendering should probably be done with the `MatrixStack` arg and not with my hacky "external" solution (`ItemRenderer.render()` couldn't accept one pre 1.19.4) Apart from that, it's working! -- cgit From 444b71d0fd4a32abb950eea33dd5fe16f34c1bcc Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 23:29:22 +0200 Subject: Disable depth test again after rendering --- src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index f7f24db2..b7e8f1e9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -118,6 +118,7 @@ public abstract class Widget { } // pop manipulations above ms.pop(); + RenderSystem.disableDepthTest(); } private void drawHLine(MatrixStack ms, int xpos, int ypos, int width) { -- cgit From c4af58e95fff7515de9f49f2a84817401dc274c0 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 6 May 2023 23:29:46 +0200 Subject: Fix various faulty regexes --- .../skyblocker/skyblock/tabhud/widget/FireSaleWidget.java | 15 ++++++++------- .../skyblock/tabhud/widget/ReputationWidget.java | 2 +- .../skyblocker/skyblock/tabhud/widget/SkillsWidget.java | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java index 2f982c61..ad82417f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java @@ -16,7 +16,6 @@ import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; import net.minecraft.util.Formatting; -// TODO: untested with active fire sales // this widget shows info about fire sales when in the hub // or not, if there isn't one going on @@ -29,14 +28,15 @@ public class FireSaleWidget extends Widget { // group 1: item name // group 2: # items bought // group 1: # items available in total (1 digit + "k") - private static final Pattern FIRE_PATTERN = Pattern.compile(" (.*): (\\d*)/(\\d)k"); + private static final Pattern FIRE_PATTERN = Pattern.compile(" (.*): (\\d*)/([0-9.]*)k"); public FireSaleWidget(List list) { super(TITLE, Formatting.DARK_AQUA.getColorValue()); boolean found = false; if (StrMan.strAt(list, 46).contains("Starts In")) { - IcoTextComponent start = new IcoTextComponent(Ico.CLOCK, StrMan.stdEntry(list, 46, "Starts in", Formatting.DARK_AQUA)); + IcoTextComponent start = new IcoTextComponent(Ico.CLOCK, + StrMan.stdEntry(list, 46, "Starts in", Formatting.DARK_AQUA)); this.addComponent(start); this.pack(); return; @@ -44,13 +44,14 @@ public class FireSaleWidget extends Widget { for (int i = 46;; i++) { Matcher m = StrMan.regexAt(list, i, FIRE_PATTERN); - if (m == null ||!m.matches()) { + if (m == null || !m.matches()) { break; } found = true; + float amt = Float.parseFloat(m.group(3)) * 1000; Text a = Text.literal(m.group(1)); - Text b = Text.literal(m.group(2) + "/" + m.group(3) + "000"); - float pcnt = (1 - (Float.parseFloat(m.group(2)) / (Float.parseFloat(m.group(3)) * 1000)))*100f; + Text b = Text.literal(String.format("%s/%.0f", m.group(2), amt)); + float pcnt = (Float.parseFloat(m.group(2)) / (amt)) * 100f; ProgressComponent pc = new ProgressComponent(Ico.GOLD, a, b, pcnt, pcntToCol(pcnt)); this.addComponent(pc); } @@ -62,7 +63,7 @@ public class FireSaleWidget extends Widget { } private int pcntToCol(float pcnt) { - return MathHelper.hsvToRgb(pcnt / 300f, 0.9f, 0.9f); + return MathHelper.hsvToRgb( pcnt / 300f, 0.9f, 0.9f); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java index 121e41e8..e234763b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java @@ -20,7 +20,7 @@ public class ReputationWidget extends Widget { private static final MutableText TITLE = Text.literal("Faction Status").formatted(Formatting.AQUA, Formatting.BOLD); - private static final Pattern PROGRESS_PATTERN = Pattern.compile(" \\|+ \\(([0-9.]*%)\\)"); + private static final Pattern PROGRESS_PATTERN = Pattern.compile(" \\|+ \\(([0-9.]*)%\\)"); private static final Pattern STATE_PATTERN = Pattern.compile("(\\S*) *(\\S*)"); public ReputationWidget(List list) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java index c2eedfa4..ca5bca67 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java @@ -27,7 +27,7 @@ public class SkillsWidget extends Widget { // match the skill entry // group 1: skill name and level // group 2: progress to next level (without "%") - private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): ([0-9.]*)%?"); + private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): ([0-9.MAX]*)%?"); public SkillsWidget(List list) { super(TITLE, Formatting.YELLOW.getColorValue()); -- cgit From d187facbdd47eca0afa5d91b9ed559b2c6b9863e Mon Sep 17 00:00:00 2001 From: lantice3720 <65650884+lantice3720@users.noreply.github.com> Date: Sun, 7 May 2023 15:03:23 +0900 Subject: REI Integration. Needed to add recipe identifier. Small change in itemlist. --- build.gradle | 7 +- gradle.properties | 2 + .../skyblocker/skyblock/itemlist/ItemRegistry.java | 71 ++++++------------ .../skyblock/itemlist/SearchResultsWidget.java | 6 +- .../skyblock/itemlist/SkyblockCraftingRecipe.java | 63 ++++++++++++++++ .../skyblocker/skyblock/rei/SkyblockCategory.java | 43 +++++++++++ .../skyblock/rei/SkyblockCraftingDisplay.java | 18 +++++ .../rei/SkyblockCraftingDisplayGenerator.java | 52 +++++++++++++ .../skyblock/rei/SkyblockFocusedStackProvider.java | 30 ++++++++ .../skyblock/rei/SkyblockerREIClientPlugin.java | 87 ++++++++++++++++++++++ src/main/resources/fabric.mod.json | 3 + 11 files changed, 330 insertions(+), 52 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockFocusedStackProvider.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java diff --git a/build.gradle b/build.gradle index dc1b09be..c0ba2b6a 100644 --- a/build.gradle +++ b/build.gradle @@ -50,6 +50,10 @@ dependencies { // Mod Menu modImplementation "com.terraformersmc:modmenu:${project.mod_menu_version}" + // REI + modImplementation "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}" + modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}" + // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" @@ -113,7 +117,8 @@ modrinth { versionType = "release" dependencies = [ // Yet another array. Create a new `ModDependency` or `VersionDependency` with two strings - the ID and the scope new ModDependency("P7dR8mSH", "required"), // Creates a new required dependency on Fabric API - new ModDependency("mOgUt4GM", "optional") // modmenu + new ModDependency("mOgUt4GM", "optional"), // modmenu + new ModDependency("nfn13YXA", "optional") // REI ] changelog = System.getenv('CHANGELOG') } diff --git a/gradle.properties b/gradle.properties index 139c0e46..47fd8722 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,6 +15,8 @@ fabric_api_version=0.76.0+1.19.4 clothconfig_version=10.0.96 ## Mod Menu (https://www.curseforge.com/minecraft/mc-mods/modmenu/files) mod_menu_version=6.1.0-rc.4 +## REI (https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items/files) +rei_version=11.0.597 # Mod Properties mod_version = 1.8.3-beta diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index 008ff191..d0f92731 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -7,8 +7,6 @@ import net.fabricmc.loader.api.FabricLoader; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import org.eclipse.jgit.api.Git; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.File; import java.nio.file.Files; @@ -23,7 +21,7 @@ public class ItemRegistry { protected static final List items = new ArrayList<>(); protected static final Map itemsMap = new HashMap<>(); - protected static final List recipes = new ArrayList<>(); + protected static final List recipes = new ArrayList<>(); // TODO: make async public static void init() { @@ -77,13 +75,13 @@ public class ItemRegistry { } for (JsonObject jsonObj : jsonObjs) if (jsonObj.has("recipe")) { - recipes.add(Recipe.fromJsonObject(jsonObj)); + recipes.add(SkyblockCraftingRecipe.fromJsonObject(jsonObj)); } items.sort((lhs, rhs) -> { - String lhsInternalName = lhs.getNbt().getCompound("ExtraAttributes").getString("id"); + String lhsInternalName = getInternalName(lhs); String lhsFamilyName = lhsInternalName.replaceAll(".\\d+$", ""); - String rhsInternalName = rhs.getNbt().getCompound("ExtraAttributes").getString("id"); + String rhsInternalName = getInternalName(rhs); String rhsFamilyName = rhsInternalName.replaceAll(".\\d+$", ""); if (lhsFamilyName.equals(rhsFamilyName)) { if (lhsInternalName.length() != rhsInternalName.length()) @@ -95,56 +93,33 @@ public class ItemRegistry { }); } - public static List getRecipes(String internalName) { - List result = new ArrayList<>(); - for (Recipe recipe : recipes) - if (recipe.result.getNbt().getCompound("ExtraAttributes").getString("id").equals(internalName)) + public static List getRecipes(String internalName) { + List result = new ArrayList<>(); + for (SkyblockCraftingRecipe recipe : recipes) + if (getInternalName(recipe.result).equals(internalName)) result.add(recipe); - for (Recipe recipe : recipes) + for (SkyblockCraftingRecipe recipe : recipes) for (ItemStack ingredient : recipe.grid) - if (!ingredient.getItem().equals(Items.AIR) && ingredient.getNbt().getCompound("ExtraAttributes").getString("id").equals(internalName)) { + if (!ingredient.getItem().equals(Items.AIR) && getInternalName(ingredient).equals(internalName)) { result.add(recipe); break; } return result; } -} -class Recipe { - private static final Logger LOGGER = LoggerFactory.getLogger(Recipe.class); - String text = ""; - final List grid = new ArrayList<>(9); - ItemStack result; - - public static Recipe fromJsonObject(JsonObject jsonObj) { - Recipe recipe = new Recipe(); - if (jsonObj.has("crafttext")) recipe.text = jsonObj.get("crafttext").getAsString(); - recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("A1").getAsString())); - recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("A2").getAsString())); - recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("A3").getAsString())); - recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("B1").getAsString())); - recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("B2").getAsString())); - recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("B3").getAsString())); - recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("C1").getAsString())); - recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("C2").getAsString())); - recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("C3").getAsString())); - recipe.result = ItemRegistry.itemsMap.get(jsonObj.get("internalname").getAsString()); - return recipe; + public static List getRecipes() { + return recipes; } - private static ItemStack getItemStack(String internalName) { - try { - if (internalName.length() > 0) { - int count = Integer.parseInt(internalName.split(":")[1]); - internalName = internalName.split(":")[0]; - ItemStack itemStack = ItemRegistry.itemsMap.get(internalName).copy(); - itemStack.setCount(count); - return itemStack; - } - } - catch(Exception e) { - LOGGER.error("[Skyblocker-Recipe] "+internalName,e); - } - return Items.AIR.getDefaultStack(); + /** + * Get Internal name of an ItemStack + * + * @param itemStack ItemStack to get internal name from + * @return internal name of the given ItemStack + */ + public static String getInternalName(ItemStack itemStack) { + if (itemStack.getNbt() == null) return ""; + return itemStack.getNbt().getCompound("ExtraAttributes").getString("id"); } -} \ No newline at end of file +} + diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java index 64ba237d..63ccbd52 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java @@ -22,7 +22,7 @@ public class SearchResultsWidget implements Drawable { private final int parentY; private final List searchResults = new ArrayList<>(); - private List recipeResults = new ArrayList<>(); + private List recipeResults = new ArrayList<>(); private String searchText = null; private final List resultButtons = new ArrayList<>(); private final ToggleButtonWidget nextPageButton; @@ -79,7 +79,7 @@ public class SearchResultsWidget implements Drawable { private void updateButtons() { if (this.displayRecipes) { - Recipe recipe = this.recipeResults.get(this.currentPage); + SkyblockCraftingRecipe recipe = this.recipeResults.get(this.currentPage); for (ResultButtonWidget button : resultButtons) button.clearItemStack(); resultButtons.get(5).setItemStack(recipe.grid.get(0)); @@ -142,7 +142,7 @@ public class SearchResultsWidget implements Drawable { continue; } String internalName = button.itemStack.getNbt().getCompound("ExtraAttributes").getString("id"); - List recipes = ItemRegistry.getRecipes(internalName); + List recipes = ItemRegistry.getRecipes(internalName); if (!recipes.isEmpty()) { this.recipeResults = recipes; this.currentPage = 0; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java new file mode 100644 index 00000000..fc3d6c3d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java @@ -0,0 +1,63 @@ +package me.xmrvizzy.skyblocker.skyblock.itemlist; + +import com.google.gson.JsonObject; +import net.minecraft.inventory.CraftingInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.recipe.CraftingRecipe; +import net.minecraft.recipe.RecipeSerializer; +import net.minecraft.recipe.book.CraftingRecipeCategory; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.util.Identifier; +import net.minecraft.world.World; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +public class SkyblockCraftingRecipe { + private static final Logger LOGGER = LoggerFactory.getLogger(SkyblockCraftingRecipe.class); + String text = ""; + final List grid = new ArrayList<>(9); + ItemStack result; + + public static SkyblockCraftingRecipe fromJsonObject(JsonObject jsonObj) { + SkyblockCraftingRecipe recipe = new SkyblockCraftingRecipe(); + if (jsonObj.has("crafttext")) recipe.text = jsonObj.get("crafttext").getAsString(); + recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("A1").getAsString())); + recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("A2").getAsString())); + recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("A3").getAsString())); + recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("B1").getAsString())); + recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("B2").getAsString())); + recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("B3").getAsString())); + recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("C1").getAsString())); + recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("C2").getAsString())); + recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("C3").getAsString())); + recipe.result = ItemRegistry.itemsMap.get(jsonObj.get("internalname").getAsString()); + return recipe; + } + + private static ItemStack getItemStack(String internalName) { + try { + if (internalName.length() > 0) { + int count = internalName.split(":").length == 1 ? 1 : Integer.parseInt(internalName.split(":")[1]); + internalName = internalName.split(":")[0]; + ItemStack itemStack = ItemRegistry.itemsMap.get(internalName).copy(); + itemStack.setCount(count); + return itemStack; + } + } catch (Exception e) { + LOGGER.error("[Skyblocker-Recipe] " + internalName, e); + } + return Items.AIR.getDefaultStack(); + } + + public List getGrid() { + return grid; + } + + public ItemStack getResult() { + return result; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java new file mode 100644 index 00000000..cafdf11b --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java @@ -0,0 +1,43 @@ +package me.xmrvizzy.skyblocker.skyblock.rei; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import me.shedaniel.rei.api.client.gui.Renderer; +import me.shedaniel.rei.api.client.registry.display.DisplayCategory; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.util.EntryStacks; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.StringNbtReader; +import net.minecraft.text.Text; + +import java.util.Locale; + +/** + * Skyblock recipe category class for REI + */ +public class SkyblockCategory implements DisplayCategory { + @Override + public CategoryIdentifier getCategoryIdentifier() { + return SkyblockerREIClientPlugin.SKYBLOCK; + } + + @Override + public Text getTitle() { + // TODO use own translation key + return Text.translatable("key.categories.skyblocker"); + } + + @Override + public Renderer getIcon() { + // TODO separate icon from quickNav + SkyblockerConfig.ItemData iconItem = SkyblockerConfig.get().quickNav.button7.item; + String nbtString = "{id:\"minecraft:" + iconItem.itemName.toLowerCase(Locale.ROOT) + "\",Count:1"; + if (iconItem.nbt.length() > 2) nbtString += "," + iconItem.nbt; + nbtString += "}"; + try { + return EntryStacks.of(ItemStack.fromNbt(StringNbtReader.parse(nbtString))); + } catch (CommandSyntaxException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java new file mode 100644 index 00000000..aee78990 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java @@ -0,0 +1,18 @@ +package me.xmrvizzy.skyblocker.skyblock.rei; + + +import me.shedaniel.rei.api.common.entry.EntryIngredient; +import me.shedaniel.rei.plugin.common.displays.crafting.DefaultCustomDisplay; +import net.minecraft.recipe.Recipe; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +/** + * Skyblock Crafting Recipe display class for REI + */ +public class SkyblockCraftingDisplay extends DefaultCustomDisplay { + public SkyblockCraftingDisplay(@Nullable Recipe possibleRecipe, List input, List output) { + super(possibleRecipe, input, output); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java new file mode 100644 index 00000000..73ace337 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java @@ -0,0 +1,52 @@ +package me.xmrvizzy.skyblocker.skyblock.rei; + +import me.shedaniel.rei.api.client.registry.display.DynamicDisplayGenerator; +import me.shedaniel.rei.api.client.view.ViewSearchBuilder; +import me.shedaniel.rei.api.common.entry.EntryIngredient; +import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.util.EntryStacks; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import me.xmrvizzy.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe; +import net.minecraft.item.ItemStack; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator { + + public SkyblockCraftingDisplayGenerator() { + for (SkyblockCraftingRecipe recipe : ItemRegistry.getRecipes()) { + List inputs = new ArrayList<>(); + List outputs = new ArrayList<>(); + + ArrayList> inputEntryStacks = new ArrayList<>(); + recipe.getGrid().forEach((item) -> inputEntryStacks.add(EntryStacks.of(item))); + + for (EntryStack entryStack : inputEntryStacks) { + inputs.add(EntryIngredient.of(entryStack)); + } +// inputs.add(EntryIngredient.of(inputEntryStacks.get(0))); + outputs.add(EntryIngredient.of(EntryStacks.of(recipe.getResult()))); +// displayRegistry.add(new SkyblockCraftingDisplay(null, inputs, outputs)); + } + } + + @Override + public Optional> getRecipeFor(EntryStack entry) { + if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); + EntryStack itemStackEntryStack = EntryStacks.of((ItemStack) entry.getValue()); + ItemRegistry.getRecipes().stream().filter(recipe -> ItemRegistry.getInternalName(recipe.getResult()).equals(ItemRegistry.getInternalName(itemStackEntryStack.getValue()))); + return null; + } + + @Override + public Optional> getUsageFor(EntryStack entry) { + return null; + } + + @Override + public Optional> generate(ViewSearchBuilder builder) { + return null; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockFocusedStackProvider.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockFocusedStackProvider.java new file mode 100644 index 00000000..a9941ace --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockFocusedStackProvider.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.skyblock.rei; + +import dev.architectury.event.CompoundEventResult; +import me.shedaniel.math.Point; +import me.shedaniel.rei.api.client.registry.screen.FocusedStackProvider; +import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.util.EntryStacks; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; + +public class SkyblockFocusedStackProvider implements FocusedStackProvider { + @Override + public CompoundEventResult> provide(Screen screen, Point mouse) { + + return CompoundEventResult.pass(); +// if (screen instanceof HandledScreen handledScreen) { +// System.out.println(handledScreen.getTitle().getString() + ", item: " + handledScreen.getScreenHandler().getCursorStack().getItem().getName().getString()); +// return CompoundEventResult.interruptFalse(EntryStacks.of(handledScreen.getScreenHandler().getCursorStack())); +// } else { +// System.out.println(screen.getTitle().getString()); +// screen. +// } +// return CompoundEventResult.pass(); + } + + @Override + public double getPriority() { + return 100d; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java new file mode 100644 index 00000000..907bacad --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java @@ -0,0 +1,87 @@ +package me.xmrvizzy.skyblocker.skyblock.rei; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import me.shedaniel.rei.api.client.plugins.REIClientPlugin; +import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; +import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; +import me.shedaniel.rei.api.client.registry.display.DynamicDisplayGenerator; +import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; +import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; +import me.shedaniel.rei.api.client.view.ViewSearchBuilder; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.entry.EntryIngredient; +import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.util.EntryStacks; +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import me.xmrvizzy.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.StringNbtReader; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +/** + * REI integration + */ +public class SkyblockerREIClientPlugin implements REIClientPlugin { + public static final CategoryIdentifier SKYBLOCK = CategoryIdentifier.of(SkyblockerMod.NAMESPACE, "skyblock"); + + @Override + public void registerCategories(CategoryRegistry categoryRegistry) { + // TODO separate icon from quickNav + SkyblockerConfig.ItemData iconItem = SkyblockerConfig.get().quickNav.button7.item; + String nbtString = "{id:\"minecraft:" + iconItem.itemName.toLowerCase(Locale.ROOT) + "\",Count:1"; + if (iconItem.nbt.length() > 2) nbtString += "," + iconItem.nbt; + nbtString += "}"; + + try { + categoryRegistry.addWorkstations(SKYBLOCK, EntryStacks.of(ItemStack.fromNbt(StringNbtReader.parse(nbtString)))); + } catch (CommandSyntaxException e) { + throw new RuntimeException(e); + } + categoryRegistry.add(new SkyblockCategory()); + } + + @Override + public void registerDisplays(DisplayRegistry displayRegistry) { + + ViewSearchBuilder builder = ViewSearchBuilder.builder(); + builder.addCategory(SKYBLOCK); + + System.out.println(displayRegistry.getCategoryDisplayGenerators(SKYBLOCK).isEmpty()); + + + displayRegistry.registerDisplayGenerator(SKYBLOCK, new SkyblockCraftingDisplayGenerator()); + + for (SkyblockCraftingRecipe recipe : ItemRegistry.getRecipes()) { + List inputs = new ArrayList<>(); + List outputs = new ArrayList<>(); + + ArrayList> inputEntryStacks = new ArrayList<>(); + recipe.getGrid().forEach((item) -> inputEntryStacks.add(EntryStacks.of(item))); + + for (EntryStack entryStack : inputEntryStacks) { + inputs.add(EntryIngredient.of(entryStack)); + } +// inputs.add(EntryIngredient.of(inputEntryStacks.get(0))); + outputs.add(EntryIngredient.of(EntryStacks.of(recipe.getResult()))); + displayRegistry.add(new SkyblockCraftingDisplay(null, inputs, outputs)); + } + + } + + @Override + public void registerEntries(EntryRegistry entryRegistry) { + ArrayList> entries = new ArrayList<>(); + ItemRegistry.getRecipes().forEach(recipe -> entries.add(EntryStacks.of(recipe.getResult()))); + entryRegistry.addEntries(entries); + } + + @Override + public void registerScreens(ScreenRegistry screenRegistry) { + screenRegistry.registerFocusedStack(new SkyblockFocusedStackProvider()); + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index dd94270d..d1bca1b1 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -20,6 +20,9 @@ ], "modmenu": [ "me.xmrvizzy.skyblocker.config.modmenu.ModMenuEntry" + ], + "rei_client": [ + "me.xmrvizzy.skyblocker.skyblock.rei.SkyblockerREIClientPlugin" ] }, "mixins": [ -- cgit From 4b20aca66fd3470a555871b74445dfa452b93896 Mon Sep 17 00:00:00 2001 From: lantice3720 <65650884+lantice3720@users.noreply.github.com> Date: Sun, 7 May 2023 15:38:12 +0900 Subject: Fixed item search error. Finished basic integration. --- .../skyblock/itemlist/SkyblockCraftingRecipe.java | 7 --- .../rei/SkyblockCraftingDisplayGenerator.java | 60 +++++++++++++--------- .../skyblock/rei/SkyblockFocusedStackProvider.java | 30 ----------- .../skyblock/rei/SkyblockerREIClientPlugin.java | 28 ---------- 4 files changed, 37 insertions(+), 88 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockFocusedStackProvider.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java index fc3d6c3d..56e5c041 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java @@ -1,15 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; import com.google.gson.JsonObject; -import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.recipe.CraftingRecipe; -import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.recipe.book.CraftingRecipeCategory; -import net.minecraft.registry.DynamicRegistryManager; -import net.minecraft.util.Identifier; -import net.minecraft.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java index 73ace337..5f4a1824 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java @@ -1,7 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.rei; import me.shedaniel.rei.api.client.registry.display.DynamicDisplayGenerator; -import me.shedaniel.rei.api.client.view.ViewSearchBuilder; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.EntryStacks; @@ -15,8 +14,40 @@ import java.util.Optional; public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator { - public SkyblockCraftingDisplayGenerator() { - for (SkyblockCraftingRecipe recipe : ItemRegistry.getRecipes()) { + @Override + public Optional> getRecipeFor(EntryStack entry) { + if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); + EntryStack itemStackEntryStack = EntryStacks.of((ItemStack) entry.getValue()); + List filteredRecipes = ItemRegistry.getRecipes() + .stream() + .filter(recipe -> ItemRegistry.getInternalName(recipe.getResult()).equals(ItemRegistry.getInternalName(itemStackEntryStack.getValue()))) + .toList(); + + return Optional.of(generateDisplays(filteredRecipes)); + } + + @Override + public Optional> getUsageFor(EntryStack entry) { + if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); + EntryStack itemStackEntryStack = EntryStacks.of((ItemStack) entry.getValue()); + List filteredRecipes = ItemRegistry.getRecipes() + .stream() + .filter(recipe -> { + for (ItemStack item : recipe.getGrid()) { + if(ItemRegistry.getInternalName(item).equals(ItemRegistry.getInternalName(itemStackEntryStack.getValue()))) return true; + } + return false; + }) + .toList(); + return Optional.of(generateDisplays(filteredRecipes)); + } + + /** + * Generate Displays from a list of recipes + */ + private List generateDisplays(List recipes) { + List displays = new ArrayList<>(); + for (SkyblockCraftingRecipe recipe : recipes) { List inputs = new ArrayList<>(); List outputs = new ArrayList<>(); @@ -26,27 +57,10 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator for (EntryStack entryStack : inputEntryStacks) { inputs.add(EntryIngredient.of(entryStack)); } -// inputs.add(EntryIngredient.of(inputEntryStacks.get(0))); outputs.add(EntryIngredient.of(EntryStacks.of(recipe.getResult()))); -// displayRegistry.add(new SkyblockCraftingDisplay(null, inputs, outputs)); - } - } - - @Override - public Optional> getRecipeFor(EntryStack entry) { - if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); - EntryStack itemStackEntryStack = EntryStacks.of((ItemStack) entry.getValue()); - ItemRegistry.getRecipes().stream().filter(recipe -> ItemRegistry.getInternalName(recipe.getResult()).equals(ItemRegistry.getInternalName(itemStackEntryStack.getValue()))); - return null; - } - @Override - public Optional> getUsageFor(EntryStack entry) { - return null; - } - - @Override - public Optional> generate(ViewSearchBuilder builder) { - return null; + displays.add(new SkyblockCraftingDisplay(null, inputs, outputs)); + } + return displays; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockFocusedStackProvider.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockFocusedStackProvider.java deleted file mode 100644 index a9941ace..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockFocusedStackProvider.java +++ /dev/null @@ -1,30 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.rei; - -import dev.architectury.event.CompoundEventResult; -import me.shedaniel.math.Point; -import me.shedaniel.rei.api.client.registry.screen.FocusedStackProvider; -import me.shedaniel.rei.api.common.entry.EntryStack; -import me.shedaniel.rei.api.common.util.EntryStacks; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; - -public class SkyblockFocusedStackProvider implements FocusedStackProvider { - @Override - public CompoundEventResult> provide(Screen screen, Point mouse) { - - return CompoundEventResult.pass(); -// if (screen instanceof HandledScreen handledScreen) { -// System.out.println(handledScreen.getTitle().getString() + ", item: " + handledScreen.getScreenHandler().getCursorStack().getItem().getName().getString()); -// return CompoundEventResult.interruptFalse(EntryStacks.of(handledScreen.getScreenHandler().getCursorStack())); -// } else { -// System.out.println(screen.getTitle().getString()); -// screen. -// } -// return CompoundEventResult.pass(); - } - - @Override - public double getPriority() { - return 100d; - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java index 907bacad..3cf4e9f4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java @@ -4,23 +4,18 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; -import me.shedaniel.rei.api.client.registry.display.DynamicDisplayGenerator; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; -import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; import me.shedaniel.rei.api.client.view.ViewSearchBuilder; import me.shedaniel.rei.api.common.category.CategoryIdentifier; -import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.EntryStacks; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; -import me.xmrvizzy.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe; import net.minecraft.item.ItemStack; import net.minecraft.nbt.StringNbtReader; import java.util.ArrayList; -import java.util.List; import java.util.Locale; /** @@ -51,26 +46,8 @@ public class SkyblockerREIClientPlugin implements REIClientPlugin { ViewSearchBuilder builder = ViewSearchBuilder.builder(); builder.addCategory(SKYBLOCK); - System.out.println(displayRegistry.getCategoryDisplayGenerators(SKYBLOCK).isEmpty()); - - displayRegistry.registerDisplayGenerator(SKYBLOCK, new SkyblockCraftingDisplayGenerator()); - for (SkyblockCraftingRecipe recipe : ItemRegistry.getRecipes()) { - List inputs = new ArrayList<>(); - List outputs = new ArrayList<>(); - - ArrayList> inputEntryStacks = new ArrayList<>(); - recipe.getGrid().forEach((item) -> inputEntryStacks.add(EntryStacks.of(item))); - - for (EntryStack entryStack : inputEntryStacks) { - inputs.add(EntryIngredient.of(entryStack)); - } -// inputs.add(EntryIngredient.of(inputEntryStacks.get(0))); - outputs.add(EntryIngredient.of(EntryStacks.of(recipe.getResult()))); - displayRegistry.add(new SkyblockCraftingDisplay(null, inputs, outputs)); - } - } @Override @@ -79,9 +56,4 @@ public class SkyblockerREIClientPlugin implements REIClientPlugin { ItemRegistry.getRecipes().forEach(recipe -> entries.add(EntryStacks.of(recipe.getResult()))); entryRegistry.addEntries(entries); } - - @Override - public void registerScreens(ScreenRegistry screenRegistry) { - screenRegistry.registerFocusedStack(new SkyblockFocusedStackProvider()); - } } -- cgit From 65904ad25164e0d6ddb6904a593e4799e868a6ef Mon Sep 17 00:00:00 2001 From: lantice3720 <65650884+lantice3720@users.noreply.github.com> Date: Sun, 7 May 2023 16:01:34 +0900 Subject: Changed Workstaton icon. --- .../skyblocker/skyblock/rei/SkyblockCategory.java | 1 - .../skyblock/rei/SkyblockerREIClientPlugin.java | 17 ++--------------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java index cafdf11b..737adfa8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java @@ -23,7 +23,6 @@ public class SkyblockCategory implements DisplayCategory 2) nbtString += "," + iconItem.nbt; - nbtString += "}"; - - try { - categoryRegistry.addWorkstations(SKYBLOCK, EntryStacks.of(ItemStack.fromNbt(StringNbtReader.parse(nbtString)))); - } catch (CommandSyntaxException e) { - throw new RuntimeException(e); - } + categoryRegistry.addWorkstations(SKYBLOCK, EntryStacks.of(Items.CRAFTING_TABLE)); categoryRegistry.add(new SkyblockCategory()); } -- cgit From 1f98f045e18fbb99471de36b488762a315e00cf3 Mon Sep 17 00:00:00 2001 From: lantice3720 <65650884+lantice3720@users.noreply.github.com> Date: Sun, 7 May 2023 16:57:02 +0900 Subject: Fixed usage find mechanism error --- .../skyblock/rei/SkyblockCraftingDisplayGenerator.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java index 5f4a1824..7d10f202 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java @@ -17,10 +17,10 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator @Override public Optional> getRecipeFor(EntryStack entry) { if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); - EntryStack itemStackEntryStack = EntryStacks.of((ItemStack) entry.getValue()); + EntryStack inputItem = EntryStacks.of((ItemStack) entry.getValue()); List filteredRecipes = ItemRegistry.getRecipes() .stream() - .filter(recipe -> ItemRegistry.getInternalName(recipe.getResult()).equals(ItemRegistry.getInternalName(itemStackEntryStack.getValue()))) + .filter(recipe -> ItemRegistry.getInternalName(recipe.getResult()).equals(ItemRegistry.getInternalName(inputItem.getValue()))) .toList(); return Optional.of(generateDisplays(filteredRecipes)); @@ -29,12 +29,13 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator @Override public Optional> getUsageFor(EntryStack entry) { if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); - EntryStack itemStackEntryStack = EntryStacks.of((ItemStack) entry.getValue()); + EntryStack inputItem = EntryStacks.of((ItemStack) entry.getValue()); List filteredRecipes = ItemRegistry.getRecipes() .stream() .filter(recipe -> { for (ItemStack item : recipe.getGrid()) { - if(ItemRegistry.getInternalName(item).equals(ItemRegistry.getInternalName(itemStackEntryStack.getValue()))) return true; + if(!ItemRegistry.getInternalName(item).equals("") && ItemRegistry.getInternalName(item).equals(ItemRegistry.getInternalName(inputItem.getValue()))) + return true; } return false; }) -- cgit From 3e9677c0b944f306e9d59b7c47e492e883d1d551 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 7 May 2023 11:11:45 +0200 Subject: Fix another regex... --- .../skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java index ce7b13bd..978447fe 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java @@ -29,8 +29,8 @@ public class DungeonPlayerWidget extends Widget { // group 3: level (or nothing, if pre dungeon start) // as a side effect, this regex keeps the iron man icon in the name // not sure if that should be - private static final Pattern PLAYER_PATTERN = Pattern.compile("\\[\\d*\\] (.*) \\((\\S*) ?([XVI]*)\\)"); - + private static final Pattern PLAYER_PATTERN = Pattern.compile("\\[\\d*\\] (.*) \\((\\S*) ?([LXVI]*)\\)"); + private static final HashMap ICOS = new HashMap<>(); static { ICOS.put("Tank", Ico.CHESTPLATE); @@ -54,7 +54,7 @@ public class DungeonPlayerWidget extends Widget { Text name = Text.literal("Name: ").append(Text.literal(m.group(1)).formatted(Formatting.YELLOW)); this.addComponent(new IcoTextComponent(Ico.PLAYER, name)); - + String cl = m.group(2); Formatting clf = Formatting.GRAY; ItemStack cli = Ico.BARRIER; -- cgit From 8716da49090362275e94d159b0dc7be4781f6451 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 7 May 2023 11:32:45 +0200 Subject: Put fancy tab HUD config into its own section --- .../me/xmrvizzy/skyblocker/config/SkyblockerConfig.java | 15 +++++++++++---- .../me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java | 2 +- .../skyblocker/skyblock/tabhud/screens/Screen.java | 2 +- .../skyblocker/skyblock/tabhud/widget/Widget.java | 2 +- src/main/resources/assets/skyblocker/lang/de_de.json | 7 ++++--- src/main/resources/assets/skyblocker/lang/en_us.json | 7 ++++--- 6 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index f612ae08..e89c32bd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -127,10 +127,9 @@ public class SkyblockerConfig implements ConfigData { public boolean backpackPreviewWithoutShift = false; public boolean hideEmptyTooltips = true; - public boolean tabHudEnabled = true; - @ConfigEntry.BoundedDiscrete(min=10, max=200) - @ConfigEntry.Gui.Tooltip() - public int tabHudScale = 100; + @ConfigEntry.Category("tabHud") + @ConfigEntry.Gui.CollapsibleObject() + public TabHudConf tabHud = new TabHudConf(); @ConfigEntry.Gui.Excluded public String apiKey; @@ -155,6 +154,14 @@ public class SkyblockerConfig implements ConfigData { public List lockedSlots = new ArrayList<>(); } + public static class TabHudConf { + public boolean tabHudEnabled = true; + + @ConfigEntry.BoundedDiscrete(min=10, max=200) + @ConfigEntry.Gui.Tooltip() + public int tabHudScale = 100; + } + public static class Bars { public boolean enableBars = true; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index f4089f83..bb2c0e0c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -35,7 +35,7 @@ public class PlayerListHudMixin { CallbackInfo info) { if (!Utils.isOnSkyblock - || !SkyblockerConfig.get().general.tabHudEnabled + || !SkyblockerConfig.get().general.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) { return; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index 8edfbb56..cc16da8b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -34,7 +34,7 @@ public class Screen { private int w, h; public Screen(int w, int h) { - float scale = SkyblockerConfig.get().general.tabHudScale / 100f; + float scale = SkyblockerConfig.get().general.tabHud.tabHudScale / 100f; this.w = (int) (w / scale); this.h = (int) (h / scale); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index b7e8f1e9..c0d3bf0e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -85,7 +85,7 @@ public abstract class Widget { RenderSystem.enableDepthTest(); ms.push(); - float scale = SkyblockerConfig.get().general.tabHudScale / 100f; + float scale = SkyblockerConfig.get().general.tabHud.tabHudScale / 100f; ms.scale(scale, scale, 1); // move above other UI elements diff --git a/src/main/resources/assets/skyblocker/lang/de_de.json b/src/main/resources/assets/skyblocker/lang/de_de.json index 1b6b75ac..4a84719c 100644 --- a/src/main/resources/assets/skyblocker/lang/de_de.json +++ b/src/main/resources/assets/skyblocker/lang/de_de.json @@ -4,9 +4,10 @@ "text.autoconfig.skyblocker.title": "Skyblocker-Einstellungen", "text.autoconfig.skyblocker.category.general": "Allgemein", "text.autoconfig.skyblocker.option.general.bars": "Gesundheits-, Mana-, Verteidigungs- und XP-Balken", - "text.autoconfig.skyblocker.option.general.tabHudEnabled": "Schöneres Tab-HUD aktivieren", - "text.autoconfig.skyblocker.option.general.tabHudScale": "Skalierungsfaktor für schöners Tab-HUD", - "text.autoconfig.skyblocker.option.general.tabHudScale.@Tooltip": "Wert in %, relativ zur Skalierung des Vanilla-GUIs", + "text.autoconfig.skyblocker.option.general.tabHud": "Schöneres Tab-HUD", + "text.autoconfig.skyblocker.option.general.tabHud.tabHudEnabled": "Schöneres Tab-HUD aktivieren", + "text.autoconfig.skyblocker.option.general.tabHud.tabHudScale": "Skalierungsfaktor für schöners Tab-HUD", + "text.autoconfig.skyblocker.option.general.tabHud.tabHudScale.@Tooltip": "Wert in %, relativ zur Skalierung des Vanilla-GUIs", "text.autoconfig.skyblocker.option.general.bars.enableBars": "Balken aktivieren", "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "Leere Item-Tooltips in Menüs verstecken", diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index ae1b2719..9e467505 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -23,9 +23,10 @@ "text.autoconfig.skyblocker.option.general.quicknav": "Quicknav", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Enable Quicknav", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "View backpack preview without holding Shift", - "text.autoconfig.skyblocker.option.general.tabHudEnabled": "Enable fancy tab HUD", - "text.autoconfig.skyblocker.option.general.tabHudScale": "Scale factor of fancy tab HUD", - "text.autoconfig.skyblocker.option.general.tabHudScale.@Tooltip": "Value in %, relative to your vanilla GUI scale", + "text.autoconfig.skyblocker.option.general.tabHud": "Fancy tab HUD", + "text.autoconfig.skyblocker.option.general.tabHud.tabHudEnabled": "Enable fancy tab HUD", + "text.autoconfig.skyblocker.option.general.tabHud.tabHudScale": "Scale factor of fancy tab HUD", + "text.autoconfig.skyblocker.option.general.tabHud.tabHudScale.@Tooltip": "Value in %, relative to your vanilla GUI scale", "text.autoconfig.skyblocker.option.general.itemTooltip": "Item Tooltip", "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Enable NPC Price", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Enable Avg. BIN Price", -- cgit From 36dd1eaefdedf54644706a7acfc310ec18f3683f Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 8 May 2023 17:28:03 -0400 Subject: Fixed wrong refactor --- .../java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java index 042d96d9..e31827ab 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -19,7 +19,7 @@ import net.minecraft.util.Identifier; @Environment(value=EnvType.CLIENT) public class QuickNavButton extends ClickableWidget { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final Identifier BUTTON_TEXTURE = new Identifier("textures/gui/gui/creative_inventory/tabs.png"); + private static final Identifier BUTTON_TEXTURE = new Identifier("textures/gui/container/creative_inventory/tabs.png"); private final int index; private boolean toggled; -- cgit From 98065a3e8152a1acc12154afba627d300c107bce Mon Sep 17 00:00:00 2001 From: Serhan Date: Tue, 9 May 2023 01:21:39 +0200 Subject: Added translation using Weblate (Turkish) [skip ci] --- .../resources/assets/skyblocker/lang/tr_TR.json | 190 +++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 src/main/resources/assets/skyblocker/lang/tr_TR.json diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json new file mode 100644 index 00000000..9f0be7cd --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/tr_TR.json @@ -0,0 +1,190 @@ +{ + "key.categories.skyblocker": "", + "key.hotbarSlotLock": "", + "key.wikiLookup": "", + "text.autoconfig.skyblocker.title": "", + "text.autoconfig.skyblocker.category.general": "", + "text.autoconfig.skyblocker.option.general.bars": "", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", + "text.autoconfig.skyblocker.option.general.quicknav": "", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "", + "text.autoconfig.skyblocker.option.general.itemTooltip": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", + "text.autoconfig.skyblocker.option.general.hitbox": "", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "", + "skyblocker.itemTooltip.nullMessage": "", + "skyblocker.itemTooltip.noData": "", + "text.autoconfig.skyblocker.category.richPresence": "", + "text.autoconfig.skyblocker.option.richPresence.info": "", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "", + "text.autoconfig.skyblocker.category.quickNav": "", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", + "text.autoconfig.skyblocker.option.quickNav.button1": "", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button2": "", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button3": "", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button4": "", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button5": "", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button6": "", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button7": "", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button8": "", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button9": "", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button10": "", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button11": "", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button12": "", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", + "text.autoconfig.skyblocker.option.general.itemList": "", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", + "text.autoconfig.skyblocker.category.locations": "", + "text.autoconfig.skyblocker.option.locations.dungeons": "", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", + "text.autoconfig.skyblocker.category.messages": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", + "text.autoconfig.skyblocker.option.messages.hideAbility": "", + "text.autoconfig.skyblocker.option.messages.hideHeal": "", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", + "text.autoconfig.skyblocker.option.messages.hideAds": "", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", + "text.autoconfig.skyblocker.option.messages.hideCombo": "", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "", + "text.autoconfig.skyblocker.option.messages.hideMana": "", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", + "skyblocker.update.update_message": "", + "skyblocker.update.update_link": "", + "skyblocker.update.update_message_end": "", + "skyblocker.update.hover_text": "", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "", + "skyblocker.api.got_key": "" +} -- cgit From abd07df92f283cc7a714c4a1bafe2a7ce420e43b Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 9 May 2023 22:12:47 +0200 Subject: Change layout of CI screen --- .../skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java index 7e6e03af..046abcbb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java @@ -20,12 +20,12 @@ public class CrimsonIsleScreen extends Screen { QuestWidget qw = new QuestWidget(ple); VolcanoWidget vw = new VolcanoWidget(ple); - this.stackWidgetsH(sw, rw, vw); + this.stackWidgetsH(sw, rw); + this.stackWidgetsH(qw, vw); this.offCenterL(sw); this.offCenterL(rw); - this.offCenterL(vw); + this.offCenterR(vw); this.offCenterR(qw); - this.centerH(qw); this.addWidgets(sw, rw, qw, vw); } -- cgit From d6024d1d50b2ad2346ca1b9bba96608b945864d1 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 9 May 2023 22:13:18 +0200 Subject: Fix CommsWidget to handle 4 commissions correctly --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java index 120c53d8..dbe3e457 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java @@ -32,9 +32,11 @@ public class CommsWidget extends Widget { public CommsWidget(List list) { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - for (int i = 50; i <= 51; i++) { + for (int i = 50; i <= 53; i++) { Matcher m = StrMan.regexAt(list, i, COMM_PATTERN); - + if (m == null) { + break; + } String g2 = m.group(2); ProgressComponent pc; if (g2.equals("DONE")) { -- cgit From 22f2311111b4444285c52b44d517374288404c36 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 9 May 2023 22:13:32 +0200 Subject: Show correct text in cookie widget --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java index 86d9dd7f..dfab6818 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java @@ -24,7 +24,7 @@ public class CookieWidget extends Widget { if (lines[1].startsWith("Not")) { this.addComponent(new IcoTextComponent(Ico.COOKIE, Text.of("Not active"))); } else { - Text cookie = Text.literal("Time Left: ").append(lines[2]); + Text cookie = Text.literal("Time Left: ").append(lines[1]); this.addComponent(new IcoTextComponent(Ico.COOKIE, cookie)); } this.pack(); -- cgit From 5b710138e98b8182d7b7499318286dd3304da5b9 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 9 May 2023 22:13:54 +0200 Subject: Add more missing player messages to dungeon player widget --- .../skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java index 978447fe..41d5d67a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.regex.Matcher; @@ -8,7 +9,6 @@ import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; - import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; @@ -32,12 +32,17 @@ public class DungeonPlayerWidget extends Widget { private static final Pattern PLAYER_PATTERN = Pattern.compile("\\[\\d*\\] (.*) \\((\\S*) ?([LXVI]*)\\)"); private static final HashMap ICOS = new HashMap<>(); + private static final ArrayList MSGS = new ArrayList<>(); static { ICOS.put("Tank", Ico.CHESTPLATE); ICOS.put("Mage", Ico.B_ROD); ICOS.put("Berserk", Ico.DIASWORD); ICOS.put("Archer", Ico.BOW); ICOS.put("Healer", Ico.POTION); + + MSGS.add("PRESS A TO JOIN"); + MSGS.add("Invite a friend!"); + MSGS.add("But nobody came."); } // title needs to be changeable here @@ -48,7 +53,7 @@ public class DungeonPlayerWidget extends Widget { if (list.get(start).getDisplayName().getString().length() < 2) { this.addComponent( - new IcoTextComponent(Ico.SIGN, Text.literal("PRESS A TO JOIN").formatted(Formatting.GRAY))); + new IcoTextComponent(Ico.SIGN, Text.literal(MSGS.get((int)(Math.random()*MSGS.size()))).formatted(Formatting.GRAY))); } else { Matcher m = StrMan.regexAt(list, start, PLAYER_PATTERN); -- cgit From 2e15d1b09990ce8660b8956844e68ff74bac552f Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 9 May 2023 22:14:16 +0200 Subject: Handle god potion in EffectWidget --- .../xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java index 54b49465..49449a97 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java @@ -10,6 +10,7 @@ import net.minecraft.util.Formatting; // this widgte shows, how many active effects you have // it also shows one of those in detail +// the parsing is super suspect and should be replaced by some regexes sometime later public class EffectWidget extends Widget { @@ -25,6 +26,12 @@ public class EffectWidget extends Widget { if (lines[1].startsWith("No")) { Text txt = Text.literal("No effects active").formatted(Formatting.GRAY); this.addComponent(new IcoTextComponent(Ico.POTION, txt)); + } else if (lines[1].contains("God")) { + String timeleft = lines[1].split("! ")[0]; + Text godpot = Text.literal("God potion!").formatted(Formatting.RED, Formatting.BOLD); + Text txttleft = Text.literal(timeleft).formatted(Formatting.LIGHT_PURPLE); + IcoFatTextComponent iftc = new IcoFatTextComponent(Ico.POTION, godpot, txttleft); + this.addComponent(iftc); } else { String number = lines[1].substring("You have ".length()); number = number.substring(0, number.indexOf(' ')); -- cgit From aadcc237ff39e52c39421b278f672c7bc16134ed Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 9 May 2023 22:14:35 +0200 Subject: Correct crit dmg/chance text in skills widget --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java index ca5bca67..0d105a53 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java @@ -51,9 +51,9 @@ public class SkillsWidget extends Widget { IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); Text strength = StrMan.stdEntry(list, 68, "STR", Formatting.RED); IcoTextComponent str = new IcoTextComponent(Ico.SWORD, strength); - Text critDmg = StrMan.stdEntry(list, 69, "CDG", Formatting.BLUE); + Text critDmg = StrMan.stdEntry(list, 69, "CCH", Formatting.BLUE); IcoTextComponent cdg = new IcoTextComponent(Ico.SWORD, critDmg); - Text critCh = StrMan.stdEntry(list, 70, "CCH", Formatting.BLUE); + Text critCh = StrMan.stdEntry(list, 70, "CDG", Formatting.BLUE); IcoTextComponent cch = new IcoTextComponent(Ico.SWORD, critCh); Text aSpeed = StrMan.stdEntry(list, 71, "ASP", Formatting.YELLOW); IcoTextComponent asp = new IcoTextComponent(Ico.HOE, aSpeed); -- cgit From 477af98b6fffaa7f5c0d01a7f158e91b494dcf83 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 9 May 2023 22:15:03 +0200 Subject: Let forge widget handle 4 commissions --- .../skyblocker/skyblock/tabhud/widget/ForgeWidget.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java index 553a001f..787d9311 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java @@ -23,16 +23,22 @@ public class ForgeWidget extends Widget { public ForgeWidget(List list) { super(TITLE, Formatting.DARK_AQUA.getColorValue()); + int forgestart = 54; + // why is it forges and not fabrics >:( + if (!StrMan.strAt(list, 53).startsWith("Forge")) { + forgestart += 2; + } + - for (int i = 0; i < 5; i++) { - String fstr = StrMan.strAt(list, i + 54).substring(4); + for (int i = forgestart, slot = 0; i < forgestart + 5 && i < 60; i++,slot ++) { + String fstr = StrMan.strAt(list, i).substring(4); Component c; Text l1, l2; switch (fstr) { case "LOCKED": l1 = Text.literal("Locked").formatted(Formatting.RED); - l2 = switch (i + 1) { + l2 = switch (slot) { case 3 -> Text.literal("Req. HotM 3").formatted(Formatting.GRAY); case 4 -> Text.literal("Req. HotM 4").formatted(Formatting.GRAY); case 5 -> Text.literal("Req. PotM 2").formatted(Formatting.GRAY); -- cgit From c9cdbc42d34c3a55c26ceced01f74a700af3901c Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 9 May 2023 22:15:16 +0200 Subject: Update README to reflect changes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0239a89a..055fb4db 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ ## Skyblocker Tab Menu Fork -This will be merged into Skyblocker when ready. It's not at the moment, but you can help by testing and opening issues. +This will be merged into Skyblocker when ready (soon) ### Known Issues * Relevant for players: - * Crimson Isle is not yet supported. (Getting Combat 24 is just... oof) * Some names clip outside of the player list screen sometimes * Relevant for devs: * Scraping the entire player list multiple times every frame isn't ideal. (possible optimisation for later) * The error catching is broken and fails to deactivate the mod on parse failure. (this won't be in the final release anyways) + * Encountering errors should be handled more gracefully Apart from that, it's working! -- cgit From bb16f61a2034848dc686bbcb30e79c2f0a624e97 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Tue, 9 May 2023 22:35:06 +0200 Subject: Add comments to and change comments of widget classes where needed --- .../skyblock/tabhud/widget/CommsWidget.java | 2 +- .../skyblock/tabhud/widget/CookieWidget.java | 1 - .../tabhud/widget/DungeonDownedWidget.java | 2 +- .../tabhud/widget/DungeonPlayerWidget.java | 1 - .../tabhud/widget/DungeonPuzzleWidget.java | 1 - .../tabhud/widget/DungeonSecretWidget.java | 2 +- .../skyblock/tabhud/widget/EffectWidget.java | 4 +- .../skyblock/tabhud/widget/EssenceWidget.java | 2 +- .../skyblock/tabhud/widget/EventWidget.java | 2 +- .../skyblock/tabhud/widget/FireSaleWidget.java | 4 +- .../skyblock/tabhud/widget/ForgeWidget.java | 2 +- .../skyblock/tabhud/widget/GardenServerWidget.java | 2 + .../skyblock/tabhud/widget/GardenSkillsWidget.java | 4 +- .../skyblock/tabhud/widget/IslandGuestsWidget.java | 3 +- .../skyblock/tabhud/widget/IslandOwnersWidget.java | 3 +- .../skyblock/tabhud/widget/IslandSelfWidget.java | 4 +- .../tabhud/widget/JacobsContestWidget.java | 2 + .../skyblock/tabhud/widget/PlayerListWidget.java | 4 +- .../skyblock/tabhud/widget/PowderWidget.java | 1 + .../skyblock/tabhud/widget/QuestWidget.java | 2 +- .../skyblock/tabhud/widget/ReputationWidget.java | 8 ++- .../skyblock/tabhud/widget/ServerWidget.java | 4 +- .../skyblock/tabhud/widget/SkillsWidget.java | 3 +- .../skyblock/tabhud/widget/TrapperWidget.java | 2 +- .../skyblock/tabhud/widget/UpgradeWidget.java | 2 +- .../skyblock/tabhud/widget/VolcanoWidget.java | 2 +- .../skyblocker/skyblock/tabhud/widget/Widget.java | 73 ---------------------- .../widget/component/IcoFatTextComponent.java | 2 + .../tabhud/widget/component/IcoTextComponent.java | 4 +- .../widget/component/PlainTextComponent.java | 2 + .../tabhud/widget/component/PlayerComponent.java | 2 + .../tabhud/widget/component/ProgressComponent.java | 4 ++ .../tabhud/widget/component/TableComponent.java | 3 + 33 files changed, 54 insertions(+), 105 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java index dbe3e457..e45865e4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java @@ -17,7 +17,7 @@ import net.minecraft.util.Formatting; import net.minecraft.util.math.MathHelper; // this widget shows the status of the king's commissions. -// works in both the dwarven mines and the CH +// (dwarven mines and crystal hollows) public class CommsWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java index dfab6818..8974efa7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java @@ -9,7 +9,6 @@ import net.minecraft.util.Formatting; // this widget shows info about active super cookies // or not, if you're unwilling to buy one -// TODO: test with active cookie. I'm not buying one. public class CookieWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java index 9146fdbb..36245a4e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java @@ -12,7 +12,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; // this widget shows info about... something? -// TODO: test this. +// related to downed people in dungeons, not sure what this is supposed to show public class DungeonDownedWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java index 41d5d67a..7195e455 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java @@ -16,7 +16,6 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; // this widget shows info about a player in the current dungeon group -// when inside a dungeon public class DungeonPlayerWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java index 3aba547c..86d1f938 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java @@ -14,7 +14,6 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; // this widget shows info about all puzzeles in the dungeon (name and status) -// TODO: if puzzle was failed, show player name public class DungeonPuzzleWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java index fed6b0b2..e0c83a35 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java @@ -11,7 +11,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows info about secrets of the dungeon +// this widget shows info about the secrets of the dungeon public class DungeonSecretWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java index 49449a97..d44d1ea7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java @@ -8,8 +8,8 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widgte shows, how many active effects you have -// it also shows one of those in detail +// this widgte shows, how many active effects you have. +// it also shows one of those in detail. // the parsing is super suspect and should be replaced by some regexes sometime later public class EffectWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java index 903c3a3d..7063ce3f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java @@ -12,7 +12,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows your dungeon essences +// this widget shows your dungeon essences (dungeon hub only) public class EssenceWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java index 7fcbe1c1..eb741566 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java @@ -11,7 +11,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows info about ongoing events (e.g. jacob's farming) +// this widget shows info about ongoing events (e.g. election) public class EventWidget extends Widget { private static final MutableText TITLE = Text.literal("Event Info").formatted(Formatting.YELLOW, Formatting.BOLD); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java index ad82417f..9b7b2678 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java @@ -16,7 +16,7 @@ import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; import net.minecraft.util.Formatting; -// this widget shows info about fire sales when in the hub +// this widget shows info about fire sales when in the hub. // or not, if there isn't one going on public class FireSaleWidget extends Widget { @@ -27,7 +27,7 @@ public class FireSaleWidget extends Widget { // matches a fire sale item // group 1: item name // group 2: # items bought - // group 1: # items available in total (1 digit + "k") + // group 3: # items available in total (1 digit + "k") private static final Pattern FIRE_PATTERN = Pattern.compile(" (.*): (\\d*)/([0-9.]*)k"); public FireSaleWidget(List list) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java index 787d9311..40e2f56d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java @@ -13,7 +13,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows what you're forging right now +// this widget shows what you're forging right now. // for locked slots, the unlock requirement is shown public class ForgeWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java index c6c334d5..864dee8e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java @@ -20,6 +20,8 @@ public class GardenServerWidget extends Widget { private static final MutableText TITLE = Text.literal("Server Info").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + // match the next visitor in the garden + // group 1: visitor name private static final Pattern VISITOR_PATTERN = Pattern.compile(" Next Visitor: (.*)$"); public GardenServerWidget(List list) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java index 99011616..26c90df7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java @@ -15,6 +15,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +// this widget shows info about your skills while in the garden public class GardenSkillsWidget extends Widget { @@ -25,8 +26,7 @@ public class GardenSkillsWidget extends Widget { // group 1: skill name and level // group 2: progress to next level (without "%") private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); - // same with leading space - // TODO: make better, maybe + // same, but with leading space private static final Pattern MS_PATTERN = Pattern.compile(" \\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); public GardenSkillsWidget(List list) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java index 5814c15c..fa27eaa0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java @@ -12,8 +12,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows a list of all people visiting -// the same private island as you +// this widget shows a list of all people visiting the same private island as you public class IslandGuestsWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java index a0056a06..083f72b7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java @@ -12,8 +12,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows a list of the owners of a private island -// when you're visiting someone else +// this widget shows a list of the owners of a home island while guesting public class IslandOwnersWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java index 96ec8ba5..aa1d951b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java @@ -12,7 +12,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows a list of the owners of your home island +// this widget shows a list of the owners while on your home island public class IslandSelfWidget extends Widget { @@ -20,7 +20,7 @@ public class IslandSelfWidget extends Widget { Formatting.BOLD); // matches an owner - // group 1: player name + // group 1: player name private static final Pattern OWNER_PATTERN = Pattern.compile("\\[\\d*\\] (.*)"); public IslandSelfWidget(List list) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java index 11817662..03defb4c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java @@ -14,6 +14,8 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +// this widget shows info about the current jacob's contest (garden only) + public class JacobsContestWidget extends Widget { private static final MutableText TITLE = Text.literal("Jacob's Contest").formatted(Formatting.YELLOW, diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java index 27c69567..90069c90 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java @@ -13,8 +13,8 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows a list of players with their skins -// in most areas +// this widget shows a list of players with their skins. +// responsible for non-private-island areas public class PlayerListWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java index 97485b4f..cca09d77 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java @@ -12,6 +12,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; // this widget shows how much mithril and gemstone powder you have +// (dwarven mines and crystal hollows) public class PowderWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java index e2bd7fd3..5fdb1a5b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java @@ -11,7 +11,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows your Crimson Isle suests +// this widget shows your crimson isle faction quests public class QuestWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java index e234763b..75bd4e92 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java @@ -13,14 +13,20 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows your faction status +// this widget shows your faction status (crimson isle) public class ReputationWidget extends Widget { private static final MutableText TITLE = Text.literal("Faction Status").formatted(Formatting.AQUA, Formatting.BOLD); + // matches your faction alignment progress + // group 1: percentage to next alignment level private static final Pattern PROGRESS_PATTERN = Pattern.compile(" \\|+ \\(([0-9.]*)%\\)"); + + // matches alignment level names + // group 1: left level name + // group 2: right level name private static final Pattern STATE_PATTERN = Pattern.compile("(\\S*) *(\\S*)"); public ReputationWidget(List list) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java index ce7bc56f..4084d4dd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java @@ -11,9 +11,9 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows info about "generic" servers +// this widget shows info about "generic" servers. // a server is "generic", when only name, server ID and gems are shown -// in the thrid column of the tab menu +// in the third column of the tab HUD public class ServerWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java index 0d105a53..be412421 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java @@ -17,7 +17,8 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows info about a skill and some stats +// this widget shows info about a skill and some stats, +// as seen in the rightmost column of the default HUD public class SkillsWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java index 981e4eef..4252888e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java @@ -11,7 +11,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows, how meny pelts you have (farming island only) +// this widget shows how meny pelts you have (farming island) public class TrapperWidget extends Widget { private static final MutableText TITLE = Text.literal("Trapper").formatted(Formatting.DARK_AQUA, diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java index 9f3be82a..0e0fe6b7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java @@ -8,7 +8,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// this widget shows info about current profile/account upgrades +// this widget shows info about ongoing profile/account upgrades // or not, if there aren't any // TODO: not very pretty atm diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java index 9c81133f..cca4ca1b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java @@ -13,7 +13,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Pair; -// this widget shows the volcano status +// shows the volcano status (crimson isle) public class VolcanoWidget extends Widget { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index c0d3bf0e..9e3c87cf 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -128,77 +128,4 @@ public abstract class Widget { private void drawVLine(MatrixStack ms, int xpos, int ypos, int height) { DrawableHelper.fill(ms, xpos, ypos, xpos + 1, ypos + height, this.color); } - - // static final int ICO_DIM = 16; - // static final int PAD_S = 2; - // static final int PAD_L = 4; - // static final int SKIN_ICO_DIM = 8; - - // static final int TEXT_H = txtRend.fontHeight; - // static final int BAR_H = TEXT_H; - - // static final int TITLED_BAR_H = TEXT_H + PAD_S + BAR_H + PAD_L; - // static final int ICO_LINE_H = ICO_DIM + PAD_L; - - // public void drawRect(MatrixStack ms, int x, int y, int w, int h) { - // DrawableHelper.fill(ms, x + xpos + CONTENT_OFFS_X, y + ypos + CONTENT_OFFS_Y, - // x + xpos + CONTENT_OFFS_X + w, - // y + ypos + CONTENT_OFFS_Y + h, this.color); - // } - - // void drawIcon(ItemStack ico, int x, int y) { - // itmRend.renderGuiItemIcon(ico, x + x + CONTENT_OFFS_X, y + y - // + CONTENT_OFFS_Y); - // } - - // void drawText(MatrixStack ms, Text text, int x, int y, int color) { - // txtRend.draw(ms, text, x + x + CONTENT_OFFS_X, y + y + - // CONTENT_OFFS_Y, 0xff000000 | color); - // } - - // void drawText(MatrixStack ms, Text text, int x, int y) { - // this.drawText(ms, text, x, y, 0xffffffff); - // } - - // void drawIcoText(MatrixStack ms, ItemStack ico, Text text, int x, int y) { - // this.drawIcon(ico, x, y); - // this.drawText(ms, text, x + ICO_DIM + PAD_L, y + 5); - // } - - // void fill(MatrixStack ms, int x1, int y1, int x2, int y2, int color) { - // DrawableHelper.fill(ms, x1 + x + CONTENT_OFFS_X, y1 + y + - // CONTENT_OFFS_Y, - // x2 + x + CONTENT_OFFS_X, y2 + y + CONTENT_OFFS_Y, 0xff000000 - // | color); - // } - - // void drawBar(MatrixStack ms, int x, int y, int width, float fillPcnt, int - // color) { - // this.fill(ms, x, y, x + width, y + 10, COL_BG_BAR); - // this.fill(ms, x, y, x + (int) (width * (fillPcnt / 100f)), y + 10, color); - // } - - // void drawTitledIcoBar(MatrixStack ms, ItemStack ico, Text title, int width, - // float pcnt, int x, int y, int color) { - // final int ICO_OFFS = 3; - // this.drawIcon(ico, x, y + ICO_OFFS); - // this.drawText(ms, title, x + ICO_DIM + PAD_L, y); - // this.drawBar(ms, x + ICO_DIM + PAD_L, y + TEXT_H + PAD_S, width, pcnt, - // color); - // } - - // void drawIcoFatText(MatrixStack ms, ItemStack ico, Text line1, Text line2, - // int x, int y) { - // final int ICO_OFFS = 1; - // this.drawIcon(ico, x, y + ICO_OFFS); - // this.drawText(ms, line1, x + ICO_DIM + PAD_L, y); - // this.drawText(ms, line2, x + ICO_DIM + PAD_L, y + TEXT_H + PAD_S); - // } - - // public void drawPlayerIco(MatrixStack ms, int x, int y, Identifier - // skinTexture) { - // RenderSystem.setShaderTexture(0, skinTexture); - // PlayerSkinDrawer.draw(ms, x + x + CONTENT_OFFS_X, y + y + - // CONTENT_OFFS_Y, SKIN_ICO_DIM); - // } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java index 5865138c..9aec581b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java @@ -4,6 +4,8 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +// widget component that consists of an icon and two lines of text + public class IcoFatTextComponent extends Component { private static final int ICO_OFFS = 1; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java index 66f15479..defbb2e6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java @@ -4,8 +4,10 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +// widget component that consists of an icon and a line of text + public class IcoTextComponent extends Component { - + private ItemStack ico; private Text text; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java index b801f3aa..8976e6a2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java @@ -3,6 +3,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; +// widget component that consists of a line of text + public class PlainTextComponent extends Component { private Text text; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java index 7e1fd399..56e2b3c3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java @@ -7,6 +7,8 @@ import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; +// widget component that consists of a player's skin icon and their name + public class PlayerComponent extends Component { private static final int SKIN_ICO_DIM = 8; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java index 41539d1c..1803e327 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java @@ -5,6 +5,10 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +// widget component that consists of an icon, some text and a progress bar +// progress bar either shows percentage or custom text +// NOTICE: pcnt is 0-100, not 0-1! + public class ProgressComponent extends Component { private static final int BAR_WIDTH = 100; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java index 2d367b11..eeb8ce3b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java @@ -3,6 +3,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.util.math.MatrixStack; +// widget component that consists of a grid of other components +// grid cols are separated by lines + // FIXME: table isn't wide enough sometimes // FIXME: dividers drift when there are >2 cols public class TableComponent extends Component { -- cgit From 272b19c2d8219380caf4ed74042d6d62152ac2fb Mon Sep 17 00:00:00 2001 From: msg-programs Date: Fri, 12 May 2023 23:57:21 +0200 Subject: Prevent errors when player list is incomplete shortly after join or area change --- src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index bb2c0e0c..a2ab848a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -48,6 +48,12 @@ public class PlayerListHudMixin { List list = nwH.getListedPlayerListEntries().stream() .sorted(PlayerListHudAccessor.getOrdering()).toList(); + + // list hasn't loaded completely, abort until widgets handle errors correctly + if (list.size() < 40) { + return; + } + int w = scaledW; int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); -- cgit From f1e16784b8e8f76ea79446486e01d260715a30c1 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 13 May 2023 00:00:42 +0200 Subject: Only allow 80 entries in player list widget --- .../skyblocker/skyblock/tabhud/widget/PlayerListWidget.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java index 90069c90..1678ca56 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java @@ -26,14 +26,18 @@ public class PlayerListWidget extends Widget { public PlayerListWidget(List l) { super(TITLE, Formatting.GREEN.getColorValue()); + // hard cap to 4x20 entries. + // 5x20 is too wide (and not possible in theory. in reality however...) + int listlen = Math.min(l.size(), 160); + // unintuitive int ceil division stolen from // https://stackoverflow.com/questions/7139382/java-rounding-up-to-an-int-using-math-ceil#21830188 - int tblW = ((l.size() - 80) - 1) / 20 + 1; + int tblW = ((listlen - 80) - 1) / 20 + 1; - TableComponent tc = new TableComponent(tblW, (l.size() - 80 >= 20) ? 20 : l.size() - 80, + TableComponent tc = new TableComponent(tblW, (listlen - 80 >= 20) ? 20 : listlen - 80, Formatting.GREEN.getColorValue()); - for (int i = 80; i < l.size(); i++) { + for (int i = 80; i < listlen; i++) { list.add(l.get(i)); } -- cgit From fbfd885064e2b7677a0b26f1d7c9dc24788b8e7f Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 13 May 2023 00:01:12 +0200 Subject: Change confusing label for profile type in profile widget --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java index 59342b9d..3d94fc59 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java @@ -20,7 +20,7 @@ public class ProfileWidget extends Widget { public ProfileWidget(List list) { super(TITLE, Formatting.YELLOW.getColorValue()); - Text profileType = StrMan.stdEntry(list, 61, "Type:", Formatting.GREEN); + Text profileType = StrMan.stdEntry(list, 61, "Profile:", Formatting.GREEN); IcoTextComponent profile = new IcoTextComponent(Ico.SIGN, profileType); this.addComponent(profile); -- cgit From 2c8cfe48f26424175d169d8328e0b4294b108c8c Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 13 May 2023 00:05:27 +0200 Subject: Rework component paddings, see below Components now consistently don't include any padding to the left and downwards. This "external" padding is used by widgets and the TableComponent to position their (sub-)components, so they should apply it themselves. This finally fixes the player list widget's drifting seperators and not-wide-enough cols. --- .../skyblocker/skyblock/tabhud/widget/Widget.java | 8 ++++-- .../tabhud/widget/component/Component.java | 5 ++-- .../widget/component/IcoFatTextComponent.java | 4 +-- .../tabhud/widget/component/IcoTextComponent.java | 2 +- .../widget/component/PlainTextComponent.java | 4 +-- .../tabhud/widget/component/PlayerComponent.java | 2 +- .../tabhud/widget/component/ProgressComponent.java | 2 +- .../tabhud/widget/component/TableComponent.java | 32 ++++++++++++---------- 8 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index 9e3c87cf..01f47933 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -40,9 +40,11 @@ public abstract class Widget { public final void pack() { for (Component c : components) { - h += c.getHeight() + 4; - w = Math.max(w, c.getWidth()); + h += c.getHeight() + Component.PAD_L; + w = Math.max(w, c.getWidth() + Component.PAD_S); } + + h -= Component.PAD_L / 2; // less padding after lowest/last component h += BORDER_SZE_N + BORDER_SZE_S - 2; w += BORDER_SZE_E + BORDER_SZE_W; @@ -114,7 +116,7 @@ public abstract class Widget { for (Component c : components) { c.render(ms, x + BORDER_SZE_W, yOffs); - yOffs += c.getHeight() + 4; + yOffs += c.getHeight() + Component.PAD_L; } // pop manipulations above ms.pop(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java index 92b7ed1b..d9d84bc4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java @@ -8,12 +8,13 @@ import net.minecraft.client.util.math.MatrixStack; public abstract class Component { static final int ICO_DIM = 16; - static final int PAD_S = 2; - static final int PAD_L = 4; + public static final int PAD_S = 2; + public static final int PAD_L = 4; static TextRenderer txtRend = MinecraftClient.getInstance().textRenderer; static ItemRenderer itmRend = MinecraftClient.getInstance().getItemRenderer(); + // these should always be the content dimensions without any padding. int width, height; public abstract void render(MatrixStack ms, int x, int y); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java index 9aec581b..6a780159 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java @@ -18,8 +18,8 @@ public class IcoFatTextComponent extends Component { this.l1 = l1; this.l2 = l2; - this.width = ICO_DIM + PAD_L + Math.max(txtRend.getWidth(l1), txtRend.getWidth(l2)) + PAD_S; - this.height = txtRend.fontHeight * 2 + PAD_S; + this.width = ICO_DIM + PAD_L + Math.max(txtRend.getWidth(l1), txtRend.getWidth(l2)); + this.height = txtRend.fontHeight + PAD_S + txtRend.fontHeight; } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java index defbb2e6..b54affbc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java @@ -15,7 +15,7 @@ public class IcoTextComponent extends Component { this.ico = ico; this.text = text; - this.width = ICO_DIM + PAD_L + txtRend.getWidth(text) + PAD_S; + this.width = ICO_DIM + PAD_L + txtRend.getWidth(text); this.height = ICO_DIM; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java index 8976e6a2..a2ffced9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java @@ -12,13 +12,13 @@ public class PlainTextComponent extends Component { public PlainTextComponent(Text text) { this.text = text; - this.width = PAD_S + txtRend.getWidth(text) + PAD_S; + this.width = PAD_S + txtRend.getWidth(text); // looks off without padding this.height = txtRend.fontHeight; } @Override public void render(MatrixStack ms, int x, int y) { - txtRend.draw(ms, text, x + PAD_S, y, 0xffffffff); + txtRend.draw(ms, text, x, y, 0xffffffff); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java index 56e2b3c3..ff296f28 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java @@ -21,7 +21,7 @@ public class PlayerComponent extends Component { name = ple.getProfile().getName(); tex = ple.getSkinTexture(); - this.width = txtRend.getWidth(name) + PAD_S + SKIN_ICO_DIM; + this.width = SKIN_ICO_DIM + PAD_S + txtRend.getWidth(name) ; this.height = txtRend.fontHeight; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java index 1803e327..753c9b21 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java @@ -30,8 +30,8 @@ public class ProgressComponent extends Component { this.pcnt = pcnt; this.barW = BAR_WIDTH; + this.width = ICO_DIM + PAD_L + Math.max(this.barW, txtRend.getWidth(desc)); this.height = txtRend.fontHeight + PAD_S + 2 + txtRend.fontHeight + 2; - this.width = ICO_DIM + PAD_L + Math.max(this.barW, txtRend.getWidth(desc)) + PAD_S; } public ProgressComponent(ItemStack ico, Text text, float pcnt, int color) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java index eeb8ce3b..5d27380e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java @@ -12,43 +12,47 @@ public class TableComponent extends Component { private Component[][] comps; private int color; - private int tw, th; + private int cols, rows; private int cellW, cellH; public TableComponent(int w, int h, int col) { comps = new Component[w][h]; color = 0xff000000 | col; - tw = w; - th = h; + cols = w; + rows = h; } public void addToCell(int x, int y, Component c) { this.comps[x][y] = c; - // are tables still too wide? - this.cellW = Math.max(this.cellW, c.width + PAD_S); + // pad extra to add a vertical line later + this.cellW = Math.max(this.cellW, c.width + PAD_S + PAD_L); // assume all rows are equally high so overwriting doesn't matter // if this wasn't the case, drawing would need more math // not doing any of that if it's not needed - this.cellH = c.height; + this.cellH = c.height + PAD_S; - this.width = this.cellW * this.tw; - this.height = (this.cellH + PAD_S) * this.th - PAD_S; + this.width = this.cellW * this.cols; + this.height = (this.cellH * this.rows) - PAD_S / 2; } @Override public void render(MatrixStack ms, int xpos, int ypos) { - for (int x = 0; x < tw; x++) { - for (int y = 0; y < th; y++) { + for (int x = 0; x < cols; x++) { + for (int y = 0; y < rows; y++) { if (comps[x][y] != null) { - comps[x][y].render(ms, xpos + x * cellW + x * PAD_L, ypos + y * cellH + y * PAD_S); + comps[x][y].render(ms, xpos + (x * cellW), ypos + y * cellH); } } - if (x != tw - 1) { - DrawableHelper.fill(ms, xpos + ((x + 1) * (cellW + PAD_S)) - 1, ypos + 1, - xpos + ((x + 1) * (cellW + PAD_S)), ypos + this.height - 1, this.color); + // add a line before the col if we're not drawing the first one + if (x != 0) { + int lineX1 = xpos + (x * cellW) - PAD_S - 1; + int lineX2 = xpos + (x * cellW) - PAD_S; + int lineY1 = ypos + 1; + int lineY2 = ypos + this.height - PAD_S - 1; // not sure why but it looks correct + DrawableHelper.fill(ms, lineX1, lineY1, lineX2, lineY2, this.color); } } } -- cgit From 981f8d4395a0870fc60fed216005e2a224225047 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sat, 13 May 2023 00:05:37 +0200 Subject: Update README to reflect changes --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 055fb4db..3dfac6f2 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,8 @@ This will be merged into Skyblocker when ready (soon) ### Known Issues -* Relevant for players: - * Some names clip outside of the player list screen sometimes -* Relevant for devs: - * Scraping the entire player list multiple times every frame isn't ideal. (possible optimisation for later) - * The error catching is broken and fails to deactivate the mod on parse failure. (this won't be in the final release anyways) - * Encountering errors should be handled more gracefully +* Scraping the entire player list multiple times every frame isn't ideal. (possible optimisation for later) +* Encountering errors should be handled more gracefully Apart from that, it's working! -- cgit From a47c68f022809c33f149f90af14d1c20bf271bad Mon Sep 17 00:00:00 2001 From: Fix3d Date: Sun, 14 May 2023 00:23:25 +0300 Subject: revert jgit pull with some modifications --- .../skyblocker/skyblock/api/RepositoryUpdate.java | 6 +++++- .../skyblocker/skyblock/itemlist/ItemListWidget.java | 7 ++++++- .../skyblocker/skyblock/itemlist/ItemRegistry.java | 18 +++++++++++++++--- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java index db039559..3854dd88 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java @@ -11,7 +11,11 @@ import java.util.concurrent.CompletableFuture; public class RepositoryUpdate { - //TODO add button to config for this + /** + * Adds command to update repository manually from ingame. + *

+ * TODO A button could be added to the settings menu that will trigger this command. + */ public static void init(){ ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register( ClientCommandManager.literal("skyblocker") diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java index e99d6dac..d9acc75c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java @@ -68,7 +68,12 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select } else { this.searchField.render(matrices, mouseX, mouseY, delta); } - if (ItemRegistry.filesImported && results != null){ + if (ItemRegistry.filesImported){ + if (results == null) { + int x = (this.parentWidth - 147) / 2 - this.leftOffset; + int y = (this.parentHeight - 166) / 2; + this.results = new SearchResultsWidget(this.client, x, y); + } this.updateSearchResult(); this.results.render(matrices, mouseX, mouseY, delta); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index 0a581da8..68f587bc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -9,6 +9,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.text.Text; import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.PullResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,16 +47,27 @@ public class ItemRegistry { } private static void updateItemRepo() { - Git git; if (!Files.isDirectory(LOCAL_ITEM_REPO_DIR)) { try { - git = Git.cloneRepository() + Git.cloneRepository() .setURI(REMOTE_ITEM_REPO) .setDirectory(LOCAL_ITEM_REPO_DIR.toFile()) .setBranchesToClone(List.of("refs/heads/master")) .setBranch("refs/heads/master") .call(); - git.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + try { + PullResult pull = Git.open(LOCAL_ITEM_REPO_DIR.toFile()).pull().setRebase(true).call(); + if (pull.getRebaseResult() == null) { + LOGGER.info("[Skyblocker Repository Update] No update result"); + } else if (pull.getRebaseResult().getStatus().isSuccessful()) { + LOGGER.info("[Skyblocker Repository Update] Status: " + pull.getRebaseResult().getStatus().name()); + } else if (!pull.getRebaseResult().getStatus().isSuccessful()) { + LOGGER.warn("[Skyblocker Repository Update] Status: " + pull.getRebaseResult().getStatus().name()); + } } catch (Exception e) { e.printStackTrace(); } -- cgit From 539a79b72a102c6fc8a0ef249b84889656a8df21 Mon Sep 17 00:00:00 2001 From: ElSebas02 Date: Tue, 16 May 2023 02:25:33 +0200 Subject: Added translation using Weblate (Spanish) [skip ci] --- .../resources/assets/skyblocker/lang/es_ES.json | 190 +++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 src/main/resources/assets/skyblocker/lang/es_ES.json diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json new file mode 100644 index 00000000..9f0be7cd --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -0,0 +1,190 @@ +{ + "key.categories.skyblocker": "", + "key.hotbarSlotLock": "", + "key.wikiLookup": "", + "text.autoconfig.skyblocker.title": "", + "text.autoconfig.skyblocker.category.general": "", + "text.autoconfig.skyblocker.option.general.bars": "", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", + "text.autoconfig.skyblocker.option.general.quicknav": "", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "", + "text.autoconfig.skyblocker.option.general.itemTooltip": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", + "text.autoconfig.skyblocker.option.general.hitbox": "", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "", + "skyblocker.itemTooltip.nullMessage": "", + "skyblocker.itemTooltip.noData": "", + "text.autoconfig.skyblocker.category.richPresence": "", + "text.autoconfig.skyblocker.option.richPresence.info": "", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "", + "text.autoconfig.skyblocker.category.quickNav": "", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", + "text.autoconfig.skyblocker.option.quickNav.button1": "", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button2": "", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button3": "", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button4": "", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button5": "", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button6": "", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button7": "", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button8": "", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button9": "", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button10": "", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button11": "", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button12": "", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", + "text.autoconfig.skyblocker.option.general.itemList": "", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", + "text.autoconfig.skyblocker.category.locations": "", + "text.autoconfig.skyblocker.option.locations.dungeons": "", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", + "text.autoconfig.skyblocker.category.messages": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", + "text.autoconfig.skyblocker.option.messages.hideAbility": "", + "text.autoconfig.skyblocker.option.messages.hideHeal": "", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", + "text.autoconfig.skyblocker.option.messages.hideAds": "", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", + "text.autoconfig.skyblocker.option.messages.hideCombo": "", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "", + "text.autoconfig.skyblocker.option.messages.hideMana": "", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", + "skyblocker.update.update_message": "", + "skyblocker.update.update_link": "", + "skyblocker.update.update_message_end": "", + "skyblocker.update.hover_text": "", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "", + "skyblocker.api.got_key": "" +} -- cgit From aadfb7e7d79865d8999a828c6cf9dbcca16944ec Mon Sep 17 00:00:00 2001 From: ElSebas02 Date: Tue, 16 May 2023 00:33:32 +0000 Subject: Translated using Weblate (Spanish) [skip ci] Currently translated at 22.3% (42 of 188 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/es/ --- .../resources/assets/skyblocker/lang/es_ES.json | 98 +++++++++++----------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json index 9f0be7cd..a5accf5d 100644 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -1,51 +1,51 @@ { - "key.categories.skyblocker": "", - "key.hotbarSlotLock": "", - "key.wikiLookup": "", - "text.autoconfig.skyblocker.title": "", - "text.autoconfig.skyblocker.category.general": "", - "text.autoconfig.skyblocker.option.general.bars": "", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", + "key.categories.skyblocker": "Skyblocker", + "key.hotbarSlotLock": "Bloqueo de Slot (Hotbar)", + "key.wikiLookup": "Búsqueda en la Wiki", + "text.autoconfig.skyblocker.title": "Ajustes de Skyblocker", + "text.autoconfig.skyblocker.category.general": "General", + "text.autoconfig.skyblocker.option.general.bars": "Salud, Mana, Defensa & Barra de XP", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Habilitar Barras", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Configurar Posición de Barras", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Capa 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Capa 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Derecha", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deshabilitado", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Posición de la Barra de Salud", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Posición de la Barra de Mana", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Posición de la Barra de Defensa", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Posición de la Barra de Experiencia", "text.autoconfig.skyblocker.option.general.quicknav": "", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Ver la previsualización de la mochila sin sostener Shift", "text.autoconfig.skyblocker.option.general.itemTooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", - "text.autoconfig.skyblocker.option.general.hitbox": "", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Habilitar Precios de NPC", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Habilitar Precios Promedio de BIN", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Tipo Promedio", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Puedes elegir cuantos días de precio promedio sera", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Precio de 1 día", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Precio de 3 días", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Ambos", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Habilitar el precio mas bajo de BIN", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Habilitar los precios de compra/venta del Bazar", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Habilitar Museo & datos", + "text.autoconfig.skyblocker.option.general.hitbox": "Cajas de Colisión", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Habilitar la Caja de Colisión de la 1.8 para la tierra de cultivo", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Habilitar la Caja de Colisión de la 1.8 para la palanca", "skyblocker.itemTooltip.nullMessage": "", - "skyblocker.itemTooltip.noData": "", - "text.autoconfig.skyblocker.category.richPresence": "", - "text.autoconfig.skyblocker.option.richPresence.info": "", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", + "skyblocker.itemTooltip.noData": "§cSin Información", + "text.autoconfig.skyblocker.category.richPresence": "Discord Rich Presence", + "text.autoconfig.skyblocker.option.richPresence.info": "Información de Skyblock", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "CARTERA", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "LOCALIZACIÓN", "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "", - "text.autoconfig.skyblocker.category.quickNav": "", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", - "text.autoconfig.skyblocker.option.quickNav.button1": "", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Ciclar Información de Skyblock", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Habilitado", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "Mensaje Personalizado", + "text.autoconfig.skyblocker.category.quickNav": "Navegación Rápida", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Habilitar Navegación Rápida", + "text.autoconfig.skyblocker.option.quickNav.button1": "Botón 1", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", "text.autoconfig.skyblocker.option.quickNav.button1.item": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", @@ -58,10 +58,10 @@ "text.autoconfig.skyblocker.option.quickNav.button2.item": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "Titulo de la Interfaz", "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button3": "", + "text.autoconfig.skyblocker.option.quickNav.button3": "Botón 3", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", "text.autoconfig.skyblocker.option.quickNav.button3.item": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", @@ -69,7 +69,7 @@ "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button4": "", + "text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", "text.autoconfig.skyblocker.option.quickNav.button4.item": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", @@ -77,7 +77,7 @@ "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button5": "", + "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", "text.autoconfig.skyblocker.option.quickNav.button5.item": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", @@ -85,7 +85,7 @@ "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button6": "", + "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", "text.autoconfig.skyblocker.option.quickNav.button6.item": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", @@ -93,7 +93,7 @@ "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button7": "", + "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", "text.autoconfig.skyblocker.option.quickNav.button7.item": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", -- cgit From 2093b1fc1c2a75009b367bcd7b378bcf6e1d16b8 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 16 May 2023 19:40:01 -0400 Subject: Added config screen command --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 17 +++++----- .../skyblocker/config/SkyblockerConfig.java | 38 +++++++++++++++++++--- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 80b02eee..1023f3c8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -23,22 +23,18 @@ import net.minecraft.client.MinecraftClient; public class SkyblockerMod implements ClientModInitializer { public static final String NAMESPACE = "skyblocker"; - private static final SkyblockerMod instance = new SkyblockerMod(); + private static SkyblockerMod INSTANCE; public final Scheduler scheduler = new Scheduler(); public final ContainerSolverManager containerSolverManager = new ContainerSolverManager(); public final StatusBarTracker statusBarTracker = new StatusBarTracker(); - private SkyblockerMod() { - scheduler.scheduleCyclic(Utils::sbChecker, 20); - scheduler.scheduleCyclic(DiscordRPCManager::update, 100); - scheduler.scheduleCyclic(DungeonBlaze::update, 4); - scheduler.scheduleCyclic(BackpackPreview::tick, 50); - scheduler.scheduleCyclic(DwarvenHud::update, 40); + public SkyblockerMod() { + INSTANCE = this; } public static SkyblockerMod getInstance() { - return instance; + return INSTANCE; } @Override @@ -57,6 +53,11 @@ public class SkyblockerMod implements ClientModInitializer { ChatMessageListener.init(); UpdateChecker.init(); DiscordRPCManager.init(); + scheduler.scheduleCyclic(Utils::sbChecker, 20); + scheduler.scheduleCyclic(DiscordRPCManager::update, 100); + scheduler.scheduleCyclic(DungeonBlaze::update, 4); + scheduler.scheduleCyclic(BackpackPreview::tick, 50); + scheduler.scheduleCyclic(DwarvenHud::update, 40); } public void tick(MinecraftClient client) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 48eb31c7..e2e7b4ca 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -1,16 +1,24 @@ package me.xmrvizzy.skyblocker.config; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; import me.shedaniel.autoconfig.AutoConfig; import me.shedaniel.autoconfig.ConfigData; import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.annotation.ConfigEntry; import me.shedaniel.autoconfig.serializer.GsonConfigSerializer; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.resource.language.I18n; import java.util.ArrayList; import java.util.List; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + @Config(name = "skyblocker") public class SkyblockerConfig implements ConfigData { @@ -59,7 +67,7 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Category("button6") @ConfigEntry.Gui.CollapsibleObject() - public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), "Storage", "/storage"); + public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), "Storage", "/storage"); @ConfigEntry.Category("button7") @ConfigEntry.Gui.CollapsibleObject() @@ -133,7 +141,7 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Category("bars") @ConfigEntry.Gui.CollapsibleObject() public Bars bars = new Bars(); - + @ConfigEntry.Category("itemList") @ConfigEntry.Gui.CollapsibleObject() public ItemList itemList = new ItemList(); @@ -177,7 +185,7 @@ public class SkyblockerConfig implements ConfigData { NONE; @Override - public String toString() { + public String toString() { return I18n.translate("text.autoconfig.skyblocker.option.general.bars.barpositions." + name()); } @@ -215,7 +223,7 @@ public class SkyblockerConfig implements ConfigData { BOTH; @Override - public String toString() { + public String toString() { return I18n.translate("text.autoconfig.skyblocker.option.general.itemTooltip.avg." + name()); } } @@ -310,14 +318,36 @@ public class SkyblockerConfig implements ConfigData { PURSE, BITS, LOCATION; + @Override public String toString() { return I18n.translate("text.autoconfig.skyblocker.option.richPresence.info." + name()); } } + /** + * Registers the config to AutoConfig and register commands to open the config screen. + */ public static void init() { AutoConfig.register(SkyblockerConfig.class, GsonConfigSerializer::new); + ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(literal("skyblocker").then(optionsLiteral("config")).then(optionsLiteral("options"))))); + } + + /** + * Registers an options command with the given name. Used for registering both options and config as valid commands. + * + * @param name the name of the command node + * @return the command builder + */ + private static LiteralArgumentBuilder optionsLiteral(String name) { + return literal(name).executes(context -> { + // Don't immediately open the next screen as it will be closed by ChatScreen right after this command is executed + SkyblockerMod.getInstance().scheduler.schedule(() -> { + Screen a = AutoConfig.getConfigScreen(SkyblockerConfig.class, null).get(); + MinecraftClient.getInstance().setScreen(a); + }, 0); + return 1; + }); } public static SkyblockerConfig get() { -- cgit From fd5112de41c466ed9c7c613b86574c4e5f6d167e Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 11:37:19 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/es_ES.json | 76 +---------------- .../resources/assets/skyblocker/lang/tr_TR.json | 94 ---------------------- 2 files changed, 1 insertion(+), 169 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json index a5accf5d..bed2bb52 100644 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -15,10 +15,8 @@ "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Posición de la Barra de Mana", "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Posición de la Barra de Defensa", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Posición de la Barra de Experiencia", - "text.autoconfig.skyblocker.option.general.quicknav": "", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Ver la previsualización de la mochila sin sostener Shift", - "text.autoconfig.skyblocker.option.general.itemTooltip": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Habilitar Precios de NPC", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Habilitar Precios Promedio de BIN", "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Tipo Promedio", @@ -32,159 +30,87 @@ "text.autoconfig.skyblocker.option.general.hitbox": "Cajas de Colisión", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Habilitar la Caja de Colisión de la 1.8 para la tierra de cultivo", "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Habilitar la Caja de Colisión de la 1.8 para la palanca", - "skyblocker.itemTooltip.nullMessage": "", "skyblocker.itemTooltip.noData": "§cSin Información", "text.autoconfig.skyblocker.category.richPresence": "Discord Rich Presence", "text.autoconfig.skyblocker.option.richPresence.info": "Información de Skyblock", "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "CARTERA", "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "LOCALIZACIÓN", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Ciclar Información de Skyblock", "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Habilitado", "text.autoconfig.skyblocker.option.richPresence.customMessage": "Mensaje Personalizado", "text.autoconfig.skyblocker.category.quickNav": "Navegación Rápida", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Habilitar Navegación Rápida", "text.autoconfig.skyblocker.option.quickNav.button1": "Botón 1", - "text.autoconfig.skyblocker.option.quickNav.button1.render": "", "text.autoconfig.skyblocker.option.quickNav.button1.item": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button2": "", - "text.autoconfig.skyblocker.option.quickNav.button2.render": "", "text.autoconfig.skyblocker.option.quickNav.button2.item": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button3": "Botón 3", - "text.autoconfig.skyblocker.option.quickNav.button3.render": "", "text.autoconfig.skyblocker.option.quickNav.button3.item": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4", - "text.autoconfig.skyblocker.option.quickNav.button4.render": "", "text.autoconfig.skyblocker.option.quickNav.button4.item": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", - "text.autoconfig.skyblocker.option.quickNav.button5.render": "", "text.autoconfig.skyblocker.option.quickNav.button5.item": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", - "text.autoconfig.skyblocker.option.quickNav.button6.render": "", "text.autoconfig.skyblocker.option.quickNav.button6.item": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", - "text.autoconfig.skyblocker.option.quickNav.button7.render": "", "text.autoconfig.skyblocker.option.quickNav.button7.item": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button8": "", - "text.autoconfig.skyblocker.option.quickNav.button8.render": "", "text.autoconfig.skyblocker.option.quickNav.button8.item": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button9": "", - "text.autoconfig.skyblocker.option.quickNav.button9.render": "", "text.autoconfig.skyblocker.option.quickNav.button9.item": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button10": "", - "text.autoconfig.skyblocker.option.quickNav.button10.render": "", "text.autoconfig.skyblocker.option.quickNav.button10.item": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button11": "", - "text.autoconfig.skyblocker.option.quickNav.button11.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.item": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button12": "", - "text.autoconfig.skyblocker.option.quickNav.button12.render": "", "text.autoconfig.skyblocker.option.quickNav.button12.item": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", - "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", "text.autoconfig.skyblocker.option.general.itemList": "", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", "text.autoconfig.skyblocker.category.locations": "", - "text.autoconfig.skyblocker.option.locations.dungeons": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", "text.autoconfig.skyblocker.category.messages": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", "text.autoconfig.skyblocker.option.messages.hideAbility": "", - "text.autoconfig.skyblocker.option.messages.hideHeal": "", "text.autoconfig.skyblocker.option.messages.hideAOTE": "", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "", "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", - "text.autoconfig.skyblocker.option.messages.hideAds": "", "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", - "text.autoconfig.skyblocker.option.messages.hideCombo": "", "text.autoconfig.skyblocker.option.messages.hideAutopet": "", - "text.autoconfig.skyblocker.option.messages.hideMana": "", "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", - "skyblocker.update.update_message": "", "skyblocker.update.update_link": "", - "skyblocker.update.update_message_end": "", "skyblocker.update.hover_text": "", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "", - "skyblocker.api.got_key": "" + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "" } diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json index 9f0be7cd..6418957c 100644 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ b/src/main/resources/assets/skyblocker/lang/tr_TR.json @@ -1,190 +1,96 @@ { - "key.categories.skyblocker": "", "key.hotbarSlotLock": "", - "key.wikiLookup": "", "text.autoconfig.skyblocker.title": "", - "text.autoconfig.skyblocker.category.general": "", "text.autoconfig.skyblocker.option.general.bars": "", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.quicknav": "", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "", "text.autoconfig.skyblocker.option.general.itemTooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", - "text.autoconfig.skyblocker.option.general.hitbox": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "", "skyblocker.itemTooltip.nullMessage": "", - "skyblocker.itemTooltip.noData": "", "text.autoconfig.skyblocker.category.richPresence": "", - "text.autoconfig.skyblocker.option.richPresence.info": "", "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "", "text.autoconfig.skyblocker.option.richPresence.customMessage": "", - "text.autoconfig.skyblocker.category.quickNav": "", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", - "text.autoconfig.skyblocker.option.quickNav.button1": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button2": "", "text.autoconfig.skyblocker.option.quickNav.button2.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button3": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button4": "", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button5": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button6": "", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button7": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button8": "", "text.autoconfig.skyblocker.option.quickNav.button8.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button9": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button10": "", "text.autoconfig.skyblocker.option.quickNav.button10.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button11": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button12": "", "text.autoconfig.skyblocker.option.quickNav.button12.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", - "text.autoconfig.skyblocker.option.general.itemList": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.category.locations": "", "text.autoconfig.skyblocker.option.locations.dungeons": "", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", - "text.autoconfig.skyblocker.category.messages": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", - "text.autoconfig.skyblocker.option.messages.hideAbility": "", "text.autoconfig.skyblocker.option.messages.hideHeal": "", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "", "text.autoconfig.skyblocker.option.messages.hideImplosion": "", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", "text.autoconfig.skyblocker.option.messages.hideAds": "", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", "text.autoconfig.skyblocker.option.messages.hideCombo": "", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "", "text.autoconfig.skyblocker.option.messages.hideMana": "", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", "skyblocker.update.update_message": "", - "skyblocker.update.update_link": "", "skyblocker.update.update_message_end": "", - "skyblocker.update.hover_text": "", "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "", "skyblocker.api.got_key": "" } -- cgit From 7210ae582bc5c7835f7a7cf68a193d04d210fc6d Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 11:37:19 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/es_ES.json | 35 ---------------- .../resources/assets/skyblocker/lang/tr_TR.json | 47 ---------------------- 2 files changed, 82 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json index bed2bb52..b3494d81 100644 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -15,7 +15,6 @@ "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Posición de la Barra de Mana", "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Posición de la Barra de Defensa", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Posición de la Barra de Experiencia", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Ver la previsualización de la mochila sin sostener Shift", "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Habilitar Precios de NPC", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Habilitar Precios Promedio de BIN", @@ -42,75 +41,41 @@ "text.autoconfig.skyblocker.category.quickNav": "Navegación Rápida", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Habilitar Navegación Rápida", "text.autoconfig.skyblocker.option.quickNav.button1": "Botón 1", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button2": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "Titulo de la Interfaz", "text.autoconfig.skyblocker.option.quickNav.button3": "Botón 3", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button8": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button9": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button10": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button11": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button12": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", "text.autoconfig.skyblocker.option.general.itemList": "", - "text.autoconfig.skyblocker.category.locations": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", "text.autoconfig.skyblocker.category.messages": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", "text.autoconfig.skyblocker.option.messages.hideAbility": "", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "", "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", "text.autoconfig.skyblocker.option.messages.hideAutopet": "", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", "skyblocker.update.update_link": "", - "skyblocker.update.hover_text": "", "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "" } diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json index 6418957c..771dd871 100644 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ b/src/main/resources/assets/skyblocker/lang/tr_TR.json @@ -1,96 +1,49 @@ { - "key.hotbarSlotLock": "", "text.autoconfig.skyblocker.title": "", - "text.autoconfig.skyblocker.option.general.bars": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", "text.autoconfig.skyblocker.option.general.itemTooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "skyblocker.itemTooltip.nullMessage": "", "text.autoconfig.skyblocker.category.richPresence": "", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", "text.autoconfig.skyblocker.option.richPresence.customMessage": "", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button2.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button8.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button10.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button12.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", "text.autoconfig.skyblocker.option.messages.hideHeal": "", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "", "text.autoconfig.skyblocker.option.messages.hideAds": "", - "text.autoconfig.skyblocker.option.messages.hideCombo": "", "text.autoconfig.skyblocker.option.messages.hideMana": "", - "skyblocker.update.update_message": "", "skyblocker.update.update_message_end": "", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", "skyblocker.api.got_key": "" } -- cgit From b63065afe9d703c426c87484c40cdbd553c98e9a Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 11:37:19 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/es_ES.json | 20 +---------------- .../resources/assets/skyblocker/lang/tr_TR.json | 26 +--------------------- 2 files changed, 2 insertions(+), 44 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json index b3494d81..7a7c5546 100644 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -41,41 +41,23 @@ "text.autoconfig.skyblocker.category.quickNav": "Navegación Rápida", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Habilitar Navegación Rápida", "text.autoconfig.skyblocker.option.quickNav.button1": "Botón 1", - "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button2": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "Titulo de la Interfaz", "text.autoconfig.skyblocker.option.quickNav.button3": "Botón 3", - "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4", - "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", - "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", - "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", - "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button8": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button9": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button10": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button11": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button12": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", "text.autoconfig.skyblocker.option.general.itemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", "text.autoconfig.skyblocker.category.messages": "", - "text.autoconfig.skyblocker.option.messages.hideAbility": "", "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "", - "skyblocker.update.update_link": "", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "" + "skyblocker.update.update_link": "" } diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json index 771dd871..d04cb3a4 100644 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ b/src/main/resources/assets/skyblocker/lang/tr_TR.json @@ -1,49 +1,25 @@ { - "text.autoconfig.skyblocker.title": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.itemTooltip": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.category.richPresence": "", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button2.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button8.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button10.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button12.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.hideHeal": "", "text.autoconfig.skyblocker.option.messages.hideAds": "", - "text.autoconfig.skyblocker.option.messages.hideMana": "", - "skyblocker.update.update_message_end": "", - "skyblocker.api.got_key": "" + "skyblocker.update.update_message_end": "" } -- cgit From c8b930c75071e72672f305612226aadf93cd2ebf Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 11:37:20 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/es_ES.json | 9 +-------- src/main/resources/assets/skyblocker/lang/tr_TR.json | 14 +------------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json index 7a7c5546..f9e02879 100644 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -41,7 +41,6 @@ "text.autoconfig.skyblocker.category.quickNav": "Navegación Rápida", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Habilitar Navegación Rápida", "text.autoconfig.skyblocker.option.quickNav.button1": "Botón 1", - "text.autoconfig.skyblocker.option.quickNav.button2": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "Titulo de la Interfaz", "text.autoconfig.skyblocker.option.quickNav.button3": "Botón 3", @@ -49,15 +48,9 @@ "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", - "text.autoconfig.skyblocker.option.quickNav.button8": "", "text.autoconfig.skyblocker.option.quickNav.button9": "", - "text.autoconfig.skyblocker.option.quickNav.button10": "", "text.autoconfig.skyblocker.option.quickNav.button11": "", - "text.autoconfig.skyblocker.option.quickNav.button12": "", "text.autoconfig.skyblocker.option.general.itemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", - "text.autoconfig.skyblocker.category.messages": "", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", - "skyblocker.update.update_link": "" + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "" } diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json index d04cb3a4..a093f313 100644 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ b/src/main/resources/assets/skyblocker/lang/tr_TR.json @@ -1,25 +1,13 @@ { - "text.autoconfig.skyblocker.option.general.bars.barpositions": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.render": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.render": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.render": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.render": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.render": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.hideAds": "", - "skyblocker.update.update_message_end": "" + "text.autoconfig.skyblocker.option.messages.hideAds": "" } -- cgit From 0687c2429ebf4e2b6e952522239851c630aebb22 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 11:37:20 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/es_ES.json | 5 +---- src/main/resources/assets/skyblocker/lang/tr_TR.json | 8 +------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json index f9e02879..1aedbdc5 100644 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -48,9 +48,6 @@ "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", - "text.autoconfig.skyblocker.option.quickNav.button9": "", "text.autoconfig.skyblocker.option.quickNav.button11": "", - "text.autoconfig.skyblocker.option.general.itemList": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "" + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "" } diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json index a093f313..2a53a662 100644 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ b/src/main/resources/assets/skyblocker/lang/tr_TR.json @@ -1,13 +1,7 @@ { - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.quickNav.button1.render": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.render": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.messages.hideAds": "" + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "" } -- cgit From bd8a100c632e7948b453c22e2a09816422bb31ab Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 11:37:20 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/es_ES.json | 1 - src/main/resources/assets/skyblocker/lang/tr_TR.json | 5 +---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json index 1aedbdc5..dae2073f 100644 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -48,6 +48,5 @@ "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", - "text.autoconfig.skyblocker.option.quickNav.button11": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "" } diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json index 2a53a662..329eb16b 100644 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ b/src/main/resources/assets/skyblocker/lang/tr_TR.json @@ -1,7 +1,4 @@ { - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "" + "text.autoconfig.skyblocker.option.quickNav.button11.render": "" } -- cgit From f79d6913258c3009e1680c353bd59a34ef577c09 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 11:37:20 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/es_ES.json | 3 +-- src/main/resources/assets/skyblocker/lang/tr_TR.json | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json index dae2073f..5aa55294 100644 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -47,6 +47,5 @@ "text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4", "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", - "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "" + "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7" } diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json index 329eb16b..9b9ce11c 100644 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ b/src/main/resources/assets/skyblocker/lang/tr_TR.json @@ -1,4 +1,3 @@ { - "text.autoconfig.skyblocker.option.quickNav.button3.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "" } -- cgit From 647074f9ea9bc08c933d7258fa2a74ab4de2faad Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 11:37:20 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/tr_TR.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json index 9b9ce11c..0967ef42 100644 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ b/src/main/resources/assets/skyblocker/lang/tr_TR.json @@ -1,3 +1 @@ -{ - "text.autoconfig.skyblocker.option.quickNav.button11.render": "" -} +{} -- cgit From adaf280a8083dd774c9b49cdc1ae56b1642a6531 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 13:22:30 +0200 Subject: Update translation files [skip ci] Updated by "Cleanup translation files" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/ru_ru.json | 116 ++++++++++----------- 1 file changed, 56 insertions(+), 60 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/ru_ru.json b/src/main/resources/assets/skyblocker/lang/ru_ru.json index 693d2e8f..8240f0cb 100644 --- a/src/main/resources/assets/skyblocker/lang/ru_ru.json +++ b/src/main/resources/assets/skyblocker/lang/ru_ru.json @@ -1,61 +1,57 @@ { - "key.categories.skyblocker": "Skyblocker", - "key.hotbarSlotLock": "Блокировка слотов (В хотбаре)", - "text.autoconfig.skyblocker.title": "Настройки Skyblocker", - - "text.autoconfig.skyblocker.category.general": "Основные", - "text.autoconfig.skyblocker.option.general.bars": "Полоски здоровья, маны, защиты и опыта", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "Включить полоски", - - "text.autoconfig.skyblocker.category.locations": "Локации", - "text.autoconfig.skyblocker.option.locations.dungeons": "Катакомбы", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Включить карту", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Решать головоломку \"Три чудака\"", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Решать головоломку с ифритами", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Решать головоломку с вопросами", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Гномьи шахты", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Показывать топливо дрели", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Решать загадку Fetchur-а", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Решать загадку Puzzler-а", - - "text.autoconfig.skyblocker.category.messages": "Сообщения", - "text.autoconfig.skyblocker.option.messages.hideAbility": "Скрывать перезарядку способностей", - "text.autoconfig.skyblocker.option.messages.hideHeal": "Скрывать сообщения об исцелении", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "Скрывать сообщения AOTE/AOTV", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "Скрывать сообщения Implosion", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Скрывать сообщения Molten Wave", - "text.autoconfig.skyblocker.option.messages.hideAds": "Скрывать рекламу в чате", - "text.autoconfig.skyblocker.option.locations.dungeons.oldLevers": "Хитбокс рычагов из 1.8", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Авто-решение терминалов", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Решать выбор по цвету", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Решать клик по возрастанию", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Решать начинается с", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cИнформация о цене предмета обновится через менее чем 60 секунд. Если нет, проверьте latest.log.", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Скрывать сообщения телепортаторов", - "skyblocker.update.update_link": " §2§nНажми,§r", - "text.autoconfig.skyblocker.option.general.quicknav": "Кнопки быстрого доступа", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Включено", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Показать средние цены на BIN", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Период времени (для средней цены)", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Можно выбрать, за сколько дней будет браться средняя цена", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Показать минимальную цену на BIN", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Показать цены на Bazaar-е", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Показать дату получения", - "text.autoconfig.skyblocker.category.richPresence": "Активность в Discord", - "text.autoconfig.skyblocker.option.richPresence.info": "Отображаемая информация", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Не имеет значения при цикличном отбражении", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Отображать все опции циклично", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Включено", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "Своё сообщение", - "text.autoconfig.skyblocker.option.general.itemList": "Список предметов", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Включено", - "text.autoconfig.skyblocker.option.messages.hideCombo": "Скрывать сообщения о комбо", - "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2Доступна новая версия!", - "skyblocker.update.update_message_end": " §aчтобы узнать об изменениях.", - "skyblocker.update.hover_text": "Открыть Modrinth", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Оповещать об обновлениях", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Ключ API установлен автоматически!", - "key.wikiLookup": "Быстрый переход на вики", - "text.autoconfig.skyblocker.option.general.itemTooltip": "Описание предметов", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Показать цены у NPC" -} \ No newline at end of file + "key.categories.skyblocker": "Skyblocker", + "key.hotbarSlotLock": "Блокировка слотов (В хотбаре)", + "text.autoconfig.skyblocker.title": "Настройки Skyblocker", + "text.autoconfig.skyblocker.category.general": "Основные", + "text.autoconfig.skyblocker.option.general.bars": "Полоски здоровья, маны, защиты и опыта", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Включить полоски", + "text.autoconfig.skyblocker.category.locations": "Локации", + "text.autoconfig.skyblocker.option.locations.dungeons": "Катакомбы", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Включить карту", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Решать головоломку \"Три чудака\"", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Решать головоломку с ифритами", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Решать головоломку с вопросами", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Гномьи шахты", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Показывать топливо дрели", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Решать загадку Fetchur-а", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Решать загадку Puzzler-а", + "text.autoconfig.skyblocker.category.messages": "Сообщения", + "text.autoconfig.skyblocker.option.messages.hideAbility": "Скрывать перезарядку способностей", + "text.autoconfig.skyblocker.option.messages.hideHeal": "Скрывать сообщения об исцелении", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "Скрывать сообщения AOTE/AOTV", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Скрывать сообщения Implosion", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Скрывать сообщения Molten Wave", + "text.autoconfig.skyblocker.option.messages.hideAds": "Скрывать рекламу в чате", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Авто-решение терминалов", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Решать выбор по цвету", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Решать клик по возрастанию", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Решать начинается с", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cИнформация о цене предмета обновится через менее чем 60 секунд. Если нет, проверьте latest.log.", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Скрывать сообщения телепортаторов", + "skyblocker.update.update_link": " §2§nНажми,§r", + "text.autoconfig.skyblocker.option.general.quicknav": "Кнопки быстрого доступа", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Включено", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Показать средние цены на BIN", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Период времени (для средней цены)", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Можно выбрать, за сколько дней будет браться средняя цена", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Показать минимальную цену на BIN", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Показать цены на Bazaar-е", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Показать дату получения", + "text.autoconfig.skyblocker.category.richPresence": "Активность в Discord", + "text.autoconfig.skyblocker.option.richPresence.info": "Отображаемая информация", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Не имеет значения при цикличном отбражении", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Отображать все опции циклично", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Включено", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "Своё сообщение", + "text.autoconfig.skyblocker.option.general.itemList": "Список предметов", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Включено", + "text.autoconfig.skyblocker.option.messages.hideCombo": "Скрывать сообщения о комбо", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2Доступна новая версия!", + "skyblocker.update.update_message_end": " §aчтобы узнать об изменениях.", + "skyblocker.update.hover_text": "Открыть Modrinth", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Оповещать об обновлениях", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Ключ API установлен автоматически!", + "key.wikiLookup": "Быстрый переход на вики", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Описание предметов", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Показать цены у NPC" +} -- cgit From 506a4b1e80a16846b5404d1ae47a23afcf6b784e Mon Sep 17 00:00:00 2001 From: lantice3720 <65650884+lantice3720@users.noreply.github.com> Date: Thu, 18 May 2023 01:25:41 +0900 Subject: Added crafting requirement text, fixed dependency --- build.gradle | 2 +- .../skyblock/itemlist/SearchResultsWidget.java | 2 +- .../skyblock/itemlist/SkyblockCraftingRecipe.java | 8 ++- .../skyblocker/skyblock/rei/SkyblockCategory.java | 57 ++++++++++++++++++++++ .../skyblock/rei/SkyblockCraftingDisplay.java | 35 ++++++++++--- .../rei/SkyblockCraftingDisplayGenerator.java | 2 +- .../skyblock/rei/SkyblockerREIClientPlugin.java | 5 -- 7 files changed, 94 insertions(+), 17 deletions(-) diff --git a/build.gradle b/build.gradle index c0ba2b6a..5ee08867 100644 --- a/build.gradle +++ b/build.gradle @@ -51,7 +51,7 @@ dependencies { modImplementation "com.terraformersmc:modmenu:${project.mod_menu_version}" // REI - modImplementation "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}" + modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}" modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}" // Fabric API. This is technically optional, but you probably want it anyway. diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java index 63ccbd52..ce53112b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java @@ -109,7 +109,7 @@ public class SearchResultsWidget implements Drawable { public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { RenderSystem.disableDepthTest(); if (this.displayRecipes) { - String craftText = this.recipeResults.get(this.currentPage).text; + String craftText = this.recipeResults.get(this.currentPage).craftText; this.client.textRenderer.drawWithShadow(matrices, craftText, this.parentX + 11, this.parentY + 31, 0xffffffff); Text resultText = this.recipeResults.get(this.currentPage).result.getName(); this.client.textRenderer.drawWithShadow(matrices, resultText, this.parentX + 11, this.parentY + 43, 0xffffffff); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java index 56e5c041..29aed7a1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SkyblockCraftingRecipe.java @@ -11,13 +11,13 @@ import java.util.List; public class SkyblockCraftingRecipe { private static final Logger LOGGER = LoggerFactory.getLogger(SkyblockCraftingRecipe.class); - String text = ""; + String craftText = ""; final List grid = new ArrayList<>(9); ItemStack result; public static SkyblockCraftingRecipe fromJsonObject(JsonObject jsonObj) { SkyblockCraftingRecipe recipe = new SkyblockCraftingRecipe(); - if (jsonObj.has("crafttext")) recipe.text = jsonObj.get("crafttext").getAsString(); + if (jsonObj.has("crafttext")) recipe.craftText = jsonObj.get("crafttext").getAsString(); recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("A1").getAsString())); recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("A2").getAsString())); recipe.grid.add(getItemStack(jsonObj.getAsJsonObject("recipe").get("A3").getAsString())); @@ -53,4 +53,8 @@ public class SkyblockCraftingRecipe { public ItemStack getResult() { return result; } + + public String getCraftText() { + return craftText; + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java index 737adfa8..a52abeaa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java @@ -1,15 +1,27 @@ package me.xmrvizzy.skyblocker.skyblock.rei; +import com.google.common.collect.Lists; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import me.shedaniel.math.Point; +import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.Renderer; +import me.shedaniel.rei.api.client.gui.widgets.Label; +import me.shedaniel.rei.api.client.gui.widgets.Slot; +import me.shedaniel.rei.api.client.gui.widgets.Widget; +import me.shedaniel.rei.api.client.gui.widgets.Widgets; import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.util.EntryStacks; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; import net.minecraft.nbt.StringNbtReader; import net.minecraft.text.Text; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Locale; /** @@ -39,4 +51,49 @@ public class SkyblockCategory implements DisplayCategory setupDisplay(SkyblockCraftingDisplay display, Rectangle bounds) { + List out = new ArrayList<>(); + out.add(Widgets.createRecipeBase(bounds)); + + Point startPoint; + if (!display.getCraftText().isEmpty() && display.getCraftText() != null) { + startPoint = new Point(bounds.getCenterX() - 58, bounds.getCenterY() - 31); + } + else { + startPoint = new Point(bounds.getCenterX() - 58, bounds.getCenterY() - 26); + } + Point resultPoint = new Point(startPoint.x + 95, startPoint.y + 19); + out.add(Widgets.createArrow(new Point(startPoint.x + 60, startPoint.y + 18))); + out.add(Widgets.createResultSlotBackground(resultPoint)); + + // Generate Slots + List input = display.getInputEntries(); + List slots = Lists.newArrayList(); + for (int y = 0; y < 3; y++) + for (int x = 0; x < 3; x++) + slots.add(Widgets.createSlot(new Point(startPoint.x + 1 + x * 18, startPoint.y + 1 + y * 18)).markInput()); + for (int i = 0; i < input.size(); i++) { + slots.get(i).entries(input.get(i)).markInput(); + } + out.addAll(slots); + out.add(Widgets.createSlot(resultPoint).entries(display.getOutputEntries().get(0)).disableBackground().markOutput()); + + // Add craftingText Label + Label craftTextLabel = Widgets.createLabel(new Point(bounds.getCenterX(), startPoint.y + 55), Text.of(display.getCraftText())); + out.add(craftTextLabel); + return out; + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java index aee78990..5820780c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplay.java @@ -1,18 +1,39 @@ package me.xmrvizzy.skyblocker.skyblock.rei; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay; +import me.shedaniel.rei.api.common.display.basic.BasicDisplay; import me.shedaniel.rei.api.common.entry.EntryIngredient; -import me.shedaniel.rei.plugin.common.displays.crafting.DefaultCustomDisplay; -import net.minecraft.recipe.Recipe; -import org.jetbrains.annotations.Nullable; import java.util.List; /** * Skyblock Crafting Recipe display class for REI */ -public class SkyblockCraftingDisplay extends DefaultCustomDisplay { - public SkyblockCraftingDisplay(@Nullable Recipe possibleRecipe, List input, List output) { - super(possibleRecipe, input, output); +public class SkyblockCraftingDisplay extends BasicDisplay implements SimpleGridMenuDisplay { + + private final String craftText; + public SkyblockCraftingDisplay(List input, List output, String craftText) { + super(input, output); + this.craftText = craftText; + } + public String getCraftText() { + return craftText; + } + + @Override + public int getWidth() { + return 3; + } + + @Override + public int getHeight() { + return 3; + } + + @Override + public CategoryIdentifier getCategoryIdentifier() { + return SkyblockerREIClientPlugin.SKYBLOCK; } -} +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java index 7d10f202..fd3f56ee 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCraftingDisplayGenerator.java @@ -60,7 +60,7 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator } outputs.add(EntryIngredient.of(EntryStacks.of(recipe.getResult()))); - displays.add(new SkyblockCraftingDisplay(null, inputs, outputs)); + displays.add(new SkyblockCraftingDisplay(inputs, outputs, recipe.getCraftText())); } return displays; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java index fee71765..9d428a24 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java @@ -29,12 +29,7 @@ public class SkyblockerREIClientPlugin implements REIClientPlugin { @Override public void registerDisplays(DisplayRegistry displayRegistry) { - - ViewSearchBuilder builder = ViewSearchBuilder.builder(); - builder.addCategory(SKYBLOCK); - displayRegistry.registerDisplayGenerator(SKYBLOCK, new SkyblockCraftingDisplayGenerator()); - } @Override -- cgit From d6caa2fe1a6f792c3ea310d2b5e76dfa25e27ec4 Mon Sep 17 00:00:00 2001 From: lantice3720 <65650884+lantice3720@users.noreply.github.com> Date: Thu, 18 May 2023 01:26:24 +0900 Subject: Added crafting requirement text, fixed dependency --- src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java | 2 -- .../me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java | 1 - 2 files changed, 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java index a52abeaa..3b402dc9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockCategory.java @@ -14,13 +14,11 @@ import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.util.EntryStacks; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; import net.minecraft.nbt.StringNbtReader; import net.minecraft.text.Text; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Locale; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java index 9d428a24..5f43ca0e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rei/SkyblockerREIClientPlugin.java @@ -4,7 +4,6 @@ import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; -import me.shedaniel.rei.api.client.view.ViewSearchBuilder; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.EntryStacks; -- cgit From 892183390d8b3b2f373cbae34d5d5c70c7541aa4 Mon Sep 17 00:00:00 2001 From: KdGaming0 Date: Wed, 17 May 2023 22:21:34 +0200 Subject: Added translation using Weblate (Norwegian Nynorsk) [skip ci] --- .../resources/assets/skyblocker/lang/nn_NO.json | 190 +++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 src/main/resources/assets/skyblocker/lang/nn_NO.json diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json new file mode 100644 index 00000000..9f0be7cd --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/nn_NO.json @@ -0,0 +1,190 @@ +{ + "key.categories.skyblocker": "", + "key.hotbarSlotLock": "", + "key.wikiLookup": "", + "text.autoconfig.skyblocker.title": "", + "text.autoconfig.skyblocker.category.general": "", + "text.autoconfig.skyblocker.option.general.bars": "", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", + "text.autoconfig.skyblocker.option.general.quicknav": "", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "", + "text.autoconfig.skyblocker.option.general.itemTooltip": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", + "text.autoconfig.skyblocker.option.general.hitbox": "", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "", + "skyblocker.itemTooltip.nullMessage": "", + "skyblocker.itemTooltip.noData": "", + "text.autoconfig.skyblocker.category.richPresence": "", + "text.autoconfig.skyblocker.option.richPresence.info": "", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "", + "text.autoconfig.skyblocker.category.quickNav": "", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", + "text.autoconfig.skyblocker.option.quickNav.button1": "", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button2": "", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button3": "", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button4": "", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button5": "", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button6": "", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button7": "", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button8": "", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button9": "", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button10": "", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button11": "", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button12": "", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", + "text.autoconfig.skyblocker.option.general.itemList": "", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", + "text.autoconfig.skyblocker.category.locations": "", + "text.autoconfig.skyblocker.option.locations.dungeons": "", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", + "text.autoconfig.skyblocker.category.messages": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", + "text.autoconfig.skyblocker.option.messages.hideAbility": "", + "text.autoconfig.skyblocker.option.messages.hideHeal": "", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", + "text.autoconfig.skyblocker.option.messages.hideAds": "", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", + "text.autoconfig.skyblocker.option.messages.hideCombo": "", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "", + "text.autoconfig.skyblocker.option.messages.hideMana": "", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", + "skyblocker.update.update_message": "", + "skyblocker.update.update_link": "", + "skyblocker.update.update_message_end": "", + "skyblocker.update.hover_text": "", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "", + "skyblocker.api.got_key": "" +} -- cgit From ba9c54f3ecf3349e116783c84ab273241741ece4 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 22:21:34 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/nn_NO.json | 94 ---------------------- 1 file changed, 94 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json index 9f0be7cd..6418957c 100644 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nn_NO.json @@ -1,190 +1,96 @@ { - "key.categories.skyblocker": "", "key.hotbarSlotLock": "", - "key.wikiLookup": "", "text.autoconfig.skyblocker.title": "", - "text.autoconfig.skyblocker.category.general": "", "text.autoconfig.skyblocker.option.general.bars": "", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.quicknav": "", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "", "text.autoconfig.skyblocker.option.general.itemTooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", - "text.autoconfig.skyblocker.option.general.hitbox": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "", "skyblocker.itemTooltip.nullMessage": "", - "skyblocker.itemTooltip.noData": "", "text.autoconfig.skyblocker.category.richPresence": "", - "text.autoconfig.skyblocker.option.richPresence.info": "", "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "", "text.autoconfig.skyblocker.option.richPresence.customMessage": "", - "text.autoconfig.skyblocker.category.quickNav": "", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", - "text.autoconfig.skyblocker.option.quickNav.button1": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button2": "", "text.autoconfig.skyblocker.option.quickNav.button2.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button3": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button4": "", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button5": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button6": "", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button7": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button8": "", "text.autoconfig.skyblocker.option.quickNav.button8.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button9": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button10": "", "text.autoconfig.skyblocker.option.quickNav.button10.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button11": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button12": "", "text.autoconfig.skyblocker.option.quickNav.button12.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", - "text.autoconfig.skyblocker.option.general.itemList": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.category.locations": "", "text.autoconfig.skyblocker.option.locations.dungeons": "", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", - "text.autoconfig.skyblocker.category.messages": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", - "text.autoconfig.skyblocker.option.messages.hideAbility": "", "text.autoconfig.skyblocker.option.messages.hideHeal": "", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "", "text.autoconfig.skyblocker.option.messages.hideImplosion": "", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", "text.autoconfig.skyblocker.option.messages.hideAds": "", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", "text.autoconfig.skyblocker.option.messages.hideCombo": "", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "", "text.autoconfig.skyblocker.option.messages.hideMana": "", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", "skyblocker.update.update_message": "", - "skyblocker.update.update_link": "", "skyblocker.update.update_message_end": "", - "skyblocker.update.hover_text": "", "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "", "skyblocker.api.got_key": "" } -- cgit From a31b2e42b59d9c797ef9c683a9cf8528598208cd Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 22:21:34 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/nn_NO.json | 47 ---------------------- 1 file changed, 47 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json index 6418957c..771dd871 100644 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nn_NO.json @@ -1,96 +1,49 @@ { - "key.hotbarSlotLock": "", "text.autoconfig.skyblocker.title": "", - "text.autoconfig.skyblocker.option.general.bars": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", "text.autoconfig.skyblocker.option.general.itemTooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "skyblocker.itemTooltip.nullMessage": "", "text.autoconfig.skyblocker.category.richPresence": "", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", "text.autoconfig.skyblocker.option.richPresence.customMessage": "", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button2.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button8.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button10.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button12.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", "text.autoconfig.skyblocker.option.messages.hideHeal": "", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "", "text.autoconfig.skyblocker.option.messages.hideAds": "", - "text.autoconfig.skyblocker.option.messages.hideCombo": "", "text.autoconfig.skyblocker.option.messages.hideMana": "", - "skyblocker.update.update_message": "", "skyblocker.update.update_message_end": "", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", "skyblocker.api.got_key": "" } -- cgit From 3e8e5dd04d07ecea172afa3ca25f8983afef4896 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 22:21:34 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/nn_NO.json | 26 +--------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json index 771dd871..d04cb3a4 100644 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nn_NO.json @@ -1,49 +1,25 @@ { - "text.autoconfig.skyblocker.title": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.itemTooltip": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.category.richPresence": "", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button2.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button8.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button10.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button12.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.hideHeal": "", "text.autoconfig.skyblocker.option.messages.hideAds": "", - "text.autoconfig.skyblocker.option.messages.hideMana": "", - "skyblocker.update.update_message_end": "", - "skyblocker.api.got_key": "" + "skyblocker.update.update_message_end": "" } -- cgit From 0edb1e8fba1ee1b2d968ce2f447356a6b026c9cb Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 22:21:34 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/nn_NO.json | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json index d04cb3a4..a093f313 100644 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nn_NO.json @@ -1,25 +1,13 @@ { - "text.autoconfig.skyblocker.option.general.bars.barpositions": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.render": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.render": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.render": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.render": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.render": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.hideAds": "", - "skyblocker.update.update_message_end": "" + "text.autoconfig.skyblocker.option.messages.hideAds": "" } -- cgit From a4f2c097a3e7b4128e9db00bdbbf330631e835a6 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 22:21:34 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/nn_NO.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json index a093f313..2a53a662 100644 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nn_NO.json @@ -1,13 +1,7 @@ { - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.quickNav.button1.render": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.render": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.messages.hideAds": "" + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "" } -- cgit From a761f6298842345c2d645a764e9eb674125b6502 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 22:21:34 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/nn_NO.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json index 2a53a662..329eb16b 100644 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nn_NO.json @@ -1,7 +1,4 @@ { - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "" + "text.autoconfig.skyblocker.option.quickNav.button11.render": "" } -- cgit From a2a7aef3184c0cf2c7a8aa9b47c2f902254573f8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 22:21:34 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/nn_NO.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json index 329eb16b..9b9ce11c 100644 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nn_NO.json @@ -1,4 +1,3 @@ { - "text.autoconfig.skyblocker.option.quickNav.button3.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "" } -- cgit From 03b4cf6babf00075d4e4e20ac024b7f4c846e3e8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 May 2023 22:21:34 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/nn_NO.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json index 9b9ce11c..0967ef42 100644 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nn_NO.json @@ -1,3 +1 @@ -{ - "text.autoconfig.skyblocker.option.quickNav.button11.render": "" -} +{} -- cgit From d3a0fd0391ccac8f51e70abcff4b9ae678de0024 Mon Sep 17 00:00:00 2001 From: KdGaming0 Date: Wed, 17 May 2023 20:23:05 +0000 Subject: Translated using Weblate (Norwegian Nynorsk) [skip ci] Currently translated at 7.4% (14 of 188 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/nn/ --- src/main/resources/assets/skyblocker/lang/nn_NO.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json index 0967ef42..cd7ed912 100644 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nn_NO.json @@ -1 +1,16 @@ -{} +{ + "key.hotbarSlotLock": "Slotslås (Hotbar)", + "key.wikiLookup": "Wiki Opslag", + "text.autoconfig.skyblocker.title": "Skyblocker Innstillinger", + "text.autoconfig.skyblocker.category.general": "Generelt", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Lag 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Lag 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Høgre", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deaktivert", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Helsebar posisjon", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar-posisjon", + "key.categories.skyblocker": "SkyBlocker", + "text.autoconfig.skyblocker.option.general.bars": "Liv, mana, forsvar og XP-bar", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Aktiver bar", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Konfigurer barposisjoner" +} -- cgit From 8355b74be151b077f724c27ba7314bee307ad2d1 Mon Sep 17 00:00:00 2001 From: KdGaming0 Date: Thu, 18 May 2023 12:03:10 +0200 Subject: Added translation using Weblate (Norwegian Bokmål) [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/assets/skyblocker/lang/nb_NO.json | 191 +++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 src/main/resources/assets/skyblocker/lang/nb_NO.json diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json new file mode 100644 index 00000000..98742c78 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -0,0 +1,191 @@ +{ + "key.categories.skyblocker": "", + "key.hotbarSlotLock": "", + "key.wikiLookup": "", + "text.autoconfig.skyblocker.title": "", + "text.autoconfig.skyblocker.category.general": "", + "text.autoconfig.skyblocker.option.general.bars": "", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", + "text.autoconfig.skyblocker.option.general.quicknav": "", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "", + "text.autoconfig.skyblocker.option.general.itemTooltip": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", + "text.autoconfig.skyblocker.option.general.hitbox": "", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "", + "skyblocker.itemTooltip.nullMessage": "", + "skyblocker.itemTooltip.noData": "", + "text.autoconfig.skyblocker.category.richPresence": "", + "text.autoconfig.skyblocker.option.richPresence.info": "", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "", + "text.autoconfig.skyblocker.category.quickNav": "", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", + "text.autoconfig.skyblocker.option.quickNav.button1": "", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button2": "", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button3": "", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button4": "", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button5": "", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button6": "", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button7": "", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button8": "", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button9": "", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button10": "", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button11": "", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button12": "", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", + "text.autoconfig.skyblocker.option.general.itemList": "", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", + "text.autoconfig.skyblocker.category.locations": "", + "text.autoconfig.skyblocker.option.locations.dungeons": "", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", + "text.autoconfig.skyblocker.category.messages": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", + "text.autoconfig.skyblocker.option.messages.hideAbility": "", + "text.autoconfig.skyblocker.option.messages.hideHeal": "", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", + "text.autoconfig.skyblocker.option.messages.hideAds": "", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", + "text.autoconfig.skyblocker.option.messages.hideCombo": "", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "", + "text.autoconfig.skyblocker.option.messages.hideMana": "", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", + "skyblocker.update.update_message": "", + "skyblocker.update.update_link": "", + "skyblocker.update.update_message_end": "", + "skyblocker.update.hover_text": "", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "", + "skyblocker.updaterepository.failed": "", + "skyblocker.api.got_key": "" +} -- cgit From 6e5c1d79747fd3b3c2d77b9cdd732375f6102d38 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 18 May 2023 12:03:10 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/nb_NO.json | 97 +--------------------- 1 file changed, 1 insertion(+), 96 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json index 98742c78..e7c03e43 100644 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -1,191 +1,96 @@ { - "key.categories.skyblocker": "", "key.hotbarSlotLock": "", - "key.wikiLookup": "", "text.autoconfig.skyblocker.title": "", - "text.autoconfig.skyblocker.category.general": "", "text.autoconfig.skyblocker.option.general.bars": "", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.quicknav": "", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "", "text.autoconfig.skyblocker.option.general.itemTooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", - "text.autoconfig.skyblocker.option.general.hitbox": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "", "skyblocker.itemTooltip.nullMessage": "", - "skyblocker.itemTooltip.noData": "", "text.autoconfig.skyblocker.category.richPresence": "", - "text.autoconfig.skyblocker.option.richPresence.info": "", "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "", "text.autoconfig.skyblocker.option.richPresence.customMessage": "", - "text.autoconfig.skyblocker.category.quickNav": "", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", - "text.autoconfig.skyblocker.option.quickNav.button1": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button2": "", "text.autoconfig.skyblocker.option.quickNav.button2.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button3": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button4": "", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button5": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button6": "", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button7": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button8": "", "text.autoconfig.skyblocker.option.quickNav.button8.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button9": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button10": "", "text.autoconfig.skyblocker.option.quickNav.button10.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button11": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button12": "", "text.autoconfig.skyblocker.option.quickNav.button12.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", - "text.autoconfig.skyblocker.option.general.itemList": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.category.locations": "", "text.autoconfig.skyblocker.option.locations.dungeons": "", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", - "text.autoconfig.skyblocker.category.messages": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", - "text.autoconfig.skyblocker.option.messages.hideAbility": "", "text.autoconfig.skyblocker.option.messages.hideHeal": "", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "", "text.autoconfig.skyblocker.option.messages.hideImplosion": "", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", "text.autoconfig.skyblocker.option.messages.hideAds": "", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", "text.autoconfig.skyblocker.option.messages.hideCombo": "", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "", "text.autoconfig.skyblocker.option.messages.hideMana": "", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", "skyblocker.update.update_message": "", - "skyblocker.update.update_link": "", "skyblocker.update.update_message_end": "", - "skyblocker.update.hover_text": "", "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "", - "skyblocker.updaterepository.failed": "", - "skyblocker.api.got_key": "" + "skyblocker.updaterepository.failed": "" } -- cgit From 849083f3feb9bdbc71c59922c28739df41b09e0b Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 18 May 2023 12:03:11 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/nb_NO.json | 47 ---------------------- 1 file changed, 47 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json index e7c03e43..7742c6d5 100644 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -1,96 +1,49 @@ { - "key.hotbarSlotLock": "", "text.autoconfig.skyblocker.title": "", - "text.autoconfig.skyblocker.option.general.bars": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", "text.autoconfig.skyblocker.option.general.itemTooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "skyblocker.itemTooltip.nullMessage": "", "text.autoconfig.skyblocker.category.richPresence": "", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", "text.autoconfig.skyblocker.option.richPresence.customMessage": "", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button2.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button8.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button10.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button12.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", "text.autoconfig.skyblocker.option.messages.hideHeal": "", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "", "text.autoconfig.skyblocker.option.messages.hideAds": "", - "text.autoconfig.skyblocker.option.messages.hideCombo": "", "text.autoconfig.skyblocker.option.messages.hideMana": "", - "skyblocker.update.update_message": "", "skyblocker.update.update_message_end": "", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", "skyblocker.updaterepository.failed": "" } -- cgit From d99c6cb0e13398792c77bd3a1162c093d3b65ac6 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 18 May 2023 12:03:11 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/nb_NO.json | 26 +--------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json index 7742c6d5..d04cb3a4 100644 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -1,49 +1,25 @@ { - "text.autoconfig.skyblocker.title": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.itemTooltip": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.category.richPresence": "", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button2.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button8.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button10.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button12.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.hideHeal": "", "text.autoconfig.skyblocker.option.messages.hideAds": "", - "text.autoconfig.skyblocker.option.messages.hideMana": "", - "skyblocker.update.update_message_end": "", - "skyblocker.updaterepository.failed": "" + "skyblocker.update.update_message_end": "" } -- cgit From d0dfd97eadf540175d42a30120245426557ae79b Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 18 May 2023 12:03:11 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/nb_NO.json | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json index d04cb3a4..a093f313 100644 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -1,25 +1,13 @@ { - "text.autoconfig.skyblocker.option.general.bars.barpositions": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.render": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.render": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.render": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.render": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.render": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.hideAds": "", - "skyblocker.update.update_message_end": "" + "text.autoconfig.skyblocker.option.messages.hideAds": "" } -- cgit From c6a05216b86b26f794640cd3b4522a4adce0aca4 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 18 May 2023 12:03:11 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/nb_NO.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json index a093f313..2a53a662 100644 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -1,13 +1,7 @@ { - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.quickNav.button1.render": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.render": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.messages.hideAds": "" + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "" } -- cgit From 0b7ad08e475a2251d0d3d974b6158dfe68967e23 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 18 May 2023 12:03:11 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/nb_NO.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json index 2a53a662..329eb16b 100644 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -1,7 +1,4 @@ { - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "" + "text.autoconfig.skyblocker.option.quickNav.button11.render": "" } -- cgit From b36f56bddb3cc67deaa22df57206b66200fe1b4b Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 18 May 2023 12:03:11 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/nb_NO.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json index 329eb16b..9b9ce11c 100644 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -1,4 +1,3 @@ { - "text.autoconfig.skyblocker.option.quickNav.button3.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "" } -- cgit From 810b9bcb1f0f6388f0ae51aee802b8bfc0dec250 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 18 May 2023 12:03:11 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/nb_NO.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json index 9b9ce11c..0967ef42 100644 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -1,3 +1 @@ -{ - "text.autoconfig.skyblocker.option.quickNav.button11.render": "" -} +{} -- cgit From 303c27d91b774dc89abb2c6726f81c973b86a19a Mon Sep 17 00:00:00 2001 From: KdGaming0 Date: Thu, 18 May 2023 10:04:57 +0000 Subject: Translated using Weblate (Norwegian Bokmål) [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 40.7% (77 of 189 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/nb_NO/ --- .../resources/assets/skyblocker/lang/nb_NO.json | 87 +++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json index 0967ef42..3c7cae87 100644 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -1 +1,86 @@ -{} +{ + "key.wikiLookup": "Wiki-oppslag", + "text.autoconfig.skyblocker.title": "Skyblocker-innstillinger", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Aktiver barer", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Konfigurer barposisjoner", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Lag 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Lag 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Høyre", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deaktivert", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Helsebar posisjon", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Posisjon", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Forsvarsbar posisjon", + "text.autoconfig.skyblocker.option.general.quicknav": "Hurtignavigasjon", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Aktiver hurtignavigasjon", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Vis forhåndsvisning av ryggsekk uten å holde Shift nede", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Verktøytips for Gjenstad", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Aktiver NPC-pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Aktiver Avg. BIN Pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Gjennomsnittlig type", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Pris for 1 dag", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Pris for 3 dager", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Begge", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Aktiver laveste BIN-pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Aktiver Bazaar kjøp/salg Pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Aktiver museum og dato", + "text.autoconfig.skyblocker.option.general.hitbox": "Treffbokser", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Aktiver 1.8 treffboks for avlinger", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Aktiver 1.8 spak Treffboks", + "skyblocker.itemTooltip.noData": "§cIngen data", + "text.autoconfig.skyblocker.category.richPresence": "Discord-rik tilstedeværelse", + "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock-informasjon", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "VESKE", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "PLASSERING", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Denne verdien har ikke noe å si hvis du cycling", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Cycle Skyblock Informasjon", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Aktivert", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "Egendefinert melding", + "text.autoconfig.skyblocker.category.quickNav": "Rask navigering", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Aktiver hurtignavigering", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button2": "Knapp 2", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button3": "Knapp 3", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button4": "Knapp 4", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button5": "Knapp 5", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", + "key.categories.skyblocker": "SkyBlocker", + "key.hotbarSlotLock": "Slot lås (Hotbar)", + "text.autoconfig.skyblocker.category.general": "Generelt", + "text.autoconfig.skyblocker.option.general.bars": "Helse, mana, forsvar og XP-barer", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar stilling", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Du kan velge hvor mange dager med gjennomsnittspris som skal være", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cVareprisinformasjon på verktøytips fornyes om maks 60 sekunder. Hvis ikke, sjekk latest.log", + "text.autoconfig.skyblocker.option.quickNav.button1": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI Tittel" +} -- cgit From 78add48c71a6d59035e9c1d638ec162ede2813b7 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 18 May 2023 15:26:58 -0400 Subject: Refactored ContainerSolverManager.init --- src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 +- .../me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index a2ace0c0..503d3a64 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -47,7 +47,6 @@ public class SkyblockerMod implements ClientModInitializer { WikiLookup.init(); ItemRegistry.init(); RepositoryUpdate.init(); - ContainerSolverManager.init(); BackpackPreview.init(); QuickNav.init(); StatsCommand.init(); @@ -55,6 +54,7 @@ public class SkyblockerMod implements ClientModInitializer { ChatMessageListener.init(); UpdateChecker.init(); DiscordRPCManager.init(); + containerSolverManager.init(); scheduler.scheduleCyclic(Utils::sbChecker, 20); scheduler.scheduleCyclic(DiscordRPCManager::update, 100); scheduler.scheduleCyclic(DungeonBlaze::update, 4); diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 3e138d14..635475bf 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -1,7 +1,6 @@ package me.xmrvizzy.skyblocker.gui; import com.mojang.blaze3d.systems.RenderSystem; -import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; @@ -40,14 +39,13 @@ public class ContainerSolverManager extends DrawableHelper { }; } - public static void init() { + public void init() { ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { - ContainerSolverManager containerSolverManager = SkyblockerMod.getInstance().containerSolverManager; if (Utils.isOnSkyblock && screen instanceof GenericContainerScreen genericContainerScreen) { - ScreenEvents.afterRender(screen).register((screen1, matrices, mouseX, mouseY, delta) -> containerSolverManager.onDraw(matrices, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9))); - containerSolverManager.onSetScreen(genericContainerScreen); + ScreenEvents.afterRender(screen).register((screen1, matrices, mouseX, mouseY, delta) -> onDraw(matrices, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9))); + onSetScreen(genericContainerScreen); } else { - containerSolverManager.clearScreen(); + clearScreen(); } }); } -- cgit From 73968e490b4a6886b05f45a95bfcd2328affdac4 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Fri, 19 May 2023 17:05:00 +0200 Subject: Rework just about everything to gracefully handle unexpected inputs --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 + .../skyblocker/mixin/PlayerListHudMixin.java | 25 ++---- .../skyblock/tabhud/screens/EmptyScreen.java | 7 +- .../skyblocker/skyblock/tabhud/screens/Screen.java | 65 +++++++-------- .../screens/genericInfo/GardenInfoScreen.java | 14 ++-- .../screens/genericInfo/GenericInfoScreen.java | 14 ++-- .../tabhud/screens/main/CrimsonIsleScreen.java | 14 ++-- .../tabhud/screens/main/DungeonHubScreen.java | 8 +- .../tabhud/screens/main/DungeonScreen.java | 16 ++-- .../tabhud/screens/main/FarmingServerScreen.java | 10 +-- .../skyblock/tabhud/screens/main/GardenScreen.java | 8 +- .../tabhud/screens/main/GenericServerScreen.java | 7 +- .../tabhud/screens/main/GuestServerScreen.java | 8 +- .../tabhud/screens/main/HomeServerScreen.java | 10 +-- .../tabhud/screens/main/HubServerScreen.java | 10 +-- .../tabhud/screens/main/MineServerScreen.java | 14 ++-- .../tabhud/screens/main/ParkServerScreen.java | 7 +- .../screens/playerList/DungeonPlayerScreen.java | 16 ++-- .../screens/playerList/GuestPlayerScreen.java | 10 +-- .../screens/playerList/HomePlayerScreen.java | 10 +-- .../screens/playerList/PlayerListScreen.java | 6 +- .../skyblock/tabhud/util/PlayerListMgr.java | 92 ++++++++++++++++++++++ .../skyblock/tabhud/util/PlayerLocator.java | 29 +++---- .../skyblocker/skyblock/tabhud/util/StrMan.java | 68 ---------------- .../skyblock/tabhud/widget/CommsWidget.java | 28 ++++--- .../skyblock/tabhud/widget/ComposterWidget.java | 26 ++---- .../skyblock/tabhud/widget/CookieWidget.java | 20 +++-- .../skyblock/tabhud/widget/DungeonDeathWidget.java | 38 ++++----- .../tabhud/widget/DungeonDownedWidget.java | 26 +++--- .../tabhud/widget/DungeonPlayerWidget.java | 47 +++++------ .../tabhud/widget/DungeonPuzzleWidget.java | 20 +++-- .../tabhud/widget/DungeonSecretWidget.java | 16 +--- .../tabhud/widget/DungeonServerWidget.java | 45 +++++------ .../skyblock/tabhud/widget/EffectWidget.java | 23 +++++- .../skyblock/tabhud/widget/ElectionWidget.java | 69 +++++++++------- .../skyblock/tabhud/widget/EmptyWidget.java | 5 +- .../skyblock/tabhud/widget/EssenceWidget.java | 22 +++--- .../skyblock/tabhud/widget/EventWidget.java | 12 +-- .../skyblock/tabhud/widget/FireSaleWidget.java | 45 ++++++----- .../skyblock/tabhud/widget/ForgeWidget.java | 47 +++++++---- .../skyblock/tabhud/widget/GardenServerWidget.java | 44 +++++------ .../skyblock/tabhud/widget/GardenSkillsWidget.java | 47 +++++++---- .../skyblock/tabhud/widget/GuestServerWidget.java | 23 ++---- .../skyblock/tabhud/widget/IslandGuestsWidget.java | 19 ++--- .../skyblock/tabhud/widget/IslandOwnersWidget.java | 16 ++-- .../skyblock/tabhud/widget/IslandSelfWidget.java | 15 ++-- .../skyblock/tabhud/widget/IslandServerWidget.java | 29 ++----- .../tabhud/widget/JacobsContestWidget.java | 20 ++--- .../skyblock/tabhud/widget/MinionWidget.java | 24 +++--- .../skyblock/tabhud/widget/ParkServerWidget.java | 24 ++---- .../skyblock/tabhud/widget/PlayerListWidget.java | 16 +++- .../skyblock/tabhud/widget/PowderWidget.java | 14 +--- .../skyblock/tabhud/widget/ProfileWidget.java | 24 ++---- .../skyblock/tabhud/widget/QuestWidget.java | 12 +-- .../skyblock/tabhud/widget/ReputationWidget.java | 42 ++++++---- .../skyblock/tabhud/widget/ServerWidget.java | 20 +---- .../skyblock/tabhud/widget/SkillsWidget.java | 40 +++++----- .../skyblock/tabhud/widget/TrapperWidget.java | 11 +-- .../skyblock/tabhud/widget/UpgradeWidget.java | 13 ++- .../skyblock/tabhud/widget/VolcanoWidget.java | 18 +++-- .../skyblocker/skyblock/tabhud/widget/Widget.java | 38 +++++++++ .../widget/component/IcoFatTextComponent.java | 26 ++++-- .../tabhud/widget/component/IcoTextComponent.java | 19 ++++- .../widget/component/PlainTextComponent.java | 11 ++- .../tabhud/widget/component/ProgressComponent.java | 26 ++++-- 65 files changed, 780 insertions(+), 770 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index f804d90e..fa80bcc2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -6,6 +6,7 @@ import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze; import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.utils.Scheduler; import me.xmrvizzy.skyblocker.utils.Utils; @@ -23,6 +24,7 @@ public class SkyblockerMod { scheduler.scheduleCyclic(DungeonBlaze::update, 4); scheduler.scheduleCyclic(BackpackPreview::tick, 50); scheduler.scheduleCyclic(DwarvenHud::update, 40); + scheduler.scheduleCyclic(PlayerListMgr::updateList, 20); } public static SkyblockerMod getInstance() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index a2ab848a..53494940 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -1,7 +1,5 @@ package me.xmrvizzy.skyblocker.mixin; -import java.util.List; - import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -17,7 +15,6 @@ import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.hud.PlayerListHud; import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; @@ -46,29 +43,17 @@ public class PlayerListHudMixin { return; } - List list = nwH.getListedPlayerListEntries().stream() - .sorted(PlayerListHudAccessor.getOrdering()).toList(); - - // list hasn't loaded completely, abort until widgets handle errors correctly - if (list.size() < 40) { - return; - } - int w = scaledW; int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); - try { - - Screen screen = Screen.getCorrect(w, h, list, footer); - if (screen != null) { - screen.render(ms); - info.cancel(); - } + long then = System.nanoTime(); + Screen screen = Screen.getCorrect(w, h, footer); + screen.render(ms); + info.cancel(); } catch (Exception e) { e.printStackTrace(); - client.player.sendMessage(Text.of("The tab HUD has encountered unexpected text, see log! :(")); } } -} +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java index efc64a70..5c302eb3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java @@ -1,17 +1,14 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EmptyWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class EmptyScreen extends Screen { - public EmptyScreen(int w, int h, List ple, Text footer) { + public EmptyScreen(int w, int h, Text footer) { super(w, h); - EmptyWidget ew = new EmptyWidget(ple); + EmptyWidget ew = new EmptyWidget(); this.center(ew); this.addWidget(ew); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index cc16da8b..ae71d7bd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -1,7 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; import java.util.ArrayList; -import java.util.List; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; @@ -24,7 +23,6 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.HomePlayerScree import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.PlayerListScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @@ -39,57 +37,48 @@ public class Screen { this.h = (int) (h / scale); } - public static Screen getCorrect(int w, int h, List ple, Text footer) { + public static Screen getCorrect(int w, int h, Text footer) { if (TabHud.genericTgl.isPressed()) { - return Screen.correctGenericScrn(w, h, ple, footer); - // } else if (TabHud.mapTgl.isPressed()) { - // return Screen.correctMapScrn(w, h, ple, footer); + return Screen.correctGenericScrn(w, h, footer); } else if (TabHud.playerTgl.isPressed()) { - return Screen.correctPlayerScrn(w, h, ple, footer); + return Screen.correctPlayerScrn(w, h, footer); } else { - return Screen.correctMainScrn(w, h, ple, footer); + return Screen.correctMainScrn(w, h, footer); } } - // private static Screen correctMapScrn(int w, int h, List - // list, Text footer) { - // // return switch (getScreenType(list)) { - // // case CRYSTAL_HOLLOWS -> null; - // // case DUNGEON -> null; - // // default -> new EmptyScreen(w, h, list, footer); - // // }; - // return new EmptyScreen(w, h, list, footer); - // } - - private static Screen correctGenericScrn(int w, int h, List list, Text footer) { + private static Screen correctGenericScrn(int w, int h, Text footer) { return switch (PlayerLocator.getPlayerLocation()) { - case GARDEN -> new GardenInfoScreen(w, h, list, footer); // ok - default -> new GenericInfoScreen(w, h, list, footer); // ok + case GARDEN -> new GardenInfoScreen(w, h, footer); // ok + case UNKNOWN -> new EmptyScreen(w, h, footer); // ok + default -> new GenericInfoScreen(w, h, footer); // ok }; } - private static Screen correctPlayerScrn(int w, int h, List list, Text footer) { + private static Screen correctPlayerScrn(int w, int h, Text footer) { return switch (PlayerLocator.getPlayerLocation()) { - case GUEST_ISLAND -> new GuestPlayerScreen(w, h, list, footer); // ok - case HOME_ISLAND -> new HomePlayerScreen(w, h, list, footer); // ok - case DUNGEON -> new DungeonPlayerScreen(w, h, list, footer); - default -> new PlayerListScreen(w, h, list, footer); // ok + case GUEST_ISLAND -> new GuestPlayerScreen(w, h, footer); // ok + case HOME_ISLAND, GARDEN -> new HomePlayerScreen(w, h, footer); // ok for 1 player + case DUNGEON -> new DungeonPlayerScreen(w, h, footer); + case UNKNOWN -> new EmptyScreen(w, h, footer); // ok + default -> new PlayerListScreen(w, h, footer); // ok }; } - private static Screen correctMainScrn(int w, int h, List list, Text footer) { + private static Screen correctMainScrn(int w, int h, Text footer) { return switch (PlayerLocator.getPlayerLocation()) { - case PARK -> new ParkServerScreen(w, h, list, footer); // ok - case HUB -> new HubServerScreen(w, h, list, footer); // ok - case HOME_ISLAND -> new HomeServerScreen(w, h, list, footer); // ok - case GUEST_ISLAND -> new GuestServerScreen(w, h, list, footer); // ok - case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, list, footer); - case FARMING_ISLAND -> new FarmingServerScreen(w, h, list, footer); // ok - case DUNGEON_HUB -> new DungeonHubScreen(w, h, list, footer); // ok - case DUNGEON -> new DungeonScreen(w, h, list, footer); // ok - case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, list, footer); // ??? - case GARDEN -> new GardenScreen(w, h, list, footer); - default -> new GenericServerScreen(w, h, list, footer); // ok + case PARK -> new ParkServerScreen(w, h, footer); // ok + case HUB -> new HubServerScreen(w, h, footer); // ok when fire sale incoming, TODO active fs, no fs + case HOME_ISLAND -> new HomeServerScreen(w, h, footer); // ok + case GUEST_ISLAND -> new GuestServerScreen(w, h, footer); // ok + case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, footer); // ok, TODO 4 comms, active forge + case FARMING_ISLAND -> new FarmingServerScreen(w, h, footer); + case DUNGEON_HUB -> new DungeonHubScreen(w, h, footer); // ok + case DUNGEON -> new DungeonScreen(w, h, footer); // ok + case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, footer); + case GARDEN -> new GardenScreen(w, h, footer); // ok + case UNKNOWN -> new EmptyScreen(w, h, footer); // ok + default -> new GenericServerScreen(w, h, footer); // ok }; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java index f24fb82a..0bb12c8e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; @@ -10,24 +10,24 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenSkillsWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.JacobsContestWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class GardenInfoScreen extends Screen { - public GardenInfoScreen(int w, int h, List ple, Text footer) { + public GardenInfoScreen(int w, int h, Text footer) { super(w, h); String f = footer.getString(); - GardenSkillsWidget gsw = new GardenSkillsWidget(ple); - EventWidget evw = new EventWidget(ple, true); + GardenSkillsWidget gsw = new GardenSkillsWidget(); + EventWidget evw = new EventWidget(true); UpgradeWidget uw = new UpgradeWidget(f); - ProfileWidget pw = new ProfileWidget(ple); + ProfileWidget pw = new ProfileWidget(); EffectWidget efw = new EffectWidget(f); - JacobsContestWidget jcw = new JacobsContestWidget(ple); + JacobsContestWidget jcw = new JacobsContestWidget(); CookieWidget cw = new CookieWidget(f); // layout code incoming diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java index 764397ae..a3e75ab6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; @@ -11,24 +11,24 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.SkillsWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class GenericInfoScreen extends Screen { - public GenericInfoScreen(int w, int h, List ple, Text footer) { + public GenericInfoScreen(int w, int h, Text footer) { super(w, h); String f = footer.getString(); - SkillsWidget sw = new SkillsWidget(ple); - EventWidget evw = new EventWidget(ple, false); + SkillsWidget sw = new SkillsWidget(); + EventWidget evw = new EventWidget(false); UpgradeWidget uw = new UpgradeWidget(f); - ProfileWidget pw = new ProfileWidget(ple); + ProfileWidget pw = new ProfileWidget(); EffectWidget efw = new EffectWidget(f); - ElectionWidget elw = new ElectionWidget(ple); + ElectionWidget elw = new ElectionWidget(); CookieWidget cw = new CookieWidget(f); this.stackWidgetsH(sw, evw, uw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java index 046abcbb..6e6f563b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java @@ -1,24 +1,24 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.QuestWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ReputationWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.VolcanoWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class CrimsonIsleScreen extends Screen { - public CrimsonIsleScreen(int w, int h, List ple, Text footer) { + public CrimsonIsleScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(ple); - ReputationWidget rw = new ReputationWidget(ple); - QuestWidget qw = new QuestWidget(ple); - VolcanoWidget vw = new VolcanoWidget(ple); + ServerWidget sw = new ServerWidget(); + ReputationWidget rw = new ReputationWidget(); + QuestWidget qw = new QuestWidget(); + VolcanoWidget vw = new VolcanoWidget(); this.stackWidgetsH(sw, rw); this.stackWidgetsH(qw, vw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java index 4f721dfc..5db461af 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java @@ -1,21 +1,19 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EssenceWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class DungeonHubScreen extends Screen{ - public DungeonHubScreen(int w, int h, List list, Text footer) { + public DungeonHubScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(list); - EssenceWidget ew = new EssenceWidget(list); + ServerWidget sw = new ServerWidget(); + EssenceWidget ew = new EssenceWidget(); this.centerW(sw); this.centerW(ew); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java index 35383f1b..98ce476e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDeathWidget; @@ -9,18 +9,18 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPuzzleWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonSecretWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonServerWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class DungeonScreen extends Screen { - public DungeonScreen(int w, int h, List ple, Text footer) { + public DungeonScreen(int w, int h, Text footer) { super(w, h); - DungeonDownedWidget ddow = new DungeonDownedWidget(ple); - DungeonDeathWidget ddew = new DungeonDeathWidget(ple); - DungeonSecretWidget dscw = new DungeonSecretWidget(ple); - DungeonServerWidget dsrw = new DungeonServerWidget(ple); - DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget(ple); + DungeonDownedWidget ddow = new DungeonDownedWidget(); + DungeonDeathWidget ddew = new DungeonDeathWidget(); + DungeonSecretWidget dscw = new DungeonSecretWidget(); + DungeonServerWidget dsrw = new DungeonServerWidget(); + DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget(); this.offCenterL(ddow); this.offCenterL(ddew); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java index 206af26c..02c81f23 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java @@ -1,21 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.TrapperWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class FarmingServerScreen extends Screen{ - public FarmingServerScreen(int w, int h, List list, Text footer) { + public FarmingServerScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(list); - TrapperWidget tw = new TrapperWidget(list); + ServerWidget sw = new ServerWidget(); + TrapperWidget tw = new TrapperWidget(); this.centerW(sw); this.centerW(tw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java index 3debf905..ae5b642f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java @@ -1,20 +1,18 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ComposterWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenServerWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class GardenScreen extends Screen{ - public GardenScreen(int w, int h, List ple, Text footer) { + public GardenScreen(int w, int h, Text footer) { super(w, h); - GardenServerWidget gsw = new GardenServerWidget(ple); - ComposterWidget cw = new ComposterWidget(ple); + GardenServerWidget gsw = new GardenServerWidget(); + ComposterWidget cw = new ComposterWidget(); this.stackWidgetsH(gsw, cw); this.centerW(gsw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java index 8afdcac5..a89563db 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java @@ -1,19 +1,18 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class GenericServerScreen extends Screen { - public GenericServerScreen(int w, int h, List ple, Text footer) { + public GenericServerScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(ple); + ServerWidget sw = new ServerWidget(); this.center(sw); this.addWidget(sw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java index b6388be9..57d7a199 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java @@ -1,19 +1,19 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GuestServerWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class GuestServerScreen extends Screen{ - public GuestServerScreen(int w, int h, List list, Text footer) { + public GuestServerScreen(int w, int h, Text footer) { super(w, h); - GuestServerWidget gsw = new GuestServerWidget(list); + GuestServerWidget gsw = new GuestServerWidget(); this.center(gsw); this.addWidget(gsw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java index 9ce8ee0e..e61ba4b0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java @@ -1,21 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandServerWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.MinionWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class HomeServerScreen extends Screen { - public HomeServerScreen(int w, int h, List list, Text footer) { + public HomeServerScreen(int w, int h, Text footer) { super(w, h); - IslandServerWidget isw = new IslandServerWidget(list); - MinionWidget mw = new MinionWidget(list); + IslandServerWidget isw = new IslandServerWidget(); + MinionWidget mw = new MinionWidget(); this.centerH(isw); this.centerH(mw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java index 3ba8fc47..e2857f7e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java @@ -1,21 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.FireSaleWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class HubServerScreen extends Screen { - public HubServerScreen(int w, int h, List ple, Text footer) { + public HubServerScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(ple); - FireSaleWidget fsw = new FireSaleWidget(ple); + ServerWidget sw = new ServerWidget(); + FireSaleWidget fsw = new FireSaleWidget(); this.centerW(sw); this.centerW(fsw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java index f0dd6e0a..22eb0ffa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; @@ -8,18 +8,18 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ForgeWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PowderWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class MineServerScreen extends Screen{ - public MineServerScreen(int w, int h, List list, Text footer) { + public MineServerScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(list); - PowderWidget pw = new PowderWidget(list); - CommsWidget cw = new CommsWidget(list); - ForgeWidget fw = new ForgeWidget(list); + ServerWidget sw = new ServerWidget(); + PowderWidget pw = new PowderWidget(); + CommsWidget cw = new CommsWidget(); + ForgeWidget fw = new ForgeWidget(); this.stackWidgetsH(sw, pw, cw); this.centerH(fw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java index c1d09f6c..aa65d946 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java @@ -1,19 +1,16 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ParkServerWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class ParkServerScreen extends Screen{ - public ParkServerScreen(int w, int h, List ple, Text footer) { + public ParkServerScreen(int w, int h, Text footer) { super(w, h); - ParkServerWidget sw = new ParkServerWidget(ple); + ParkServerWidget sw = new ParkServerWidget(); this.center(sw); this.addWidget(sw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java index aba19c56..64d0db99 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java @@ -1,23 +1,23 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class DungeonPlayerScreen extends Screen { - public DungeonPlayerScreen(int w, int h, List ple, Text footer) { + public DungeonPlayerScreen(int w, int h, Text footer) { super(w, h); - DungeonPlayerWidget dpw1 = new DungeonPlayerWidget(ple, 1); - DungeonPlayerWidget dpw2 = new DungeonPlayerWidget(ple, 2); - DungeonPlayerWidget dpw3 = new DungeonPlayerWidget(ple, 3); - DungeonPlayerWidget dpw4 = new DungeonPlayerWidget(ple, 4); - DungeonPlayerWidget dpw5 = new DungeonPlayerWidget(ple, 5); + DungeonPlayerWidget dpw1 = new DungeonPlayerWidget(1); + DungeonPlayerWidget dpw2 = new DungeonPlayerWidget(2); + DungeonPlayerWidget dpw3 = new DungeonPlayerWidget(3); + DungeonPlayerWidget dpw4 = new DungeonPlayerWidget(4); + DungeonPlayerWidget dpw5 = new DungeonPlayerWidget(5); this.offCenterL(dpw1); this.offCenterL(dpw2); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java index f8210443..5a9733cc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java @@ -1,21 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandGuestsWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandOwnersWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class GuestPlayerScreen extends Screen{ - public GuestPlayerScreen(int w, int h, List list, Text footer) { + public GuestPlayerScreen(int w, int h, Text footer) { super(w, h); - IslandGuestsWidget igw = new IslandGuestsWidget(list); - IslandOwnersWidget iow = new IslandOwnersWidget(list); + IslandGuestsWidget igw = new IslandGuestsWidget(); + IslandOwnersWidget iow = new IslandOwnersWidget(); this.centerH(iow); this.centerH(igw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java index d89f6d6a..2a159ecc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java @@ -1,21 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandGuestsWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandSelfWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class HomePlayerScreen extends Screen { - public HomePlayerScreen(int w, int h, List list, Text footer) { + public HomePlayerScreen(int w, int h, Text footer) { super(w, h); - IslandSelfWidget isw = new IslandSelfWidget(list); - IslandGuestsWidget igw = new IslandGuestsWidget(list); + IslandSelfWidget isw = new IslandSelfWidget(); + IslandGuestsWidget igw = new IslandGuestsWidget(); this.centerH(isw); this.centerH(igw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java index eca2e4aa..5db01512 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java @@ -1,19 +1,17 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PlayerListWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class PlayerListScreen extends Screen { - public PlayerListScreen(int w, int h, List ple, Text footer) { + public PlayerListScreen(int w, int h, Text footer) { super(w, h); - PlayerListWidget plw = new PlayerListWidget(ple); + PlayerListWidget plw = new PlayerListWidget(); this.center(plw); this.addWidget(plw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java new file mode 100644 index 00000000..6243415d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -0,0 +1,92 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.util; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import me.xmrvizzy.skyblocker.mixin.PlayerListHudAccessor; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class PlayerListMgr { + + public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Regex"); + + private static List playerList; + + public static void updateList() { + + if (!Utils.isOnSkyblock) { + return; + } + + ClientPlayNetworkHandler cpnwh = MinecraftClient.getInstance().getNetworkHandler(); + + // check is needed, else crash on server leave + if (cpnwh != null) { + + playerList = cpnwh.getPlayerList() + .stream() + .sorted(PlayerListHudAccessor.getOrdering()) + .toList(); + } + } + + // apply pattern to entry at index of player list. + // return null if there's nothing to match against in the entry, + // or if the pattern doesn't fully match. + public static Matcher regexAt(int idx, Pattern p) { + + String str = PlayerListMgr.strAt(idx); + + if (str == null) { + return null; + } + + Matcher m = p.matcher(str); + if (!m.matches()) { + LOGGER.debug("no match: \"{}\" against \"{}\"", str, p); + return null; + } else { + return m; + } + } + + // return string (i.e. displayName) at index of player list. + // return null if string is null, empty or whitespace only. + public static String strAt(int idx) { + + if (playerList == null) { + return null; + } + + if (playerList.size() <= idx) { + return null; + } + + Text txt = playerList.get(idx).getDisplayName(); + if (txt == null) { + return null; + } + String str = txt.getString().trim(); + if (str.length() == 0) { + return null; + } + return str; + } + + public static PlayerListEntry getRaw(int i) { + return playerList.get(i); + } + + public static int getSize() { + return playerList.size(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java index cffac5c4..eb8210d9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java @@ -1,11 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.util; -import java.util.List; - -import me.xmrvizzy.skyblocker.mixin.PlayerListHudAccessor; import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.PlayerListEntry; public class PlayerLocator { @@ -26,8 +21,7 @@ public class PlayerLocator { SPIDER_DEN, JERRY, GARDEN, - UNKNOWN, - NONE + UNKNOWN } public static Location getPlayerLocation() { @@ -36,19 +30,22 @@ public class PlayerLocator { return Location.UNKNOWN; } - List ple = MinecraftClient.getInstance().getNetworkHandler().getPlayerList().stream() - .sorted(PlayerListHudAccessor.getOrdering()).toList(); + if (Utils.isInDungeons) { + return Location.DUNGEON; + } - String cat2Name = StrMan.strAt(ple, 40); + String areaDesciptor = PlayerListMgr.strAt(41); - if (cat2Name.contains("Dungeon Stats")) { - return Location.DUNGEON; + if (areaDesciptor == null || areaDesciptor.length() < 6) { + return Location.UNKNOWN; } - String areaDesciptor = StrMan.strAt(ple, 41).substring(6); - switch (areaDesciptor) { + switch (areaDesciptor.substring(6)) { case "Private Island": - if (ple.get(44).getDisplayName().getString().endsWith("Guest")) { + String islandType = PlayerListMgr.strAt(44); + if (islandType == null) { + return Location.UNKNOWN; + } else if (islandType.endsWith("Guest")) { return Location.GUEST_ISLAND; } else { return Location.HOME_ISLAND; @@ -80,7 +77,7 @@ public class PlayerLocator { case "Garden": return Location.GARDEN; default: - return Location.NONE; + return Location.UNKNOWN; } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java deleted file mode 100644 index 4a30cf0f..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java +++ /dev/null @@ -1,68 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.util; - -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; - -public class StrMan { - - private static final Logger LOGGER = LoggerFactory.getLogger(StrMan.class.getName()); - private static final Text ERROR_TXT = Text.literal("[ERROR]").formatted(Formatting.RED, Formatting.BOLD); - - public static Text stdEntry(List ple, int idx, String entryName, Formatting contentFmt) { - Text txt = ple.get(idx).getDisplayName(); - if (txt == null) { - return ERROR_TXT; - } - String src = txt.getString(); - src = src.substring(src.indexOf(':') + 1); - return StrMan.stdEntry(src, entryName, contentFmt); - } - - public static Text stdEntry(String entryContent, String entryName, Formatting contentFmt) { - return Text.literal(entryName).append(Text.literal(entryContent).formatted(contentFmt)); - } - - public static Text plainEntry(List ple, int idx) { - Text txt = ple.get(idx).getDisplayName(); - if (txt == null) { - return ERROR_TXT; - } - return Text.of(txt.getString().trim()); - } - - public static Matcher regexAt(List ple, int idx, Pattern p) { - Text txt = ple.get(idx).getDisplayName(); - if (txt == null) { - return null; - } - String str = txt.getString(); - if (str.length() == 0) { - return null; - } - - Matcher m = p.matcher(str); - if (!m.matches()) { - LOGGER.error("ERROR: Regex {} failed for input \"{}\"", p.pattern(), str); - return null; - } else { - return m; - } - } - - public static String strAt(List ple, int idx) { - Text txt = ple.get(idx).getDisplayName(); - if (txt == null) { - return null; - } - return txt.getString(); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java index e45865e4..de90cf30 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java @@ -6,11 +6,11 @@ import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud.Commission; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -27,23 +27,31 @@ public class CommsWidget extends Widget { // match a comm // group 1: comm name // group 2: comm progress (without "%" for comms that show a percentage) - private static final Pattern COMM_PATTERN = Pattern.compile(" (.*): (.*)%?"); + private static final Pattern COMM_PATTERN = Pattern.compile("(?.*): (?.*)%?"); - public CommsWidget(List list) { + public CommsWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); for (int i = 50; i <= 53; i++) { - Matcher m = StrMan.regexAt(list, i, COMM_PATTERN); + Matcher m = PlayerListMgr.regexAt(i, COMM_PATTERN); + // end of comms found? if (m == null) { + if (i == 50) { + this.addComponent(new IcoTextComponent()); + } break; } - String g2 = m.group(2); + ProgressComponent pc; - if (g2.equals("DONE")) { - pc = new ProgressComponent(Ico.BOOK, Text.of(m.group(1)), Text.of(g2), 100f, pcntToCol(100)); + + String name = m.group("name"); + String progress = m.group("progress"); + + if (progress.equals("DONE")) { + pc = new ProgressComponent(Ico.BOOK, Text.of(name), Text.of(progress), 100f, pcntToCol(100)); } else { - float pcnt = Float.parseFloat(g2.substring(0, g2.length() - 1)); - pc = new ProgressComponent(Ico.BOOK, Text.of(m.group(1)), pcnt, pcntToCol(pcnt)); + float pcnt = Float.parseFloat(progress.substring(0, progress.length() - 1)); + pc = new ProgressComponent(Ico.BOOK, Text.of(name), pcnt, pcntToCol(pcnt)); } this.addComponent(pc); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java index 2537b90a..5922fcbc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,25 +14,13 @@ public class ComposterWidget extends Widget { private static final MutableText TITLE = Text.literal("Composter").formatted(Formatting.GREEN, Formatting.BOLD); - - public ComposterWidget(List list) { + public ComposterWidget() { super(TITLE, Formatting.GREEN.getColorValue()); - Text matter = StrMan.stdEntry(list, 48, "Organic Matter:", Formatting.YELLOW); - IcoTextComponent mat = new IcoTextComponent(Ico.SAPLING, matter); - this.addComponent(mat); - - Text fuel = StrMan.stdEntry(list, 49, "Fuel:", Formatting.BLUE); - IcoTextComponent f = new IcoTextComponent(Ico.FURNACE, fuel); - this.addComponent(f); - - Text timeLeft = StrMan.stdEntry(list, 50, "Time Left:", Formatting.RED); - IcoTextComponent time = new IcoTextComponent(Ico.CLOCK, timeLeft); - this.addComponent(time); - - Text compost = StrMan.stdEntry(list, 51, "Stored Compost:", Formatting.DARK_GREEN); - IcoTextComponent comp = new IcoTextComponent(Ico.COMPOSTER, compost); - this.addComponent(comp); + this.addSimpleIcoText(Ico.SAPLING, "Organic Matter:", Formatting.YELLOW, 48); + this.addSimpleIcoText(Ico.FURNACE, "Fuel:", Formatting.BLUE, 49); + this.addSimpleIcoText(Ico.CLOCK, "Time Left:", Formatting.RED, 50); + this.addSimpleIcoText(Ico.COMPOSTER, "Stored Compost:", Formatting.DARK_GREEN, 51); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java index 8974efa7..42298fcd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java @@ -1,8 +1,10 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -15,15 +17,23 @@ public class CookieWidget extends Widget { private static final MutableText TITLE = Text.literal("Cookie Info").formatted(Formatting.DARK_PURPLE, Formatting.BOLD); + private static final Pattern COOKIE_PATTERN = Pattern.compile(".*\\nCookie Buff\\n(?.*)\\n"); + public CookieWidget(String footertext) { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - String interesting = footertext.split("Cookie Buff")[1]; - String[] lines = interesting.split("\n"); - if (lines[1].startsWith("Not")) { + Matcher m = COOKIE_PATTERN.matcher(footertext); + if (!m.find() || m.group("buff") == null) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + } + + String buff = m.group("buff"); + if (buff.startsWith("Not")) { this.addComponent(new IcoTextComponent(Ico.COOKIE, Text.of("Not active"))); } else { - Text cookie = Text.literal("Time Left: ").append(lines[1]); + Text cookie = Text.literal("Time Left: ").append(buff); this.addComponent(new IcoTextComponent(Ico.COOKIE, cookie)); } this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java index 928d9f76..3e5d8d6a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java @@ -1,14 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -23,28 +21,24 @@ public class DungeonDeathWidget extends Widget { // match the deaths entry // group 1: amount of deaths - private static final Pattern DEATH_PATTERN = Pattern.compile("\\S*: \\((\\d+)\\).*"); + private static final Pattern DEATH_PATTERN = Pattern.compile("\\S*: \\((?\\d+)\\).*"); - public DungeonDeathWidget(List list) { + public DungeonDeathWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - Matcher m = StrMan.regexAt(list, 25, DEATH_PATTERN); - Formatting f = (m.group(1).equals("0")) ? Formatting.GREEN : Formatting.RED; - Text d = Text.literal("Deaths: ").append(Text.literal(m.group(1)).formatted(f)); - IcoTextComponent deaths = new IcoTextComponent(Ico.SKULL, d); - this.addComponent(deaths); - - Text dealt = StrMan.stdEntry(list, 26, "Damage Dealt:", Formatting.RED); - IcoTextComponent de = new IcoTextComponent(Ico.SWORD, dealt); - this.addComponent(de); - - Text heal = StrMan.stdEntry(list, 27, "Healing Done:", Formatting.RED); - IcoTextComponent he = new IcoTextComponent(Ico.POTION, heal); - this.addComponent(he); - - Text mile = StrMan.stdEntry(list, 28, "Milestone:", Formatting.YELLOW); - IcoTextComponent mi = new IcoTextComponent(Ico.NTAG, mile); - this.addComponent(mi); + Matcher m = PlayerListMgr.regexAt( 25, DEATH_PATTERN); + if (m == null) { + this.addComponent(new IcoTextComponent()); + } else { + Formatting f = (m.group("deathnum").equals("0")) ? Formatting.GREEN : Formatting.RED; + Text d = Text.literal("Deaths: ").append(Text.literal(m.group("deathnum")).formatted(f)); + IcoTextComponent deaths = new IcoTextComponent(Ico.SKULL, d); + this.addComponent(deaths); + } + + this.addSimpleIcoText(Ico.SWORD, "Damage Dealt:", Formatting.RED, 26); + this.addSimpleIcoText(Ico.POTION, "Healing Done:", Formatting.RED, 27); + this.addSimpleIcoText(Ico.NTAG, "Milestone:", Formatting.YELLOW, 28); this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java index 36245a4e..35926d7d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java @@ -1,12 +1,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -19,23 +16,20 @@ public class DungeonDownedWidget extends Widget { private static final MutableText TITLE = Text.literal("Downed").formatted(Formatting.DARK_PURPLE, Formatting.BOLD); - public DungeonDownedWidget(List list) { + public DungeonDownedWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); Formatting format = Formatting.RED; - if (StrMan.strAt(list, 21).endsWith("NONE")) { + String down = PlayerListMgr.strAt(21); + if (down != null && down.endsWith("NONE")) { format = Formatting.GRAY; } - Text downed = StrMan.stdEntry(list, 21, "Downed:", format); - IcoTextComponent down = new IcoTextComponent(Ico.SKULL, downed); - this.addComponent(down); - - Text time = StrMan.stdEntry(list, 22, "Time:", Formatting.GRAY); - IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); - this.addComponent(t); + int idx = down.indexOf(": "); + Text downed = (down == null || idx== -1) ? null : Widget.simpleEntryText(down.substring(idx + 2), "Downed:", format); + IcoTextComponent d = new IcoTextComponent(Ico.SKULL, downed); + this.addComponent(d); - Text revive = StrMan.stdEntry(list, 23, "Revive:", Formatting.GRAY); - IcoTextComponent rev = new IcoTextComponent(Ico.POTION, revive); - this.addComponent(rev); + this.addSimpleIcoText(Ico.CLOCK, "Time:", Formatting.GRAY, 22); + this.addSimpleIcoText(Ico.POTION, "Revive:", Formatting.GRAY, 23); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java index 7195e455..8f28a2c6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java @@ -2,14 +2,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; import net.minecraft.text.Text; @@ -28,7 +26,8 @@ public class DungeonPlayerWidget extends Widget { // group 3: level (or nothing, if pre dungeon start) // as a side effect, this regex keeps the iron man icon in the name // not sure if that should be - private static final Pattern PLAYER_PATTERN = Pattern.compile("\\[\\d*\\] (.*) \\((\\S*) ?([LXVI]*)\\)"); + private static final Pattern PLAYER_PATTERN = Pattern + .compile("\\[\\d*\\] (?.*) \\((?\\S*) ?(?[LXVI]*)\\)"); private static final HashMap ICOS = new HashMap<>(); private static final ArrayList MSGS = new ArrayList<>(); @@ -42,45 +41,49 @@ public class DungeonPlayerWidget extends Widget { MSGS.add("PRESS A TO JOIN"); MSGS.add("Invite a friend!"); MSGS.add("But nobody came."); + MSGS.add("More is better!"); } // title needs to be changeable here - public DungeonPlayerWidget(List list, int player) { + public DungeonPlayerWidget(int player) { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); int start = 1 + (player - 1) * 4; - if (list.get(start).getDisplayName().getString().length() < 2) { - this.addComponent( - new IcoTextComponent(Ico.SIGN, Text.literal(MSGS.get((int)(Math.random()*MSGS.size()))).formatted(Formatting.GRAY))); + if (PlayerListMgr.strAt(start) == null) { + int idx = player - 2; + IcoTextComponent noplayer = new IcoTextComponent(Ico.SIGN, + Text.literal(MSGS.get(idx)).formatted(Formatting.GRAY)); + this.addComponent(noplayer); + this.pack(); + return; + } + Matcher m = PlayerListMgr.regexAt(start, PLAYER_PATTERN); + if (m == null) { + this.addComponent(new IcoTextComponent()); + this.addComponent(new IcoTextComponent()); } else { - Matcher m = StrMan.regexAt(list, start, PLAYER_PATTERN); - Text name = Text.literal("Name: ").append(Text.literal(m.group(1)).formatted(Formatting.YELLOW)); + Text name = Text.literal("Name: ").append(Text.literal(m.group("name")).formatted(Formatting.YELLOW)); this.addComponent(new IcoTextComponent(Ico.PLAYER, name)); - String cl = m.group(2); + String cl = m.group("class"); Formatting clf = Formatting.GRAY; ItemStack cli = Ico.BARRIER; if (!cl.equals("EMPTY")) { cli = ICOS.get(cl); clf = Formatting.LIGHT_PURPLE; - cl += " " + m.group(3); + cl += " " + m.group("level"); } - Text class_ = Text.literal("Class: ").append(Text.literal(cl).formatted(clf)); - IcoTextComponent itclass = new IcoTextComponent(cli, class_); + Text clazz = Text.literal("Class: ").append(Text.literal(cl).formatted(clf)); + IcoTextComponent itclass = new IcoTextComponent(cli, clazz); this.addComponent(itclass); + } - Text ult = StrMan.stdEntry(list, start + 1, "Ult Cooldown:", Formatting.GOLD); - IcoTextComponent ul = new IcoTextComponent(Ico.CLOCK, ult); - this.addComponent(ul); - - Text revive = StrMan.stdEntry(list, start + 2, "Revives:", Formatting.DARK_PURPLE); - IcoTextComponent re = new IcoTextComponent(Ico.POTION, revive); - this.addComponent(re); + this.addSimpleIcoText(Ico.CLOCK, "Ult Cooldown:", Formatting.GOLD, start + 1); + this.addSimpleIcoText(Ico.POTION, "Revives:", Formatting.DARK_PURPLE, start + 2); - } this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java index 86d1f938..b689228d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java @@ -1,14 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -25,20 +23,22 @@ public class DungeonPuzzleWidget extends Widget { // group 2: status // " ?.*" to diescard the solver's name if present // the teleport maze has a trailing whitespace that messes with the regex - private static final Pattern PUZZLE_PATTERN = Pattern.compile(" (.*): \\[(.*)\\] ?.*"); + private static final Pattern PUZZLE_PATTERN = Pattern.compile("(?.*): \\[(?.*)\\] ?.*"); - public DungeonPuzzleWidget(List list) { + public DungeonPuzzleWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); int pos = 48; while (pos < 60) { - Matcher m = StrMan.regexAt(list, pos, PUZZLE_PATTERN); + Matcher m = PlayerListMgr.regexAt(pos, PUZZLE_PATTERN); if (m == null) { break; } - Text t = Text.literal(m.group(1) + ": ").append(Text.literal("[").formatted(Formatting.GRAY)) - .append(m.group(2)).append(Text.literal("]").formatted(Formatting.GRAY)); + Text t = Text.literal(m.group("name") + ": ") + .append(Text.literal("[").formatted(Formatting.GRAY)) + .append(m.group("status")) + .append(Text.literal("]").formatted(Formatting.GRAY)); IcoTextComponent itc = new IcoTextComponent(Ico.SIGN, t); this.addComponent(itc); pos++; @@ -46,6 +46,10 @@ public class DungeonPuzzleWidget extends Widget { // not sure which one is which // still need to find out codepoint for the puzzle failed char } + if (pos == 48) { + this.addComponent( + new IcoTextComponent(Ico.BARRIER, Text.literal("No puzzles!").formatted(Formatting.GRAY))); + } this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java index e0c83a35..2c760dad 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java @@ -1,12 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,16 +13,11 @@ public class DungeonSecretWidget extends Widget { private static final MutableText TITLE = Text.literal("Discoveries").formatted(Formatting.DARK_PURPLE, Formatting.BOLD); - public DungeonSecretWidget(List list) { + public DungeonSecretWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - Text secrets = StrMan.stdEntry(list, 31, "Secrets:", Formatting.YELLOW); - IcoTextComponent sec = new IcoTextComponent(Ico.CHEST, secrets); - this.addComponent(sec); - - Text crypts = StrMan.stdEntry(list, 32, "Crypts:", Formatting.YELLOW); - IcoTextComponent cry = new IcoTextComponent(Ico.SKULL, crypts); - this.addComponent(cry); + this.addSimpleIcoText(Ico.CHEST, "Secrets:", Formatting.YELLOW, 31); + this.addSimpleIcoText(Ico.SKULL, "Crypts:", Formatting.YELLOW, 32); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java index 89d3b1ca..8801df68 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java @@ -1,15 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -24,31 +21,25 @@ public class DungeonServerWidget extends Widget { // match the secrets text // group 1: % of secrets found (without "%") - private static final Pattern SECRET_PATTERN = Pattern.compile(" Secrets Found: (.*)%"); + private static final Pattern SECRET_PATTERN = Pattern.compile("Secrets Found: (?.*)%"); - public DungeonServerWidget(List list) { + public DungeonServerWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - Text name = StrMan.stdEntry(list, 41, "Name:", Formatting.AQUA); - IcoTextComponent na = new IcoTextComponent(Ico.NTAG, name); - this.addComponent(na); - - Text open = StrMan.stdEntry(list, 42, "Rooms Visited:", Formatting.DARK_PURPLE); - IcoTextComponent op = new IcoTextComponent(Ico.SIGN, open); - this.addComponent(op); - - Text compl = StrMan.stdEntry(list, 43, "Rooms Completed:", Formatting.LIGHT_PURPLE); - IcoTextComponent co = new IcoTextComponent(Ico.SIGN, compl); - this.addComponent(co); - - Matcher m = StrMan.regexAt(list, 44, SECRET_PATTERN); - Text secrets = Text.of("Secrets found:"); - ProgressComponent scp = new ProgressComponent(Ico.CHEST, secrets, Float.parseFloat(m.group(1)), - Formatting.DARK_PURPLE.getColorValue()); - this.addComponent(scp); - - Text time = StrMan.stdEntry(list, 45, "Time:", Formatting.GOLD); - IcoTextComponent ti = new IcoTextComponent(Ico.CLOCK, time); - this.addComponent(ti); + + this.addSimpleIcoText(Ico.NTAG, "Name:", Formatting.AQUA, 41); + this.addSimpleIcoText(Ico.SIGN, "Rooms Visited:", Formatting.DARK_PURPLE, 42); + this.addSimpleIcoText(Ico.SIGN, "Rooms Completed:", Formatting.LIGHT_PURPLE, 43); + + Matcher m = PlayerListMgr.regexAt(44, SECRET_PATTERN); + if (m == null) { + this.addComponent(new ProgressComponent()); + } else { + ProgressComponent scp = new ProgressComponent(Ico.CHEST, Text.of("Secrets found:"), Float.parseFloat(m.group("secnum")), + Formatting.DARK_PURPLE.getColorValue()); + this.addComponent(scp); + } + + this.addSimpleIcoText(Ico.CLOCK, "Time:", Formatting.GOLD, 45); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java index d44d1ea7..b24f7535 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java @@ -20,8 +20,19 @@ public class EffectWidget extends Widget { public EffectWidget(String footertext) { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - String interesting = footertext.split("Active Effects")[1]; - String[] lines = interesting.split("\n"); + if (footertext == null ||!footertext.contains("Active Effects")) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + + } + + String[] lines = footertext.split("Active Effects")[1].split("\n"); + if (lines.length < 2) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + } if (lines[1].startsWith("No")) { Text txt = Text.literal("No effects active").formatted(Formatting.GRAY); @@ -34,7 +45,13 @@ public class EffectWidget extends Widget { this.addComponent(iftc); } else { String number = lines[1].substring("You have ".length()); - number = number.substring(0, number.indexOf(' ')); + int idx = number.indexOf(' '); + if (idx == -1 ||lines.length < 4) { + this.addComponent(new IcoFatTextComponent()); + this.pack(); + return; + } + number = number.substring(0, idx); Text active = Text.literal("Active Effects: ").append(Text.literal(number).formatted(Formatting.YELLOW)); IcoFatTextComponent iftc = new IcoFatTextComponent(Ico.POTION, active, diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java index 1c845467..1a26026e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java @@ -1,16 +1,14 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.HashMap; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; import net.minecraft.text.Text; @@ -31,7 +29,7 @@ public class ElectionWidget extends Widget { // pattern matching a candidate while people are voting // group 1: name // group 2: % of votes - private static final Pattern VOTE_PATTERN = Pattern.compile(" (\\S*): \\|+ \\((\\d*)%\\)"); + private static final Pattern VOTE_PATTERN = Pattern.compile("(?\\S*): \\|+ \\((?\\d*)%\\)"); static { MAYOR_DATA.put("Aatrox", Ico.DIASWORD); @@ -49,44 +47,55 @@ public class ElectionWidget extends Widget { private static final Formatting[] COLS = { Formatting.GOLD, Formatting.RED, Formatting.LIGHT_PURPLE }; - public ElectionWidget(List list) { + public ElectionWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - if (StrMan.strAt(list, 76).contains("Over!")) { + String status = PlayerListMgr.strAt(76); + if (status == null) { + this.addComponent(new IcoTextComponent()); + this.addComponent(new IcoTextComponent()); + this.addComponent(new IcoTextComponent()); + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + } + + if (status.contains("Over!")) { // election is over IcoTextComponent over = new IcoTextComponent(Ico.BARRIER, EL_OVER); this.addComponent(over); - String winnername = StrMan.strAt(list, 77).split(": ")[1]; - Text winnertext = Text.literal("Winner: ") - .append(Text.literal(winnername).formatted(Formatting.GREEN)); - IcoTextComponent winner = new IcoTextComponent(MAYOR_DATA.get(winnername), winnertext); - this.addComponent(winner); - - Text participants = StrMan.stdEntry(list, 78, "Participants:", Formatting.AQUA); - IcoTextComponent part = new IcoTextComponent(Ico.PLAYER, participants); - this.addComponent(part); + String win = PlayerListMgr.strAt(77); + if (win == null || !win.contains(": ")) { + this.addComponent(new IcoTextComponent()); + } else { + String winnername = win.split(": ")[1]; + Text winnertext = Widget.simpleEntryText(winnername, "Winner: ", Formatting.GREEN); + IcoTextComponent winner = new IcoTextComponent(MAYOR_DATA.get(winnername), winnertext); + this.addComponent(winner); + } - Text year = StrMan.stdEntry(list, 79, "Year:", Formatting.LIGHT_PURPLE); - IcoTextComponent y = new IcoTextComponent(Ico.SIGN, year); - this.addComponent(y); + this.addSimpleIcoText(Ico.PLAYER, "Participants:", Formatting.AQUA, 78); + this.addSimpleIcoText(Ico.SIGN, "Year:", Formatting.LIGHT_PURPLE, 79); } else { // election is going on - Text time = StrMan.stdEntry(list, 76, "End in:", Formatting.GOLD); - IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); - this.addComponent(t); + this.addSimpleIcoText(Ico.CLOCK, "End in:", Formatting.GOLD, 76); for (int i = 77; i <= 79; i++) { - Matcher m = StrMan.regexAt(list, i, VOTE_PATTERN); - String g1 = m.group(1); - String g2 = m.group(2); - float pcnt = Float.parseFloat(g2); - Text candidate = Text.literal(g1).formatted(COLS[i - 77]); - ProgressComponent pc = new ProgressComponent(MAYOR_DATA.get(g1), candidate, pcnt, - COLS[i - 77].getColorValue()); - this.addComponent(pc); - + Matcher m = PlayerListMgr.regexAt(i, VOTE_PATTERN); + if (m == null) { + this.addComponent(new ProgressComponent()); + } else { + + String mayorname = m.group("mayor"); + String pcntstr = m.group("pcnt"); + float pcnt = Float.parseFloat(pcntstr); + Text candidate = Text.literal(mayorname).formatted(COLS[i - 77]); + ProgressComponent pc = new ProgressComponent(MAYOR_DATA.get(mayorname), candidate, pcnt, + COLS[i - 77].getColorValue()); + this.addComponent(pc); + } } } this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java index 584a593e..52d6cfbd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java @@ -1,10 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -15,7 +12,7 @@ public class EmptyWidget extends Widget { private static final MutableText TITLE = Text.literal("Empty").formatted(Formatting.RED, Formatting.BOLD); - public EmptyWidget(List list) { + public EmptyWidget() { super(TITLE, Formatting.RED.getColorValue()); Text info = Text.of("No info for this area!"); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java index 7063ce3f..fc0780e1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java @@ -1,13 +1,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -21,16 +17,16 @@ public class EssenceWidget extends Widget { private static final MutableText TITLE = Text.literal("Essences").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public EssenceWidget(List list) { + public EssenceWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - wither = StrMan.stdEntry(list, 46, "Wither:", Formatting.DARK_PURPLE); - spider = StrMan.stdEntry(list, 47, "Spider:", Formatting.DARK_PURPLE); - undead = StrMan.stdEntry(list, 48, "Undead:", Formatting.DARK_PURPLE); - dragon = StrMan.stdEntry(list, 49, "Dragon:", Formatting.DARK_PURPLE); - gold = StrMan.stdEntry(list, 50, "Gold:", Formatting.DARK_PURPLE); - diamond = StrMan.stdEntry(list, 51, "Diamond:", Formatting.DARK_PURPLE); - ice = StrMan.stdEntry(list, 52, "Ice:", Formatting.DARK_PURPLE); - crimson = StrMan.stdEntry(list, 53, "Crimson:", Formatting.DARK_PURPLE); + wither = Widget.simpleEntryText(46, "Wither:", Formatting.DARK_PURPLE); + spider = Widget.simpleEntryText(47, "Spider:", Formatting.DARK_PURPLE); + undead = Widget.simpleEntryText(48, "Undead:", Formatting.DARK_PURPLE); + dragon = Widget.simpleEntryText(49, "Dragon:", Formatting.DARK_PURPLE); + gold = Widget.simpleEntryText(50, "Gold:", Formatting.DARK_PURPLE); + diamond = Widget.simpleEntryText(51, "Diamond:", Formatting.DARK_PURPLE); + ice = Widget.simpleEntryText(52, "Ice:", Formatting.DARK_PURPLE); + crimson = Widget.simpleEntryText(53, "Crimson:", Formatting.DARK_PURPLE); TableComponent tc = new TableComponent(2, 4, Formatting.DARK_AQUA.getColorValue()); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java index eb741566..f9483bde 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -16,19 +12,17 @@ import net.minecraft.util.Formatting; public class EventWidget extends Widget { private static final MutableText TITLE = Text.literal("Event Info").formatted(Formatting.YELLOW, Formatting.BOLD); - public EventWidget(List list, boolean isInGarden) { + public EventWidget(boolean isInGarden) { super(TITLE, Formatting.YELLOW.getColorValue()); // hypixel devs carefully inserting the most random edge cases #317: // the event info is placed a bit differently when in the garden. int offset = (isInGarden) ? -1 : 0; - Text eventName = StrMan.stdEntry(list, 73 + offset, "Name:", Formatting.YELLOW); - IcoTextComponent event = new IcoTextComponent(Ico.NTAG, eventName); - this.addComponent(event); + this.addSimpleIcoText(Ico.NTAG, "Name:", Formatting.YELLOW, 73 + offset); // this could look better - Text time = StrMan.plainEntry(list, 74 + offset); + Text time = Widget.plainEntryText(74 + offset); IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); this.addComponent(t); this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java index 9b7b2678..ddf51f32 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java @@ -1,16 +1,13 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; @@ -26,38 +23,40 @@ public class FireSaleWidget extends Widget { // matches a fire sale item // group 1: item name - // group 2: # items bought + // group 2: # items available // group 3: # items available in total (1 digit + "k") - private static final Pattern FIRE_PATTERN = Pattern.compile(" (.*): (\\d*)/([0-9.]*)k"); + private static final Pattern FIRE_PATTERN = Pattern.compile("(?.*): (?\\d*)/(?[0-9.]*)k"); - public FireSaleWidget(List list) { + public FireSaleWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - boolean found = false; - if (StrMan.strAt(list, 46).contains("Starts In")) { - IcoTextComponent start = new IcoTextComponent(Ico.CLOCK, - StrMan.stdEntry(list, 46, "Starts in", Formatting.DARK_AQUA)); - this.addComponent(start); + String event = PlayerListMgr.strAt(46); + + if (event == null) { + this.addComponent(new PlainTextComponent(Text.literal("No Fire Sale!").formatted(Formatting.GRAY))); + this.pack(); + return; + } + + if (event.contains("Starts In")) { + this.addSimpleIcoText(Ico.CLOCK, "Starts in:", Formatting.DARK_AQUA, 46); this.pack(); return; } for (int i = 46;; i++) { - Matcher m = StrMan.regexAt(list, i, FIRE_PATTERN); - if (m == null || !m.matches()) { + Matcher m = PlayerListMgr.regexAt( i, FIRE_PATTERN); + if (m == null) { break; } - found = true; - float amt = Float.parseFloat(m.group(3)) * 1000; - Text a = Text.literal(m.group(1)); - Text b = Text.literal(String.format("%s/%.0f", m.group(2), amt)); - float pcnt = (Float.parseFloat(m.group(2)) / (amt)) * 100f; - ProgressComponent pc = new ProgressComponent(Ico.GOLD, a, b, pcnt, pcntToCol(pcnt)); + String avail = m.group("avail"); + Text itemTxt = Text.literal(m.group("item")); + float total = Float.parseFloat(m.group("total")) * 1000; + Text prgressTxt = Text.literal(String.format("%s/%.0f", avail, total)); + float pcnt = (Float.parseFloat(avail) / (total)) * 100f; + ProgressComponent pc = new ProgressComponent(Ico.GOLD, itemTxt, prgressTxt, pcnt, pcntToCol(pcnt)); this.addComponent(pc); } - if (!found) { - this.addComponent(new PlainTextComponent(Text.literal("No Fire Sale!").formatted(Formatting.GRAY))); - } this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java index 40e2f56d..4de4a0b4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java @@ -1,14 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoFatTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -21,27 +18,39 @@ public class ForgeWidget extends Widget { private static final MutableText TITLE = Text.literal("Forge Status").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public ForgeWidget(List list) { + public ForgeWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - int forgestart = 54; + int forgestart = 54; // why is it forges and not fabrics >:( - if (!StrMan.strAt(list, 53).startsWith("Forge")) { - forgestart += 2; + String pos = PlayerListMgr.strAt(53); + if (pos == null) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; } + if (!pos.startsWith("Forges")) { + forgestart += 2; + } - for (int i = forgestart, slot = 0; i < forgestart + 5 && i < 60; i++,slot ++) { - String fstr = StrMan.strAt(list, i).substring(4); + for (int i = forgestart, slot = 1; i < forgestart + 5 && i < 60; i++, slot++) { + String fstr = PlayerListMgr.strAt(i); + if (fstr == null || fstr.length() < 3) { + if (i == forgestart) { + this.addComponent(new IcoTextComponent()); + } + break; + } Component c; Text l1, l2; - switch (fstr) { + switch (fstr.substring(3)) { case "LOCKED": l1 = Text.literal("Locked").formatted(Formatting.RED); l2 = switch (slot) { - case 3 -> Text.literal("Req. HotM 3").formatted(Formatting.GRAY); - case 4 -> Text.literal("Req. HotM 4").formatted(Formatting.GRAY); - case 5 -> Text.literal("Req. PotM 2").formatted(Formatting.GRAY); + case 3 -> Text.literal("Needs HotM 3").formatted(Formatting.GRAY); + case 4 -> Text.literal("Needs HotM 4").formatted(Formatting.GRAY); + case 5 -> Text.literal("Needs PotM 2").formatted(Formatting.GRAY); default -> Text.literal("This message should not appear").formatted(Formatting.RED, Formatting.BOLD); }; @@ -53,9 +62,13 @@ public class ForgeWidget extends Widget { break; default: String[] parts = fstr.split(": "); - l1 = Text.of(parts[0]); - l2 = Text.literal(parts[1]).formatted(Formatting.YELLOW); - c = new IcoFatTextComponent(Ico.FIRE, l1, l2); + if (parts.length != 2) { + c = new IcoFatTextComponent(); + } else { + l1 = Text.of(parts[0]); + l2 = Text.literal(parts[1]).formatted(Formatting.YELLOW); + c = new IcoFatTextComponent(Ico.FIRE, l1, l2); + } break; } this.addComponent(c); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java index 864dee8e..b0fc160f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java @@ -1,14 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -22,39 +20,33 @@ public class GardenServerWidget extends Widget { // match the next visitor in the garden // group 1: visitor name - private static final Pattern VISITOR_PATTERN = Pattern.compile(" Next Visitor: (.*)$"); + private static final Pattern VISITOR_PATTERN = Pattern.compile("Next Visitor: (?.*)"); - public GardenServerWidget(List list) { + public GardenServerWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); - IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); - this.addComponent(area); + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.DARK_AQUA, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + this.addSimpleIcoText(Ico.EMERALD, "Gems:", Formatting.GREEN, 43); + this.addSimpleIcoText(Ico.COPPER, "Copper:", Formatting.GOLD, 44); - Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); - IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); - this.addComponent(server); - - Text amtGems = StrMan.stdEntry(list, 43, "Gems:", Formatting.GREEN); - IcoTextComponent gems = new IcoTextComponent(Ico.EMERALD, amtGems); - this.addComponent(gems); - - Text copper = StrMan.stdEntry(list, 44, "Copper:", Formatting.GOLD); - IcoTextComponent co = new IcoTextComponent(Ico.COPPER, copper); - this.addComponent(co); + Matcher m = PlayerListMgr.regexAt(45, VISITOR_PATTERN); + if (m == null ) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + } - Matcher v = StrMan.regexAt(list, 45, VISITOR_PATTERN); - String vString = v.group(1); + String vis = m.group("vis"); Formatting col; - if (vString.equals("Not Unlocked!")) { + if (vis.equals("Not Unlocked!")) { col = Formatting.RED; } else { col = Formatting.GREEN; } - MutableText visitor = Text.literal("Next Visitor: ") - .append(Text.literal(vString).formatted(col)); - IcoTextComponent vis = new IcoTextComponent(Ico.PLAYER, visitor); - this.addComponent(vis); + Text visitor = Widget.simpleEntryText(vis, "Next Visitor: ", col); + IcoTextComponent v = new IcoTextComponent(Ico.PLAYER, visitor); + this.addComponent(v); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java index 26c90df7..26e29ce2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java @@ -1,16 +1,14 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -25,24 +23,33 @@ public class GardenSkillsWidget extends Widget { // match the skill entry // group 1: skill name and level // group 2: progress to next level (without "%") - private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); + private static final Pattern SKILL_PATTERN = Pattern + .compile("\\S*: (?[A-Za-z]* [0-9]*): (?\\S*)%"); // same, but with leading space - private static final Pattern MS_PATTERN = Pattern.compile(" \\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); + private static final Pattern MS_PATTERN = Pattern.compile("\\S*: (?[A-Za-z]* [0-9]*): (?\\S*)%"); - public GardenSkillsWidget(List list) { + public GardenSkillsWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - Matcher m = StrMan.regexAt(list, 66, SKILL_PATTERN); + ProgressComponent pc; + Matcher m = PlayerListMgr.regexAt(66, SKILL_PATTERN); + if (m == null) { + pc = new ProgressComponent(); + } else { - float pcnt = Float.parseFloat(m.group(2)); - String skill = m.group(1); + String strpcnt = m.group("progress"); + String skill = m.group("skill"); + + float pcnt = Float.parseFloat(strpcnt); + pc = new ProgressComponent(Ico.LANTERN, Text.of(skill), pcnt, + Formatting.GOLD.getColorValue()); + } - ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(skill), pcnt, Formatting.GOLD.getColorValue()); this.addComponent(pc); - Text speed = StrMan.stdEntry(list, 67, "SPD", Formatting.WHITE); + Text speed = Widget.simpleEntryText(67, "SPD", Formatting.WHITE); IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); - Text farmfort = StrMan.stdEntry(list, 68, "FFO", Formatting.GOLD); + Text farmfort = Widget.simpleEntryText(68, "FFO", Formatting.GOLD); IcoTextComponent ffo = new IcoTextComponent(Ico.HOE, farmfort); TableComponent tc = new TableComponent(2, 1, Formatting.YELLOW.getColorValue()); @@ -50,11 +57,19 @@ public class GardenSkillsWidget extends Widget { tc.addToCell(1, 0, ffo); this.addComponent(tc); - m = StrMan.regexAt(list, 69, MS_PATTERN); - pcnt = Float.parseFloat(m.group(2)); - skill = m.group(1); + ProgressComponent pc2; + m = PlayerListMgr.regexAt(69, MS_PATTERN); + if (m == null) { + pc2 = new ProgressComponent(); + } else { + String strpcnt = m.group("progress"); + String skill = m.group("skill"); + + float pcnt = Float.parseFloat(strpcnt); + pc2 = new ProgressComponent(Ico.MILESTONE, Text.of(skill), pcnt, + Formatting.GREEN.getColorValue()); - ProgressComponent pc2 = new ProgressComponent(Ico.MILESTONE, Text.of(skill), pcnt, Formatting.GREEN.getColorValue()); + } this.addComponent(pc2); this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java index 67b61667..cb208e92 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,23 +14,14 @@ public class GuestServerWidget extends Widget { private static final MutableText TITLE = Text.literal("Island Info").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public GuestServerWidget(List list) { + public GuestServerWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); - IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); - this.addComponent(area); - Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); - IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); - this.addComponent(server); + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.DARK_AQUA, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + this.addSimpleIcoText(Ico.SIGN, "Owner:", Formatting.GREEN, 43); + this.addSimpleIcoText(Ico.SIGN, "Status:", Formatting.BLUE, 44); - Text owner = StrMan.stdEntry(list, 43, "Owner:", Formatting.GREEN); - IcoTextComponent own = new IcoTextComponent(Ico.SIGN, owner); - this.addComponent(own); - - Text status = StrMan.stdEntry(list, 44, "Status:", Formatting.BLUE); - IcoTextComponent stat = new IcoTextComponent(Ico.SIGN, status); - this.addComponent(stat); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java index fa27eaa0..e0f5f1a3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java @@ -1,13 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -23,19 +21,22 @@ public class IslandGuestsWidget extends Widget { // group 1: player name private static final Pattern GUEST_PATTERN = Pattern.compile("\\[\\d*\\] (.*) \\[.\\]"); - public IslandGuestsWidget(List list) { + public IslandGuestsWidget() { super(TITLE, Formatting.AQUA.getColorValue()); for (int i = 21; i < 40; i++) { - String str = list.get(i).getDisplayName().getString(); - if (str.length() == 0) { + String str = PlayerListMgr.strAt(i); + if (str == null) { if (i == 21) { this.addComponent(new PlainTextComponent(Text.literal("No Visitors!").formatted(Formatting.GRAY))); } break; } - Matcher m = StrMan.regexAt(list, i, GUEST_PATTERN); - PlainTextComponent ptc = new PlainTextComponent(Text.of(m.group(1))); - this.addComponent(ptc); + Matcher m = PlayerListMgr.regexAt( i, GUEST_PATTERN); + if (m == null) { + this.addComponent(new PlainTextComponent(Text.of("???"))); + } else { + this.addComponent(new PlainTextComponent(Text.of(m.group(1)))); + } } this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java index 083f72b7..1c640ed1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java @@ -1,13 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -23,19 +21,19 @@ public class IslandOwnersWidget extends Widget { // group 1: player name (cut off by hypixel for some reason) // group 2: last seem // TODO: test with owner online - private static final Pattern OWNER_PATTERN = Pattern.compile("(.*) \\((.*)\\)"); + private static final Pattern OWNER_PATTERN = Pattern.compile("(?.*) \\((?.*)\\)"); - public IslandOwnersWidget(List list) { + public IslandOwnersWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); for (int i = 1; i < 20; i++) { - if (list.get(i).getDisplayName().getString().length() == 0) { + Matcher m = PlayerListMgr.regexAt( i, OWNER_PATTERN); + if (m == null) { break; } - Matcher m = StrMan.regexAt(list, i, OWNER_PATTERN); - Text entry = Text.literal(m.group(1)) + Text entry = Text.literal(m.group("name")) .append( - Text.literal(" (" + m.group(2) + ")") + Text.literal(" (" + m.group("lastseen") + ")") .formatted(Formatting.GRAY)); PlainTextComponent ptc = new PlainTextComponent(entry); this.addComponent(ptc); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java index aa1d951b..4324dad9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java @@ -1,13 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -20,17 +18,16 @@ public class IslandSelfWidget extends Widget { Formatting.BOLD); // matches an owner - // group 1: player name - private static final Pattern OWNER_PATTERN = Pattern.compile("\\[\\d*\\] (.*)"); + // group 1: player name, optionally offline time + private static final Pattern OWNER_PATTERN = Pattern.compile("^\\[\\d*\\] (.*)$|^(.*)$"); - public IslandSelfWidget(List list) { + public IslandSelfWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); for (int i = 1; i < 20; i++) { - String str = list.get(i).getDisplayName().getString(); - if (str.length() == 0) { + Matcher m = PlayerListMgr.regexAt( i, OWNER_PATTERN); + if (m == null) { break; } - Matcher m = StrMan.regexAt(list, i, OWNER_PATTERN); PlainTextComponent ptc = new PlainTextComponent(Text.of(m.group(1))); this.addComponent(ptc); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java index 1bbe0ed7..2b02c514 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,28 +14,15 @@ public class IslandServerWidget extends Widget { private static final MutableText TITLE = Text.literal("Island Info").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public IslandServerWidget(List list) { + public IslandServerWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); - IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); - this.addComponent(area); + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.DARK_AQUA, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + this.addSimpleIcoText(Ico.EMERALD, "Crystals:", Formatting.DARK_PURPLE, 43); + this.addSimpleIcoText(Ico.CHEST, "Stash:", Formatting.GREEN, 44); + this.addSimpleIcoText(Ico.COMMAND, "Minions:", Formatting.BLUE, 45); - Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); - IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); - this.addComponent(server); - - Text crystals = StrMan.stdEntry(list, 43, "Crystals:", Formatting.DARK_PURPLE); - IcoTextComponent crys = new IcoTextComponent(Ico.EMERALD, crystals); - this.addComponent(crys); - - Text stash = StrMan.stdEntry(list, 44, "Stash:", Formatting.GREEN); - IcoTextComponent st = new IcoTextComponent(Ico.CHEST, stash); - this.addComponent(st); - - Text minions = StrMan.stdEntry(list, 45, "Minions:", Formatting.BLUE); - IcoTextComponent min = new IcoTextComponent(Ico.COMMAND, minions); - this.addComponent(min); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java index 03defb4c..8d49efaa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java @@ -1,13 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.HashMap; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.text.MutableText; @@ -37,18 +35,22 @@ public class JacobsContestWidget extends Widget { FARM_DATA.put("Mushroom", new ItemStack(Items.RED_MUSHROOM)); } - public JacobsContestWidget(List list) { + public JacobsContestWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - Text time = StrMan.stdEntry(list, 76, "Starts in:", Formatting.GOLD); - IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); - this.addComponent(t); + this.addSimpleIcoText(Ico.CLOCK, "Starts in:", Formatting.GOLD, 76); TableComponent tc = new TableComponent(1, 3, Formatting.YELLOW .getColorValue()); for (int i = 77; i < 80; i++) { - String item = StrMan.strAt(list, i).trim(); - tc.addToCell(0, i - 77, new IcoTextComponent(FARM_DATA.get(item), Text.of(item))); + String item = PlayerListMgr.strAt(i); + IcoTextComponent itc; + if (item == null) { + itc = new IcoTextComponent(); + } else { + itc = new IcoTextComponent(FARM_DATA.get(item), Text.of(item)); + } + tc.addToCell(0, i - 77, itc); } this.addComponent(tc); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java index 2ba94b48..22082202 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java @@ -1,15 +1,13 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.HashMap; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.text.MutableText; @@ -90,18 +88,18 @@ public class MinionWidget extends Widget { // group 1: name // group 2: level // group 3: status - public static final Pattern MINION_PATTERN = Pattern.compile(" (.*) ([XVI]*) \\[(.*)\\]"); + public static final Pattern MINION_PATTERN = Pattern.compile("(?.*) (?[XVI]*) \\[(?.*)\\]"); - public MinionWidget(List list) { + public MinionWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); for (int i = 48; i < 59; i++) { - Matcher m = StrMan.regexAt(list, i, MINION_PATTERN); + Matcher m = PlayerListMgr.regexAt(i, MINION_PATTERN); if (m != null) { - String min = m.group(1); - String lvl = m.group(2); - String stat = m.group(3); + String min = m.group("name"); + String lvl = m.group("level"); + String stat = m.group("status"); MutableText mt = Text.literal(min + " " + lvl).append(Text.literal(": ")); @@ -111,7 +109,7 @@ public class MinionWidget extends Widget { } else if (stat.equals("SLOW")) { format = Formatting.YELLOW; } - // makes "BLOCKED" also red. in reality, it's some kind of crimson + // makes "BLOCKED" also red. in reality, it's some kind of crimson mt.append(Text.literal(stat).formatted(format)); IcoTextComponent itc = new IcoTextComponent(MIN_ICOS.get(min), mt); @@ -125,9 +123,9 @@ public class MinionWidget extends Widget { // if more minions are placed than the tab menu can display, // a "And X more..." text is shown // look for that and add it to the widget - if (list.get(59).getDisplayName() != null) { - String other = list.get(59).getDisplayName().getString(); - this.addComponent(new PlainTextComponent(Text.of(other.trim()))); + String more = PlayerListMgr.strAt(59); + if (more != null) { + this.addComponent(new PlainTextComponent(Text.of(more))); } this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java index a94b5948..4148ed77 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,24 +14,14 @@ public class ParkServerWidget extends Widget { private static final MutableText TITLE = Text.literal("Server Info").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public ParkServerWidget(List list) { + public ParkServerWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); - IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); - this.addComponent(area); + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.DARK_AQUA, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + this.addSimpleIcoText(Ico.EMERALD, "Gems:", Formatting.GREEN, 43); + this.addSimpleIcoText(Ico.WATER, "Rain:", Formatting.BLUE, 44); - Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); - IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); - this.addComponent(server); - - Text amtGems = StrMan.stdEntry(list, 43, "Gems:", Formatting.GREEN); - IcoTextComponent gems = new IcoTextComponent(Ico.EMERALD, amtGems); - this.addComponent(gems); - - Text rain = StrMan.stdEntry(list, 44, "Rain:", Formatting.BLUE); - IcoTextComponent ra = new IcoTextComponent(Ico.WATER, rain); - this.addComponent(ra); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java index 1678ca56..2cd710eb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java @@ -3,8 +3,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.List; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlayerComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; @@ -23,12 +24,19 @@ public class PlayerListWidget extends Widget { private ArrayList list = new ArrayList<>(); - public PlayerListWidget(List l) { + public PlayerListWidget() { super(TITLE, Formatting.GREEN.getColorValue()); // hard cap to 4x20 entries. // 5x20 is too wide (and not possible in theory. in reality however...) - int listlen = Math.min(l.size(), 160); + int listlen = Math.min(PlayerListMgr.getSize(), 160); + + // list isn't fully loaded, so our hack won't work... + if (listlen < 80) { + this.addComponent(new PlainTextComponent(Text.literal("List loading...").formatted(Formatting.GRAY))); + this.pack(); + return; + } // unintuitive int ceil division stolen from // https://stackoverflow.com/questions/7139382/java-rounding-up-to-an-int-using-math-ceil#21830188 @@ -38,7 +46,7 @@ public class PlayerListWidget extends Widget { Formatting.GREEN.getColorValue()); for (int i = 80; i < listlen; i++) { - list.add(l.get(i)); + list.add(PlayerListMgr.getRaw(i)); } Collections.sort(list, new Comparator() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java index cca09d77..459e3de2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -19,16 +15,12 @@ public class PowderWidget extends Widget { private static final MutableText TITLE = Text.literal("Powders").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public PowderWidget(List list) { + public PowderWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text amtMith = StrMan.stdEntry(list, 46, "Mithril:", Formatting.AQUA); - IcoTextComponent mith = new IcoTextComponent(Ico.MITHRIL, amtMith); - this.addComponent(mith); + this.addSimpleIcoText(Ico.MITHRIL, "Mithril:", Formatting.AQUA, 46); + this.addSimpleIcoText(Ico.EMERALD, "Gemstone:", Formatting.DARK_PURPLE, 47); - Text amtGem = StrMan.stdEntry(list, 47, "Gemstone:", Formatting.DARK_PURPLE); - IcoTextComponent gem = new IcoTextComponent(Ico.EMERALD, amtGem); - this.addComponent(gem); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java index 3d94fc59..ed375c6e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -17,24 +13,14 @@ public class ProfileWidget extends Widget { private static final MutableText TITLE = Text.literal("Profile").formatted(Formatting.YELLOW, Formatting.BOLD); - public ProfileWidget(List list) { + public ProfileWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - Text profileType = StrMan.stdEntry(list, 61, "Profile:", Formatting.GREEN); - IcoTextComponent profile = new IcoTextComponent(Ico.SIGN, profileType); - this.addComponent(profile); + this.addSimpleIcoText(Ico.SIGN, "Profile:", Formatting.GREEN, 61); + this.addSimpleIcoText(Ico.BONE, "Pet Sitter:", Formatting.AQUA, 62); + this.addSimpleIcoText(Ico.EMERALD, "Balance:", Formatting.GOLD, 63); + this.addSimpleIcoText(Ico.CLOCK, "Interest in:", Formatting.GOLD, 64); - Text petInfo = StrMan.stdEntry(list, 62, "Pet Sitter:", Formatting.AQUA); - IcoTextComponent pet = new IcoTextComponent(Ico.BONE, petInfo); - this.addComponent(pet); - - Text bankAmt = StrMan.stdEntry(list, 63, "Balance:", Formatting.GOLD); - IcoTextComponent bank = new IcoTextComponent(Ico.EMERALD, bankAmt); - this.addComponent(bank); - - Text interest = StrMan.stdEntry(list, 64, "Interest in:", Formatting.GOLD); - IcoTextComponent inter = new IcoTextComponent(Ico.CLOCK, interest); - this.addComponent(inter); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java index 5fdb1a5b..5c89964e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,12 +14,12 @@ public class QuestWidget extends Widget { private static final MutableText TITLE = Text.literal("Faction Quests").formatted(Formatting.AQUA, Formatting.BOLD); - public QuestWidget(List list) { + public QuestWidget() { super(TITLE, Formatting.AQUA.getColorValue()); - for (int i = 51; i<56; i++) { - String q = StrMan.strAt(list, i).trim(); - IcoTextComponent itc = new IcoTextComponent(Ico.BOOK, Text.literal(q)); + for (int i = 51; i < 56; i++) { + Text q = Widget.plainEntryText(i); + IcoTextComponent itc = new IcoTextComponent(Ico.BOOK, q); this.addComponent(itc); } this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java index 75bd4e92..c0379623 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java @@ -1,14 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -22,33 +20,45 @@ public class ReputationWidget extends Widget { // matches your faction alignment progress // group 1: percentage to next alignment level - private static final Pattern PROGRESS_PATTERN = Pattern.compile(" \\|+ \\(([0-9.]*)%\\)"); + private static final Pattern PROGRESS_PATTERN = Pattern.compile("\\|+ \\((?[0-9.]*)%\\)"); // matches alignment level names // group 1: left level name // group 2: right level name - private static final Pattern STATE_PATTERN = Pattern.compile("(\\S*) *(\\S*)"); + private static final Pattern STATE_PATTERN = Pattern.compile("(?\\S*) *(?\\S*)"); - public ReputationWidget(List list) { + public ReputationWidget() { super(TITLE, Formatting.AQUA.getColorValue()); - String fname = StrMan.strAt(list, 45).split(" ")[0]; - String rep = StrMan.strAt(list, 46).trim(); - Matcher prog = StrMan.regexAt(list, 47, PROGRESS_PATTERN); - Matcher state = StrMan.regexAt(list, 48, STATE_PATTERN); + String fracstr = PlayerListMgr.strAt(45); + int spaceidx; IcoTextComponent faction; - if (fname.equals("Mage")) { - faction = new IcoTextComponent(Ico.POTION, Text.literal(fname).formatted(Formatting.DARK_AQUA)); + if (fracstr == null || (spaceidx = fracstr.indexOf(' ')) == -1) { + faction = new IcoTextComponent(); } else { - faction = new IcoTextComponent(Ico.SWORD, Text.literal(fname).formatted(Formatting.RED)); + String fname = fracstr.substring(0, spaceidx); + if (fname.equals("Mage")) { + faction = new IcoTextComponent(Ico.POTION, Text.literal(fname).formatted(Formatting.DARK_AQUA)); + } else { + faction = new IcoTextComponent(Ico.SWORD, Text.literal(fname).formatted(Formatting.RED)); + } } this.addComponent(faction); - float pcnt = Float.parseFloat(prog.group(1)); + Text rep = Widget.plainEntryText(46); + Matcher prog = PlayerListMgr.regexAt(47, PROGRESS_PATTERN); + Matcher state = PlayerListMgr.regexAt(48, STATE_PATTERN); - ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(state.group(1) + " -> " + state.group(2)), Text.of(rep), pcnt, Formatting.AQUA.getColorValue()); - this.addComponent(pc); + if (prog == null || state == null) { + this.addComponent(new ProgressComponent()); + } else { + float pcnt = Float.parseFloat(prog.group("prog")); + ProgressComponent pc = new ProgressComponent(Ico.LANTERN, + Text.of(state.group("from") + " -> " + state.group("to")), rep, pcnt, + Formatting.AQUA.getColorValue()); + this.addComponent(pc); + } this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java index 4084d4dd..2d8d1c63 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -20,20 +16,12 @@ public class ServerWidget extends Widget { private static final MutableText TITLE = Text.literal("Server Info").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public ServerWidget(List list) { + public ServerWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); - IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); - this.addComponent(area); - - Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); - IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); - this.addComponent(server); - - Text amtGems = StrMan.stdEntry(list, 43, "Gems:", Formatting.GREEN); - IcoTextComponent gems = new IcoTextComponent(Ico.EMERALD, amtGems); - this.addComponent(gems); + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.DARK_AQUA, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + this.addSimpleIcoText(Ico.EMERALD, "Gems:", Formatting.GREEN, 43); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java index be412421..b426d9e6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java @@ -1,18 +1,16 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoFatTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -30,33 +28,39 @@ public class SkillsWidget extends Widget { // group 2: progress to next level (without "%") private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): ([0-9.MAX]*)%?"); - public SkillsWidget(List list) { + public SkillsWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - Matcher m = StrMan.regexAt(list, 66, SKILL_PATTERN); - String skill = m.group(1); - String pcntStr = m.group(2); - + Matcher m = PlayerListMgr.regexAt(66, SKILL_PATTERN); Component progress; - if (!pcntStr.equals("MAX")) { - float pcnt = Float.parseFloat(pcntStr); - progress = new ProgressComponent(Ico.LANTERN, Text.of(skill), - Text.of(pcntStr), pcnt, Formatting.GOLD.getColorValue()); + if (m == null) { + progress = new ProgressComponent(); } else { - progress = new IcoFatTextComponent(Ico.LANTERN, Text.of(skill), Text.literal(pcntStr).formatted(Formatting.RED)); + + String skill = m.group(1); + String pcntStr = m.group(2); + + if (!pcntStr.equals("MAX")) { + float pcnt = Float.parseFloat(pcntStr); + progress = new ProgressComponent(Ico.LANTERN, Text.of(skill), + Text.of(pcntStr), pcnt, Formatting.GOLD.getColorValue()); + } else { + progress = new IcoFatTextComponent(Ico.LANTERN, Text.of(skill), + Text.literal(pcntStr).formatted(Formatting.RED)); + } } this.addComponent(progress); - Text speed = StrMan.stdEntry(list, 67, "SPD", Formatting.WHITE); + Text speed = Widget.simpleEntryText(67, "SPD", Formatting.WHITE); IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); - Text strength = StrMan.stdEntry(list, 68, "STR", Formatting.RED); + Text strength = Widget.simpleEntryText(68, "STR", Formatting.RED); IcoTextComponent str = new IcoTextComponent(Ico.SWORD, strength); - Text critDmg = StrMan.stdEntry(list, 69, "CCH", Formatting.BLUE); + Text critDmg = Widget.simpleEntryText(69, "CCH", Formatting.BLUE); IcoTextComponent cdg = new IcoTextComponent(Ico.SWORD, critDmg); - Text critCh = StrMan.stdEntry(list, 70, "CDG", Formatting.BLUE); + Text critCh = Widget.simpleEntryText(70, "CDG", Formatting.BLUE); IcoTextComponent cch = new IcoTextComponent(Ico.SWORD, critCh); - Text aSpeed = StrMan.stdEntry(list, 71, "ASP", Formatting.YELLOW); + Text aSpeed = Widget.simpleEntryText(71, "ASP", Formatting.YELLOW); IcoTextComponent asp = new IcoTextComponent(Ico.HOE, aSpeed); TableComponent tc = new TableComponent(2, 3, Formatting.YELLOW.getColorValue()); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java index 4252888e..d47849c3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java @@ -1,12 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -17,12 +12,10 @@ public class TrapperWidget extends Widget { private static final MutableText TITLE = Text.literal("Trapper").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public TrapperWidget(List list) { + public TrapperWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text amtPelts = StrMan.stdEntry(list, 46, "Pelts:", Formatting.AQUA); - IcoTextComponent pelts = new IcoTextComponent(Ico.LEATHER, amtPelts); - this.addComponent(pelts); + this.addSimpleIcoText(Ico.LEATHER, "Pelts:", Formatting.AQUA, 46); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java index 0e0fe6b7..178c9c3c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java @@ -19,16 +19,21 @@ public class UpgradeWidget extends Widget { public UpgradeWidget(String footertext) { super(TITLE, Formatting.GOLD.getColorValue()); - String[] interesting = footertext.split("Upgrades"); - if (interesting.length < 2) { - this.addComponent(new PlainTextComponent(Text.of("Currently no upgrades..."))); + + if (footertext == null || !footertext.contains("Upgrades")) { + this.addComponent(new PlainTextComponent(Text.literal("No data").formatted(Formatting.GRAY))); this.pack(); return; } + + String[] interesting = footertext.split("Upgrades"); + this.addComponent(new PlainTextComponent(Text.of("Currently no upgrades..."))); + this.pack(); + String[] lines = interesting[1].split("\n"); IcoTextComponent u1 = new IcoTextComponent(Ico.SIGN, Text.of(lines[1])); this.addComponent(u1); - if (lines.length == 5) { + if (lines.length == 5) { // ??? no idea how this works, but it does. don't touch until understood... IcoTextComponent u2 = new IcoTextComponent(Ico.SIGN, Text.of(lines[2])); this.addComponent(u2); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java index cca4ca1b..ec6a35fb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java @@ -1,11 +1,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.HashMap; -import java.util.List; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.text.MutableText; @@ -41,13 +39,17 @@ public class VolcanoWidget extends Widget { new Pair(new ItemStack(Items.SKELETON_SKULL), Formatting.DARK_RED)); } - public VolcanoWidget(List list) { + public VolcanoWidget() { super(TITLE, Formatting.AQUA.getColorValue()); - String s = StrMan.strAt(list, 58).trim(); - Pair p = BOOM_TYPE.get(s); - IcoTextComponent itc = new IcoTextComponent(p.getLeft(), Text.literal(s).formatted(p.getRight())); - this.addComponent(itc); + String s = PlayerListMgr.strAt(58); + if (s == null) { + this.addComponent(new IcoTextComponent()); + } else { + Pair p = BOOM_TYPE.get(s); + this.addComponent(new IcoTextComponent(p.getLeft(), Text.literal(s).formatted(p.getRight()))); + } + this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index 01f47933..23ec15d0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -5,13 +5,17 @@ import java.util.ArrayList; import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; public abstract class Widget { @@ -38,6 +42,11 @@ public abstract class Widget { components.add(c); } + public final void addSimpleIcoText(ItemStack ico, String string, Formatting fmt, int idx) { + Text txt = Widget.simpleEntryText(idx, string, fmt); + this.addComponent(new IcoTextComponent(ico, txt)); + } + public final void pack() { for (Component c : components) { h += c.getHeight() + Component.PAD_L; @@ -130,4 +139,33 @@ public abstract class Widget { private void drawVLine(MatrixStack ms, int xpos, int ypos, int height) { DrawableHelper.fill(ms, xpos, ypos, xpos + 1, ypos + height, this.color); } + + public static Text simpleEntryText(int idx, String entryName, Formatting contentFmt) { + + String src = PlayerListMgr.strAt(idx); + + if (src == null) { + return null; + } + + int cidx = src.indexOf(':'); + if (cidx == -1) { + return null; + } + + src = src.substring(src.indexOf(':') + 1); + return Widget.simpleEntryText(src, entryName, contentFmt); + } + + public static Text simpleEntryText(String entryContent, String entryName, Formatting contentFmt) { + return Text.literal(entryName).append(Text.literal(entryContent).formatted(contentFmt)); + } + + public static Text plainEntryText(int idx) { + String str = PlayerListMgr.strAt(idx); + if (str == null) { + return null; + } + return Text.of(str); + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java index 6a780159..55d9b889 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java @@ -1,8 +1,10 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; // widget component that consists of an icon and two lines of text @@ -11,22 +13,32 @@ public class IcoFatTextComponent extends Component { private static final int ICO_OFFS = 1; private ItemStack ico; - private Text l1, l2; + private Text line1, line2; public IcoFatTextComponent(ItemStack ico, Text l1, Text l2) { - this.ico = ico; - this.l1 = l1; - this.l2 = l2; + this.ico = (ico == null) ? Ico.BARRIER : ico; + this.line1 = l1; + this.line2 = l2; - this.width = ICO_DIM + PAD_L + Math.max(txtRend.getWidth(l1), txtRend.getWidth(l2)); + if (l1 == null || l2 == null) { + this.ico = Ico.BARRIER; + this.line1 = Text.literal("No data").formatted(Formatting.GRAY); + this.line2 = Text.literal("No data").formatted(Formatting.GRAY); + } + + this.width = ICO_DIM + PAD_L + Math.max(txtRend.getWidth(this.line1), txtRend.getWidth(this.line2)); this.height = txtRend.fontHeight + PAD_S + txtRend.fontHeight; } + public IcoFatTextComponent() { + this(null, null, null); + } + @Override public void render(MatrixStack ms, int x, int y) { itmRend.renderGuiItemIcon(ms, ico, x, y + ICO_OFFS); - txtRend.draw(ms, l1, x + ICO_DIM + PAD_L, y, 0xffffffff); - txtRend.draw(ms, l2, x + ICO_DIM + PAD_L, y + txtRend.fontHeight + PAD_S, 0xffffffff); + txtRend.draw(ms, line1, x + ICO_DIM + PAD_L, y, 0xffffffff); + txtRend.draw(ms, line2, x + ICO_DIM + PAD_L, y + txtRend.fontHeight + PAD_S, 0xffffffff); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java index b54affbc..a14d0531 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java @@ -1,8 +1,10 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; // widget component that consists of an icon and a line of text @@ -11,14 +13,23 @@ public class IcoTextComponent extends Component { private ItemStack ico; private Text text; - public IcoTextComponent(ItemStack ico, Text text) { - this.ico = ico; - this.text = text; + public IcoTextComponent(ItemStack ico, Text txt) { + this.ico = (ico == null) ? Ico.BARRIER : ico; + this.text = txt; - this.width = ICO_DIM + PAD_L + txtRend.getWidth(text); + if (txt == null) { + this.ico = Ico.BARRIER; + this.text = Text.literal("No data").formatted(Formatting.GRAY); + } + + this.width = ICO_DIM + PAD_L + txtRend.getWidth(this.text); this.height = ICO_DIM; } + public IcoTextComponent() { + this(null, null); + } + @Override public void render(MatrixStack ms, int x, int y) { itmRend.renderGuiItemIcon(ms, ico, x, y); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java index a2ffced9..70a72715 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java @@ -2,6 +2,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; // widget component that consists of a line of text @@ -9,10 +10,14 @@ public class PlainTextComponent extends Component { private Text text; - public PlainTextComponent(Text text) { - this.text = text; + public PlainTextComponent(Text txt) { + this.text = txt; - this.width = PAD_S + txtRend.getWidth(text); // looks off without padding + if (txt == null) { + this.text = Text.literal("No data").formatted(Formatting.GRAY); + } + + this.width = PAD_S + txtRend.getWidth(this.text); // looks off without padding this.height = txtRend.fontHeight; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java index 753c9b21..f6618a98 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java @@ -1,9 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; // widget component that consists of an icon, some text and a progress bar // progress bar either shows percentage or custom text @@ -22,15 +24,23 @@ public class ProgressComponent extends Component { private int color; private int barW; - public ProgressComponent(ItemStack ico, Text desc, Text bar, float pcnt, int color) { - this.ico = ico; - this.desc = desc; - this.bar = bar; - this.color = 0xff000000 | color; + public ProgressComponent(ItemStack ico, Text d, Text b, float pcnt, int color) { + this.ico = (ico == null) ? Ico.BARRIER : ico; + this.desc = d; + this.bar = b; + this.color = color; this.pcnt = pcnt; + if (d == null || b == null) { + this.ico = Ico.BARRIER; + this.desc = Text.literal("No data").formatted(Formatting.GRAY); + this.bar = Text.literal("---").formatted(Formatting.GRAY); + this.pcnt = 100f; + this.color = 0xff000000 | Formatting.DARK_GRAY.getColorValue(); + } + this.barW = BAR_WIDTH; - this.width = ICO_DIM + PAD_L + Math.max(this.barW, txtRend.getWidth(desc)); + this.width = ICO_DIM + PAD_L + Math.max(this.barW, txtRend.getWidth(this.desc)); this.height = txtRend.fontHeight + PAD_S + 2 + txtRend.fontHeight + 2; } @@ -38,6 +48,10 @@ public class ProgressComponent extends Component { this(ico, text, Text.of(pcnt + "%"), pcnt, color); } + public ProgressComponent() { + this(null, null, null, 100, 0); + } + @Override public void render(MatrixStack ms, int x, int y) { itmRend.renderGuiItemIcon(ms, ico, x, y + ICO_OFFS); -- cgit From fd4f8bea1c742c8905782ed260d1f1992a732575 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 19 May 2023 22:49:49 -0400 Subject: Fixed matrixStack translation --- .../java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 635475bf..756583f7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.gui; import com.mojang.blaze3d.systems.RenderSystem; +import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor; import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; @@ -42,7 +43,12 @@ public class ContainerSolverManager extends DrawableHelper { public void init() { ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (Utils.isOnSkyblock && screen instanceof GenericContainerScreen genericContainerScreen) { - ScreenEvents.afterRender(screen).register((screen1, matrices, mouseX, mouseY, delta) -> onDraw(matrices, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9))); + ScreenEvents.afterRender(screen).register((screen1, matrices, mouseX, mouseY, delta) -> { + matrices.push(); + matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 0); + onDraw(matrices, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); + matrices.pop(); + }); onSetScreen(genericContainerScreen); } else { clearScreen(); -- cgit From 61b13fd1b4010dd4e13d62e365c81ae52cb881fa Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 20 May 2023 00:13:32 -0400 Subject: Fixed highlight rendering through tooltips --- src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 756583f7..850e96ea 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -45,7 +45,7 @@ public class ContainerSolverManager extends DrawableHelper { if (Utils.isOnSkyblock && screen instanceof GenericContainerScreen genericContainerScreen) { ScreenEvents.afterRender(screen).register((screen1, matrices, mouseX, mouseY, delta) -> { matrices.push(); - matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 0); + matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 300); onDraw(matrices, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); matrices.pop(); }); @@ -88,7 +88,6 @@ public class ContainerSolverManager extends DrawableHelper { return; if (highlights == null) highlights = currentSolver.getColors(groups, slotMap(slots)); - RenderSystem.disableDepthTest(); RenderSystem.colorMask(true, true, true, false); for (ColorHighlight highlight : highlights) { Slot slot = slots.get(highlight.slot()); @@ -96,7 +95,6 @@ public class ContainerSolverManager extends DrawableHelper { fillGradient(matrices, slot.x, slot.y, slot.x + 16, slot.y + 16, color, color); } RenderSystem.colorMask(true, true, true, true); - RenderSystem.enableDepthTest(); } private Map slotMap(List slots) { -- cgit From 4fcccc53c1b312d7a5a956ae13fea46564a70b48 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 20 May 2023 12:19:17 -0400 Subject: Fixed highlight rendering through tooltips --- src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 850e96ea..8f3f7e2a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -88,6 +88,7 @@ public class ContainerSolverManager extends DrawableHelper { return; if (highlights == null) highlights = currentSolver.getColors(groups, slotMap(slots)); + RenderSystem.enableDepthTest(); RenderSystem.colorMask(true, true, true, false); for (ColorHighlight highlight : highlights) { Slot slot = slots.get(highlight.slot()); -- cgit From d9f368296ac5dac6dc60602e25cf1cc989e11ae5 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 20 May 2023 12:23:28 -0400 Subject: Require fabric api version 0.81.0 and loader version 0.14.19 --- gradle.properties | 6 +++--- src/main/resources/fabric.mod.json | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index c883c1a2..c87195f7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,12 +3,12 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.19.4 minecraft_version=1.19.4 -yarn_mappings=1.19.4+build.1 -loader_version=0.14.18 +yarn_mappings=1.19.4+build.2 +loader_version=0.14.19 #Fabric api ## 1.19.4 -fabric_api_version=0.76.0+1.19.4 +fabric_api_version=0.81.1+1.19.4 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 00bf5b57..b3079acb 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -26,8 +26,8 @@ "skyblocker.mixins.json" ], "depends": { - "fabricloader": ">=0.14.17", - "fabric-api": ">=0.76.0+1.19.4", + "fabricloader": ">=0.14.19", + "fabric-api": ">=0.81.0+1.19.4", "cloth-config2": "*", "minecraft": "~1.19.4" }, -- cgit From 2512857cf028b7f72f951d975c745a4c50f22bf3 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 21 May 2023 20:57:11 +0200 Subject: Remove debugging leftover --- src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index 53494940..3d915f8b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -46,7 +46,6 @@ public class PlayerListHudMixin { int w = scaledW; int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); try { - long then = System.nanoTime(); Screen screen = Screen.getCorrect(w, h, footer); screen.render(ms); info.cancel(); -- cgit From 42f140963c9d06f2d692935f16bcf1b545ba18ab Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 21 May 2023 20:58:09 +0200 Subject: Add missing space in DungeonDownedWidget --- .../xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java index 35926d7d..60f3313f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java @@ -24,7 +24,7 @@ public class DungeonDownedWidget extends Widget { format = Formatting.GRAY; } int idx = down.indexOf(": "); - Text downed = (down == null || idx== -1) ? null : Widget.simpleEntryText(down.substring(idx + 2), "Downed:", format); + Text downed = (down == null || idx== -1) ? null : Widget.simpleEntryText(down.substring(idx + 2), "Downed: ", format); IcoTextComponent d = new IcoTextComponent(Ico.SKULL, downed); this.addComponent(d); -- cgit From 1b0053152f33164cc7e8572b87f6cf4755a75353 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 21 May 2023 20:58:21 +0200 Subject: Add missing percent sign in SkillsWidget --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java index b426d9e6..92ee0ca9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java @@ -43,7 +43,7 @@ public class SkillsWidget extends Widget { if (!pcntStr.equals("MAX")) { float pcnt = Float.parseFloat(pcntStr); progress = new ProgressComponent(Ico.LANTERN, Text.of(skill), - Text.of(pcntStr), pcnt, Formatting.GOLD.getColorValue()); + Text.of(pcntStr + "%"), pcnt, Formatting.GOLD.getColorValue()); } else { progress = new IcoFatTextComponent(Ico.LANTERN, Text.of(skill), Text.literal(pcntStr).formatted(Formatting.RED)); -- cgit From 6be72d37c9da40c5361699084808b52c32c29278 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 21 May 2023 20:59:44 +0200 Subject: Fix colored part of ProgressComponent being transparent --- .../skyblock/tabhud/widget/component/ProgressComponent.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java index f6618a98..6aaf9f67 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java @@ -28,7 +28,7 @@ public class ProgressComponent extends Component { this.ico = (ico == null) ? Ico.BARRIER : ico; this.desc = d; this.bar = b; - this.color = color; + this.color = 0xff000000 | color; this.pcnt = pcnt; if (d == null || b == null) { @@ -59,8 +59,9 @@ public class ProgressComponent extends Component { int barX = x + ICO_DIM + PAD_L; int barY = y + txtRend.fontHeight + PAD_S; - DrawableHelper.fill(ms, barX, barY, barX + this.barW, barY + BAR_HEIGHT, COL_BG_BAR); - DrawableHelper.fill(ms, barX, barY, barX + ((int) (this.barW * (this.pcnt / 100f))), barY + BAR_HEIGHT, + int endOffsX = ((int) (this.barW * (this.pcnt / 100f))); + DrawableHelper.fill(ms, barX + endOffsX, barY, barX + this.barW, barY + BAR_HEIGHT, COL_BG_BAR); + DrawableHelper.fill(ms, barX, barY, barX + endOffsX, barY + BAR_HEIGHT, this.color); txtRend.drawWithShadow(ms, bar, barX + 3, barY + 2, 0xffffffff); } -- cgit From 7bc1ee0347d03d3a3ea45e01960cd581b34f0531 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 21 May 2023 22:38:54 +0200 Subject: (Hopefully fully) revert changes to readme and gradle.properties --- README.md | 9 --------- gradle.properties | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/README.md b/README.md index 3dfac6f2..59e8a7fa 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,3 @@ -## Skyblocker Tab Menu Fork -This will be merged into Skyblocker when ready (soon) - -### Known Issues -* Scraping the entire player list multiple times every frame isn't ideal. (possible optimisation for later) -* Encountering errors should be handled more gracefully - -Apart from that, it's working! - skyblocker ## Skyblocker diff --git a/gradle.properties b/gradle.properties index 4b9ccc69..007c64ad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ mod_menu_version=6.1.0-rc.4 rei_version=11.0.597 # Mod Properties -mod_version = 1.9.0-beta-tabmenu +mod_version = 1.9.0 maven_group = me.xmrvizzy archives_base_name = skyblocker modrinth_id=y6DuFGwJ \ No newline at end of file -- cgit From 26b08d04f31cffee9caf77dacaadd7da3ba77dab Mon Sep 17 00:00:00 2001 From: ElSebas02 Date: Sun, 21 May 2023 00:56:25 +0000 Subject: Translated using Weblate (Spanish) [skip ci] Currently translated at 44.4% (84 of 189 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/es/ --- .../resources/assets/skyblocker/lang/es_ES.json | 58 +++++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json index 5aa55294..cde1bbd3 100644 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -25,7 +25,7 @@ "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Ambos", "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Habilitar el precio mas bajo de BIN", "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Habilitar los precios de compra/venta del Bazar", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Habilitar Museo & datos", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Habilitar Fecha del Museo", "text.autoconfig.skyblocker.option.general.hitbox": "Cajas de Colisión", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Habilitar la Caja de Colisión de la 1.8 para la tierra de cultivo", "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Habilitar la Caja de Colisión de la 1.8 para la palanca", @@ -47,5 +47,59 @@ "text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4", "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", - "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7" + "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Ocultar el mensaje de Implosion", + "text.autoconfig.skyblocker.option.messages.hideCombo": "Ocultar Mensajes de Combos", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Obscurece los cofres que ya han sido abiertos.", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Habilitar Fondo", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Habilitar Navegación Rápida", + "text.autoconfig.skyblocker.option.general.quicknav": "Navegación Rápida", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Información extra de los objetos", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEl precio en la información en los objetos se actualiza cada 60 segundos. De lo contrario revisa lastest.log", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Este valor no importa si estas ciclando", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button2": "Botón 2", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.messages.hideAds": "Ocultar anuncios del Chat Publico", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Ocultar mensajes del Pad de Teletransporte", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Ocultar mensajes del Autopet", + "text.autoconfig.skyblocker.option.general.itemList": "Lista de Objetos", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Habilitar la Lista de Objetos", + "text.autoconfig.skyblocker.category.locations": "Localizaciones", + "text.autoconfig.skyblocker.option.locations.dungeons": "Mazmorras", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Ayuda con Croesus", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Habilitar Mapa", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Escala del Mapa", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Resuelve el Acertijo de \"Los Tres Chiflados\"", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Resuelve el Acertijo del Blaze", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Resuelve el Acertijo de Trivia", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Minas Dwarven", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Habilitar Combustible del Taladro", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Resolver Fetchur", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Interfaz de Dwarven", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Habilitado", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + "text.autoconfig.skyblocker.category.messages": "Mensajes", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Deshabilitado", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtro", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Mover a la barra de acción", + "text.autoconfig.skyblocker.option.messages.hideAbility": "Ocultar Mensaje de Enfriamiento (Cooldown)", + "text.autoconfig.skyblocker.option.messages.hideHeal": "Ocultar Mensajes de Curación", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "Ocultar Mensajes de la AOTE", + "text.autoconfig.skyblocker.option.messages.hideMana": "Ocultar los Mensajes del Consumo de Maná de la Barra de Acción", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "Da una mejor experiencia con FancyBar", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2¡Hay Una nueva versión disponible!", + "skyblocker.update.update_link": " §2§nHas Click Aquí§r", + "skyblocker.update.update_message_end": " §aPara conocer mas sobre las nuevas características.", + "skyblocker.update.hover_text": "Abrir Modrinth", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Notificaciones sobre actualizaciones", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2¡Se añadió tu API key automáticamente!", + "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cLa actualización del repositorio local fallo. Elimina los archivos manualmente y reinicia el juego." } -- cgit From 5f05e7bf6c08880af5c3c00ae15c494ec5b87d9c Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 17 May 2023 23:11:15 -0400 Subject: Added docs to SkyblockerMod and Scheduler and refactored Scheduler --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 15 ++++++++ .../me/xmrvizzy/skyblocker/utils/Scheduler.java | 45 ++++++++++++++++------ 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 503d3a64..aa10b29a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -22,14 +22,22 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.minecraft.client.MinecraftClient; +/** + * Main class for Skyblocker which initializes features, registers events, and manages ticks. This class will be instantiated by Fabric. Do not instantiate this class. + */ public class SkyblockerMod implements ClientModInitializer { public static final String NAMESPACE = "skyblocker"; private static SkyblockerMod INSTANCE; + @SuppressWarnings("deprecation") public final Scheduler scheduler = new Scheduler(); public final ContainerSolverManager containerSolverManager = new ContainerSolverManager(); public final StatusBarTracker statusBarTracker = new StatusBarTracker(); + /** + * Do not instantiate this class. Use {@link #getInstance()} instead. + */ + @Deprecated public SkyblockerMod() { INSTANCE = this; } @@ -38,6 +46,9 @@ public class SkyblockerMod implements ClientModInitializer { return INSTANCE; } + /** + * Register {@link #tick(MinecraftClient)} to {@link ClientTickEvents#END_CLIENT_TICK}, initialize all features, and schedule tick events. + */ @Override public void onInitializeClient() { ClientTickEvents.END_CLIENT_TICK.register(this::tick); @@ -62,6 +73,10 @@ public class SkyblockerMod implements ClientModInitializer { scheduler.scheduleCyclic(DwarvenHud::update, 40); } + /** + * Ticks the scheduler. Called once at the end of every client tick through {@link ClientTickEvents#END_CLIENT_TICK}. + * @param client the Minecraft client. + */ public void tick(MinecraftClient client) { scheduler.tick(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 16e5b023..efba4995 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -1,27 +1,46 @@ package me.xmrvizzy.skyblocker.utils; +import me.xmrvizzy.skyblocker.SkyblockerMod; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.PriorityQueue; +/** + * A scheduler for running tasks at a later time. Tasks will be run synchronously on the main client thread. Use the instance stored in {@link SkyblockerMod#scheduler}. Do not instantiate this class. + */ public class Scheduler { private static final Logger LOGGER = LoggerFactory.getLogger(Scheduler.class); private int currentTick; private final PriorityQueue tasks; + /** + * Do not instantiate this class. Use {@link SkyblockerMod#scheduler} instead. + */ + @SuppressWarnings("DeprecatedIsStillUsed") + @Deprecated public Scheduler() { currentTick = 0; tasks = new PriorityQueue<>(); } + /** + * Schedules a task to run after a delay. + * @param task the task to run + * @param delay the delay in ticks + */ public void schedule(Runnable task, int delay) { if (delay < 0) LOGGER.warn("Scheduled a task with negative delay"); - ScheduledTask tmp = new ScheduledTask(currentTick + delay, task); + ScheduledTask tmp = new ScheduledTask(task, currentTick + delay); tasks.add(tmp); } + /** + * Schedules a task to run every period ticks. + * @param task the task to run + * @param period the period in ticks + */ public void scheduleCyclic(Runnable task, int period) { if (period <= 0) LOGGER.error("Attempted to schedule a cyclic task with period lower than 1"); @@ -38,23 +57,25 @@ public class Scheduler { } } - private class CyclicTask implements Runnable { - private final Runnable inner; - private final int period; - - public CyclicTask(Runnable task, int period) { - this.inner = task; - this.period = period; - } - + /** + * A task that runs every period ticks. More specifically, this task reschedules itself to run again after period ticks every time it runs. + * @param inner the task to run + * @param period the period in ticks + */ + private record CyclicTask(Runnable inner, int period) implements Runnable { @Override public void run() { - schedule(this, period); + SkyblockerMod.getInstance().scheduler.schedule(this, period); inner.run(); } } - private record ScheduledTask(int schedule, Runnable inner) implements Comparable, Runnable { + /** + * A task that runs at a specific tick, relative to {@link #currentTick}. + * @param inner the task to run + * @param schedule the tick to run at + */ + private record ScheduledTask(Runnable inner, int schedule) implements Comparable, Runnable { @Override public int compareTo(ScheduledTask o) { return schedule - o.schedule; -- cgit From 10ef8bb08547394468f231f66ba749d4c43a59e0 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 17 May 2023 23:18:48 -0400 Subject: Refactored mixins --- .../xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java | 4 ---- .../me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java | 1 + .../me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java | 1 - src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java | 12 ++++-------- 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java index 237f6ba9..e59a3bfb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java @@ -6,7 +6,6 @@ import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.world.ClientWorld; -// import net.minecraft.network.encryption.PlayerPublicKey; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -14,10 +13,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ClientPlayerEntity.class) public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity { - - // public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile, PlayerPublicKey publicKey) { public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) { - // super(world, profile, publicKey); super(world, profile); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java index 29da4bd6..74cc4b1c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java @@ -26,6 +26,7 @@ public abstract class FarmlandBlockMixin extends Block { cir.setReturnValue(Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 16.0, 16.0)); } + @SuppressWarnings("deprecation") @Override public VoxelShape getCullingShape(BlockState state, BlockView world, BlockPos pos) { return Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 15.0, 16.0); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java index 24e27c08..66ec5c15 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java @@ -13,7 +13,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(MinecraftClient.class) public abstract class MinecraftClientMixin { - @Shadow @Nullable public ClientPlayerEntity player; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java index 14aa8868..7d54ccb0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java @@ -1,21 +1,18 @@ package me.xmrvizzy.skyblocker.mixin; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.Utils; - import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Screen.class) public abstract class ScreenMixin { - @Inject(at = @At("HEAD"), method = "renderTooltip(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/item/ItemStack;II)V", cancellable = true) public void skyblocker$renderTooltip(MatrixStack matrices, ItemStack itemStack, int x, int y, CallbackInfo ci) { Text stackName = itemStack.getName(); @@ -24,5 +21,4 @@ public abstract class ScreenMixin { ci.cancel(); } } - } -- cgit From 3391f91c985c9e34867b651cd3b0c34bd8950cc8 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 19 May 2023 23:19:10 -0400 Subject: Refactored Utils fields to use getters --- .../xmrvizzy/skyblocker/chat/ChatMessageListener.java | 2 +- .../xmrvizzy/skyblocker/discord/DiscordRPCManager.java | 2 +- .../skyblocker/gui/ContainerSolverManager.java | 2 +- .../skyblocker/mixin/ClientPlayerEntityMixin.java | 2 +- .../xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java | 2 +- .../me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java | 14 +++++++------- .../skyblocker/mixin/InventoryScreenMixin.java | 2 +- .../xmrvizzy/skyblocker/mixin/ItemRendererMixin.java | 2 +- .../me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java | 2 +- .../skyblocker/mixin/MinecraftClientMixin.java | 2 +- .../java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java | 2 +- .../xmrvizzy/skyblocker/skyblock/BackpackPreview.java | 2 +- .../skyblocker/skyblock/dungeon/DungeonBlaze.java | 2 +- .../xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java | 2 +- .../skyblocker/skyblock/item/PriceInfoTooltip.java | 4 ++-- .../xmrvizzy/skyblocker/skyblock/item/WikiLookup.java | 2 +- .../skyblocker/skyblock/quicknav/QuickNav.java | 2 +- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 18 +++++++++++++++--- 18 files changed, 39 insertions(+), 27 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java index 9e6b5f64..f502a356 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -62,7 +62,7 @@ public interface ChatMessageListener { } // Register EVENT to ClientReceiveMessageEvents.ALLOW_GAME from fabric api ClientReceiveMessageEvents.ALLOW_GAME.register((message, overlay) -> { - if (!Utils.isOnSkyblock) { + if (!Utils.isOnSkyblock()) { return true; } ChatFilterResult result = EVENT.invoker().onMessage(message, message.getString()); diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java index 10b88ce8..4fa5265f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -37,7 +37,7 @@ public class DiscordRPCManager { SkyblockerConfig.get().richPresence.customMessage = "Playing Skyblock"; AutoConfig.getConfigHolder(SkyblockerConfig.class).save(); } - if ((!Utils.isOnSkyblock || !SkyblockerConfig.get().richPresence.enableRichPresence) && DiscordIPC.isConnected()){ + if ((!Utils.isOnSkyblock() || !SkyblockerConfig.get().richPresence.enableRichPresence) && DiscordIPC.isConnected()){ DiscordIPC.stop(); LOGGER.info("Discord RPC stopped"); return; diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 8f3f7e2a..e4ff229d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -42,7 +42,7 @@ public class ContainerSolverManager extends DrawableHelper { public void init() { ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { - if (Utils.isOnSkyblock && screen instanceof GenericContainerScreen genericContainerScreen) { + if (Utils.isOnSkyblock() && screen instanceof GenericContainerScreen genericContainerScreen) { ScreenEvents.afterRender(screen).register((screen1, matrices, mouseX, mouseY, delta) -> { matrices.push(); matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 300); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java index e59a3bfb..76c4e8ec 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java @@ -19,6 +19,6 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity @Inject(method = "dropSelectedItem", at = @At("HEAD"), cancellable = true) public void skyblocker$dropSelectedItem(boolean dropEntireStack, CallbackInfoReturnable cir) { - if (Utils.isOnSkyblock) HotbarSlotLock.handleDropSelectedItem(this.getInventory().selectedSlot, cir); + if (Utils.isOnSkyblock()) HotbarSlotLock.handleDropSelectedItem(this.getInventory().selectedSlot, cir); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java index 74cc4b1c..761f8a68 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java @@ -22,7 +22,7 @@ public abstract class FarmlandBlockMixin extends Block { @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) public void skyblocker$onGetOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (Utils.isOnSkyblock && SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox) + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox) cir.setReturnValue(Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 16.0, 16.0)); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index c137e6c8..e17795ab 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -50,7 +50,7 @@ public abstract class InGameHudMixin extends DrawableHelper { @Inject(method = "setOverlayMessage(Lnet/minecraft/text/Text;Z)V", at = @At("HEAD"), cancellable = true) private void skyblocker$onSetOverlayMessage(Text message, boolean tinted, CallbackInfo ci) { - if (!Utils.isOnSkyblock || !SkyblockerConfig.get().general.bars.enableBars) + if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().general.bars.enableBars) return; String msg = message.getString(); String res = statusBarTracker.update(msg, SkyblockerConfig.get().messages.hideMana); @@ -63,7 +63,7 @@ public abstract class InGameHudMixin extends DrawableHelper { @Inject(method = "renderHotbar", at = @At("HEAD")) public void skyblocker$renderHotbar(float f, MatrixStack matrices, CallbackInfo ci) { - if (Utils.isOnSkyblock) { + if (Utils.isOnSkyblock()) { hotbarMatrices = matrices; hotbarSlotIndex = 0; } @@ -71,7 +71,7 @@ public abstract class InGameHudMixin extends DrawableHelper { @Inject(method = "renderHotbarItem", at = @At("HEAD")) public void skyblocker$renderHotbarItem(MatrixStack matrices, int i, int j, float f, PlayerEntity player, ItemStack stack, int seed, CallbackInfo ci) { - if (Utils.isOnSkyblock) { + if (Utils.isOnSkyblock()) { if (HotbarSlotLock.isLocked(hotbarSlotIndex)) { RenderSystem.setShaderTexture(0, SLOT_LOCK); DrawableHelper.drawTexture(hotbarMatrices, i, j, 0, 0, 16, 16); @@ -82,18 +82,18 @@ public abstract class InGameHudMixin extends DrawableHelper { @Inject(method = "renderExperienceBar", at = @At("HEAD"), cancellable = true) private void skyblocker$renderExperienceBar(MatrixStack matrices, int x, CallbackInfo ci) { - if (Utils.isOnSkyblock && SkyblockerConfig.get().general.bars.enableBars) + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars) ci.cancel(); } @Inject(method = "renderStatusBars", at = @At("HEAD"), cancellable = true) private void skyblocker$renderStatusBars(MatrixStack matrices, CallbackInfo ci) { - if (!Utils.isOnSkyblock) + if (!Utils.isOnSkyblock()) return; if (statusBars.render(matrices, scaledWidth, scaledHeight)) ci.cancel(); - if (Utils.isInDungeons && SkyblockerConfig.get().locations.dungeons.enableMap) + if (Utils.isInDungeons() && SkyblockerConfig.get().locations.dungeons.enableMap) DungeonMap.render(matrices); RenderSystem.setShaderTexture(0, GUI_ICONS_TEXTURE); @@ -101,7 +101,7 @@ public abstract class InGameHudMixin extends DrawableHelper { @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) private void skyblocker$renderMountHealth(MatrixStack matrices, CallbackInfo ci) { - if (Utils.isOnSkyblock && SkyblockerConfig.get().general.bars.enableBars) + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars) ci.cancel(); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java index 8de390cc..64a1a4fe 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java @@ -19,7 +19,7 @@ public abstract class InventoryScreenMixin { ) ) RecipeBookWidget skyblocker$constructor() { - if (Utils.isOnSkyblock && SkyblockerConfig.get().general.itemList.enableItemList) + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.itemList.enableItemList) return new ItemListWidget(); else return new RecipeBookWidget(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java index b9ddc156..26bafc14 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java @@ -27,7 +27,7 @@ public abstract class ItemRendererMixin { @Inject(method = "renderGuiItemOverlay(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) public void skyblocker$renderItemBar(MatrixStack matrices, TextRenderer renderer, ItemStack stack, int x, int y, @Nullable String countLabel, CallbackInfo ci) { - if (Utils.isOnSkyblock && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) { + if (Utils.isOnSkyblock() && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) { if (!stack.isEmpty()) { NbtCompound tag = stack.getNbt(); if (tag != null && tag.contains("ExtraAttributes")) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java index c28a7096..505de202 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java @@ -22,7 +22,7 @@ public abstract class LeverBlockMixin extends WallMountedBlock { @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) public void skyblocker$onGetOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (Utils.isOnSkyblock) { + if (Utils.isOnSkyblock()) { VoxelShape shape = OldLever.getShape(state.get(FACE), state.get(FACING)); if (shape != null) cir.setReturnValue(shape); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java index 66ec5c15..0c1977fe 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java @@ -19,7 +19,7 @@ public abstract class MinecraftClientMixin { @Inject(method = "handleInputEvents", at = @At("HEAD")) public void skyblocker$handleInputEvents(CallbackInfo ci) { - if (Utils.isOnSkyblock) { + if (Utils.isOnSkyblock()) { HotbarSlotLock.handleInputEvents(player); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java index 7d54ccb0..9389b792 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java @@ -17,7 +17,7 @@ public abstract class ScreenMixin { public void skyblocker$renderTooltip(MatrixStack matrices, ItemStack itemStack, int x, int y, CallbackInfo ci) { Text stackName = itemStack.getName(); String strName = stackName.getString(); - if (Utils.isOnSkyblock && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) { + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) { ci.cancel(); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java index a6dfe31d..4820bc0f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java @@ -51,7 +51,7 @@ public class BackpackPreview extends DrawableHelper { public static void tick() { Utils.sbChecker(); // force update isOnSkyblock to prevent crash on disconnect - if (Utils.isOnSkyblock) { + if (Utils.isOnSkyblock()) { // save all dirty storages saveStorage(); // update save dir based on uuid and sb profile diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java index 4554372b..219f4258 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java @@ -21,7 +21,7 @@ public class DungeonBlaze { public static void update() { ClientWorld world = MinecraftClient.getInstance().world; - if (world == null || !Utils.isInDungeons) return; + if (world == null || !Utils.isInDungeons()) return; if(!renderHooked){ WorldRenderEvents.END.register(DungeonBlaze::blazeRenderer); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index 42fcc36a..fdc39c42 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -27,7 +27,7 @@ public class Reparty extends ChatPatternListener { super("^(?:You are not currently in a party\\.|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*)))$"); this.repartying = false; ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { - if (!Utils.isOnSkyblock || this.repartying || client.player == null) return 0; + if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0; this.repartying = true; client.player.networkHandler.sendCommand("p list"); return 0; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java index d9263f9a..04f2b596 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java @@ -45,7 +45,7 @@ public class PriceInfoTooltip { private static final Map apiAddresses; public static void onInjectTooltip(ItemStack stack, TooltipContext context, List lines) { - if (!Utils.isOnSkyblock || client.player == null) return; + if (!Utils.isOnSkyblock() || client.player == null) return; String name = getInternalNameFromNBT(stack); if (name == null) return; @@ -295,7 +295,7 @@ public class PriceInfoTooltip { public static int minute = -1; public static void init() { skyblocker.scheduler.scheduleCyclic(() -> { - if (!Utils.isOnSkyblock && 0 < minute++) { + if (!Utils.isOnSkyblock() && 0 < minute++) { nullMsgSend = false; return; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java index 305720d0..d05e5cb8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java @@ -42,7 +42,7 @@ public class WikiLookup { } public static void openWiki(Slot slot) { - if (Utils.isOnSkyblock) { + if (Utils.isOnSkyblock()) { id = getSkyblockId(slot); try { String wikiLink = ItemRegistry.getWikiLink(id); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java index 8ab49754..1d58435e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java @@ -19,7 +19,7 @@ public class QuickNav { public static void init() { ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { - if (Utils.isOnSkyblock && SkyblockerConfig.get().quickNav.enableQuickNav && screen instanceof HandledScreen) { + if (Utils.isOnSkyblock() && SkyblockerConfig.get().quickNav.enableQuickNav && screen instanceof HandledScreen) { String screenTitle = screen.getTitle().getString().trim(); List buttons = QuickNav.init(screenTitle); for (QuickNavButton button : buttons) Screens.getButtons(screen).add(button); diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 532de0dd..e1de7b6e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -15,9 +15,21 @@ import java.util.Collections; import java.util.List; public class Utils { - public static boolean isOnSkyblock = false; - public static boolean isInDungeons = false; - public static boolean isInjected = false; + private static boolean isOnSkyblock = false; + private static boolean isInDungeons = false; + private static boolean isInjected = false; + + public static boolean isOnSkyblock() { + return isOnSkyblock; + } + + public static boolean isInDungeons() { + return isInDungeons; + } + + public static boolean isInjected() { + return isInjected; + } public static void sbChecker() { MinecraftClient client = MinecraftClient.getInstance(); -- cgit From 5c8a90cb61f97f710513aac3cd880e04472024a8 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 19 May 2023 23:21:49 -0400 Subject: Added docs to Utils --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index e1de7b6e..028386ab 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -14,6 +14,9 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +/** + * Utility variables and methods for retrieving Skyblock related information. + */ public class Utils { private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; -- cgit From 7abc0a2e873689a1b8d89990398329415ddd67e2 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 20 May 2023 14:03:53 -0400 Subject: Refactored skyblocker.mixins.json --- src/main/resources/skyblocker.mixins.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 91c856a0..2eba53e3 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -3,18 +3,18 @@ "package": "me.xmrvizzy.skyblocker.mixin", "compatibilityLevel": "JAVA_17", "client": [ + "AccessorWorldRenderer", "ClientPlayerEntityMixin", - "InGameHudMixin", - "ItemRendererMixin", - "LeverBlockMixin", "FarmlandBlockMixin", - "MinecraftClientMixin", - "AccessorWorldRenderer", "GenericContainerScreenHandlerMixin", + "HandledScreenAccessor", "HandledScreenMixin", + "InGameHudMixin", "InventoryScreenMixin", + "ItemRendererMixin", + "LeverBlockMixin", + "MinecraftClientMixin", "RecipeBookWidgetAccessor", - "HandledScreenAccessor", "ScreenMixin" ], "injectors": { -- cgit From d0b8b3a93a17347b86d3895bfd5ee3f996eb220e Mon Sep 17 00:00:00 2001 From: Fix3d Date: Tue, 23 May 2023 21:11:12 +0300 Subject: return instead of assign --- .../java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java index 04f2b596..25e849ad 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java @@ -344,7 +344,7 @@ public class PriceInfoTooltip { LOGGER.warn("[Skyblocker] Failed to download " + type + " prices!", e); if (type.equals("lowest bins")) - lowestPricesJson = downloadPrices("lowest bins backup"); + return downloadPrices("lowest bins backup"); return null; } -- cgit From 01b896893e36ac634afd395117f7af14940ad8bd Mon Sep 17 00:00:00 2001 From: MrDonSebas <40346644+IngeSebastian@users.noreply.github.com> Date: Tue, 23 May 2023 22:37:44 +0000 Subject: Translated using Weblate (Spanish) [skip ci] Currently translated at 67.1% (127 of 189 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/es/ --- .../resources/assets/skyblocker/lang/es_ES.json | 45 +++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json index cde1bbd3..7c5ea062 100644 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ b/src/main/resources/assets/skyblocker/lang/es_ES.json @@ -101,5 +101,48 @@ "skyblocker.update.hover_text": "Abrir Modrinth", "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Notificaciones sobre actualizaciones", "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2¡Se añadió tu API key automáticamente!", - "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cLa actualización del repositorio local fallo. Elimina los archivos manualmente y reinicia el juego." + "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cLa actualización del repositorio local fallo. Elimina los archivos manualmente y reinicia el juego.", + "text.autoconfig.skyblocker.option.quickNav.button11": "Botón 11", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8": "Botón 8", + "text.autoconfig.skyblocker.option.quickNav.button9": "Botón 9", + "text.autoconfig.skyblocker.option.quickNav.button10": "Botón 10", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button12": "Botón 12", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "Titulo de la Interfaz" } -- cgit From 45afbe02bba5fa6c8cb3f54a9fa44fbaa65be813 Mon Sep 17 00:00:00 2001 From: KdGaming0 Date: Wed, 24 May 2023 10:52:05 +0000 Subject: Translated using Weblate (Norwegian Bokmål) [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 81.4% (154 of 189 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/nb_NO/ --- .../resources/assets/skyblocker/lang/nb_NO.json | 80 +++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json index 3c7cae87..0f96ebb6 100644 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ b/src/main/resources/assets/skyblocker/lang/nb_NO.json @@ -82,5 +82,83 @@ "text.autoconfig.skyblocker.option.quickNav.button1": "Knapp 1", "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Gjenstand navn", "text.autoconfig.skyblocker.option.quickNav.button3.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI Tittel" + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "Gjenstand", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Aktiver gjenstad liste", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Løs Blaze-puslespillet", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button6": "Knapp 6", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "Gjenstand mengde", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button7": "Knapp 7", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button8": "Knapp 8", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button9": "Knapp 8", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button10": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "Gjenstand Mengde", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button11": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "Gjenstand Mengde", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button12": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "Gjenstand Mengde", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.general.itemList": "Gjenstand liste", + "text.autoconfig.skyblocker.option.locations.dungeons": "Dungeons", + "text.autoconfig.skyblocker.category.locations": "Lokasjoner", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus Hjelper", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Grå ut kister som allerede er åpnet.", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Aktiver kart", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Kart skalering", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Løs Three Weirdos-puslespillet", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve the Blaze puzzle", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminalløser", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Løsning Velg farget", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Løs klikk i rekkefølge", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Løsning starter med", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dverggruver", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Aktiver Drill Fuel", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Løse Fetchur", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Løs Puzzler Puzzle", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dverg-HUD" } -- cgit From d31e9bc7fc0a1e874c42379bbbfacb3ad621eb1f Mon Sep 17 00:00:00 2001 From: PumpkinXD Date: Wed, 24 May 2023 19:19:01 +0000 Subject: Translated using Weblate (Chinese (Simplified)) [skip ci] Currently translated at 56.6% (107 of 189 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/zh_Hans/ --- .../resources/assets/skyblocker/lang/zh_cn.json | 30 ++++++++++++---------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_cn.json b/src/main/resources/assets/skyblocker/lang/zh_cn.json index 3f4ccdc8..c62be614 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_cn.json +++ b/src/main/resources/assets/skyblocker/lang/zh_cn.json @@ -62,16 +62,16 @@ "text.autoconfig.skyblocker.category.locations": "位置", "text.autoconfig.skyblocker.option.locations.dungeons": "地牢", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus助手", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "用灰色显示出已经打开过的箱子", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "启用地图", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "将打开过的箱子标记为灰色", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "启用地牢地图", "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "解决三怪人迷题", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "解决烈焰人迷题", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "解决常识迷题", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "烈焰人迷题助手", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "常识问答谜题助手", "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "终端助手", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "解决颜色迷题", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "解决排序迷题", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "解决开头字母迷题", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "矮人矿道", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "选色终端助手", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "排序终端助手", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "首字母谜题终端助手", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "矮人矿井", "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "显示钻头燃料", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "解决Fetchur的迷题", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "解决Puzzler的迷题", @@ -86,14 +86,14 @@ "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "移动到动作栏", "text.autoconfig.skyblocker.option.messages.hideAbility": "隐藏技能冷却", "text.autoconfig.skyblocker.option.messages.hideHeal": "隐藏治疗消息", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "隐藏AOTE消息", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "隐藏内爆技能消息", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "隐藏熔融波技能消息", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "隐藏瞬息之刃的提示消息", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "隐藏核心爆裂技能的提示消息", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "隐藏 Molten Wave 技能的提示消息", "text.autoconfig.skyblocker.option.messages.hideAds": "从公屏聊天中隐藏广告", "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "隐藏传送点消息", "text.autoconfig.skyblocker.option.messages.hideCombo": "隐藏连杀消息", "text.autoconfig.skyblocker.option.messages.hideAutopet": "隐藏自动宠物消息", - "text.autoconfig.skyblocker.option.messages.hideMana": "在动作栏中隐藏魔力消耗信息", + "text.autoconfig.skyblocker.option.messages.hideMana": "在动作栏中隐藏法力消耗信息", "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "被已经提供了更好方案的属性条代替", "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2有新版本可用!", "skyblocker.update.update_link": " §2§n点击这里§r", @@ -101,5 +101,9 @@ "skyblocker.update.hover_text": "打开Modrinth", "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "更新通知", "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2自动设置你的API秘钥!", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT" + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "隐藏菜单中分隔符的物品信息", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "地图界面大小", + "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §c更新本地数据存储库失败,请手动删库并重启游戏" } -- cgit From 7ff39fb9ddc008d0add5f6d351932cbab8ea4521 Mon Sep 17 00:00:00 2001 From: PumpkinXD Date: Thu, 25 May 2023 11:07:48 +0000 Subject: Translated using Weblate (Chinese (Simplified)) [skip ci] Currently translated at 100.0% (189 of 189 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/zh_Hans/ --- .../resources/assets/skyblocker/lang/zh_cn.json | 122 +++++++++++++++++---- 1 file changed, 102 insertions(+), 20 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_cn.json b/src/main/resources/assets/skyblocker/lang/zh_cn.json index c62be614..ef752b6e 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_cn.json +++ b/src/main/resources/assets/skyblocker/lang/zh_cn.json @@ -9,7 +9,7 @@ "text.autoconfig.skyblocker.option.general.bars.barpositions": "配置属性条位置", "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "下排", "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "上排", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "右侧", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "快捷栏右侧", "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "禁用", "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "生命条位置", "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "法力条位置", @@ -23,8 +23,8 @@ "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "显示平均BIN(立即购买)价格", "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "平均类型", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "你可以选择查看多少天的平均价格", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1天价格", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3天价格", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "一日内均价", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "三日内均价", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "同时显示", "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "显示最低BIN(立即购买)价格", "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "显示集市购买/卖出价格", @@ -37,26 +37,26 @@ "text.autoconfig.skyblocker.category.richPresence": "Discord活动状态", "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock信息", "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "钱包", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "比特", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "点券", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "位置", "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "如果您正在循环模式,这个值将不会生效", "text.autoconfig.skyblocker.option.richPresence.cycleMode": "循环Skyblock信息", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "启用", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "已启用", "text.autoconfig.skyblocker.option.richPresence.customMessage": "自定义消息", "text.autoconfig.skyblocker.category.quickNav": "快速导航", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "启用快速导航", - "text.autoconfig.skyblocker.option.quickNav.button1": "按钮1", - "text.autoconfig.skyblocker.option.quickNav.button2": "按钮2", - "text.autoconfig.skyblocker.option.quickNav.button3": "按钮3", - "text.autoconfig.skyblocker.option.quickNav.button4": "按钮4", - "text.autoconfig.skyblocker.option.quickNav.button5": "按钮5", - "text.autoconfig.skyblocker.option.quickNav.button6": "按钮6", - "text.autoconfig.skyblocker.option.quickNav.button7": "按钮7", - "text.autoconfig.skyblocker.option.quickNav.button8": "按钮8", - "text.autoconfig.skyblocker.option.quickNav.button9": "按钮9", - "text.autoconfig.skyblocker.option.quickNav.button10": "按钮10", - "text.autoconfig.skyblocker.option.quickNav.button11": "按钮11", - "text.autoconfig.skyblocker.option.quickNav.button12": "按钮12", + "text.autoconfig.skyblocker.option.quickNav.button1": "热键1", + "text.autoconfig.skyblocker.option.quickNav.button2": "热键2", + "text.autoconfig.skyblocker.option.quickNav.button3": "热键3", + "text.autoconfig.skyblocker.option.quickNav.button4": "热键4", + "text.autoconfig.skyblocker.option.quickNav.button5": "热键5", + "text.autoconfig.skyblocker.option.quickNav.button6": "热键6", + "text.autoconfig.skyblocker.option.quickNav.button7": "热键7", + "text.autoconfig.skyblocker.option.quickNav.button8": "热键8", + "text.autoconfig.skyblocker.option.quickNav.button9": "热键9", + "text.autoconfig.skyblocker.option.quickNav.button10": "热键10", + "text.autoconfig.skyblocker.option.quickNav.button11": "热键11", + "text.autoconfig.skyblocker.option.quickNav.button12": "热键12", "text.autoconfig.skyblocker.option.general.itemList": "物品列表", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "启用物品列表", "text.autoconfig.skyblocker.category.locations": "位置", @@ -101,9 +101,91 @@ "skyblocker.update.hover_text": "打开Modrinth", "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "更新通知", "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2自动设置你的API秘钥!", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "物品NBT", "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "隐藏菜单中分隔符的物品信息", "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "地图界面大小", - "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §c更新本地数据存储库失败,请手动删库并重启游戏" + "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §c更新本地数据存储库失败,请手动删库并重启游戏", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "物品数量", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "物品数量", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "物品数量", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "物品数量", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "物品数量", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "热键物品显示数量", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "热键物品显示数量", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "物品数量", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "物品数量", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "物品数量", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "是否显示该热键", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "物品数量", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "快捷界面标题", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "热键所显示物品", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "物品数量", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "物品NBT", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "物品ID", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "点击时所执行的命令" } -- cgit From 18e0b1c1b18a6a0795894b71565f1950b513f666 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 20 May 2023 14:10:46 -0400 Subject: Add Fishing Helper --- .../skyblocker/config/SkyblockerConfig.java | 8 +++ .../mixin/ClientPlayNetworkHandlerMixin.java | 24 +++++++++ .../skyblocker/skyblock/FishingHelper.java | 61 ++++++++++++++++++++++ .../resources/assets/skyblocker/lang/en_us.json | 6 ++- src/main/resources/skyblocker.mixins.json | 1 + 5 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index e2e7b4ca..13f70137 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -142,6 +142,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public Bars bars = new Bars(); + @ConfigEntry.Category("fishing") + @ConfigEntry.Gui.CollapsibleObject() + public Fishing fishing = new Fishing(); + @ConfigEntry.Category("itemList") @ConfigEntry.Gui.CollapsibleObject() public ItemList itemList = new ItemList(); @@ -199,6 +203,10 @@ public class SkyblockerConfig implements ConfigData { } } + public static class Fishing { + public boolean enableFishingHelper = true; + } + public static class Hitbox { public boolean oldFarmlandHitbox = true; public boolean oldLeverHitbox = false; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java new file mode 100644 index 00000000..80c98473 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java @@ -0,0 +1,24 @@ +package me.xmrvizzy.skyblocker.mixin; + +import me.xmrvizzy.skyblocker.skyblock.FishingHelper; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ClientPlayNetworkHandler.class) +public abstract class ClientPlayNetworkHandlerMixin { + @Shadow + @Final + private MinecraftClient client; + + @Inject(method = "onPlaySound", at = @At("RETURN")) + private void skyblockmod_onPlaySound(PlaySoundS2CPacket packet, CallbackInfo ci) { + FishingHelper.onSound(client, packet); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java new file mode 100644 index 00000000..790b27bf --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java @@ -0,0 +1,61 @@ +package me.xmrvizzy.skyblocker.skyblock; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import net.fabricmc.fabric.api.event.player.UseItemCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.FishingRodItem; +import net.minecraft.item.ItemStack; +import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.TypedActionResult; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +public class FishingHelper { + private static long startTime; + private static Vec3d normalYawVector; + + public static void init() { + UseItemCallback.EVENT.register((player, world, hand) -> { + ItemStack stack = player.getStackInHand(hand); + if (stack.getItem() instanceof FishingRodItem) { + if (player.fishHook == null) { + start(player); + } else { + reset(); + } + } + return TypedActionResult.pass(stack); + }); + } + + public static void start(PlayerEntity player) { + startTime = System.currentTimeMillis(); + float yawRad = player.getYaw() * 0.017453292F; + normalYawVector = new Vec3d(-MathHelper.sin(yawRad), 0, MathHelper.cos(yawRad)); + } + + public static void reset() { + startTime = 0; + } + + public static void onSound(MinecraftClient client, PlaySoundS2CPacket packet) { + String path = packet.getSound().value().getId().getPath(); + if (SkyblockerConfig.get().general.fishing.enableFishingHelper && startTime != 0 && System.currentTimeMillis() >= startTime + 2000 && ("entity.generic.splash".equals(path) || "entity.player.splash".equals(path))) { + ClientPlayerEntity player = client.player; + if (player != null && player.fishHook != null) { + Vec3d soundToFishHook = player.fishHook.getPos().subtract(packet.getX(), 0, packet.getZ()); + if (Math.abs(normalYawVector.x * soundToFishHook.z - normalYawVector.z * soundToFishHook.x) < 0.2D && Math.abs(normalYawVector.dotProduct(soundToFishHook)) < 4D && player.getPos().squaredDistanceTo(packet.getX(), packet.getY(), packet.getZ()) > 1D) { + client.inGameHud.setTitleTicks(0, 10, 5); + client.inGameHud.setTitle(Text.translatable("skyblocker.fishing.reelNow").formatted(Formatting.GREEN)); + reset(); + } + } else { + reset(); + } + } + } +} diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 4809b8ab..80e3e05e 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -17,6 +17,8 @@ "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Position", "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defence Bar Position", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar Position", + "text.autoconfig.skyblocker.option.general.fishing": "Fishing Helper", + "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper", "text.autoconfig.skyblocker.option.general.quicknav": "Quicknav", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Enable Quicknav", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "View backpack preview without holding Shift", @@ -197,5 +199,7 @@ "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cUpdating local repository failed. Remove files manually and restart game.", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Automatically set your API key!" + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Automatically set your API key!", + + "skyblocker.fishing.reelNow": "Reel in now!" } diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 2eba53e3..1744b5ba 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -5,6 +5,7 @@ "client": [ "AccessorWorldRenderer", "ClientPlayerEntityMixin", + "ClientPlayNetworkHandlerMixin", "FarmlandBlockMixin", "GenericContainerScreenHandlerMixin", "HandledScreenAccessor", -- cgit From d467fab0a81541d5518728edf1028fa2f2dd3e54 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 20 May 2023 17:23:26 -0400 Subject: Call FishingHelper.init --- src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index aa10b29a..64c09a2f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -5,6 +5,7 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.discord.DiscordRPCManager; import me.xmrvizzy.skyblocker.gui.ContainerSolverManager; import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; +import me.xmrvizzy.skyblocker.skyblock.FishingHelper; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate; @@ -65,6 +66,7 @@ public class SkyblockerMod implements ClientModInitializer { ChatMessageListener.init(); UpdateChecker.init(); DiscordRPCManager.init(); + FishingHelper.init(); containerSolverManager.init(); scheduler.scheduleCyclic(Utils::sbChecker, 20); scheduler.scheduleCyclic(DiscordRPCManager::update, 100); -- cgit From 049f988c904e7bee85e4d0a03e2dbbcf0047d27e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 22 May 2023 20:30:12 -0400 Subject: Add Livid Color --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 7 ++++ .../skyblocker/config/SkyblockerConfig.java | 2 + .../skyblocker/skyblock/dungeon/LividColor.java | 43 ++++++++++++++++++++++ .../skyblocker/skyblock/dungeon/Reparty.java | 11 +++--- .../skyblock/quicknav/QuickNavButton.java | 3 +- .../skyblocker/utils/MessageScheduler.java | 43 ++++++++++++++++++++++ .../me/xmrvizzy/skyblocker/utils/Scheduler.java | 13 ++++--- 7 files changed, 110 insertions(+), 12 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 64c09a2f..2ab1b45e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -11,11 +11,13 @@ import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate; import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze; +import me.xmrvizzy.skyblocker.skyblock.dungeon.LividColor; import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav; +import me.xmrvizzy.skyblocker.utils.MessageScheduler; import me.xmrvizzy.skyblocker.utils.Scheduler; import me.xmrvizzy.skyblocker.utils.UpdateChecker; import me.xmrvizzy.skyblocker.utils.Utils; @@ -32,6 +34,7 @@ public class SkyblockerMod implements ClientModInitializer { @SuppressWarnings("deprecation") public final Scheduler scheduler = new Scheduler(); + public final MessageScheduler messageScheduler = new MessageScheduler(); public final ContainerSolverManager containerSolverManager = new ContainerSolverManager(); public final StatusBarTracker statusBarTracker = new StatusBarTracker(); @@ -66,20 +69,24 @@ public class SkyblockerMod implements ClientModInitializer { ChatMessageListener.init(); UpdateChecker.init(); DiscordRPCManager.init(); + LividColor.init(); FishingHelper.init(); containerSolverManager.init(); scheduler.scheduleCyclic(Utils::sbChecker, 20); scheduler.scheduleCyclic(DiscordRPCManager::update, 100); scheduler.scheduleCyclic(DungeonBlaze::update, 4); + scheduler.scheduleCyclic(LividColor::update, 10); scheduler.scheduleCyclic(BackpackPreview::tick, 50); scheduler.scheduleCyclic(DwarvenHud::update, 40); } /** * Ticks the scheduler. Called once at the end of every client tick through {@link ClientTickEvents#END_CLIENT_TICK}. + * * @param client the Minecraft client. */ public void tick(MinecraftClient client) { scheduler.tick(); + messageScheduler.tick(); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 13f70137..65e5c392 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -269,6 +269,8 @@ public class SkyblockerConfig implements ConfigData { public boolean solveThreeWeirdos = true; public boolean blazesolver = true; public boolean solveTrivia = true; + public boolean lividColor = true; + public String lividColorText = "[color]"; @ConfigEntry.Gui.CollapsibleObject() public Terminals terminals = new Terminals(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java new file mode 100644 index 00000000..d05c8cb9 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java @@ -0,0 +1,43 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.minecraft.client.MinecraftClient; +import net.minecraft.util.math.BlockPos; + +public class LividColor { + private static int tenTicks = 0; + + public static void init() { + ClientReceiveMessageEvents.ALLOW_GAME.register((message, overlay) -> { + if (SkyblockerConfig.get().locations.dungeons.lividColor && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) { + tenTicks = 8; + } + return true; + }); + } + + public static void update() { + MinecraftClient client = MinecraftClient.getInstance(); + if (tenTicks != 0) { + if (SkyblockerConfig.get().locations.dungeons.lividColor && Utils.isInDungeons() && client.world != null) { + if (tenTicks == 1) { + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColorText.replace("[color]", "red")); + tenTicks = 0; + return; + } + String key = client.world.getBlockState(new BlockPos(5, 110, 42)).getBlock().getTranslationKey(); + if (key.startsWith("block.minecraft.") && key.endsWith("wool") && !key.endsWith("red_wool")) { + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColorText.replace("[color]", key.substring(16, key.length() - 5))); + tenTicks = 0; + return; + } + tenTicks--; + } else { + tenTicks = 0; + } + } + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index fdc39c42..d6e799ab 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -29,7 +29,7 @@ public class Reparty extends ChatPatternListener { ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0; this.repartying = true; - client.player.networkHandler.sendCommand("p list"); + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/p list"); return 0; }))); } @@ -63,16 +63,15 @@ public class Reparty extends ChatPatternListener { this.repartying = false; return; } - sendCommand(playerEntity, "p disband", 1); + sendCommand("p disband", 1); for (int i = 0; i < this.players.length; ++i) { String command = "p invite " + this.players[i]; - sendCommand(playerEntity, command, i + 2); + sendCommand(command, i + 2); } skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); } - private void sendCommand(ClientPlayerEntity player, String command, int delay) { - // skyblocker.scheduler.schedule(() -> player.sendChatMessage(command, Text.of(command)), delay * BASE_DELAY); - skyblocker.scheduler.schedule(() -> player.networkHandler.sendCommand(command), delay * BASE_DELAY); + private void sendCommand(String command, int delay) { + skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java index e31827ab..7269840a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -2,6 +2,7 @@ package me.xmrvizzy.skyblocker.skyblock.quicknav; import com.mojang.blaze3d.systems.RenderSystem; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -57,7 +58,7 @@ public class QuickNavButton extends ClickableWidget { public void onClick(double mouseX, double mouseY) { if (!this.toggled) { this.toggled = true; - CLIENT.player.networkHandler.sendCommand(command.replace("/", "")); + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(command); // TODO : add null check with log error } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java new file mode 100644 index 00000000..85cc963d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java @@ -0,0 +1,43 @@ +package me.xmrvizzy.skyblocker.utils; + +import net.minecraft.client.MinecraftClient; + +/** + * A scheduler for sending chat messages or commands. Use the instance in {@link me.xmrvizzy.skyblocker.SkyblockerMod#messageScheduler SkyblockerMod.messageScheduler}. Do not instantiate this class. + */ +@SuppressWarnings("deprecation") +public class MessageScheduler extends Scheduler { + private long lastMessage = 0; + + public void sendMessageAfterCooldown(String message) { + if (lastMessage + 200 < System.currentTimeMillis()) { + sendMessage(message); + lastMessage = System.currentTimeMillis(); + } else { + tasks.add(new ScheduledTask(() -> sendMessage(message), 0)); + } + } + + private void sendMessage(String message) { + if (MinecraftClient.getInstance().player != null) { + MinecraftClient.getInstance().inGameHud.getChatHud().addToMessageHistory(message); + if (message.startsWith("/")) { + MinecraftClient.getInstance().player.networkHandler.sendCommand(message.substring(1)); + } else { + MinecraftClient.getInstance().player.networkHandler.sendChatMessage(message); + } + } + } + + public void queueMessage(String message, int delay) { + tasks.add(new ScheduledTask(() -> sendMessage(message), delay)); + } + + @Override + protected void runTask(Runnable task) { + if (lastMessage + 200 < System.currentTimeMillis()) { + task.run(); + lastMessage = System.currentTimeMillis(); + } + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index efba4995..09db3f93 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -12,7 +12,7 @@ import java.util.PriorityQueue; public class Scheduler { private static final Logger LOGGER = LoggerFactory.getLogger(Scheduler.class); private int currentTick; - private final PriorityQueue tasks; + protected final PriorityQueue tasks; /** * Do not instantiate this class. Use {@link SkyblockerMod#scheduler} instead. @@ -52,17 +52,20 @@ public class Scheduler { currentTick += 1; ScheduledTask task; while ((task = tasks.peek()) != null && task.schedule <= currentTick) { - tasks.poll(); - task.run(); + runTask(tasks.poll()); } } + protected void runTask(Runnable task){ + task.run(); + } + /** * A task that runs every period ticks. More specifically, this task reschedules itself to run again after period ticks every time it runs. * @param inner the task to run * @param period the period in ticks */ - private record CyclicTask(Runnable inner, int period) implements Runnable { + protected record CyclicTask(Runnable inner, int period) implements Runnable { @Override public void run() { SkyblockerMod.getInstance().scheduler.schedule(this, period); @@ -75,7 +78,7 @@ public class Scheduler { * @param inner the task to run * @param schedule the tick to run at */ - private record ScheduledTask(Runnable inner, int schedule) implements Comparable, Runnable { + protected record ScheduledTask(Runnable inner, int schedule) implements Comparable, Runnable { @Override public int compareTo(ScheduledTask o) { return schedule - o.schedule; -- cgit From 429d84d8b1ec54a1e96611b4bbb7403b2c19bc65 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 22 May 2023 21:25:29 -0400 Subject: Add English localization --- src/main/resources/assets/skyblocker/lang/en_us.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 80e3e05e..65cb1956 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -160,6 +160,8 @@ "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Solve Three Weirdos Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Solve Blaze Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve Trivia Puzzle", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor": "Livid Color", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColorText": "Livid Color Text", "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminal Solvers", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Solve Select Colored", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Solve Click In Order", -- cgit From b446021b397fd70c98ac6dab595b8df6d026d355 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 28 May 2023 11:12:37 +0200 Subject: Adjust default keybinds, add logger. --- .../java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java index 01c196f7..6d90b269 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java @@ -1,6 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud; import org.lwjgl.glfw.GLFW; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.minecraft.client.option.KeyBinding; @@ -13,17 +15,19 @@ public class TabHud { // public static KeyBinding mapTgl; public static KeyBinding defaultTgl; + public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Tab HUD"); + public static void init() { playerTgl = KeyBindingHelper.registerKeyBinding( new KeyBinding("key.skyblocker.playerTgl", InputUtil.Type.KEYSYM, - GLFW.GLFW_KEY_LEFT_SHIFT, + GLFW.GLFW_KEY_B, "key.categories.skyblocker")); genericTgl = KeyBindingHelper.registerKeyBinding( new KeyBinding("key.skyblocker.genericTgl", InputUtil.Type.KEYSYM, - GLFW.GLFW_KEY_LEFT_ALT, + GLFW.GLFW_KEY_N, "key.categories.skyblocker")); // mapTgl = KeyBindingHelper.registerKeyBinding( // new KeyBinding("key.tabhud.mapTgl", @@ -33,7 +37,7 @@ public class TabHud { defaultTgl = KeyBindingHelper.registerKeyBinding( new KeyBinding("key.skyblocker.defaultTgl", InputUtil.Type.KEYSYM, - GLFW.GLFW_KEY_B, + GLFW.GLFW_KEY_M, "key.categories.skyblocker")); } -- cgit From eeaae397b0000b725e2a1cb63613b28e712a6d68 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 28 May 2023 11:46:05 +0200 Subject: Add javadoc comments to key classes. --- .../skyblocker/skyblock/tabhud/screens/Screen.java | 27 +++++++++++++++ .../skyblocker/skyblock/tabhud/util/Ico.java | 3 ++ .../skyblock/tabhud/util/PlayerListMgr.java | 39 ++++++++++++++++------ .../skyblock/tabhud/util/PlayerLocator.java | 9 ++--- .../skyblocker/skyblock/tabhud/widget/Widget.java | 31 +++++++++++++++++ .../tabhud/widget/component/Component.java | 3 ++ .../widget/component/IcoFatTextComponent.java | 5 +-- .../tabhud/widget/component/IcoTextComponent.java | 5 +-- .../widget/component/PlainTextComponent.java | 5 +-- .../tabhud/widget/component/PlayerComponent.java | 7 ++-- .../tabhud/widget/component/ProgressComponent.java | 8 +++-- .../tabhud/widget/component/TableComponent.java | 9 +++-- 12 files changed, 120 insertions(+), 31 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index ae71d7bd..cca2ed9e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -82,10 +82,16 @@ public class Screen { }; } + /** + * Add a widget to this screen + */ public void addWidget(Widget w) { widgets.add(w); } + /** + * Add many widgets to this screen + */ public void addWidgets(Widget... ws) { for (Widget w : ws) { widgets.add(w); @@ -98,6 +104,9 @@ public class Screen { } } + /** + * Stack these widgets on top of each other as determined by the lists's order + */ public void stackWidgetsH(Widget... list) { int compHeight = -5; for (Widget wid : list) { @@ -111,6 +120,9 @@ public class Screen { } } + /** + * Arrange these widgets next to each other as determined by the lists's order + */ public void stackWidgetsW(Widget... list) { // TODO not centered int compWidth = -5; @@ -125,24 +137,39 @@ public class Screen { } } + /** + * Center a widget vertically, keeping X pos + */ public void centerH(Widget wid) { wid.setY((h - wid.getHeight()) / 2); } + /** + * Center a widget horizontally, keeping Y pos + */ public void centerW(Widget wid) { wid.setX((w - wid.getWidth()) / 2); } + /** + * Center a widget vertically and horizontally + */ public void center(Widget wid) { this.centerH(wid); this.centerW(wid); } + /** + * Let a widget's left border be on the screen's center, keeping Y pos + */ public void offCenterL(Widget wid) { int wHalf = this.w / 2; wid.setX(wHalf - 3 - wid.getWidth()); } + /** + * Let a widget's right border be on the screen's center, keeping Y pos + */ public void offCenterR(Widget wid) { int wHalf = this.w / 2; wid.setX(wHalf + 3); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java index 120cabd8..ca767617 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java @@ -3,6 +3,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.util; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +/** + * Stores convenient shorthands for common ItemStack definitions + */ public class Ico { public static final ItemStack MAP = new ItemStack(Items.FILLED_MAP); public static final ItemStack NTAG = new ItemStack(Items.NAME_TAG); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 6243415d..2cab4597 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -8,12 +8,19 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import me.xmrvizzy.skyblocker.mixin.PlayerListHudAccessor; +import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; +/** + * This class may be used to get data from the player list. + * It doesn't get its data every frame, instead, a scheduler is used to + * update the data this class is holding periodically. + * The list is sorted like in the vanilla game. + */ public class PlayerListMgr { public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Regex"); @@ -28,9 +35,8 @@ public class PlayerListMgr { ClientPlayNetworkHandler cpnwh = MinecraftClient.getInstance().getNetworkHandler(); - // check is needed, else crash on server leave + // check is needed, else game crash on server leave if (cpnwh != null) { - playerList = cpnwh.getPlayerList() .stream() .sorted(PlayerListHudAccessor.getOrdering()) @@ -38,9 +44,12 @@ public class PlayerListMgr { } } - // apply pattern to entry at index of player list. - // return null if there's nothing to match against in the entry, - // or if the pattern doesn't fully match. + /** + * Get the display name at some index of the player list and apply a pattern to + * it + * + * @return the matcher if p fully matches, else null + */ public static Matcher regexAt(int idx, Pattern p) { String str = PlayerListMgr.strAt(idx); @@ -51,15 +60,19 @@ public class PlayerListMgr { Matcher m = p.matcher(str); if (!m.matches()) { - LOGGER.debug("no match: \"{}\" against \"{}\"", str, p); + LOGGER.error("no match: \"{}\" against \"{}\"", str, p); return null; } else { return m; } } - // return string (i.e. displayName) at index of player list. - // return null if string is null, empty or whitespace only. + /** + * Get the display name at some index of the player list as string + * + * @return the string or null, if the display name is null, empty or whitespace + * only + */ public static String strAt(int idx) { if (playerList == null) { @@ -81,8 +94,14 @@ public class PlayerListMgr { return str; } - public static PlayerListEntry getRaw(int i) { - return playerList.get(i); + /** + * Get the display name at some index of the player list as Text as seen in the + * game + * + * @return the PlayerListEntry at that index + */ + public static PlayerListEntry getRaw(int idx) { + return playerList.get(idx); } public static int getSize() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java index eb8210d9..49d080e2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java @@ -2,6 +2,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.util; import me.xmrvizzy.skyblocker.utils.Utils; +/** + * Uses data from the player list to determine the area the player is in. + */ public class PlayerLocator { public static enum Location { @@ -30,10 +33,6 @@ public class PlayerLocator { return Location.UNKNOWN; } - if (Utils.isInDungeons) { - return Location.DUNGEON; - } - String areaDesciptor = PlayerListMgr.strAt(41); if (areaDesciptor == null || areaDesciptor.length() < 6) { @@ -76,6 +75,8 @@ public class PlayerLocator { return Location.JERRY; case "Garden": return Location.GARDEN; + case "Catacombs": + return Location.DUNGEON; default: return Location.UNKNOWN; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index 23ec15d0..6b96c151 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -17,6 +17,12 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +/** + * Abstract base class for a Widget. + * Widgets are containers for components with a border and a title. + * Their size is dependent on the components inside, + * the position may be changed after construction. + */ public abstract class Widget { private ArrayList components = new ArrayList<>(); @@ -42,11 +48,20 @@ public abstract class Widget { components.add(c); } + /** + * Shorthand function for simple components. + * If the entry at idx has the format ": ", an IcoTextComponent is added as such: + * [ico] [string] [textB.formatted(fmt)] + */ public final void addSimpleIcoText(ItemStack ico, String string, Formatting fmt, int idx) { Text txt = Widget.simpleEntryText(idx, string, fmt); this.addComponent(new IcoTextComponent(ico, txt)); } + /** + * Calculate the size of this widget. + * Must be called before returning from the widget constructor and after all components are added! + */ public final void pack() { for (Component c : components) { h += c.getHeight() + Component.PAD_L; @@ -85,10 +100,16 @@ public abstract class Widget { return this.h; } + /** + * Draw this widget with a background + */ public final void render(MatrixStack ms) { this.render(ms, true); } + /** + * Draw this widget, possibly with a background + */ public final void render(MatrixStack ms, boolean hasBG) { // not sure if this is the way to go, but it fixes Z-layer issues @@ -140,6 +161,10 @@ public abstract class Widget { DrawableHelper.fill(ms, xpos, ypos, xpos + 1, ypos + height, this.color); } + /** + * If the entry at idx has the format "[textA]: [textB]", the following is returned: + * [entryName] [textB.formatted(contentFmt)] + */ public static Text simpleEntryText(int idx, String entryName, Formatting contentFmt) { String src = PlayerListMgr.strAt(idx); @@ -157,10 +182,16 @@ public abstract class Widget { return Widget.simpleEntryText(src, entryName, contentFmt); } + /** + * @return [entryName] [entryContent.formatted(contentFmt)] + */ public static Text simpleEntryText(String entryContent, String entryName, Formatting contentFmt) { return Text.literal(entryName).append(Text.literal(entryContent).formatted(contentFmt)); } + /** + * @return the entry at idx as unformatted Text + */ public static Text plainEntryText(int idx) { String str = PlayerListMgr.strAt(idx); if (str == null) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java index d9d84bc4..671b1f41 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java @@ -5,6 +5,9 @@ import net.minecraft.client.font.TextRenderer; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.util.math.MatrixStack; +/** + * Abstract base class for a component that may be added to a Widget. + */ public abstract class Component { static final int ICO_DIM = 16; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java index 55d9b889..f845eba5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java @@ -6,8 +6,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// widget component that consists of an icon and two lines of text - +/** + * Component that consists of an icon and two lines of text + */ public class IcoFatTextComponent extends Component { private static final int ICO_OFFS = 1; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java index a14d0531..7a495a13 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java @@ -6,8 +6,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// widget component that consists of an icon and a line of text - +/** + * Component that consists of an icon and a line of text. + */ public class IcoTextComponent extends Component { private ItemStack ico; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java index 70a72715..f356a6a3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java @@ -4,8 +4,9 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// widget component that consists of a line of text - +/** + * Component that consists of a line of text. + */ public class PlainTextComponent extends Component { private Text text; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java index ff296f28..18859080 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java @@ -7,8 +7,9 @@ import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; -// widget component that consists of a player's skin icon and their name - +/** + * Component that consists of a player's skin icon and their name + */ public class PlayerComponent extends Component { private static final int SKIN_ICO_DIM = 8; @@ -21,7 +22,7 @@ public class PlayerComponent extends Component { name = ple.getProfile().getName(); tex = ple.getSkinTexture(); - this.width = SKIN_ICO_DIM + PAD_S + txtRend.getWidth(name) ; + this.width = SKIN_ICO_DIM + PAD_S + txtRend.getWidth(name); this.height = txtRend.fontHeight; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java index 6aaf9f67..b9ebc0e9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java @@ -7,10 +7,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -// widget component that consists of an icon, some text and a progress bar -// progress bar either shows percentage or custom text -// NOTICE: pcnt is 0-100, not 0-1! +/** + * Component that consists of an icon, some text and a progress bar. + * The progress bar either shows the fill percentage or custom text. + * NOTICE: pcnt is 0-100, not 0-1! + */ public class ProgressComponent extends Component { private static final int BAR_WIDTH = 100; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java index 5d27380e..5d49be2c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java @@ -3,11 +3,10 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.util.math.MatrixStack; -// widget component that consists of a grid of other components -// grid cols are separated by lines - -// FIXME: table isn't wide enough sometimes -// FIXME: dividers drift when there are >2 cols +/** + * Meta-Component that consists of a grid of other components + * Grid cols are separated by lines. + */ public class TableComponent extends Component { private Component[][] comps; -- cgit From ad9986028e5f7b1c2ec38323d3af19088d7089ac Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 28 May 2023 11:46:49 +0200 Subject: Use logger on PlayerListHudMixin exception instead of printStackTrace --- src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index 3d915f8b..eee4eaca 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -1,5 +1,7 @@ package me.xmrvizzy.skyblocker.mixin; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -50,9 +52,8 @@ public class PlayerListHudMixin { screen.render(ms); info.cancel(); } catch (Exception e) { - e.printStackTrace(); + TabHud.LOGGER.error("Drawing default hud. Reason: Screen exception {}", e); } - } } \ No newline at end of file -- cgit From 480f19534eaea240da6a9340f1a4335c2bf5bb79 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 28 May 2023 11:51:46 +0200 Subject: Adjust formatting --- .../skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java | 3 --- .../skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java | 4 +--- .../skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java | 5 +---- .../xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java | 2 +- .../skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java | 2 -- .../skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java | 1 - .../skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java | 4 ++-- .../xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java | 8 ++++---- .../skyblocker/skyblock/tabhud/widget/ElectionWidget.java | 1 - .../xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java | 1 - .../xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java | 3 --- .../xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java | 1 - .../xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java | 1 - 13 files changed, 9 insertions(+), 27 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java index a3e75ab6..046a9313 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java @@ -1,7 +1,5 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo; - - import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget; @@ -11,7 +9,6 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.SkillsWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; - import net.minecraft.text.Text; public class GenericInfoScreen extends Screen { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java index 98ce476e..02ac9617 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java @@ -1,7 +1,5 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; - - import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDeathWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDownedWidget; @@ -9,13 +7,13 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPuzzleWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonSecretWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonServerWidget; - import net.minecraft.text.Text; public class DungeonScreen extends Screen { public DungeonScreen(int w, int h, Text footer) { super(w, h); + DungeonDownedWidget ddow = new DungeonDownedWidget(); DungeonDeathWidget ddew = new DungeonDeathWidget(); DungeonSecretWidget dscw = new DungeonSecretWidget(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java index 64d0db99..2567da13 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java @@ -1,16 +1,13 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; - - import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget; - - import net.minecraft.text.Text; public class DungeonPlayerScreen extends Screen { public DungeonPlayerScreen(int w, int h, Text footer) { + super(w, h); DungeonPlayerWidget dpw1 = new DungeonPlayerWidget(1); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 2cab4597..b7784a2b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -8,7 +8,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import me.xmrvizzy.skyblocker.mixin.PlayerListHudAccessor; -import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; + import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java index b689228d..2529e876 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java @@ -6,7 +6,6 @@ import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -51,7 +50,6 @@ public class DungeonPuzzleWidget extends Widget { new IcoTextComponent(Ico.BARRIER, Text.literal("No puzzles!").formatted(Formatting.GRAY))); } this.pack(); - } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java index 2c760dad..93eb69de 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java @@ -1,7 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java index 8801df68..81b8f907 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java @@ -6,7 +6,6 @@ import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -34,7 +33,8 @@ public class DungeonServerWidget extends Widget { if (m == null) { this.addComponent(new ProgressComponent()); } else { - ProgressComponent scp = new ProgressComponent(Ico.CHEST, Text.of("Secrets found:"), Float.parseFloat(m.group("secnum")), + ProgressComponent scp = new ProgressComponent(Ico.CHEST, Text.of("Secrets found:"), + Float.parseFloat(m.group("secnum")), Formatting.DARK_PURPLE.getColorValue()); this.addComponent(scp); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java index b24f7535..10596fe2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java @@ -3,7 +3,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoFatTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -20,7 +19,7 @@ public class EffectWidget extends Widget { public EffectWidget(String footertext) { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - if (footertext == null ||!footertext.contains("Active Effects")) { + if (footertext == null || !footertext.contains("Active Effects")) { this.addComponent(new IcoTextComponent()); this.pack(); return; @@ -46,13 +45,14 @@ public class EffectWidget extends Widget { } else { String number = lines[1].substring("You have ".length()); int idx = number.indexOf(' '); - if (idx == -1 ||lines.length < 4) { + if (idx == -1 || lines.length < 4) { this.addComponent(new IcoFatTextComponent()); this.pack(); return; } number = number.substring(0, idx); - Text active = Text.literal("Active Effects: ").append(Text.literal(number).formatted(Formatting.YELLOW)); + Text active = Text.literal("Active Effects: ") + .append(Text.literal(number).formatted(Formatting.YELLOW)); IcoFatTextComponent iftc = new IcoFatTextComponent(Ico.POTION, active, Text.literal(lines[3]).formatted(Formatting.AQUA)); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java index 1a26026e..ed07982c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java @@ -8,7 +8,6 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; - import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; import net.minecraft.text.Text; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java index f9483bde..1b46e621 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java @@ -2,7 +2,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java index ed375c6e..a6d9e82d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java @@ -1,8 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -24,5 +22,4 @@ public class ProfileWidget extends Widget { this.pack(); } - } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java index 92ee0ca9..88ba8022 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java @@ -10,7 +10,6 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoFatTextCompone import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java index 178c9c3c..e9d239ae 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java @@ -19,7 +19,6 @@ public class UpgradeWidget extends Widget { public UpgradeWidget(String footertext) { super(TITLE, Formatting.GOLD.getColorValue()); - if (footertext == null || !footertext.contains("Upgrades")) { this.addComponent(new PlainTextComponent(Text.literal("No data").formatted(Formatting.GRAY))); this.pack(); -- cgit From cb000d7ea1d4a7d70f6168c4e3c5417bb9399430 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 28 May 2023 11:52:22 +0200 Subject: Add null failsafe to cookie widget --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java index 42298fcd..48cb90bd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java @@ -22,6 +22,12 @@ public class CookieWidget extends Widget { public CookieWidget(String footertext) { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + if (footertext == null || !footertext.contains("Cookie Buff")) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + } + Matcher m = COOKIE_PATTERN.matcher(footertext); if (!m.find() || m.group("buff") == null) { this.addComponent(new IcoTextComponent()); -- cgit From 67eead9c88f7840990bee398c45f1567d358ed1b Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 28 May 2023 11:52:46 +0200 Subject: Use shorthand method in DungeonDeathWidget --- .../skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java index 3e5d8d6a..78e1aeae 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java @@ -6,7 +6,6 @@ import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -26,12 +25,12 @@ public class DungeonDeathWidget extends Widget { public DungeonDeathWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - Matcher m = PlayerListMgr.regexAt( 25, DEATH_PATTERN); + Matcher m = PlayerListMgr.regexAt(25, DEATH_PATTERN); if (m == null) { this.addComponent(new IcoTextComponent()); } else { Formatting f = (m.group("deathnum").equals("0")) ? Formatting.GREEN : Formatting.RED; - Text d = Text.literal("Deaths: ").append(Text.literal(m.group("deathnum")).formatted(f)); + Text d = Widget.simpleEntryText(m.group("deathnum"), "Deaths: ", f); IcoTextComponent deaths = new IcoTextComponent(Ico.SKULL, d); this.addComponent(deaths); } @@ -41,7 +40,6 @@ public class DungeonDeathWidget extends Widget { this.addSimpleIcoText(Ico.NTAG, "Milestone:", Formatting.YELLOW, 28); this.pack(); - } } -- cgit From 93147b4ab60fed4e5f6067ff6a6c638b0738cb71 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 28 May 2023 11:53:21 +0200 Subject: Handle dead players correctly in DungeonPlayerWidget --- .../tabhud/widget/DungeonPlayerWidget.java | 31 ++++++++++++++-------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java index 8f28a2c6..c1f9e235 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java @@ -8,6 +8,7 @@ import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; import net.minecraft.text.Text; @@ -68,23 +69,31 @@ public class DungeonPlayerWidget extends Widget { this.addComponent(new IcoTextComponent(Ico.PLAYER, name)); String cl = m.group("class"); - Formatting clf = Formatting.GRAY; - ItemStack cli = Ico.BARRIER; - if (!cl.equals("EMPTY")) { - cli = ICOS.get(cl); - clf = Formatting.LIGHT_PURPLE; - cl += " " + m.group("level"); + String level = m.group("level"); + + if (level == null) { + PlainTextComponent ptc = new PlainTextComponent( + Text.literal("Player is dead").formatted(Formatting.RED)); + this.addComponent(ptc); + } else { + + Formatting clf = Formatting.GRAY; + ItemStack cli = Ico.BARRIER; + if (!cl.equals("EMPTY")) { + cli = ICOS.get(cl); + clf = Formatting.LIGHT_PURPLE; + cl += " " + m.group("level"); + } + + Text clazz = Text.literal("Class: ").append(Text.literal(cl).formatted(clf)); + IcoTextComponent itclass = new IcoTextComponent(cli, clazz); + this.addComponent(itclass); } - - Text clazz = Text.literal("Class: ").append(Text.literal(cl).formatted(clf)); - IcoTextComponent itclass = new IcoTextComponent(cli, clazz); - this.addComponent(itclass); } this.addSimpleIcoText(Ico.CLOCK, "Ult Cooldown:", Formatting.GOLD, start + 1); this.addSimpleIcoText(Ico.POTION, "Revives:", Formatting.DARK_PURPLE, start + 2); this.pack(); - } } -- cgit From d6777f8545f7a6d1f288329a2fa6385d550da876 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 28 May 2023 11:53:59 +0200 Subject: Fix logic error in DungeonDownedWidget that may cause null pointer execptions. --- .../tabhud/widget/DungeonDownedWidget.java | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java index 60f3313f..9bb250f7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java @@ -3,7 +3,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,15 +17,22 @@ public class DungeonDownedWidget extends Widget { public DungeonDownedWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - Formatting format = Formatting.RED; + String down = PlayerListMgr.strAt(21); - if (down != null && down.endsWith("NONE")) { - format = Formatting.GRAY; + if (down == null) { + this.addComponent(new IcoTextComponent()); + } else { + + Formatting format = Formatting.RED; + if (down.endsWith("NONE")) { + format = Formatting.GRAY; + } + int idx = down.indexOf(": "); + Text downed = (idx == -1) ? null + : Widget.simpleEntryText(down.substring(idx + 2), "Downed: ", format); + IcoTextComponent d = new IcoTextComponent(Ico.SKULL, downed); + this.addComponent(d); } - int idx = down.indexOf(": "); - Text downed = (down == null || idx== -1) ? null : Widget.simpleEntryText(down.substring(idx + 2), "Downed: ", format); - IcoTextComponent d = new IcoTextComponent(Ico.SKULL, downed); - this.addComponent(d); this.addSimpleIcoText(Ico.CLOCK, "Time:", Formatting.GRAY, 22); this.addSimpleIcoText(Ico.POTION, "Revive:", Formatting.GRAY, 23); -- cgit From cec7f0f6f2ba47208a1bab32dcf454d52feb0932 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 28 May 2023 12:39:10 +0200 Subject: Fix PlayerLocator not being able to find people in the dungeon --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java index 49d080e2..bcc7e338 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java @@ -39,6 +39,10 @@ public class PlayerLocator { return Location.UNKNOWN; } + if (areaDesciptor.startsWith("Dungeon")) { + return Location.DUNGEON; + } + switch (areaDesciptor.substring(6)) { case "Private Island": String islandType = PlayerListMgr.strAt(44); @@ -75,8 +79,6 @@ public class PlayerLocator { return Location.JERRY; case "Garden": return Location.GARDEN; - case "Catacombs": - return Location.DUNGEON; default: return Location.UNKNOWN; } -- cgit From 98e875d281b99de6df4e150656e501a3121d2d81 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sun, 28 May 2023 19:38:12 -0400 Subject: Fix Reparty commands and update config --- .../java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java | 11 +++++++++-- .../me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java | 8 ++++---- .../java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java | 4 ++-- src/main/resources/assets/skyblocker/lang/en_us.json | 5 ++++- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 65e5c392..c87f0ad9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -269,12 +269,19 @@ public class SkyblockerConfig implements ConfigData { public boolean solveThreeWeirdos = true; public boolean blazesolver = true; public boolean solveTrivia = true; - public boolean lividColor = true; - public String lividColorText = "[color]"; + @ConfigEntry.Gui.CollapsibleObject + public LividColor lividColor = new LividColor(); @ConfigEntry.Gui.CollapsibleObject() public Terminals terminals = new Terminals(); } + public static class LividColor { + @ConfigEntry.Gui.Tooltip() + public boolean enableLividColor = true; + @ConfigEntry.Gui.Tooltip() + public String lividColorText = "The livid color is [color]"; + } + public static class Terminals { public boolean solveColor = true; public boolean solveOrder = true; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java index d05c8cb9..276a41b6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java @@ -12,7 +12,7 @@ public class LividColor { public static void init() { ClientReceiveMessageEvents.ALLOW_GAME.register((message, overlay) -> { - if (SkyblockerConfig.get().locations.dungeons.lividColor && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) { + if (SkyblockerConfig.get().locations.dungeons.lividColor.enableLividColor && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) { tenTicks = 8; } return true; @@ -22,15 +22,15 @@ public class LividColor { public static void update() { MinecraftClient client = MinecraftClient.getInstance(); if (tenTicks != 0) { - if (SkyblockerConfig.get().locations.dungeons.lividColor && Utils.isInDungeons() && client.world != null) { + if (SkyblockerConfig.get().locations.dungeons.lividColor.enableLividColor && Utils.isInDungeons() && client.world != null) { if (tenTicks == 1) { - SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColorText.replace("[color]", "red")); + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColor.lividColorText.replace("[color]", "red")); tenTicks = 0; return; } String key = client.world.getBlockState(new BlockPos(5, 110, 42)).getBlock().getTranslationKey(); if (key.startsWith("block.minecraft.") && key.endsWith("wool") && !key.endsWith("red_wool")) { - SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColorText.replace("[color]", key.substring(16, key.length() - 5))); + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColor.lividColorText.replace("[color]", key.substring(16, key.length() - 5))); tenTicks = 0; return; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index d6e799ab..29c37b94 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -63,9 +63,9 @@ public class Reparty extends ChatPatternListener { this.repartying = false; return; } - sendCommand("p disband", 1); + sendCommand("/p disband", 1); for (int i = 0; i < this.players.length; ++i) { - String command = "p invite " + this.players[i]; + String command = "/p invite " + this.players[i]; sendCommand(command, i + 2); } skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 65cb1956..922f73a9 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -161,7 +161,10 @@ "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Solve Blaze Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve Trivia Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor": "Livid Color", - "text.autoconfig.skyblocker.option.locations.dungeons.lividColorText": "Livid Color Text", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "Enable Livid Color", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor.@Tooltip": "Send the livid color in the chat during the Livid boss fight.", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText": "Livid Color Text", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip": "Text which will be sent in the chat during the Livid boss fight. The string \"[color]\" will be replaced with the livid color.", "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminal Solvers", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Solve Select Colored", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Solve Click In Order", -- cgit From 300fe03100274d0e4f75e1294d71542cd0cc8e0e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 30 May 2023 11:23:46 -0400 Subject: Fix MessageScheduler removing and not sending message tasks during cooldown --- src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java | 6 ++++-- src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java index 85cc963d..8aff5517 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java @@ -14,7 +14,7 @@ public class MessageScheduler extends Scheduler { sendMessage(message); lastMessage = System.currentTimeMillis(); } else { - tasks.add(new ScheduledTask(() -> sendMessage(message), 0)); + queueMessage(message, 0); } } @@ -34,10 +34,12 @@ public class MessageScheduler extends Scheduler { } @Override - protected void runTask(Runnable task) { + protected boolean runTask(Runnable task) { if (lastMessage + 200 < System.currentTimeMillis()) { task.run(); lastMessage = System.currentTimeMillis(); + return true; } + return false; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 09db3f93..73c15efc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -51,13 +51,14 @@ public class Scheduler { public void tick() { currentTick += 1; ScheduledTask task; - while ((task = tasks.peek()) != null && task.schedule <= currentTick) { - runTask(tasks.poll()); + while ((task = tasks.peek()) != null && task.schedule <= currentTick && runTask(task)) { + tasks.poll(); } } - protected void runTask(Runnable task){ + protected boolean runTask(Runnable task) { task.run(); + return true; } /** -- cgit From d5bdb1ef2bf50084fb59029184224b84f0b99806 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 30 May 2023 11:35:48 -0400 Subject: Fix MessageScheduler not scheduling relative to current tick --- src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java | 2 +- src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java index 8aff5517..a46bb9f3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java @@ -30,7 +30,7 @@ public class MessageScheduler extends Scheduler { } public void queueMessage(String message, int delay) { - tasks.add(new ScheduledTask(() -> sendMessage(message), delay)); + schedule(() -> sendMessage(message), delay); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 73c15efc..7313ec10 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -12,7 +12,7 @@ import java.util.PriorityQueue; public class Scheduler { private static final Logger LOGGER = LoggerFactory.getLogger(Scheduler.class); private int currentTick; - protected final PriorityQueue tasks; + private final PriorityQueue tasks; /** * Do not instantiate this class. Use {@link SkyblockerMod#scheduler} instead. -- cgit From 69e794ffcd06fe14f76f368b33d5af0e4bc60b3a Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 30 May 2023 11:43:13 -0400 Subject: Refactored schedulers and added docs --- .../skyblocker/utils/MessageScheduler.java | 22 +++++++++++++-- .../me/xmrvizzy/skyblocker/utils/Scheduler.java | 32 ++++++++++++++-------- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java index a46bb9f3..ac6aa293 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java @@ -7,10 +7,22 @@ import net.minecraft.client.MinecraftClient; */ @SuppressWarnings("deprecation") public class MessageScheduler extends Scheduler { + /** + * The minimum delay that the server will accept between chat messages. + */ + private static final int MIN_DELAY = 200; + /** + * The timestamp of the last message send, + */ private long lastMessage = 0; + /** + * Sends a chat message or command after the minimum cooldown. Prefer this method to send messages or commands to the server. + * + * @param message the message to send + */ public void sendMessageAfterCooldown(String message) { - if (lastMessage + 200 < System.currentTimeMillis()) { + if (lastMessage + MIN_DELAY < System.currentTimeMillis()) { sendMessage(message); lastMessage = System.currentTimeMillis(); } else { @@ -29,13 +41,19 @@ public class MessageScheduler extends Scheduler { } } + /** + * Queues a chat message or command to send in {@code delay} ticks. Use this method to send messages or commands a set time in the future. The minimum cooldown is still respected. + * + * @param message the message to send + * @param delay the delay before sending the message in ticks + */ public void queueMessage(String message, int delay) { schedule(() -> sendMessage(message), delay); } @Override protected boolean runTask(Runnable task) { - if (lastMessage + 200 < System.currentTimeMillis()) { + if (lastMessage + MIN_DELAY < System.currentTimeMillis()) { task.run(); lastMessage = System.currentTimeMillis(); return true; diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 7313ec10..02162140 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -11,8 +11,8 @@ import java.util.PriorityQueue; */ public class Scheduler { private static final Logger LOGGER = LoggerFactory.getLogger(Scheduler.class); - private int currentTick; - private final PriorityQueue tasks; + private int currentTick = 0; + private final PriorityQueue tasks = new PriorityQueue<>(); /** * Do not instantiate this class. Use {@link SkyblockerMod#scheduler} instead. @@ -20,32 +20,34 @@ public class Scheduler { @SuppressWarnings("DeprecatedIsStillUsed") @Deprecated public Scheduler() { - currentTick = 0; - tasks = new PriorityQueue<>(); } /** * Schedules a task to run after a delay. - * @param task the task to run + * + * @param task the task to run * @param delay the delay in ticks */ public void schedule(Runnable task, int delay) { - if (delay < 0) + if (delay < 0) { LOGGER.warn("Scheduled a task with negative delay"); + } ScheduledTask tmp = new ScheduledTask(task, currentTick + delay); tasks.add(tmp); } /** * Schedules a task to run every period ticks. - * @param task the task to run + * + * @param task the task to run * @param period the period in ticks */ public void scheduleCyclic(Runnable task, int period) { - if (period <= 0) + if (period <= 0) { LOGGER.error("Attempted to schedule a cyclic task with period lower than 1"); - else + } else { new CyclicTask(task, period).run(); + } } public void tick() { @@ -56,6 +58,12 @@ public class Scheduler { } } + /** + * Runs the task if able. + * + * @param task the task to run + * @return {@code true} if the task is run, and {@link false} if task is not run. + */ protected boolean runTask(Runnable task) { task.run(); return true; @@ -63,7 +71,8 @@ public class Scheduler { /** * A task that runs every period ticks. More specifically, this task reschedules itself to run again after period ticks every time it runs. - * @param inner the task to run + * + * @param inner the task to run * @param period the period in ticks */ protected record CyclicTask(Runnable inner, int period) implements Runnable { @@ -76,7 +85,8 @@ public class Scheduler { /** * A task that runs at a specific tick, relative to {@link #currentTick}. - * @param inner the task to run + * + * @param inner the task to run * @param schedule the tick to run at */ protected record ScheduledTask(Runnable inner, int schedule) implements Comparable, Runnable { -- cgit From 66387b1fe7dbdf4a0c3e82e53e59a5c24cce6075 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Tue, 30 May 2023 20:46:58 -0400 Subject: Update Loom and Gradle (#163) --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 61608 -> 62076 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 7 +- gradlew.bat | 184 +++++++++++++++---------------- 5 files changed, 98 insertions(+), 97 deletions(-) diff --git a/build.gradle b/build.gradle index 5ee08867..4d2dc8ef 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.1-SNAPSHOT' + id 'fabric-loom' version '1.2-SNAPSHOT' id 'maven-publish' id 'com.modrinth.minotaur' version '2.+' } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index ccebba77..c1962a79 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bdc9a83b..37aef8d3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 79a61d42..aeb74cbb 100755 --- a/gradlew +++ b/gradlew @@ -85,9 +85,6 @@ done APP_BASE_NAME=${0##*/} APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -197,6 +194,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f..6689b85b 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,92 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega -- cgit From 91903894d29c1cfab45ae77481cd111895f38058 Mon Sep 17 00:00:00 2001 From: Fix3d Date: Wed, 31 May 2023 14:15:49 +0300 Subject: fix repository update --- .../skyblocker/skyblock/api/RepositoryUpdate.java | 38 +++++++++++++--------- .../skyblocker/skyblock/itemlist/ItemRegistry.java | 14 ++++++-- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java index 3854dd88..e08cb1c0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java @@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.api; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; import java.io.File; @@ -10,6 +11,7 @@ import java.nio.file.Files; import java.util.concurrent.CompletableFuture; public class RepositoryUpdate { + public static final MinecraftClient client = MinecraftClient.getInstance(); /** * Adds command to update repository manually from ingame. @@ -21,22 +23,7 @@ public class RepositoryUpdate { ClientCommandManager.literal("skyblocker") .then(ClientCommandManager.literal("updaterepository") .executes(context -> { - CompletableFuture.runAsync(() -> { - try { - ItemRegistry.filesImported = false; - File dir = ItemRegistry.LOCAL_ITEM_REPO_DIR.toFile(); - recursiveDelete(dir); - } catch (Exception ex) { - ItemRegistry.client.player.sendMessage( - Text.translatable("skyblocker.updaterepository.failed") - , false - ); - return; - } - - ItemRegistry.init(); - }); - + updateRepository(); return 1; }) ) @@ -45,6 +32,25 @@ public class RepositoryUpdate { } + public static void updateRepository() { + CompletableFuture.runAsync(() -> { + try { + ItemRegistry.filesImported = false; + File dir = ItemRegistry.LOCAL_ITEM_REPO_DIR.toFile(); + recursiveDelete(dir); + } catch (Exception ex) { + if (client.player != null) + client.player.sendMessage( + Text.translatable("skyblocker.updaterepository.failed") + , false + ); + return; + } + + ItemRegistry.init(); + }); + } + private static void recursiveDelete(File dir) { if (dir.isDirectory() && !Files.isSymbolicLink(dir.toPath())) { for (File child : dir.listFiles()) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index a1507b95..d9f3b473 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; @@ -10,6 +11,7 @@ import net.minecraft.item.Items; import net.minecraft.text.Text; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.PullResult; +import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,20 +49,26 @@ public class ItemRegistry { } private static void updateItemRepo() { + Git git; if (!Files.isDirectory(LOCAL_ITEM_REPO_DIR)) { try { - Git.cloneRepository() + git = Git.cloneRepository() .setURI(REMOTE_ITEM_REPO) .setDirectory(LOCAL_ITEM_REPO_DIR.toFile()) .setBranchesToClone(List.of("refs/heads/master")) .setBranch("refs/heads/master") .call(); + git.close(); + LOGGER.info("[Skyblocker Repository Update] Repository updated."); } catch (Exception e) { e.printStackTrace(); } } else { try { - PullResult pull = Git.open(LOCAL_ITEM_REPO_DIR.toFile()).pull().setRebase(true).call(); + git = Git.open(LOCAL_ITEM_REPO_DIR.toFile()); + PullResult pull = git.pull().setRebase(true).call(); + git.close(); + if (pull.getRebaseResult() == null) { LOGGER.info("[Skyblocker Repository Update] No update result"); } else if (pull.getRebaseResult().getStatus().isSuccessful()) { @@ -68,6 +76,8 @@ public class ItemRegistry { } else if (!pull.getRebaseResult().getStatus().isSuccessful()) { LOGGER.warn("[Skyblocker Repository Update] Status: " + pull.getRebaseResult().getStatus().name()); } + } catch (RepositoryNotFoundException e) { + RepositoryUpdate.updateRepository(); } catch (Exception e) { e.printStackTrace(); } -- cgit From bf7ec68ff7f318864b33692d289c2acbf1ef9302 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 4 Jun 2023 13:02:23 +0200 Subject: Update TODOs for tests in Screen --- .../java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index cca2ed9e..43b7f956 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -68,10 +68,10 @@ public class Screen { private static Screen correctMainScrn(int w, int h, Text footer) { return switch (PlayerLocator.getPlayerLocation()) { case PARK -> new ParkServerScreen(w, h, footer); // ok - case HUB -> new HubServerScreen(w, h, footer); // ok when fire sale incoming, TODO active fs, no fs + case HUB -> new HubServerScreen(w, h, footer); // ok when fire sale incoming case HOME_ISLAND -> new HomeServerScreen(w, h, footer); // ok case GUEST_ISLAND -> new GuestServerScreen(w, h, footer); // ok - case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, footer); // ok, TODO 4 comms, active forge + case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, footer); // ok, TODO active forge case FARMING_ISLAND -> new FarmingServerScreen(w, h, footer); case DUNGEON_HUB -> new DungeonHubScreen(w, h, footer); // ok case DUNGEON -> new DungeonScreen(w, h, footer); // ok -- cgit From a8f69bdda78768ba6303810e4dbee4482f21464f Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 4 Jun 2023 13:02:43 +0200 Subject: Add widget to display dungeon buffs --- .../tabhud/screens/main/DungeonScreen.java | 14 ++++--- .../skyblock/tabhud/widget/DungeonBuffWidget.java | 44 ++++++++++++++++++++++ 2 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonBuffWidget.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java index 02ac9617..852ee876 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java @@ -1,12 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonBuffWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDeathWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDownedWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPuzzleWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonSecretWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonServerWidget; - import net.minecraft.text.Text; public class DungeonScreen extends Screen { @@ -14,22 +14,26 @@ public class DungeonScreen extends Screen { public DungeonScreen(int w, int h, Text footer) { super(w, h); + String f = footer.getString(); + DungeonDownedWidget ddow = new DungeonDownedWidget(); DungeonDeathWidget ddew = new DungeonDeathWidget(); DungeonSecretWidget dscw = new DungeonSecretWidget(); DungeonServerWidget dsrw = new DungeonServerWidget(); DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget(); + DungeonBuffWidget dbw = new DungeonBuffWidget(f); this.offCenterL(ddow); this.offCenterL(ddew); - this.offCenterL(dscw); + this.offCenterL(dbw); this.offCenterR(dsrw); this.offCenterR(dpuw); + this.offCenterR(dscw); - this.stackWidgetsH(ddow, ddew, dscw); - this.stackWidgetsH(dsrw, dpuw); + this.stackWidgetsH(ddow, ddew, dbw); + this.stackWidgetsH(dsrw, dpuw, dscw); - this.addWidgets(ddow, ddew, dscw, dsrw, dpuw); + this.addWidgets(ddow, ddew, dscw, dsrw, dpuw, dbw); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonBuffWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonBuffWidget.java new file mode 100644 index 00000000..6ad5268e --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonBuffWidget.java @@ -0,0 +1,44 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +// this widget shows a list of obtained dungeon buffs +// TODO: could be more pretty, can't be arsed atm + +public class DungeonBuffWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Dungeon Buffs").formatted(Formatting.DARK_PURPLE, + Formatting.BOLD); + + public DungeonBuffWidget(String footertext) { + super(TITLE, Formatting.DARK_PURPLE.getColorValue()); + + if (footertext == null || !footertext.contains("Dungeon Buffs")) { + this.addComponent(new PlainTextComponent(Text.literal("No data").formatted(Formatting.GRAY))); + this.pack(); + return; + } + + String interesting = footertext.split("Dungeon Buffs")[1]; + String[] lines = interesting.split("\n"); + + if (!lines[1].startsWith("Blessing")) { + this.addComponent(new PlainTextComponent(Text.literal("No buffs found!").formatted(Formatting.GRAY))); + this.pack(); + return; + } + + for (int i = 1; i < lines.length; i++) { + if (lines[i].length() < 3) { // empty line is §s + break; + } + this.addComponent(new PlainTextComponent(Text.of(lines[i]))); + } + + this.pack(); + } + +} -- cgit From a4548ef21d733fe28de880456bfafadce8ddb064 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 4 Jun 2023 13:03:03 +0200 Subject: Add "INSTANCED" location for e.g. Kuudra's --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java index bcc7e338..134bfea8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java @@ -24,6 +24,7 @@ public class PlayerLocator { SPIDER_DEN, JERRY, GARDEN, + INSTANCED, UNKNOWN } @@ -79,6 +80,8 @@ public class PlayerLocator { return Location.JERRY; case "Garden": return Location.GARDEN; + case "Instanced": + return Location.INSTANCED; default: return Location.UNKNOWN; } -- cgit From a84f34c56cdcf6646576bbf1806315c28b5ebc9c Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 4 Jun 2023 13:03:21 +0200 Subject: Fix IslandOwnersWidget crashing when owner is online --- .../skyblock/tabhud/widget/IslandOwnersWidget.java | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java index 1c640ed1..8550b27d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java @@ -18,23 +18,35 @@ public class IslandOwnersWidget extends Widget { Formatting.BOLD); // matches an owner - // group 1: player name (cut off by hypixel for some reason) - // group 2: last seem - // TODO: test with owner online - private static final Pattern OWNER_PATTERN = Pattern.compile("(?.*) \\((?.*)\\)"); + // group 1: player name + // group 2: last seen, if owner not online + private static final Pattern OWNER_PATTERN = Pattern + .compile("^(?.*) \\((?.*)?\\)$|^\\[\\d*\\] (?.*)$"); public IslandOwnersWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); for (int i = 1; i < 20; i++) { - Matcher m = PlayerListMgr.regexAt( i, OWNER_PATTERN); + Matcher m = PlayerListMgr.regexAt(i, OWNER_PATTERN); if (m == null) { break; } - Text entry = Text.literal(m.group("name")) + String name = null, lastseen = null; + Formatting format = null; + if (m.group("nameA") != null) { + name = m.group("nameA"); + lastseen = m.group("lastseen"); + format = Formatting.GRAY; + } else { + name = m.group("nameB"); + lastseen = "Online"; + format = Formatting.WHITE; + } + + Text entry = Text.literal(name) .append( - Text.literal(" (" + m.group("lastseen") + ")") - .formatted(Formatting.GRAY)); + Text.literal(" (" + lastseen + ")") + .formatted(format)); PlainTextComponent ptc = new PlainTextComponent(entry); this.addComponent(ptc); } -- cgit From 34d87f0e435963cb571568a783c9c4456e811012 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 4 Jun 2023 13:03:49 +0200 Subject: Fix UpgradeWidget not showing current upgrades --- .../skyblock/tabhud/widget/UpgradeWidget.java | 25 +++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java index e9d239ae..ef7c21d0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java @@ -19,22 +19,27 @@ public class UpgradeWidget extends Widget { public UpgradeWidget(String footertext) { super(TITLE, Formatting.GOLD.getColorValue()); - if (footertext == null || !footertext.contains("Upgrades")) { + if (footertext == null) { this.addComponent(new PlainTextComponent(Text.literal("No data").formatted(Formatting.GRAY))); this.pack(); return; } - String[] interesting = footertext.split("Upgrades"); - this.addComponent(new PlainTextComponent(Text.of("Currently no upgrades..."))); - this.pack(); + if (!footertext.contains("Upgrades")) { + this.addComponent(new PlainTextComponent(Text.of("Currently no upgrades..."))); + this.pack(); + return; + } + + String interesting = footertext.split("Upgrades")[1]; + String[] lines = interesting.split("\n"); - String[] lines = interesting[1].split("\n"); - IcoTextComponent u1 = new IcoTextComponent(Ico.SIGN, Text.of(lines[1])); - this.addComponent(u1); - if (lines.length == 5) { // ??? no idea how this works, but it does. don't touch until understood... - IcoTextComponent u2 = new IcoTextComponent(Ico.SIGN, Text.of(lines[2])); - this.addComponent(u2); + for (int i = 1; i < lines.length; i++) { + if (lines[i].trim().length() < 3) { // empty line is §s + break; + } + IcoTextComponent itc = new IcoTextComponent(Ico.SIGN, Text.of(lines[i])); + this.addComponent(itc); } this.pack(); } -- cgit From 029b4dc43ba1a5cbeb0330085af64ba073e46d05 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Sun, 4 Jun 2023 14:24:48 +0200 Subject: Fix edge case where home island owner isn't on but no offline text is given --- .../skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java index 8550b27d..6c2d6b47 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java @@ -21,7 +21,7 @@ public class IslandOwnersWidget extends Widget { // group 1: player name // group 2: last seen, if owner not online private static final Pattern OWNER_PATTERN = Pattern - .compile("^(?.*) \\((?.*)?\\)$|^\\[\\d*\\] (?.*)$"); + .compile("^(?.*) \\((?.*)\\)$|^\\[\\d*\\] (?.*)$|^(?.*)$"); public IslandOwnersWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); @@ -37,10 +37,14 @@ public class IslandOwnersWidget extends Widget { name = m.group("nameA"); lastseen = m.group("lastseen"); format = Formatting.GRAY; - } else { + } else if (m.group("nameB")!=null){ name = m.group("nameB"); lastseen = "Online"; format = Formatting.WHITE; + } else { + name = m.group("nameC"); + lastseen = "Online"; + format = Formatting.WHITE; } Text entry = Text.literal(name) -- cgit From 42b2a31ff5108daeaaf2b36d1d0fe58edeb6094c Mon Sep 17 00:00:00 2001 From: Julienraptor01 Date: Sun, 4 Jun 2023 19:58:54 +0200 Subject: remove backup LBIN server because it desn't exist anymore --- .../java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java index 25e849ad..e2d2d415 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java @@ -342,10 +342,6 @@ public class PriceInfoTooltip { return new Gson().fromJson(reader, JsonObject.class); } catch (IOException e) { LOGGER.warn("[Skyblocker] Failed to download " + type + " prices!", e); - - if (type.equals("lowest bins")) - return downloadPrices("lowest bins backup"); - return null; } } @@ -356,7 +352,6 @@ public class PriceInfoTooltip { apiAddresses.put("3 day avg", "https://moulberry.codes/auction_averages_lbin/3day.json.gz"); apiAddresses.put("bazaar", "https://hysky.de/api/bazaar"); apiAddresses.put("lowest bins", "https://lb.tricked.pro/lowestbins"); - apiAddresses.put("lowest bins backup", "https://lb2.tricked.pro/lowestbins"); apiAddresses.put("npc", "https://hysky.de/api/npcprice"); apiAddresses.put("museum", "https://hysky.de/api/museum"); } -- cgit From ac463e6f8526dee4f2abe8cbb64372b20ebc83fd Mon Sep 17 00:00:00 2001 From: PumpkinXD <1042588515@qq.com> Date: Wed, 7 Jun 2023 21:27:11 +0800 Subject: fixing missing strings --- src/main/resources/assets/skyblocker/lang/en_us.json | 3 +++ src/main/resources/assets/skyblocker/lang/zh_cn.json | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 922f73a9..17b9cddd 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -152,6 +152,9 @@ "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Enable Item List", "text.autoconfig.skyblocker.category.locations": "Locations", + "text.autoconfig.skyblocker.option.locations.barn": "Barn", + "text.autoconfig.skyblocker.option.locations.barn.solveHungryHiker": "Solve Hungry Hiker", + "text.autoconfig.skyblocker.option.locations.barn.solveTreasureHunter": "Solve Treasure Hunter", "text.autoconfig.skyblocker.option.locations.dungeons": "Dungeons", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus Helper", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Gray out chests that have already been opened.", diff --git a/src/main/resources/assets/skyblocker/lang/zh_cn.json b/src/main/resources/assets/skyblocker/lang/zh_cn.json index ef752b6e..317dcc93 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_cn.json +++ b/src/main/resources/assets/skyblocker/lang/zh_cn.json @@ -60,6 +60,9 @@ "text.autoconfig.skyblocker.option.general.itemList": "物品列表", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "启用物品列表", "text.autoconfig.skyblocker.category.locations": "位置", + "text.autoconfig.skyblocker.option.locations.barn": "农业岛屿", + "text.autoconfig.skyblocker.option.locations.barn.solveHungryHiker": "Hungry Hikers 所需物品提示", + "text.autoconfig.skyblocker.option.locations.barn.solveTreasureHunter": "Treasure Hunter 助手", "text.autoconfig.skyblocker.option.locations.dungeons": "地牢", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus助手", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "将打开过的箱子标记为灰色", -- cgit From ce491af9453b8f4f8a203c6105a62d3a85bc94a9 Mon Sep 17 00:00:00 2001 From: PumpkinXD Date: Wed, 31 May 2023 16:48:08 +0000 Subject: Translated using Weblate (Chinese (Simplified)) [skip ci] Currently translated at 100.0% (192 of 192 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/zh_Hans/ --- src/main/resources/assets/skyblocker/lang/zh_cn.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_cn.json b/src/main/resources/assets/skyblocker/lang/zh_cn.json index 317dcc93..41d1da43 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_cn.json +++ b/src/main/resources/assets/skyblocker/lang/zh_cn.json @@ -190,5 +190,8 @@ "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "物品NBT", "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "点击时所执行的命令", "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "物品ID", - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "点击时所执行的命令" + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "点击时所执行的命令", + "text.autoconfig.skyblocker.option.general.fishing": "钓鱼助手", + "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "启用钓鱼助手", + "skyblocker.fishing.reelNow": "收竿!" } -- cgit From 2f284b65053b7539c73020fe5a2b1f83ead0d6ec Mon Sep 17 00:00:00 2001 From: PumpkinXD Date: Mon, 5 Jun 2023 11:31:58 +0000 Subject: Translated using Weblate (Chinese (Simplified)) [skip ci] Currently translated at 100.0% (197 of 197 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/zh_Hans/ --- src/main/resources/assets/skyblocker/lang/zh_cn.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_cn.json b/src/main/resources/assets/skyblocker/lang/zh_cn.json index 41d1da43..35e98845 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_cn.json +++ b/src/main/resources/assets/skyblocker/lang/zh_cn.json @@ -193,5 +193,10 @@ "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "点击时所执行的命令", "text.autoconfig.skyblocker.option.general.fishing": "钓鱼助手", "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "启用钓鱼助手", - "skyblocker.fishing.reelNow": "收竿!" + "skyblocker.fishing.reelNow": "收竿!", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "启用真 Livid 的颜色提示", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor": "提示真 Livid 的颜色", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor.@Tooltip": "将真 Livid 的颜色发送到聊天栏", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText": "真 Livid 颜色提示信息", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip": "Livid Boss战时发送到聊天栏的信息, 字段 “[color]” 将被替换为真 Livid 的颜色" } -- cgit From 9c1c53ad9e7e991fb8eeaf7d77cb62f5e8d4af08 Mon Sep 17 00:00:00 2001 From: Serhan Date: Mon, 5 Jun 2023 12:06:17 +0000 Subject: Translated using Weblate (Turkish) [skip ci] Currently translated at 29.4% (58 of 197 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/tr/ --- .../resources/assets/skyblocker/lang/tr_TR.json | 72 +++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json index 0967ef42..1b07aff8 100644 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ b/src/main/resources/assets/skyblocker/lang/tr_TR.json @@ -1 +1,71 @@ -{} +{ + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shift'e basmadan sırt çantası ön izlemesini görüntüleyin", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Eşya Açıklamaları", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC fiyatını göster", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Ort. BIN fiyatını göster", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Ortalama Türü", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1 günlük", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3 günlük", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "İkisi de", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Pazar alış/satış fiyatını göster", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Müze ve tarih bilgisini göster", + "text.autoconfig.skyblocker.option.general.hitbox": "Hitbox'lar", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEşya açıklamasındaki ürün fiyat bilgisi en fazla 60 saniye içinde yenilenecektir. Aksi takdirde latest.log dosyasını kontrol edin", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "1.8 tarım hitboxlarını etkinleştir", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "1.8 şalter hitboxunu etkinleştir", + "skyblocker.itemTooltip.noData": "§cVeri yok", + "text.autoconfig.skyblocker.category.richPresence": "Discord Özel Durumu", + "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock bilgisi", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "Cüzdan", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "Bit", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "Konum", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Eğer döngüyü açtıysanız bu değer geçersiz kalır", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Skyblock bilgilerini döngüye al", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "Özel mesaj", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchur'un mesajını çöz", + "skyblocker.fishing.reelNow": "Şimdi sarıl!", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Devre dışı", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtrele", + "text.autoconfig.skyblocker.option.messages.hideAbility": "Yetenek bekleme süresini filtrele", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Aksiyon barına taşı", + "text.autoconfig.skyblocker.option.messages.hideHeal": "İyileştirme mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTE mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Wave mesajını filtrele", + "text.autoconfig.skyblocker.option.messages.hideAds": "Genel sohbetteki reklamları filtrele", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Teleport Pad mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideCombo": "Kombo mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopet mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideMana": "Aksiyon barındaki mana tüketimlerini gizle", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBar ile daha iyi bir deneyim sunar", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Güncelleme Bildirimleri", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2API anahtarınız otomatik olarak kaydedildi!", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "Menülerdeki boş eşya açıklamalarını gizle", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Arka planı göster", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Etkinleştir", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Kaç günlük ortalamanın gösterileceğini seçebilirsiniz", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "En düşük BIN fiyatını göster", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Aktif", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2Yeni bir sürüm mevcut!", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler'ın bulmacasını çöz", + "key.hotbarSlotLock": "Slot Kilidi (Araç Çubuğu)", + "key.wikiLookup": "Wiki Araması", + "text.autoconfig.skyblocker.title": "Skyblocker Ayarları", + "text.autoconfig.skyblocker.category.general": "Genel", + "text.autoconfig.skyblocker.option.general.bars": "Can, Mana, Defans ve XP Barları", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Barları Etkinleştir", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Bar Konumları", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Devre dışı", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Can barı konumu", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana barı konumu", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defans barı konumu", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Tecrübe barı konumu", + "key.categories.skyblocker": "Skyblocker", + "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cYerel depo güncellenemedi. Dosyaları manuel olarak silip oyunu tekrar başlatın.", + "text.autoconfig.skyblocker.option.general.fishing": "Balık Tutma Yardımcısı", + "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Balık tutma yardımcısını aktifleştir", + "text.autoconfig.skyblocker.category.messages": "Mesajlar", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosion mesajını filtrele" +} -- cgit From 1931f2ce957d02374d8f2ce43dd2118e040d2103 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Thu, 8 Jun 2023 22:47:09 +0200 Subject: Don't draw dwarven HUD when the tab HUD is open. Also remove a redundant check --- .../me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java index 142a1856..15f9e58b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -50,15 +50,17 @@ public class DwarvenHud { }))))); HudRenderCallback.EVENT.register((matrixStack, tickDelta) -> { - if (!SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled || client.player == null || commissionList.isEmpty()) return; + if (!SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled + || client.options.playerListKey.isPressed() + || client.player == null + || commissionList.isEmpty()) { + return; + } render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList); }); } public static void render(MatrixStack matrixStack, int hudX, int hudY, List commissions) { - if (commissions.size() <= 0) { - return; - } switch(SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { case SIMPLE -> renderSimple(matrixStack, hudX, hudY, commissions); -- cgit From f21cac6a03ec60ccf22ed3f2dafb49e1fe81c4c4 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Thu, 8 Jun 2023 22:47:39 +0200 Subject: Modify layout of MineServerScreen to be more balanced --- .../skyblock/tabhud/screens/main/MineServerScreen.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java index 22eb0ffa..616c3e82 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java @@ -1,17 +1,14 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; - - import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ForgeWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PowderWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; - import net.minecraft.text.Text; -public class MineServerScreen extends Screen{ +public class MineServerScreen extends Screen { public MineServerScreen(int w, int h, Text footer) { super(w, h); @@ -21,11 +18,11 @@ public class MineServerScreen extends Screen{ CommsWidget cw = new CommsWidget(); ForgeWidget fw = new ForgeWidget(); - this.stackWidgetsH(sw, pw, cw); - this.centerH(fw); + this.stackWidgetsH(sw, cw); + this.stackWidgetsH(fw, pw); this.offCenterL(sw); - this.offCenterL(pw); this.offCenterL(cw); + this.offCenterR(pw); this.offCenterR(fw); this.addWidgets(fw, cw, pw, sw); } -- cgit From adb9df0a2f4412394027df6157cdce743e403d47 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Thu, 8 Jun 2023 22:48:09 +0200 Subject: Fix EffectWidget showing incorrect text when god pot is active. --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java index 10596fe2..cd39a25a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java @@ -37,8 +37,8 @@ public class EffectWidget extends Widget { Text txt = Text.literal("No effects active").formatted(Formatting.GRAY); this.addComponent(new IcoTextComponent(Ico.POTION, txt)); } else if (lines[1].contains("God")) { - String timeleft = lines[1].split("! ")[0]; - Text godpot = Text.literal("God potion!").formatted(Formatting.RED, Formatting.BOLD); + String timeleft = lines[1].split("! ")[1]; + Text godpot = Text.literal("God potion!").formatted(Formatting.RED); Text txttleft = Text.literal(timeleft).formatted(Formatting.LIGHT_PURPLE); IcoFatTextComponent iftc = new IcoFatTextComponent(Ico.POTION, godpot, txttleft); this.addComponent(iftc); -- cgit From 8b8de6bf27943f5487fce1643e5859c368220b06 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Thu, 8 Jun 2023 22:49:13 +0200 Subject: Improve text for currently forging items. Also improve joke --- .../me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java index 4de4a0b4..da1ba6c5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java @@ -21,7 +21,7 @@ public class ForgeWidget extends Widget { public ForgeWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); int forgestart = 54; - // why is it forges and not fabrics >:( + // why is it forges and not looms >:( String pos = PlayerListMgr.strAt(53); if (pos == null) { this.addComponent(new IcoTextComponent()); @@ -65,8 +65,8 @@ public class ForgeWidget extends Widget { if (parts.length != 2) { c = new IcoFatTextComponent(); } else { - l1 = Text.of(parts[0]); - l2 = Text.literal(parts[1]).formatted(Formatting.YELLOW); + l1 = Text.literal(parts[0].substring(3)).formatted(Formatting.YELLOW); + l2 = Text.literal("Done in: ").formatted(Formatting.GRAY).append(Text.literal(parts[1]).formatted(Formatting.WHITE)); c = new IcoFatTextComponent(Ico.FIRE, l1, l2); } break; -- cgit From 9b93e87859276cd7e37de0b6b02ca27c27228b87 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Thu, 8 Jun 2023 22:49:55 +0200 Subject: Make PlainTextComponent use padding --- .../skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java index f356a6a3..265d11f1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java @@ -24,7 +24,7 @@ public class PlainTextComponent extends Component { @Override public void render(MatrixStack ms, int x, int y) { - txtRend.draw(ms, text, x, y, 0xffffffff); + txtRend.draw(ms, text, x + PAD_S, y, 0xffffffff); } } -- cgit From 447dab04de6093c4ea3449866e44aadc09a0637a Mon Sep 17 00:00:00 2001 From: Azurrrre Date: Fri, 9 Jun 2023 13:09:52 +0000 Subject: Translated using Weblate (Russian) [skip ci] Currently translated at 29.0% (58 of 200 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ru/ --- src/main/resources/assets/skyblocker/lang/ru_ru.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/ru_ru.json b/src/main/resources/assets/skyblocker/lang/ru_ru.json index 8240f0cb..f87bda86 100644 --- a/src/main/resources/assets/skyblocker/lang/ru_ru.json +++ b/src/main/resources/assets/skyblocker/lang/ru_ru.json @@ -53,5 +53,8 @@ "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Ключ API установлен автоматически!", "key.wikiLookup": "Быстрый переход на вики", "text.autoconfig.skyblocker.option.general.itemTooltip": "Описание предметов", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Показать цены у NPC" + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Показать цены у NPC", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Настроить позиции полосок", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Слой 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Слой 2" } -- cgit From 97384423da03f5d85ed5ec62a16f80d40f109b74 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 5 Jun 2023 01:13:54 -0400 Subject: Add Dungeon Map Placement Screen! You can now move the dungeon map to wherever you want on your screen! No longer is it locked to the top left. --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 + .../skyblocker/config/SkyblockerConfig.java | 2 + .../skyblocker/skyblock/dungeon/DungeonMap.java | 32 ++++++++++++- .../skyblock/dungeon/DungeonMapConfigScreen.java | 55 ++++++++++++++++++++++ .../resources/assets/skyblocker/lang/en_us.json | 2 + 5 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index e0f950d0..bfc5013b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -11,6 +11,7 @@ import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate; import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze; +import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonMap; import me.xmrvizzy.skyblocker.skyblock.dungeon.LividColor; import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; @@ -79,6 +80,7 @@ public class SkyblockerMod implements ClientModInitializer { FishingHelper.init(); TabHud.init(); containerSolverManager.init(); + DungeonMap.init(); scheduler.scheduleCyclic(Utils::sbChecker, 20); scheduler.scheduleCyclic(DiscordRPCManager::update, 100); scheduler.scheduleCyclic(DungeonBlaze::update, 4); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 7fdd7254..b1bc2001 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -278,6 +278,8 @@ public class SkyblockerConfig implements ConfigData { public boolean croesusHelper = true; public boolean enableMap = true; public float mapScaling = 1f; + public int mapX = 2; + public int mapY = 2; public boolean solveThreeWeirdos = true; public boolean blazesolver = true; public boolean solveTrivia = true; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java index dda8da41..6aaee632 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java @@ -2,8 +2,14 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; import org.apache.commons.lang3.StringUtils; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.brigadier.Command; + import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.render.MapRenderer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; @@ -11,8 +17,11 @@ import net.minecraft.item.FilledMapItem; import net.minecraft.item.ItemStack; import net.minecraft.item.map.MapState; import net.minecraft.nbt.NbtCompound; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; public class DungeonMap { + private static final Identifier MAP_BACKGROUND = new Identifier("textures/map/map_background.png"); public static void render(MatrixStack matrices) { MinecraftClient client = MinecraftClient.getInstance(); @@ -28,14 +37,35 @@ public class DungeonMap { MapRenderer map = client.gameRenderer.getMapRenderer(); MapState state = FilledMapItem.getMapState(mapid, client.world); float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; + int x = SkyblockerConfig.get().locations.dungeons.mapX; + int y = SkyblockerConfig.get().locations.dungeons.mapY; if (state == null) return; matrices.push(); - matrices.translate(2, 2, 0); + matrices.translate(x, y, 0); matrices.scale(scaling, scaling, 0f); map.draw( matrices, vertices, mapid, state, false, 15728880); vertices.draw(); matrices.pop(); } } + + public static void renderHUDMap(MatrixStack matrices, int x, int y) { + RenderSystem.setShaderTexture(0, MAP_BACKGROUND); + DrawableHelper.drawTexture(matrices, x, y, 0, 0, 64, 64, 64, 64); + } + + public static void init() { + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> { + dispatcher.register(ClientCommandManager.literal("skyblocker") + .then(ClientCommandManager.literal("hud") + .then(ClientCommandManager.literal("dungeonmap") + .executes(context -> { + MinecraftClient client = context.getSource().getClient(); + client.send(() -> client.setScreen(new DungeonMapConfigScreen(Text.literal("Dungeon Map Config")))); + + return Command.SINGLE_SUCCESS; + })))); + }); + } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java new file mode 100644 index 00000000..d0f36a69 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java @@ -0,0 +1,55 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon; + +import java.awt.Color; + +import me.shedaniel.autoconfig.AutoConfig; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.RenderUtils; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; + +public class DungeonMapConfigScreen extends Screen { + + private int hudX = SkyblockerConfig.get().locations.dungeons.mapX; + private int hudY = SkyblockerConfig.get().locations.dungeons.mapY; + + protected DungeonMapConfigScreen(Text title) { + super(title); + } + + @Override + public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { + super.render(matrices, mouseX, mouseY, delta); + renderBackground(matrices); + DungeonMap.renderHUDMap(matrices, hudX, hudY); + drawCenteredTextWithShadow(matrices, textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); + } + + @Override + public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { + if(RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX, hudY, hudX + 64, hudY + 64) && button == 0) { + hudX = (int) Math.max(Math.min(mouseX - 32, this.width - 64), 0); + hudY = (int) Math.max(Math.min(mouseY - 32, this.height - 64), 0); + } + return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + if(button == 1) { + hudX = 2; + hudY = 2; + } + + return super.mouseClicked(mouseX, mouseY, button); + } + + @Override + public void close() { + SkyblockerConfig.get().locations.dungeons.mapX = hudX; + SkyblockerConfig.get().locations.dungeons.mapY = hudY; + AutoConfig.getConfigHolder(SkyblockerConfig.class).save(); + super.close(); + } +} diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index dd6d777c..858507fe 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -167,6 +167,8 @@ "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Gray out chests that have already been opened.", "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Enable Map", "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Map Scaling", + "text.autoconfig.skyblocker.option.locations.dungeons.mapX": "Map X", + "text.autoconfig.skyblocker.option.locations.dungeons.mapY": "Map Y", "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Solve Three Weirdos Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Solve Blaze Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve Trivia Puzzle", -- cgit From d2b4abdeccbb1f567840cfa1038fedf8cb7aed7e Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 9 Jun 2023 16:30:27 -0400 Subject: Support the scaling option for the placement screen! --- .../java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java | 4 +++- .../skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java index 6aaee632..e5441b5c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java @@ -51,8 +51,10 @@ public class DungeonMap { } public static void renderHUDMap(MatrixStack matrices, int x, int y) { + float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; + int size = (int) (128 * scaling); RenderSystem.setShaderTexture(0, MAP_BACKGROUND); - DrawableHelper.drawTexture(matrices, x, y, 0, 0, 64, 64, 64, 64); + DrawableHelper.drawTexture(matrices, x, y, 0, 0, size, size, size, size); } public static void init() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java index d0f36a69..9d97e24d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java @@ -28,9 +28,11 @@ public class DungeonMapConfigScreen extends Screen { @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - if(RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX, hudY, hudX + 64, hudY + 64) && button == 0) { - hudX = (int) Math.max(Math.min(mouseX - 32, this.width - 64), 0); - hudY = (int) Math.max(Math.min(mouseY - 32, this.height - 64), 0); + float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; + int size = (int) (128 * scaling); + if(RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX, hudY, hudX + size, hudY + size) && button == 0) { + hudX = (int) Math.max(Math.min(mouseX - (size / 2), this.width - size), 0); + hudY = (int) Math.max(Math.min(mouseY - (size / 2), this.height - size), 0); } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); } -- cgit From 77015229e1f37e11900927a395a4cf4a116cf9b5 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 9 Jun 2023 16:58:12 -0400 Subject: Fix indentation --- .../me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java index 9d97e24d..8fba6a7a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java @@ -29,7 +29,7 @@ public class DungeonMapConfigScreen extends Screen { @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; - int size = (int) (128 * scaling); + int size = (int) (128 * scaling); if(RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX, hudY, hudX + size, hudY + size) && button == 0) { hudX = (int) Math.max(Math.min(mouseX - (size / 2), this.width - size), 0); hudY = (int) Math.max(Math.min(mouseY - (size / 2), this.height - size), 0); -- cgit From b768565f518843895f2b60f6e4a4d29fdd508d93 Mon Sep 17 00:00:00 2001 From: Azurrrre Date: Fri, 9 Jun 2023 15:09:37 +0000 Subject: Translated using Weblate (Russian) [skip ci] Currently translated at 43.0% (86 of 200 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ru/ --- .../resources/assets/skyblocker/lang/ru_ru.json | 40 ++++++++++++++++++---- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/ru_ru.json b/src/main/resources/assets/skyblocker/lang/ru_ru.json index f87bda86..fc9eb823 100644 --- a/src/main/resources/assets/skyblocker/lang/ru_ru.json +++ b/src/main/resources/assets/skyblocker/lang/ru_ru.json @@ -16,7 +16,7 @@ "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Решать загадку Fetchur-а", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Решать загадку Puzzler-а", "text.autoconfig.skyblocker.category.messages": "Сообщения", - "text.autoconfig.skyblocker.option.messages.hideAbility": "Скрывать перезарядку способностей", + "text.autoconfig.skyblocker.option.messages.hideAbility": "Скрывать сообщения о перезарядке способностей", "text.autoconfig.skyblocker.option.messages.hideHeal": "Скрывать сообщения об исцелении", "text.autoconfig.skyblocker.option.messages.hideAOTE": "Скрывать сообщения AOTE/AOTV", "text.autoconfig.skyblocker.option.messages.hideImplosion": "Скрывать сообщения Implosion", @@ -26,7 +26,7 @@ "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Решать выбор по цвету", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Решать клик по возрастанию", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Решать начинается с", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cИнформация о цене предмета обновится через менее чем 60 секунд. Если нет, проверьте latest.log.", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cИнформация о цене предмета обновится менее чем через 60 секунд. Если нет, проверьте latest.log", "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Скрывать сообщения телепортаторов", "skyblocker.update.update_link": " §2§nНажми,§r", "text.autoconfig.skyblocker.option.general.quicknav": "Кнопки быстрого доступа", @@ -37,7 +37,7 @@ "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Показать минимальную цену на BIN", "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Показать цены на Bazaar-е", "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Показать дату получения", - "text.autoconfig.skyblocker.category.richPresence": "Активность в Discord", + "text.autoconfig.skyblocker.category.richPresence": "Активность в статусе Discord", "text.autoconfig.skyblocker.option.richPresence.info": "Отображаемая информация", "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Не имеет значения при цикличном отбражении", "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Отображать все опции циклично", @@ -52,9 +52,37 @@ "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Оповещать об обновлениях", "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Ключ API установлен автоматически!", "key.wikiLookup": "Быстрый переход на вики", - "text.autoconfig.skyblocker.option.general.itemTooltip": "Описание предметов", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Описание предмета", "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Показать цены у NPC", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "Настроить позиции полосок", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Изменить расположение полосок", "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Слой 1", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Слой 2" + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Слой 2", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Цена за 3 дня", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Использовать хитбокс пашни из 1.8", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Расположение полоски здоровья", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Просматривать содержимое рюкзаков без удержания кнопки Shift", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Отключить", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Расположение полоски маны", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "Предмет", + "skyblocker.fishing.reelNow": "Лови сейчас же!", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Скрывать сообщения Autopet", + "text.autoconfig.skyblocker.option.messages.hideMana": "Скрывать сообщения о расходе маны из Action Bar", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Справа", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Расположение полоски защиты", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Расположение полоски опыта", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "Скрывать описания предметов в меню", + "text.autoconfig.skyblocker.option.general.fishing": "Помощь в рыбалке", + "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Включить помощь в рыбалке", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Обе", + "text.autoconfig.skyblocker.option.general.hitbox": "Хитбоксы", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Использовать хитбокс рычагов из 1.8", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Цена за 1 день", + "skyblocker.itemTooltip.noData": "§cНет данных", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "Кошелек", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "Локация", + "text.autoconfig.skyblocker.category.quickNav": "Быстрый доступ", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Включить быстрый доступ", + "text.autoconfig.skyblocker.option.quickNav.button1": "Кнопка 1", + "text.autoconfig.skyblocker.option.quickNav.button2": "Кнопка 2", + "text.autoconfig.skyblocker.option.quickNav.button3": "Кнопка 3" } -- cgit From a1b68d6841a1bad1d9c98dc5303d11bf887a8307 Mon Sep 17 00:00:00 2001 From: PumpkinXD Date: Fri, 9 Jun 2023 19:06:42 +0200 Subject: Added translation using Weblate (Chinese (Traditional)) [skip ci] --- .../resources/assets/skyblocker/lang/zh_Hant.json | 202 +++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 src/main/resources/assets/skyblocker/lang/zh_Hant.json diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json new file mode 100644 index 00000000..332dc434 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/zh_Hant.json @@ -0,0 +1,202 @@ +{ + "key.categories.skyblocker": "", + "key.hotbarSlotLock": "", + "key.wikiLookup": "", + "text.autoconfig.skyblocker.title": "", + "text.autoconfig.skyblocker.category.general": "", + "text.autoconfig.skyblocker.option.general.bars": "", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", + "text.autoconfig.skyblocker.option.general.fishing": "", + "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "", + "text.autoconfig.skyblocker.option.general.quicknav": "", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "", + "text.autoconfig.skyblocker.option.general.itemTooltip": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", + "text.autoconfig.skyblocker.option.general.hitbox": "", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "", + "skyblocker.itemTooltip.nullMessage": "", + "skyblocker.itemTooltip.noData": "", + "text.autoconfig.skyblocker.category.richPresence": "", + "text.autoconfig.skyblocker.option.richPresence.info": "", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "", + "text.autoconfig.skyblocker.category.quickNav": "", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", + "text.autoconfig.skyblocker.option.quickNav.button1": "", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button2": "", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button3": "", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button4": "", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button5": "", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button6": "", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button7": "", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button8": "", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button9": "", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button10": "", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button11": "", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", + "text.autoconfig.skyblocker.option.quickNav.button12": "", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", + "text.autoconfig.skyblocker.option.general.itemList": "", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", + "text.autoconfig.skyblocker.category.locations": "", + "text.autoconfig.skyblocker.option.locations.barn": "", + "text.autoconfig.skyblocker.option.locations.barn.solveHungryHiker": "", + "text.autoconfig.skyblocker.option.locations.barn.solveTreasureHunter": "", + "text.autoconfig.skyblocker.option.locations.dungeons": "", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor": "", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor.@Tooltip": "", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText": "", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", + "text.autoconfig.skyblocker.category.messages": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", + "text.autoconfig.skyblocker.option.messages.hideAbility": "", + "text.autoconfig.skyblocker.option.messages.hideHeal": "", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", + "text.autoconfig.skyblocker.option.messages.hideAds": "", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", + "text.autoconfig.skyblocker.option.messages.hideCombo": "", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "", + "text.autoconfig.skyblocker.option.messages.hideMana": "", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", + "skyblocker.update.update_message": "", + "skyblocker.update.update_link": "", + "skyblocker.update.update_message_end": "", + "skyblocker.update.hover_text": "", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "", + "skyblocker.updaterepository.failed": "", + "skyblocker.api.got_key": "", + "skyblocker.fishing.reelNow": "" +} -- cgit From 1b41c630430d4ba36d02d009758f0aa0d9d54438 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 9 Jun 2023 19:06:42 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/zh_Hant.json | 100 --------------------- 1 file changed, 100 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json index 332dc434..60695bdf 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ b/src/main/resources/assets/skyblocker/lang/zh_Hant.json @@ -1,202 +1,102 @@ { - "key.categories.skyblocker": "", "key.hotbarSlotLock": "", - "key.wikiLookup": "", "text.autoconfig.skyblocker.title": "", - "text.autoconfig.skyblocker.category.general": "", "text.autoconfig.skyblocker.option.general.bars": "", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.fishing": "", "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "", - "text.autoconfig.skyblocker.option.general.quicknav": "", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "", "text.autoconfig.skyblocker.option.general.itemTooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", - "text.autoconfig.skyblocker.option.general.hitbox": "", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "", "skyblocker.itemTooltip.nullMessage": "", - "skyblocker.itemTooltip.noData": "", "text.autoconfig.skyblocker.category.richPresence": "", - "text.autoconfig.skyblocker.option.richPresence.info": "", "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "", "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "", "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "", "text.autoconfig.skyblocker.option.richPresence.customMessage": "", - "text.autoconfig.skyblocker.category.quickNav": "", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", - "text.autoconfig.skyblocker.option.quickNav.button1": "", "text.autoconfig.skyblocker.option.quickNav.button1.render": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button2": "", "text.autoconfig.skyblocker.option.quickNav.button2.render": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button3": "", "text.autoconfig.skyblocker.option.quickNav.button3.render": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button4": "", "text.autoconfig.skyblocker.option.quickNav.button4.render": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button5": "", "text.autoconfig.skyblocker.option.quickNav.button5.render": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button6": "", "text.autoconfig.skyblocker.option.quickNav.button6.render": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button7": "", "text.autoconfig.skyblocker.option.quickNav.button7.render": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button8": "", "text.autoconfig.skyblocker.option.quickNav.button8.render": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button9": "", "text.autoconfig.skyblocker.option.quickNav.button9.render": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button10": "", "text.autoconfig.skyblocker.option.quickNav.button10.render": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button11": "", "text.autoconfig.skyblocker.option.quickNav.button11.render": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button12": "", "text.autoconfig.skyblocker.option.quickNav.button12.render": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "", "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", - "text.autoconfig.skyblocker.option.general.itemList": "", "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", - "text.autoconfig.skyblocker.category.locations": "", "text.autoconfig.skyblocker.option.locations.barn": "", - "text.autoconfig.skyblocker.option.locations.barn.solveHungryHiker": "", "text.autoconfig.skyblocker.option.locations.barn.solveTreasureHunter": "", - "text.autoconfig.skyblocker.option.locations.dungeons": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "", "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "", "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "", "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", - "text.autoconfig.skyblocker.option.locations.dungeons.lividColor": "", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "", - "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor.@Tooltip": "", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText": "", - "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", - "text.autoconfig.skyblocker.category.messages": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", - "text.autoconfig.skyblocker.option.messages.hideAbility": "", "text.autoconfig.skyblocker.option.messages.hideHeal": "", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "", "text.autoconfig.skyblocker.option.messages.hideImplosion": "", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "", "text.autoconfig.skyblocker.option.messages.hideAds": "", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "", "text.autoconfig.skyblocker.option.messages.hideCombo": "", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "", "text.autoconfig.skyblocker.option.messages.hideMana": "", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "", "skyblocker.update.update_message": "", - "skyblocker.update.update_link": "", "skyblocker.update.update_message_end": "", - "skyblocker.update.hover_text": "", "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "", "skyblocker.updaterepository.failed": "", - "skyblocker.api.got_key": "", "skyblocker.fishing.reelNow": "" } -- cgit From c1dccaef6c78e32d540e39e2e2d24e0ab987bb4b Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 9 Jun 2023 19:06:42 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/zh_Hant.json | 50 ---------------------- 1 file changed, 50 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json index 60695bdf..ebcc7267 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ b/src/main/resources/assets/skyblocker/lang/zh_Hant.json @@ -1,102 +1,52 @@ { - "key.hotbarSlotLock": "", "text.autoconfig.skyblocker.title": "", - "text.autoconfig.skyblocker.option.general.bars": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", - "text.autoconfig.skyblocker.option.general.itemTooltip": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "", "skyblocker.itemTooltip.nullMessage": "", - "text.autoconfig.skyblocker.category.richPresence": "", "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "", "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", - "text.autoconfig.skyblocker.option.quickNav.button1.render": "", "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button2.render": "", "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button3.render": "", "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button4.render": "", "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button5.render": "", "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button6.render": "", "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button7.render": "", "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button8.render": "", "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button9.render": "", "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button10.render": "", "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button11.render": "", "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button12.render": "", "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "", "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "", "text.autoconfig.skyblocker.option.locations.barn": "", - "text.autoconfig.skyblocker.option.locations.barn.solveTreasureHunter": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "", "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "", - "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText": "", "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "", "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", - "text.autoconfig.skyblocker.option.messages.hideHeal": "", "text.autoconfig.skyblocker.option.messages.hideImplosion": "", - "text.autoconfig.skyblocker.option.messages.hideAds": "", "text.autoconfig.skyblocker.option.messages.hideCombo": "", - "text.autoconfig.skyblocker.option.messages.hideMana": "", "skyblocker.update.update_message": "", - "skyblocker.update.update_message_end": "", "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", - "skyblocker.updaterepository.failed": "", "skyblocker.fishing.reelNow": "" } -- cgit From faf3eef80c169ec98033316700077e450cd89076 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 9 Jun 2023 19:06:42 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- .../resources/assets/skyblocker/lang/zh_Hant.json | 25 ---------------------- 1 file changed, 25 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json index ebcc7267..3648840b 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ b/src/main/resources/assets/skyblocker/lang/zh_Hant.json @@ -1,52 +1,27 @@ { - "text.autoconfig.skyblocker.title": "", "text.autoconfig.skyblocker.option.general.bars.barpositions": "", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", - "skyblocker.itemTooltip.nullMessage": "", "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "", "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", - "text.autoconfig.skyblocker.option.locations.barn": "", "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "", "text.autoconfig.skyblocker.option.messages.hideImplosion": "", - "text.autoconfig.skyblocker.option.messages.hideCombo": "", "skyblocker.update.update_message": "", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "", "skyblocker.fishing.reelNow": "" } -- cgit From 94d630eb8374b0848e165f1b08a321df9bed1df3 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 9 Jun 2023 19:06:42 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/zh_Hant.json | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json index 3648840b..8bfc3bfb 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ b/src/main/resources/assets/skyblocker/lang/zh_Hant.json @@ -1,27 +1,14 @@ { - "text.autoconfig.skyblocker.option.general.bars.barpositions": "", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "", "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", - "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "", - "skyblocker.update.update_message": "", - "skyblocker.fishing.reelNow": "" + "skyblocker.update.update_message": "" } -- cgit From 9fc004a3c311e35b920f61b9c6373b459fc6d394 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 9 Jun 2023 19:06:42 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/zh_Hant.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json index 8bfc3bfb..4e179912 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ b/src/main/resources/assets/skyblocker/lang/zh_Hant.json @@ -1,14 +1,8 @@ { - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "", "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "", "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "", "skyblocker.update.update_message": "" } -- cgit From 45ff9b64850b9e810817b13d52a37c8addb87ac3 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 9 Jun 2023 19:06:42 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/zh_Hant.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json index 4e179912..3227dd0b 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ b/src/main/resources/assets/skyblocker/lang/zh_Hant.json @@ -1,8 +1,5 @@ { - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "", "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "", "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", - "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "", "skyblocker.update.update_message": "" } -- cgit From 2285a7b66826d3d1c7534af6a7d169c6106ab6e2 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 9 Jun 2023 19:06:43 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/zh_Hant.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json index 3227dd0b..e795eb87 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ b/src/main/resources/assets/skyblocker/lang/zh_Hant.json @@ -1,5 +1,3 @@ { - "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "", - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "", - "skyblocker.update.update_message": "" + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "" } -- cgit From 2bbaa6c721165105751570d654865f5bf3749acf Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 9 Jun 2023 19:06:43 +0200 Subject: Update translation files [skip ci] Updated by "Remove blank strings" hook in Weblate. Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ --- src/main/resources/assets/skyblocker/lang/zh_Hant.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json index e795eb87..0967ef42 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ b/src/main/resources/assets/skyblocker/lang/zh_Hant.json @@ -1,3 +1 @@ -{ - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "" -} +{} -- cgit From ca4c5b842bce177f99fbc56fb1c3f52c249d8736 Mon Sep 17 00:00:00 2001 From: PumpkinXD Date: Fri, 9 Jun 2023 17:09:41 +0000 Subject: Translated using Weblate (Chinese (Traditional)) [skip ci] Currently translated at 11.0% (22 of 200 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/zh_Hant/ --- .../resources/assets/skyblocker/lang/zh_Hant.json | 25 +++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json index 0967ef42..3613757e 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ b/src/main/resources/assets/skyblocker/lang/zh_Hant.json @@ -1 +1,24 @@ -{} +{ + "text.autoconfig.skyblocker.title": "Skyblocker設定", + "text.autoconfig.skyblocker.category.general": "一般設定", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "血量條位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "魔力條位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "防禦條位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "經驗条位置", + "key.wikiLookup": "查閱Wiki", + "key.hotbarSlotLock": "鎖定快捷欄", + "key.categories.skyblocker": "Skyblocker", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "隱藏終焉之貌的提示訊息", + "text.autoconfig.skyblocker.option.messages.hideAds": "从公頻訊息中隱藏廣告", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "隱藏傳送點訊息", + "text.autoconfig.skyblocker.option.messages.hideCombo": "隱藏連殺訊息", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "隱藏自動寵物訊息", + "skyblocker.update.hover_text": "打開Modrinth", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "隱藏選單玻璃物品資訊\"", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2已自动設定你的API金鑰!", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "快捷欄右側", + "text.autoconfig.skyblocker.option.messages.hideAbility": "隱藏技能冷卻", + "text.autoconfig.skyblocker.option.messages.hideHeal": "隱藏治療訊息", + "text.autoconfig.skyblocker.option.messages.hideMana": "在動作欄中隱藏魔力消耗的提示訊息", + "text.autoconfig.skyblocker.option.general.bars": "血量,魔力,防御以及經驗計量條" +} -- cgit From fe45b4db2fc8e3f26c89df23a988615c7a80cd2e Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 10 Jun 2023 00:50:30 +0200 Subject: fix lang files --- .../resources/assets/skyblocker/lang/es_ES.json | 148 ---------------- .../resources/assets/skyblocker/lang/es_es.json | 148 ++++++++++++++++ .../resources/assets/skyblocker/lang/ja_JP.json | 74 -------- .../resources/assets/skyblocker/lang/ja_jp.json | 74 ++++++++ .../resources/assets/skyblocker/lang/ko_KR.json | 189 --------------------- .../resources/assets/skyblocker/lang/ko_kr.json | 189 +++++++++++++++++++++ .../resources/assets/skyblocker/lang/nb_NO.json | 164 ------------------ .../resources/assets/skyblocker/lang/nb_no.json | 164 ++++++++++++++++++ .../resources/assets/skyblocker/lang/nn_NO.json | 16 -- .../resources/assets/skyblocker/lang/nn_no.json | 16 ++ .../resources/assets/skyblocker/lang/tr_TR.json | 71 -------- .../resources/assets/skyblocker/lang/tr_tr.json | 71 ++++++++ 12 files changed, 662 insertions(+), 662 deletions(-) delete mode 100644 src/main/resources/assets/skyblocker/lang/es_ES.json create mode 100644 src/main/resources/assets/skyblocker/lang/es_es.json delete mode 100644 src/main/resources/assets/skyblocker/lang/ja_JP.json create mode 100644 src/main/resources/assets/skyblocker/lang/ja_jp.json delete mode 100644 src/main/resources/assets/skyblocker/lang/ko_KR.json create mode 100644 src/main/resources/assets/skyblocker/lang/ko_kr.json delete mode 100644 src/main/resources/assets/skyblocker/lang/nb_NO.json create mode 100644 src/main/resources/assets/skyblocker/lang/nb_no.json delete mode 100644 src/main/resources/assets/skyblocker/lang/nn_NO.json create mode 100644 src/main/resources/assets/skyblocker/lang/nn_no.json delete mode 100644 src/main/resources/assets/skyblocker/lang/tr_TR.json create mode 100644 src/main/resources/assets/skyblocker/lang/tr_tr.json diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json deleted file mode 100644 index 7c5ea062..00000000 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "key.categories.skyblocker": "Skyblocker", - "key.hotbarSlotLock": "Bloqueo de Slot (Hotbar)", - "key.wikiLookup": "Búsqueda en la Wiki", - "text.autoconfig.skyblocker.title": "Ajustes de Skyblocker", - "text.autoconfig.skyblocker.category.general": "General", - "text.autoconfig.skyblocker.option.general.bars": "Salud, Mana, Defensa & Barra de XP", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "Habilitar Barras", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "Configurar Posición de Barras", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Capa 1", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Capa 2", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Derecha", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deshabilitado", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Posición de la Barra de Salud", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Posición de la Barra de Mana", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Posición de la Barra de Defensa", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Posición de la Barra de Experiencia", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Ver la previsualización de la mochila sin sostener Shift", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Habilitar Precios de NPC", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Habilitar Precios Promedio de BIN", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Tipo Promedio", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Puedes elegir cuantos días de precio promedio sera", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Precio de 1 día", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Precio de 3 días", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Ambos", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Habilitar el precio mas bajo de BIN", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Habilitar los precios de compra/venta del Bazar", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Habilitar Fecha del Museo", - "text.autoconfig.skyblocker.option.general.hitbox": "Cajas de Colisión", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Habilitar la Caja de Colisión de la 1.8 para la tierra de cultivo", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Habilitar la Caja de Colisión de la 1.8 para la palanca", - "skyblocker.itemTooltip.noData": "§cSin Información", - "text.autoconfig.skyblocker.category.richPresence": "Discord Rich Presence", - "text.autoconfig.skyblocker.option.richPresence.info": "Información de Skyblock", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "CARTERA", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "LOCALIZACIÓN", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Ciclar Información de Skyblock", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Habilitado", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "Mensaje Personalizado", - "text.autoconfig.skyblocker.category.quickNav": "Navegación Rápida", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Habilitar Navegación Rápida", - "text.autoconfig.skyblocker.option.quickNav.button1": "Botón 1", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button3": "Botón 3", - "text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4", - "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", - "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", - "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "Ocultar el mensaje de Implosion", - "text.autoconfig.skyblocker.option.messages.hideCombo": "Ocultar Mensajes de Combos", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Obscurece los cofres que ya han sido abiertos.", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Habilitar Fondo", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Habilitar Navegación Rápida", - "text.autoconfig.skyblocker.option.general.quicknav": "Navegación Rápida", - "text.autoconfig.skyblocker.option.general.itemTooltip": "Información extra de los objetos", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEl precio en la información en los objetos se actualiza cada 60 segundos. De lo contrario revisa lastest.log", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Este valor no importa si estas ciclando", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button2": "Botón 2", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.messages.hideAds": "Ocultar anuncios del Chat Publico", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Ocultar mensajes del Pad de Teletransporte", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "Ocultar mensajes del Autopet", - "text.autoconfig.skyblocker.option.general.itemList": "Lista de Objetos", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Habilitar la Lista de Objetos", - "text.autoconfig.skyblocker.category.locations": "Localizaciones", - "text.autoconfig.skyblocker.option.locations.dungeons": "Mazmorras", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Ayuda con Croesus", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Habilitar Mapa", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Escala del Mapa", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Resuelve el Acertijo de \"Los Tres Chiflados\"", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Resuelve el Acertijo del Blaze", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Resuelve el Acertijo de Trivia", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Minas Dwarven", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Habilitar Combustible del Taladro", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Resolver Fetchur", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Interfaz de Dwarven", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Habilitado", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", - "text.autoconfig.skyblocker.category.messages": "Mensajes", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Deshabilitado", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtro", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Mover a la barra de acción", - "text.autoconfig.skyblocker.option.messages.hideAbility": "Ocultar Mensaje de Enfriamiento (Cooldown)", - "text.autoconfig.skyblocker.option.messages.hideHeal": "Ocultar Mensajes de Curación", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "Ocultar Mensajes de la AOTE", - "text.autoconfig.skyblocker.option.messages.hideMana": "Ocultar los Mensajes del Consumo de Maná de la Barra de Acción", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "Da una mejor experiencia con FancyBar", - "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2¡Hay Una nueva versión disponible!", - "skyblocker.update.update_link": " §2§nHas Click Aquí§r", - "skyblocker.update.update_message_end": " §aPara conocer mas sobre las nuevas características.", - "skyblocker.update.hover_text": "Abrir Modrinth", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Notificaciones sobre actualizaciones", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2¡Se añadió tu API key automáticamente!", - "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cLa actualización del repositorio local fallo. Elimina los archivos manualmente y reinicia el juego.", - "text.autoconfig.skyblocker.option.quickNav.button11": "Botón 11", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button8": "Botón 8", - "text.autoconfig.skyblocker.option.quickNav.button9": "Botón 9", - "text.autoconfig.skyblocker.option.quickNav.button10": "Botón 10", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button12": "Botón 12", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "Titulo de la Interfaz" -} diff --git a/src/main/resources/assets/skyblocker/lang/es_es.json b/src/main/resources/assets/skyblocker/lang/es_es.json new file mode 100644 index 00000000..7c5ea062 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/es_es.json @@ -0,0 +1,148 @@ +{ + "key.categories.skyblocker": "Skyblocker", + "key.hotbarSlotLock": "Bloqueo de Slot (Hotbar)", + "key.wikiLookup": "Búsqueda en la Wiki", + "text.autoconfig.skyblocker.title": "Ajustes de Skyblocker", + "text.autoconfig.skyblocker.category.general": "General", + "text.autoconfig.skyblocker.option.general.bars": "Salud, Mana, Defensa & Barra de XP", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Habilitar Barras", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Configurar Posición de Barras", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Capa 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Capa 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Derecha", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deshabilitado", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Posición de la Barra de Salud", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Posición de la Barra de Mana", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Posición de la Barra de Defensa", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Posición de la Barra de Experiencia", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Ver la previsualización de la mochila sin sostener Shift", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Habilitar Precios de NPC", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Habilitar Precios Promedio de BIN", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Tipo Promedio", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Puedes elegir cuantos días de precio promedio sera", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Precio de 1 día", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Precio de 3 días", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Ambos", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Habilitar el precio mas bajo de BIN", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Habilitar los precios de compra/venta del Bazar", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Habilitar Fecha del Museo", + "text.autoconfig.skyblocker.option.general.hitbox": "Cajas de Colisión", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Habilitar la Caja de Colisión de la 1.8 para la tierra de cultivo", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Habilitar la Caja de Colisión de la 1.8 para la palanca", + "skyblocker.itemTooltip.noData": "§cSin Información", + "text.autoconfig.skyblocker.category.richPresence": "Discord Rich Presence", + "text.autoconfig.skyblocker.option.richPresence.info": "Información de Skyblock", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "CARTERA", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "LOCALIZACIÓN", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Ciclar Información de Skyblock", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Habilitado", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "Mensaje Personalizado", + "text.autoconfig.skyblocker.category.quickNav": "Navegación Rápida", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Habilitar Navegación Rápida", + "text.autoconfig.skyblocker.option.quickNav.button1": "Botón 1", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button3": "Botón 3", + "text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4", + "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", + "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", + "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Ocultar el mensaje de Implosion", + "text.autoconfig.skyblocker.option.messages.hideCombo": "Ocultar Mensajes de Combos", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Obscurece los cofres que ya han sido abiertos.", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Habilitar Fondo", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Habilitar Navegación Rápida", + "text.autoconfig.skyblocker.option.general.quicknav": "Navegación Rápida", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Información extra de los objetos", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEl precio en la información en los objetos se actualiza cada 60 segundos. De lo contrario revisa lastest.log", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Este valor no importa si estas ciclando", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button2": "Botón 2", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.messages.hideAds": "Ocultar anuncios del Chat Publico", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Ocultar mensajes del Pad de Teletransporte", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Ocultar mensajes del Autopet", + "text.autoconfig.skyblocker.option.general.itemList": "Lista de Objetos", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Habilitar la Lista de Objetos", + "text.autoconfig.skyblocker.category.locations": "Localizaciones", + "text.autoconfig.skyblocker.option.locations.dungeons": "Mazmorras", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Ayuda con Croesus", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Habilitar Mapa", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Escala del Mapa", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Resuelve el Acertijo de \"Los Tres Chiflados\"", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Resuelve el Acertijo del Blaze", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Resuelve el Acertijo de Trivia", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Minas Dwarven", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Habilitar Combustible del Taladro", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Resolver Fetchur", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Interfaz de Dwarven", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Habilitado", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + "text.autoconfig.skyblocker.category.messages": "Mensajes", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Deshabilitado", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtro", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Mover a la barra de acción", + "text.autoconfig.skyblocker.option.messages.hideAbility": "Ocultar Mensaje de Enfriamiento (Cooldown)", + "text.autoconfig.skyblocker.option.messages.hideHeal": "Ocultar Mensajes de Curación", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "Ocultar Mensajes de la AOTE", + "text.autoconfig.skyblocker.option.messages.hideMana": "Ocultar los Mensajes del Consumo de Maná de la Barra de Acción", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "Da una mejor experiencia con FancyBar", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2¡Hay Una nueva versión disponible!", + "skyblocker.update.update_link": " §2§nHas Click Aquí§r", + "skyblocker.update.update_message_end": " §aPara conocer mas sobre las nuevas características.", + "skyblocker.update.hover_text": "Abrir Modrinth", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Notificaciones sobre actualizaciones", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2¡Se añadió tu API key automáticamente!", + "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cLa actualización del repositorio local fallo. Elimina los archivos manualmente y reinicia el juego.", + "text.autoconfig.skyblocker.option.quickNav.button11": "Botón 11", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8": "Botón 8", + "text.autoconfig.skyblocker.option.quickNav.button9": "Botón 9", + "text.autoconfig.skyblocker.option.quickNav.button10": "Botón 10", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button12": "Botón 12", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "Titulo de la Interfaz" +} diff --git a/src/main/resources/assets/skyblocker/lang/ja_JP.json b/src/main/resources/assets/skyblocker/lang/ja_JP.json deleted file mode 100644 index 954647c7..00000000 --- a/src/main/resources/assets/skyblocker/lang/ja_JP.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "key.categories.skyblocker": "Skyblocker", - "key.hotbarSlotLock": "ホットバースロットのロック", - "key.wikiLookup": "Wikiのページを開く", - "text.autoconfig.skyblocker.title": "Skyblockerの設定", - "text.autoconfig.skyblocker.category.general": "一般", - "text.autoconfig.skyblocker.option.general.bars": "体力,マナ,ディフェンス,経験値のバー", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "バーを有効にする", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "バーの位置を変える", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "体力バーの位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "マナバーの位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "ディフェンスバーの位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "経験値バーの位置", - "text.autoconfig.skyblocker.option.general.quicknav": "クイックナビ", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "クイックナビを有効にする", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shiftキーを押さずにバックパックのプレビューを見る", - "text.autoconfig.skyblocker.option.general.itemTooltip": "アイテムの詳細情報", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC売りの値段を表示する", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "binオークションの平均の値段を表示する", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "平均の取り方", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "何日間の平均の値段を表示するか選べます", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "最安価の表示を表示する", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "バザーでの売り買いの値段を表示する", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "ミュージアムに寄付したか、またその日を表示する", - "text.autoconfig.skyblocker.option.general.hitbox": "ヒットボックス", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "バージョン1.8での作物のヒットボックスを使う", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "バージョン1.8でのレバーのヒットボックスを使う", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b]§cツールチップ上のアイテムの値段は最大60秒ごとに更新されます。されていない場合はlatest.logを確認してください", - "text.autoconfig.skyblocker.category.richPresence": "discordに自分のゲームアクティビティを表示する", - "text.autoconfig.skyblocker.option.richPresence.info": "skyblockの情報", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "この値はあなたがサイクリングしている場合は重要ではありません", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "円状のskyblockの情報", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "有効", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "カスタムメッセージ", - "text.autoconfig.skyblocker.option.general.itemList": "アイテムリスト", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "アイテムリストを有効にする", - "text.autoconfig.skyblocker.category.locations": "場所", - "text.autoconfig.skyblocker.option.locations.dungeons": "ダンジョン", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "ダンジョンのマップ表示を有効にする", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "嘘つきを当てるパズルのソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "ブレイズパズルのソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "クイズのソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "F7のターミナルソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "select Coloredのソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Click in Orderのソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Starts Withのソルバー", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "ドワーフマイン", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "ドリルの燃料表示を有効にする", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchurの要求アイテムの表示", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler Puzzleのソルバー", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "ドワーフマインでのHUD", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "有効", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "バックグラウンド表示を有効にする", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", - "text.autoconfig.skyblocker.category.messages": "メッセージ", - "text.autoconfig.skyblocker.option.messages.hideAbility": "アビリティのクールダウンを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideHeal": "回復メッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTEのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosionのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Waveのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideAds": "全体チャットの宣伝を非表示にする", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "テレポートパッドのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideCombo": "Comboのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopetのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideMana": "マナの使用表示をアクションバーから非表示にする", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBarでより良くできます", - "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2新しいバージョンがあります!", - "skyblocker.update.update_link": " §2§nここをクリック§r", - "skyblocker.update.update_message_end": " §a最新の機能を体験しましょう.", - "skyblocker.update.hover_text": "Modrinthを開く", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "アップデート通知", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2あなたのAPI keyを設定しました!" -} diff --git a/src/main/resources/assets/skyblocker/lang/ja_jp.json b/src/main/resources/assets/skyblocker/lang/ja_jp.json new file mode 100644 index 00000000..954647c7 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/ja_jp.json @@ -0,0 +1,74 @@ +{ + "key.categories.skyblocker": "Skyblocker", + "key.hotbarSlotLock": "ホットバースロットのロック", + "key.wikiLookup": "Wikiのページを開く", + "text.autoconfig.skyblocker.title": "Skyblockerの設定", + "text.autoconfig.skyblocker.category.general": "一般", + "text.autoconfig.skyblocker.option.general.bars": "体力,マナ,ディフェンス,経験値のバー", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "バーを有効にする", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "バーの位置を変える", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "体力バーの位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "マナバーの位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "ディフェンスバーの位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "経験値バーの位置", + "text.autoconfig.skyblocker.option.general.quicknav": "クイックナビ", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "クイックナビを有効にする", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shiftキーを押さずにバックパックのプレビューを見る", + "text.autoconfig.skyblocker.option.general.itemTooltip": "アイテムの詳細情報", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC売りの値段を表示する", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "binオークションの平均の値段を表示する", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "平均の取り方", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "何日間の平均の値段を表示するか選べます", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "最安価の表示を表示する", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "バザーでの売り買いの値段を表示する", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "ミュージアムに寄付したか、またその日を表示する", + "text.autoconfig.skyblocker.option.general.hitbox": "ヒットボックス", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "バージョン1.8での作物のヒットボックスを使う", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "バージョン1.8でのレバーのヒットボックスを使う", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b]§cツールチップ上のアイテムの値段は最大60秒ごとに更新されます。されていない場合はlatest.logを確認してください", + "text.autoconfig.skyblocker.category.richPresence": "discordに自分のゲームアクティビティを表示する", + "text.autoconfig.skyblocker.option.richPresence.info": "skyblockの情報", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "この値はあなたがサイクリングしている場合は重要ではありません", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "円状のskyblockの情報", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "有効", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "カスタムメッセージ", + "text.autoconfig.skyblocker.option.general.itemList": "アイテムリスト", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "アイテムリストを有効にする", + "text.autoconfig.skyblocker.category.locations": "場所", + "text.autoconfig.skyblocker.option.locations.dungeons": "ダンジョン", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "ダンジョンのマップ表示を有効にする", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "嘘つきを当てるパズルのソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "ブレイズパズルのソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "クイズのソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "F7のターミナルソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "select Coloredのソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Click in Orderのソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Starts Withのソルバー", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "ドワーフマイン", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "ドリルの燃料表示を有効にする", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchurの要求アイテムの表示", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler Puzzleのソルバー", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "ドワーフマインでのHUD", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "有効", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "バックグラウンド表示を有効にする", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + "text.autoconfig.skyblocker.category.messages": "メッセージ", + "text.autoconfig.skyblocker.option.messages.hideAbility": "アビリティのクールダウンを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideHeal": "回復メッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTEのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosionのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Waveのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideAds": "全体チャットの宣伝を非表示にする", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "テレポートパッドのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideCombo": "Comboのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopetのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideMana": "マナの使用表示をアクションバーから非表示にする", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBarでより良くできます", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2新しいバージョンがあります!", + "skyblocker.update.update_link": " §2§nここをクリック§r", + "skyblocker.update.update_message_end": " §a最新の機能を体験しましょう.", + "skyblocker.update.hover_text": "Modrinthを開く", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "アップデート通知", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2あなたのAPI keyを設定しました!" +} diff --git a/src/main/resources/assets/skyblocker/lang/ko_KR.json b/src/main/resources/assets/skyblocker/lang/ko_KR.json deleted file mode 100644 index 93930cc1..00000000 --- a/src/main/resources/assets/skyblocker/lang/ko_KR.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "key.categories.skyblocker": "Skyblocker", - "key.hotbarSlotLock": "슬롯 고정 (핫바)", - "key.wikiLookup": "위키에서 찾기", - "text.autoconfig.skyblocker.title": "Skyblocker 설정", - "text.autoconfig.skyblocker.category.general": "일반", - "text.autoconfig.skyblocker.option.general.bars": "체력, 마나, 방어력 및 경험치 바", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "바 활성화", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "바 위치 조정", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "레이어 1", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "레이어 2", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "우측", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "비활성화", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "체력바 위치", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "마나바 위치", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "방어력바 위치", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "경험치바 위치", - "text.autoconfig.skyblocker.option.general.quicknav": "즐겨찾기", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "즐겨찾기 활성화", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shift 를 누르지 않고 백팩 미리보기", - "text.autoconfig.skyblocker.option.general.itemTooltip": "아이템 툴팁", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC 가격 활성화", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "평균 BIN 가격 활성화", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "평균 종류", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "얼마나 많은 일수의 평균가를 표시할지 선택합니다", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1일 평균가", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3일 평균가", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "둘 다", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "최저 BIN 가격 활성화", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Bazaar 매매 가격 활성화", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Museum 과 날짜 활성화", - "text.autoconfig.skyblocker.option.general.hitbox": "히트박스", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "1.8 농지 히트박스 활성화", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "1.8 레버 히트박스 활성화", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §c아이템 가격 툴팁이 최대 60초 이내에 갱신됩니다. 갱신되지 않을 시 latest.log 를 확인하세요.", - "skyblocker.itemTooltip.noData": "§c데이터 없음", - "text.autoconfig.skyblocker.category.richPresence": "디스코드 Rich Presence", - "text.autoconfig.skyblocker.option.richPresence.info": "스카이블록 정보", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "PURSE", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "위치", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "이 값은 순환중일 시 중요하지 않습니다", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "스카이블록 정보 순환", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "활성화됨", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "사용자 지정 메시지", - "text.autoconfig.skyblocker.category.quickNav": "즐겨찾기", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "즐겨찾기 활성화", - "text.autoconfig.skyblocker.option.quickNav.button1": "버튼 1", - "text.autoconfig.skyblocker.option.quickNav.button1.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button2": "버튼 2", - "text.autoconfig.skyblocker.option.quickNav.button2.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button3": "버튼 3", - "text.autoconfig.skyblocker.option.quickNav.button3.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button4": "버튼 4", - "text.autoconfig.skyblocker.option.quickNav.button4.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button5": "버튼 5", - "text.autoconfig.skyblocker.option.quickNav.button5.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button6": "버튼 6", - "text.autoconfig.skyblocker.option.quickNav.button6.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button7": "버튼 7", - "text.autoconfig.skyblocker.option.quickNav.button7.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button8": "버튼 8", - "text.autoconfig.skyblocker.option.quickNav.button8.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button9": "버튼 9", - "text.autoconfig.skyblocker.option.quickNav.button9.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button10": "버튼 10", - "text.autoconfig.skyblocker.option.quickNav.button10.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button11": "버튼 11", - "text.autoconfig.skyblocker.option.quickNav.button11.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "클릑 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button12": "버튼 12", - "text.autoconfig.skyblocker.option.quickNav.button12.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.general.itemList": "아이템 목록", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "아이템 목록 활성화", - "text.autoconfig.skyblocker.category.locations": "위치", - "text.autoconfig.skyblocker.option.locations.dungeons": "던전", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "크로이소스 도우미", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "이미 열린 상자는 회색으로 표시됩니다.", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "지도 활성화", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "지도 크기", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Three Weirdos 퍼즐 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "블레이즈 퍼즐 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Trivia 퍼즐 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "터미널 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "색상 선택 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "클릭 순서대로 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "해결 시작", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dwarven Mines", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "드릴 연료 활성화", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchur 해결", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler 퍼즐 해결", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "활성화됨", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "배경 활성화", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", - "text.autoconfig.skyblocker.category.messages": "메시지", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "비활성화됨", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "필터", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "액션바로 이동", - "text.autoconfig.skyblocker.option.messages.hideAbility": "어빌리티 쿨다운 가리기", - "text.autoconfig.skyblocker.option.messages.hideHeal": "체력 회복 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTE 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosion 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Wave 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideAds": "전체 채팅에서 광고 가리기", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Teleport Pad 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideCombo": "콤보 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopet 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideMana": "액션바에서 마나 사용 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBar 로 더 나은 기능을 사용합니다", - "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2새로운 버전이 사용 가능합니다!", - "skyblocker.update.update_link": " §2§n여기§r", - "skyblocker.update.update_message_end": " §a를 클릭하여 최신 기능에 대해 알아보세요.", - "skyblocker.update.hover_text": "Modrinth 열기", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "업데이트 알림", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2자동으로 API 키를 설정했습니다!" -} diff --git a/src/main/resources/assets/skyblocker/lang/ko_kr.json b/src/main/resources/assets/skyblocker/lang/ko_kr.json new file mode 100644 index 00000000..93930cc1 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/ko_kr.json @@ -0,0 +1,189 @@ +{ + "key.categories.skyblocker": "Skyblocker", + "key.hotbarSlotLock": "슬롯 고정 (핫바)", + "key.wikiLookup": "위키에서 찾기", + "text.autoconfig.skyblocker.title": "Skyblocker 설정", + "text.autoconfig.skyblocker.category.general": "일반", + "text.autoconfig.skyblocker.option.general.bars": "체력, 마나, 방어력 및 경험치 바", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "바 활성화", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "바 위치 조정", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "레이어 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "레이어 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "우측", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "비활성화", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "체력바 위치", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "마나바 위치", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "방어력바 위치", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "경험치바 위치", + "text.autoconfig.skyblocker.option.general.quicknav": "즐겨찾기", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "즐겨찾기 활성화", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shift 를 누르지 않고 백팩 미리보기", + "text.autoconfig.skyblocker.option.general.itemTooltip": "아이템 툴팁", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC 가격 활성화", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "평균 BIN 가격 활성화", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "평균 종류", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "얼마나 많은 일수의 평균가를 표시할지 선택합니다", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1일 평균가", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3일 평균가", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "둘 다", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "최저 BIN 가격 활성화", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Bazaar 매매 가격 활성화", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Museum 과 날짜 활성화", + "text.autoconfig.skyblocker.option.general.hitbox": "히트박스", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "1.8 농지 히트박스 활성화", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "1.8 레버 히트박스 활성화", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §c아이템 가격 툴팁이 최대 60초 이내에 갱신됩니다. 갱신되지 않을 시 latest.log 를 확인하세요.", + "skyblocker.itemTooltip.noData": "§c데이터 없음", + "text.autoconfig.skyblocker.category.richPresence": "디스코드 Rich Presence", + "text.autoconfig.skyblocker.option.richPresence.info": "스카이블록 정보", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "PURSE", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "위치", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "이 값은 순환중일 시 중요하지 않습니다", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "스카이블록 정보 순환", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "활성화됨", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "사용자 지정 메시지", + "text.autoconfig.skyblocker.category.quickNav": "즐겨찾기", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "즐겨찾기 활성화", + "text.autoconfig.skyblocker.option.quickNav.button1": "버튼 1", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button2": "버튼 2", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button3": "버튼 3", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button4": "버튼 4", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button5": "버튼 5", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button6": "버튼 6", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button7": "버튼 7", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button8": "버튼 8", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button9": "버튼 9", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button10": "버튼 10", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button11": "버튼 11", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "클릑 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button12": "버튼 12", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.general.itemList": "아이템 목록", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "아이템 목록 활성화", + "text.autoconfig.skyblocker.category.locations": "위치", + "text.autoconfig.skyblocker.option.locations.dungeons": "던전", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "크로이소스 도우미", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "이미 열린 상자는 회색으로 표시됩니다.", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "지도 활성화", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "지도 크기", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Three Weirdos 퍼즐 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "블레이즈 퍼즐 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Trivia 퍼즐 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "터미널 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "색상 선택 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "클릭 순서대로 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "해결 시작", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dwarven Mines", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "드릴 연료 활성화", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchur 해결", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler 퍼즐 해결", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "활성화됨", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "배경 활성화", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + "text.autoconfig.skyblocker.category.messages": "메시지", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "비활성화됨", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "필터", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "액션바로 이동", + "text.autoconfig.skyblocker.option.messages.hideAbility": "어빌리티 쿨다운 가리기", + "text.autoconfig.skyblocker.option.messages.hideHeal": "체력 회복 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTE 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosion 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Wave 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideAds": "전체 채팅에서 광고 가리기", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Teleport Pad 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideCombo": "콤보 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopet 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideMana": "액션바에서 마나 사용 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBar 로 더 나은 기능을 사용합니다", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2새로운 버전이 사용 가능합니다!", + "skyblocker.update.update_link": " §2§n여기§r", + "skyblocker.update.update_message_end": " §a를 클릭하여 최신 기능에 대해 알아보세요.", + "skyblocker.update.hover_text": "Modrinth 열기", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "업데이트 알림", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2자동으로 API 키를 설정했습니다!" +} diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json deleted file mode 100644 index 0f96ebb6..00000000 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "key.wikiLookup": "Wiki-oppslag", - "text.autoconfig.skyblocker.title": "Skyblocker-innstillinger", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "Aktiver barer", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "Konfigurer barposisjoner", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Lag 1", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Lag 2", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Høyre", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deaktivert", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Helsebar posisjon", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Posisjon", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Forsvarsbar posisjon", - "text.autoconfig.skyblocker.option.general.quicknav": "Hurtignavigasjon", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Aktiver hurtignavigasjon", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Vis forhåndsvisning av ryggsekk uten å holde Shift nede", - "text.autoconfig.skyblocker.option.general.itemTooltip": "Verktøytips for Gjenstad", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Aktiver NPC-pris", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Aktiver Avg. BIN Pris", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Gjennomsnittlig type", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Pris for 1 dag", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Pris for 3 dager", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Begge", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Aktiver laveste BIN-pris", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Aktiver Bazaar kjøp/salg Pris", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Aktiver museum og dato", - "text.autoconfig.skyblocker.option.general.hitbox": "Treffbokser", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Aktiver 1.8 treffboks for avlinger", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Aktiver 1.8 spak Treffboks", - "skyblocker.itemTooltip.noData": "§cIngen data", - "text.autoconfig.skyblocker.category.richPresence": "Discord-rik tilstedeværelse", - "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock-informasjon", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "VESKE", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "PLASSERING", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Denne verdien har ikke noe å si hvis du cycling", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Cycle Skyblock Informasjon", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Aktivert", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "Egendefinert melding", - "text.autoconfig.skyblocker.category.quickNav": "Rask navigering", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Aktiver hurtignavigering", - "text.autoconfig.skyblocker.option.quickNav.button1.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "Gjenstand Teller", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button2": "Knapp 2", - "text.autoconfig.skyblocker.option.quickNav.button2.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "Gjenstand Teller", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button3": "Knapp 3", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "Gjenstand Teller", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button4": "Knapp 4", - "text.autoconfig.skyblocker.option.quickNav.button4.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "Gjenstand Teller", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button5": "Knapp 5", - "text.autoconfig.skyblocker.option.quickNav.button5.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "Gjenstand Teller", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", - "key.categories.skyblocker": "SkyBlocker", - "key.hotbarSlotLock": "Slot lås (Hotbar)", - "text.autoconfig.skyblocker.category.general": "Generelt", - "text.autoconfig.skyblocker.option.general.bars": "Helse, mana, forsvar og XP-barer", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar stilling", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Du kan velge hvor mange dager med gjennomsnittspris som skal være", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cVareprisinformasjon på verktøytips fornyes om maks 60 sekunder. Hvis ikke, sjekk latest.log", - "text.autoconfig.skyblocker.option.quickNav.button1": "Knapp 1", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button3.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "Gjenstand", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Aktiver gjenstad liste", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Løs Blaze-puslespillet", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button6": "Knapp 6", - "text.autoconfig.skyblocker.option.quickNav.button6.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "Gjenstand mengde", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button7": "Knapp 7", - "text.autoconfig.skyblocker.option.quickNav.button7.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button8": "Knapp 8", - "text.autoconfig.skyblocker.option.quickNav.button8.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button9": "Knapp 8", - "text.autoconfig.skyblocker.option.quickNav.button9.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button10": "Knapp 1", - "text.autoconfig.skyblocker.option.quickNav.button10.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "Gjenstand Mengde", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button11": "Knapp 1", - "text.autoconfig.skyblocker.option.quickNav.button11.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "Gjenstand Mengde", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button12": "Knapp 1", - "text.autoconfig.skyblocker.option.quickNav.button12.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "Gjenstand Mengde", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.general.itemList": "Gjenstand liste", - "text.autoconfig.skyblocker.option.locations.dungeons": "Dungeons", - "text.autoconfig.skyblocker.category.locations": "Lokasjoner", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus Hjelper", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Grå ut kister som allerede er åpnet.", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Aktiver kart", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Kart skalering", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Løs Three Weirdos-puslespillet", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve the Blaze puzzle", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminalløser", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Løsning Velg farget", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Løs klikk i rekkefølge", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Løsning starter med", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dverggruver", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Aktiver Drill Fuel", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Løse Fetchur", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Løs Puzzler Puzzle", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dverg-HUD" -} diff --git a/src/main/resources/assets/skyblocker/lang/nb_no.json b/src/main/resources/assets/skyblocker/lang/nb_no.json new file mode 100644 index 00000000..0f96ebb6 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/nb_no.json @@ -0,0 +1,164 @@ +{ + "key.wikiLookup": "Wiki-oppslag", + "text.autoconfig.skyblocker.title": "Skyblocker-innstillinger", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Aktiver barer", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Konfigurer barposisjoner", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Lag 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Lag 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Høyre", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deaktivert", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Helsebar posisjon", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Posisjon", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Forsvarsbar posisjon", + "text.autoconfig.skyblocker.option.general.quicknav": "Hurtignavigasjon", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Aktiver hurtignavigasjon", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Vis forhåndsvisning av ryggsekk uten å holde Shift nede", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Verktøytips for Gjenstad", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Aktiver NPC-pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Aktiver Avg. BIN Pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Gjennomsnittlig type", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Pris for 1 dag", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Pris for 3 dager", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Begge", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Aktiver laveste BIN-pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Aktiver Bazaar kjøp/salg Pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Aktiver museum og dato", + "text.autoconfig.skyblocker.option.general.hitbox": "Treffbokser", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Aktiver 1.8 treffboks for avlinger", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Aktiver 1.8 spak Treffboks", + "skyblocker.itemTooltip.noData": "§cIngen data", + "text.autoconfig.skyblocker.category.richPresence": "Discord-rik tilstedeværelse", + "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock-informasjon", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "VESKE", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "PLASSERING", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Denne verdien har ikke noe å si hvis du cycling", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Cycle Skyblock Informasjon", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Aktivert", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "Egendefinert melding", + "text.autoconfig.skyblocker.category.quickNav": "Rask navigering", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Aktiver hurtignavigering", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button2": "Knapp 2", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button3": "Knapp 3", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button4": "Knapp 4", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button5": "Knapp 5", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", + "key.categories.skyblocker": "SkyBlocker", + "key.hotbarSlotLock": "Slot lås (Hotbar)", + "text.autoconfig.skyblocker.category.general": "Generelt", + "text.autoconfig.skyblocker.option.general.bars": "Helse, mana, forsvar og XP-barer", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar stilling", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Du kan velge hvor mange dager med gjennomsnittspris som skal være", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cVareprisinformasjon på verktøytips fornyes om maks 60 sekunder. Hvis ikke, sjekk latest.log", + "text.autoconfig.skyblocker.option.quickNav.button1": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "Gjenstand", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Aktiver gjenstad liste", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Løs Blaze-puslespillet", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button6": "Knapp 6", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "Gjenstand mengde", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button7": "Knapp 7", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button8": "Knapp 8", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button9": "Knapp 8", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button10": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "Gjenstand Mengde", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button11": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "Gjenstand Mengde", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button12": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "Gjenstand Mengde", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.general.itemList": "Gjenstand liste", + "text.autoconfig.skyblocker.option.locations.dungeons": "Dungeons", + "text.autoconfig.skyblocker.category.locations": "Lokasjoner", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus Hjelper", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Grå ut kister som allerede er åpnet.", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Aktiver kart", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Kart skalering", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Løs Three Weirdos-puslespillet", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve the Blaze puzzle", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminalløser", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Løsning Velg farget", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Løs klikk i rekkefølge", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Løsning starter med", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dverggruver", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Aktiver Drill Fuel", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Løse Fetchur", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Løs Puzzler Puzzle", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dverg-HUD" +} diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json deleted file mode 100644 index cd7ed912..00000000 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "key.hotbarSlotLock": "Slotslås (Hotbar)", - "key.wikiLookup": "Wiki Opslag", - "text.autoconfig.skyblocker.title": "Skyblocker Innstillinger", - "text.autoconfig.skyblocker.category.general": "Generelt", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Lag 1", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Lag 2", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Høgre", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deaktivert", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Helsebar posisjon", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar-posisjon", - "key.categories.skyblocker": "SkyBlocker", - "text.autoconfig.skyblocker.option.general.bars": "Liv, mana, forsvar og XP-bar", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "Aktiver bar", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "Konfigurer barposisjoner" -} diff --git a/src/main/resources/assets/skyblocker/lang/nn_no.json b/src/main/resources/assets/skyblocker/lang/nn_no.json new file mode 100644 index 00000000..cd7ed912 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/nn_no.json @@ -0,0 +1,16 @@ +{ + "key.hotbarSlotLock": "Slotslås (Hotbar)", + "key.wikiLookup": "Wiki Opslag", + "text.autoconfig.skyblocker.title": "Skyblocker Innstillinger", + "text.autoconfig.skyblocker.category.general": "Generelt", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Lag 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Lag 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Høgre", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deaktivert", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Helsebar posisjon", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar-posisjon", + "key.categories.skyblocker": "SkyBlocker", + "text.autoconfig.skyblocker.option.general.bars": "Liv, mana, forsvar og XP-bar", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Aktiver bar", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Konfigurer barposisjoner" +} diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json deleted file mode 100644 index 1b07aff8..00000000 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shift'e basmadan sırt çantası ön izlemesini görüntüleyin", - "text.autoconfig.skyblocker.option.general.itemTooltip": "Eşya Açıklamaları", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC fiyatını göster", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Ort. BIN fiyatını göster", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Ortalama Türü", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1 günlük", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3 günlük", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "İkisi de", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Pazar alış/satış fiyatını göster", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Müze ve tarih bilgisini göster", - "text.autoconfig.skyblocker.option.general.hitbox": "Hitbox'lar", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEşya açıklamasındaki ürün fiyat bilgisi en fazla 60 saniye içinde yenilenecektir. Aksi takdirde latest.log dosyasını kontrol edin", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "1.8 tarım hitboxlarını etkinleştir", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "1.8 şalter hitboxunu etkinleştir", - "skyblocker.itemTooltip.noData": "§cVeri yok", - "text.autoconfig.skyblocker.category.richPresence": "Discord Özel Durumu", - "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock bilgisi", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "Cüzdan", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "Bit", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "Konum", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Eğer döngüyü açtıysanız bu değer geçersiz kalır", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Skyblock bilgilerini döngüye al", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "Özel mesaj", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchur'un mesajını çöz", - "skyblocker.fishing.reelNow": "Şimdi sarıl!", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Devre dışı", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtrele", - "text.autoconfig.skyblocker.option.messages.hideAbility": "Yetenek bekleme süresini filtrele", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Aksiyon barına taşı", - "text.autoconfig.skyblocker.option.messages.hideHeal": "İyileştirme mesajlarını filtrele", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTE mesajlarını filtrele", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Wave mesajını filtrele", - "text.autoconfig.skyblocker.option.messages.hideAds": "Genel sohbetteki reklamları filtrele", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Teleport Pad mesajlarını filtrele", - "text.autoconfig.skyblocker.option.messages.hideCombo": "Kombo mesajlarını filtrele", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopet mesajlarını filtrele", - "text.autoconfig.skyblocker.option.messages.hideMana": "Aksiyon barındaki mana tüketimlerini gizle", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBar ile daha iyi bir deneyim sunar", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Güncelleme Bildirimleri", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2API anahtarınız otomatik olarak kaydedildi!", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "Menülerdeki boş eşya açıklamalarını gizle", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Arka planı göster", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Etkinleştir", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Kaç günlük ortalamanın gösterileceğini seçebilirsiniz", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "En düşük BIN fiyatını göster", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Aktif", - "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2Yeni bir sürüm mevcut!", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler'ın bulmacasını çöz", - "key.hotbarSlotLock": "Slot Kilidi (Araç Çubuğu)", - "key.wikiLookup": "Wiki Araması", - "text.autoconfig.skyblocker.title": "Skyblocker Ayarları", - "text.autoconfig.skyblocker.category.general": "Genel", - "text.autoconfig.skyblocker.option.general.bars": "Can, Mana, Defans ve XP Barları", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "Barları Etkinleştir", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "Bar Konumları", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Devre dışı", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Can barı konumu", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana barı konumu", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defans barı konumu", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Tecrübe barı konumu", - "key.categories.skyblocker": "Skyblocker", - "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cYerel depo güncellenemedi. Dosyaları manuel olarak silip oyunu tekrar başlatın.", - "text.autoconfig.skyblocker.option.general.fishing": "Balık Tutma Yardımcısı", - "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Balık tutma yardımcısını aktifleştir", - "text.autoconfig.skyblocker.category.messages": "Mesajlar", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosion mesajını filtrele" -} diff --git a/src/main/resources/assets/skyblocker/lang/tr_tr.json b/src/main/resources/assets/skyblocker/lang/tr_tr.json new file mode 100644 index 00000000..1b07aff8 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/tr_tr.json @@ -0,0 +1,71 @@ +{ + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shift'e basmadan sırt çantası ön izlemesini görüntüleyin", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Eşya Açıklamaları", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC fiyatını göster", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Ort. BIN fiyatını göster", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Ortalama Türü", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1 günlük", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3 günlük", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "İkisi de", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Pazar alış/satış fiyatını göster", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Müze ve tarih bilgisini göster", + "text.autoconfig.skyblocker.option.general.hitbox": "Hitbox'lar", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEşya açıklamasındaki ürün fiyat bilgisi en fazla 60 saniye içinde yenilenecektir. Aksi takdirde latest.log dosyasını kontrol edin", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "1.8 tarım hitboxlarını etkinleştir", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "1.8 şalter hitboxunu etkinleştir", + "skyblocker.itemTooltip.noData": "§cVeri yok", + "text.autoconfig.skyblocker.category.richPresence": "Discord Özel Durumu", + "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock bilgisi", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "Cüzdan", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "Bit", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "Konum", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Eğer döngüyü açtıysanız bu değer geçersiz kalır", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Skyblock bilgilerini döngüye al", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "Özel mesaj", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchur'un mesajını çöz", + "skyblocker.fishing.reelNow": "Şimdi sarıl!", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Devre dışı", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtrele", + "text.autoconfig.skyblocker.option.messages.hideAbility": "Yetenek bekleme süresini filtrele", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Aksiyon barına taşı", + "text.autoconfig.skyblocker.option.messages.hideHeal": "İyileştirme mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTE mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Wave mesajını filtrele", + "text.autoconfig.skyblocker.option.messages.hideAds": "Genel sohbetteki reklamları filtrele", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Teleport Pad mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideCombo": "Kombo mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopet mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideMana": "Aksiyon barındaki mana tüketimlerini gizle", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBar ile daha iyi bir deneyim sunar", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Güncelleme Bildirimleri", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2API anahtarınız otomatik olarak kaydedildi!", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "Menülerdeki boş eşya açıklamalarını gizle", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Arka planı göster", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Etkinleştir", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Kaç günlük ortalamanın gösterileceğini seçebilirsiniz", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "En düşük BIN fiyatını göster", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Aktif", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2Yeni bir sürüm mevcut!", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler'ın bulmacasını çöz", + "key.hotbarSlotLock": "Slot Kilidi (Araç Çubuğu)", + "key.wikiLookup": "Wiki Araması", + "text.autoconfig.skyblocker.title": "Skyblocker Ayarları", + "text.autoconfig.skyblocker.category.general": "Genel", + "text.autoconfig.skyblocker.option.general.bars": "Can, Mana, Defans ve XP Barları", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Barları Etkinleştir", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Bar Konumları", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Devre dışı", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Can barı konumu", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana barı konumu", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defans barı konumu", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Tecrübe barı konumu", + "key.categories.skyblocker": "Skyblocker", + "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cYerel depo güncellenemedi. Dosyaları manuel olarak silip oyunu tekrar başlatın.", + "text.autoconfig.skyblocker.option.general.fishing": "Balık Tutma Yardımcısı", + "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Balık tutma yardımcısını aktifleştir", + "text.autoconfig.skyblocker.category.messages": "Mesajlar", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosion mesajını filtrele" +} -- cgit From 5d7e3a16f76682473ff483d8cdf23e441702cc31 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 10 Jun 2023 01:42:22 +0200 Subject: add new contributor to readme and mod desc. --- FEATURES.md | 16 +++++++++------ README.md | 42 +++++++++++++++++++++++++++++--------- src/main/resources/fabric.mod.json | 2 +- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/FEATURES.md b/FEATURES.md index 1cd95a1e..2224465e 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -2,14 +2,15 @@ * Hide Messages: Ability Cooldown, Heal, AOTE, Implosion, Molten Wave, Teleport Pad Messages * Dungeon Minimap * Dungeon Puzzle Solver: - * Three Weirdos - * Blaze - * Croesus - * F7 Terminal: Order, Color, Name + * Three Weirdos + * Blaze + * Croesus + * F7 Terminal: Order, Color, Name * Dwarven Mines Solver: Fetchur, Puzzler +* Barn Solver: Treasurehunter, Hungry Hiker * Drill Fuel in Item Durability Bar * Hotbar Slot Lock Keybind (Select the hotbar slot you want to lock/unlock and press the lockbutton) -* price tooltip: npc, bazaar (avg, lbin), ah, museum +* Price tooltip: npc, bazaar (avg, lbin), ah, museum * reparty: write /rp to reparty * Wiki Lookup: press f4 to open the wiki page about the held item * Discord Rich Presence: Allows user to show either their Piggy, Bits, or location. Along with a custom message @@ -20,4 +21,7 @@ hold shift to preview * Update notification * Commission HUD: Dwarven Mines quests -* 1.8 hitbox for lever and farmland \ No newline at end of file +* 1.8 hitbox for lever and farmland +* Custom Tab HUD +* Roughly enough items (REI) Support +* Fishing Helper \ No newline at end of file diff --git a/README.md b/README.md index 59e8a7fa..88720029 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,10 @@ Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/in * Croesus * F7 Terminal: Order, Color, Name * Dwarven Mines Solver: Fetchur, Puzzler +* Barn Solver: Treasurehunter, Hungry Hiker * Drill Fuel in Item Durability Bar * Hotbar Slot Lock Keybind (Select the hotbar slot you want to lock/unlock and press the lockbutton) -* price tooltip: npc, bazaar (avg, lbin), ah, museum +* Price tooltip: npc, bazaar (avg, lbin), ah, museum * reparty: write /rp to reparty * Wiki Lookup: press f4 to open the wiki page about the held item * Discord Rich Presence: Allows user to show either their Piggy, Bits, or location. Along with a custom message @@ -40,11 +41,22 @@ Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/in * Update notification * Commission HUD: Dwarven Mines quests * 1.8 hitbox for lever and farmland +* Custom Tab HUD +* Roughly enough items (REI) Support +* Fishing Helper ___ +## Commands +| command | option | comment | +|:----------------------------:|:--------------------:|:--------------------------------------| +| /skyblocker config | | open config menu (modMenu not needed) | +| /skyblocker options | | open config menu (modMenu not needed) | +| /skyblocker hud | dwarven / dungeonmap | move dwarven or dungeonmap | + +--- ## Images
@@ -81,18 +93,28 @@ information. | [Zailer43](https://github.com/Zailer43) | [TacoMonkey11](https://github.com/TacoMonkey11) | [KonaeAkira](https://github.com/KonaeAkira) | [Fix3dll](https://github.com/Fix3dll) | | [ADON15c](https://github.com/ADON15c) | [TheColdPot](https://github.com/TheColdPot) | [Julienraptor01](https://github.com/Julienraptor01) | [MiraculixxT](https://github.com/MiraculixxT) | -|:--------------------------------------------------------------------------------------------------:|-------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------| -| [ADON15c](https://github.com/ADON15c) | [TheColdPot](https://github.com/TheColdPot) | [Julienraptor01](https://github.com/Julienraptor01) | [ADON15c](https://github.com/MiraculixxT) | +|:--------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------:| +| [ADON15c](https://github.com/ADON15c) | [TheColdPot](https://github.com/TheColdPot) | [Julienraptor01](https://github.com/Julienraptor01) | [MiraculixxT](https://github.com/MiraculixxT) | + +| [catandA](https://github.com/catandA) | [kevinthegreat1](https://github.com/kevinthegreat1) | [AzureAaron](https://github.com/AzureAaron) | [msg-programs](https://github.com/msg-programs) | +|:--------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------------:| +| [catandA](https://github.com/catandA) | [kevinthegreat1](https://github.com/kevinthegreat1) | [AzureAaron](https://github.com/AzureAaron) | [msg-programs](https://github.com/msg-programs) | -| [catandA](https://github.com/catandA) | [kevinthegreat1](https://github.com/kevinthegreat1) | [AzureAaron](https://github.com/AzureAaron) | -|:--------------------------------------------------------------------------------------------------:|-------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------| -| [catandA](https://github.com/catandA) | [kevinthegreat1](https://github.com/kevinthegreat1) | [AzureAaron](https://github.com/AzureAaron) | +| [lantice3720](https://github.com/lantice3720) | +|:-----------------------------------------------------------------------------------------------------| +| [lantice3720](https://github.com/lantice3720) | ### Translators -German ([LifeIsAParadox](https://github.com/LifeIsAParadox)) \ +German ([LifeIsAParadox](https://github.com/LifeIsAParadox) & [msg-programs](https://github.com/msg-programs)) \ Indonesian ([null2264](https://github.com/null2264)) \ -Russian ([HyperSoop](https://github.com/HyperSoop)) \ +Russian ([HyperSoop](https://github.com/HyperSoop) & [Azuremane](https://github.com/Azuremane)) \ French ([edgarogh](https://github.com/edgarogh) & [Julienraptor01](https://github.com/Julienraptor01)) \ -Japanese ([hirochisan](https://github.com/@irochisan)) \ -Chinese ([catandA](https://github.com/catandA)) +Japanese ([hirochisan](https://github.com/hirochisan)) \ +Chinese ([catandA](https://github.com/catandA)) \ +Korean ([lantice3720](https://github.com/lantice3720)) \ +Spanish ([IngeSebastian](https://github.com/IngeSebastian)) \ +Norwegian Bokmål ([KdGaming0](https://github.com/KdGaming0)) \ +Norwegian Nynorsk ([KdGaming0](https://github.com/KdGaming0)) \ +Turkish ([Fix3dll](https://github.com/Fix3dll)) \ +Chinese (Simplified) ([catandA](https://github.com/catandA) & [PumpkinXD](https://github.com/PumpkinXD)) \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 2044b170..14c1e6f1 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -5,7 +5,7 @@ "name": "Skyblocker", "description": "Hypixel Skyblock Mod", "authors": ["xMrVizzy", "d3dx9", "LifeIsAParadox"], - "contributors": ["ExternalTime", "Zailer43", "TacoMonkey", "KonaeAkira", "Fix3dll", "null2264", "HyperSoop", "edgarogh", "TheColdPot", "Julienraptor01", "ADON15c", "catandA", "kevinthegreat1", "AzureAaron"], + "contributors": ["ExternalTime", "Zailer43", "TacoMonkey", "KonaeAkira", "Fix3dll", "null2264", "HyperSoop", "edgarogh", "TheColdPot", "Julienraptor01", "ADON15c", "catandA", "kevinthegreat1", "AzureAaron", "msg-programs", "lantice3720"], "contact": { "homepage": "https://hysky.de", "sources": "https://github.com/SkyblockerMod/Skyblocker", -- cgit From 41b5476c46eeaa38ac7b8962750074dececad62f Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 10 Jun 2023 01:42:46 +0200 Subject: Update mod version to 1.10.0 --- CHANGELOG.md | 43 +++++++++++++++++++++++++++++++++++++++++++ gradle.properties | 2 +- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8aa8c4df..7090ac5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,46 @@ +# Release 1.10.0 + +## Highlight +* Custom Tab HUD by @msg-programs in https://github.com/SkyblockerMod/Skyblocker/pull/137 +* Fishing Helper by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/157 +* REI Compatibility by @lantice3720 in https://github.com/SkyblockerMod/Skyblocker/pull/148 +* Barn solvers by @Julienraptor01 in https://github.com/SkyblockerMod/Skyblocker/pull/134 + +## What's Changed +* Translations update from hysky translate by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/142 +* Barn solvers by @Julienraptor01 in https://github.com/SkyblockerMod/Skyblocker/pull/134 +* Dungeon map scale adjustment customization by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/127 +* Add option to hide empty tooltips in inventories. by @msg-programs in https://github.com/SkyblockerMod/Skyblocker/pull/135 +* Translations update from hysky translate by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/144 +* There is now 240 fairy souls! by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/138 +* Translations update from hysky translate [skip ci] by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/149 +* minor updates by @Fix3dll in https://github.com/SkyblockerMod/Skyblocker/pull/122 +* Migrated to ClientReceiveMessageEvents and some fixes by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/131 +* Renamed container package to gui and added docs by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/145 +* Translations update from hysky translate [skip ci] by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/153 +* REI Compatibility by @lantice3720 in https://github.com/SkyblockerMod/Skyblocker/pull/148 +* Api migration, config command, and cleanup by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/154 +* Translations update from hysky translate [skip ci] by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/155 +* Refactors & docs by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/156 +* return instead of assign by @Fix3dll in https://github.com/SkyblockerMod/Skyblocker/pull/158 +* Translations update from hysky translate [skip ci] by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/159 +* Add Fishing Helper by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/157 +* Update Loom and Gradle by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/163 +* Livid color by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/162 +* fix repository update by @Fix3dll in https://github.com/SkyblockerMod/Skyblocker/pull/165 +* remove backup LBIN server because it desn't exist anymore by @Julienraptor01 in https://github.com/SkyblockerMod/Skyblocker/pull/168 +* fixing missing strings by @PumpkinXD in https://github.com/SkyblockerMod/Skyblocker/pull/170 +* Translations update from hysky translate [skip ci] by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/166 +* Replace tab/playerlist HUD with a more fancy version by @msg-programs in https://github.com/SkyblockerMod/Skyblocker/pull/137 +* Add Dungeon Map Placement Screen by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/169 + +## New Contributors +* @msg-programs made their first contribution in https://github.com/SkyblockerMod/Skyblocker/pull/135 +* @lantice3720 made their first contribution in https://github.com/SkyblockerMod/Skyblocker/pull/148 +* @PumpkinXD made their first contribution in https://github.com/SkyblockerMod/Skyblocker/pull/170 + +**Full Changelog**: https://github.com/SkyblockerMod/Skyblocker/compare/v1.9.0...v1.10.0 +___ # Release 1.9.0 Supports 1.19.4 diff --git a/gradle.properties b/gradle.properties index 752907cf..64c5e5cd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ mod_menu_version=6.1.0-rc.4 rei_version=11.0.597 # Mod Properties -mod_version = 1.9.0 +mod_version = 1.10.0 maven_group = me.xmrvizzy archives_base_name = skyblocker modrinth_id=y6DuFGwJ \ No newline at end of file -- cgit From 8c78333ac1fe7d45fd16579def65bc055b621a7c Mon Sep 17 00:00:00 2001 From: Wohlhabend Date: Sat, 10 Jun 2023 11:28:45 +0200 Subject: update features.md --- FEATURES.md | 7 +++++-- README.md | 13 ++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/FEATURES.md b/FEATURES.md index 2224465e..3db3c2a5 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -5,9 +5,12 @@ * Three Weirdos * Blaze * Croesus - * F7 Terminal: Order, Color, Name + * Terminal: + * Order + * Coloured Items + * Item Name * Dwarven Mines Solver: Fetchur, Puzzler -* Barn Solver: Treasurehunter, Hungry Hiker +* Barn Solver: Treasure Hunter, Hungry Hiker * Drill Fuel in Item Durability Bar * Hotbar Slot Lock Keybind (Select the hotbar slot you want to lock/unlock and press the lockbutton) * Price tooltip: npc, bazaar (avg, lbin), ah, museum diff --git a/README.md b/README.md index 88720029..9b53abd4 100644 --- a/README.md +++ b/README.md @@ -21,12 +21,15 @@ Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/in * Hide Messages: Ability Cooldown, Heal, AOTE, Implosion, Molten Wave, Teleport Pad Messages * Dungeon Minimap * Dungeon Puzzle Solver: - * Three Weirdos - * Blaze - * Croesus - * F7 Terminal: Order, Color, Name + * Three Weirdos + * Blaze + * Croesus + * Terminal: + * Order + * Coloured Items + * Item Name * Dwarven Mines Solver: Fetchur, Puzzler -* Barn Solver: Treasurehunter, Hungry Hiker +* Barn Solver: Treasure Hunter, Hungry Hiker * Drill Fuel in Item Durability Bar * Hotbar Slot Lock Keybind (Select the hotbar slot you want to lock/unlock and press the lockbutton) * Price tooltip: npc, bazaar (avg, lbin), ah, museum -- cgit From f5aff5fa32512241ddc826ef80f34cc99b904e82 Mon Sep 17 00:00:00 2001 From: PumpkinXD Date: Sat, 10 Jun 2023 08:27:45 +0000 Subject: Translated using Weblate (Chinese (Simplified)) [skip ci] Currently translated at 93.8% (200 of 213 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/zh_Hans/ --- src/main/resources/assets/skyblocker/lang/zh_cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_cn.json b/src/main/resources/assets/skyblocker/lang/zh_cn.json index 35e98845..4ecb623c 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_cn.json +++ b/src/main/resources/assets/skyblocker/lang/zh_cn.json @@ -97,7 +97,7 @@ "text.autoconfig.skyblocker.option.messages.hideCombo": "隐藏连杀消息", "text.autoconfig.skyblocker.option.messages.hideAutopet": "隐藏自动宠物消息", "text.autoconfig.skyblocker.option.messages.hideMana": "在动作栏中隐藏法力消耗信息", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "被已经提供了更好方案的属性条代替", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "已被更好的属性条代替", "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2有新版本可用!", "skyblocker.update.update_link": " §2§n点击这里§r", "skyblocker.update.update_message_end": " §a来了解最新功能", -- cgit From 30959680eb0adae80454d7b179904649c149fd64 Mon Sep 17 00:00:00 2001 From: Azurrrre Date: Sat, 10 Jun 2023 14:23:42 +0000 Subject: Translated using Weblate (Russian) [skip ci] Currently translated at 43.6% (93 of 213 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/ru/ --- src/main/resources/assets/skyblocker/lang/ru_ru.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/ru_ru.json b/src/main/resources/assets/skyblocker/lang/ru_ru.json index fc9eb823..d27f6fa1 100644 --- a/src/main/resources/assets/skyblocker/lang/ru_ru.json +++ b/src/main/resources/assets/skyblocker/lang/ru_ru.json @@ -84,5 +84,12 @@ "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Включить быстрый доступ", "text.autoconfig.skyblocker.option.quickNav.button1": "Кнопка 1", "text.autoconfig.skyblocker.option.quickNav.button2": "Кнопка 2", - "text.autoconfig.skyblocker.option.quickNav.button3": "Кнопка 3" + "text.autoconfig.skyblocker.option.quickNav.button3": "Кнопка 3", + "text.autoconfig.skyblocker.option.general.tabHud": "Красивое TAB меню", + "key.skyblocker.defaultTgl": "Показывать стандартное меню TAB", + "key.skyblocker.playerTgl": "Показывать список игроков в меню TAB", + "key.skyblocker.genericTgl": "Показывать общую информацию в меню TAB", + "text.autoconfig.skyblocker.option.general.tabHud.tabHudEnabled": "Включить красивое TAB меню", + "text.autoconfig.skyblocker.option.general.tabHud.tabHudScale": "Размер TAB меню", + "text.autoconfig.skyblocker.option.general.tabHud.tabHudScale.@Tooltip": "Значение в %, по отношению к размеру интерфейса игры" } -- cgit From 419a1d7838e8f4b2dbbb9be0379dd3a652c6412c Mon Sep 17 00:00:00 2001 From: PumpkinXD Date: Sat, 10 Jun 2023 15:49:06 +0000 Subject: Translated using Weblate (Chinese (Simplified)) [skip ci] Currently translated at 95.3% (203 of 213 strings) Translation: Skyblocker/Skyblocker Translate-URL: https://translate.hysky.de/projects/Skyblocker/skyblocker/zh_Hans/ --- src/main/resources/assets/skyblocker/lang/zh_cn.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/zh_cn.json b/src/main/resources/assets/skyblocker/lang/zh_cn.json index 4ecb623c..0f043e02 100644 --- a/src/main/resources/assets/skyblocker/lang/zh_cn.json +++ b/src/main/resources/assets/skyblocker/lang/zh_cn.json @@ -198,5 +198,8 @@ "text.autoconfig.skyblocker.option.locations.dungeons.lividColor": "提示真 Livid 的颜色", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor.@Tooltip": "将真 Livid 的颜色发送到聊天栏", "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText": "真 Livid 颜色提示信息", - "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip": "Livid Boss战时发送到聊天栏的信息, 字段 “[color]” 将被替换为真 Livid 的颜色" + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip": "Livid Boss战时发送到聊天栏的信息, 字段 “[color]” 将被替换为真 Livid 的颜色", + "key.skyblocker.playerTgl": "将tab键所显示的列表改为玩家列表", + "key.skyblocker.defaultTgl": "将tab键所显示的列表改为默认空岛生存列表", + "key.skyblocker.genericTgl": "将tab键所显示的列表改为通用信息列表" } -- cgit From cfc5d023305ecabdab70da4216fa7367d6dda331 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 10 Jun 2023 15:51:12 -0400 Subject: Add Canadian English --- src/main/resources/assets/skyblocker/lang/en_ca.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/resources/assets/skyblocker/lang/en_ca.json diff --git a/src/main/resources/assets/skyblocker/lang/en_ca.json b/src/main/resources/assets/skyblocker/lang/en_ca.json new file mode 100644 index 00000000..73255e03 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/en_ca.json @@ -0,0 +1,11 @@ +{ + "text.autoconfig.skyblocker.option.general.bars": "Health, Mana, Defence & XP Bars", + + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Grey out chests that have already been opened.", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor": "Livid Colour", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor": "Enable Livid Colour", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor.@Tooltip": "Send the livid colour in the chat during the Livid boss fight.", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText": "Livid Colour Text", + "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip": "Text which will be sent in the chat during the Livid boss fight. The string \"[color]\" will be replaced with the livid colour.", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Solve Select Coloured" +} -- cgit From dc3b373391db5e2fd43752430b13d59956d5be4e Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Sat, 10 Jun 2023 14:23:35 +0200 Subject: Add Auto Rejoin Reparty --- .../skyblocker/chat/ChatMessageListener.java | 2 + .../skyblocker/config/SkyblockerConfig.java | 1 + .../skyblocker/skyblock/dungeon/RepartyRejoin.java | 51 ++++++++++++++++++++++ .../resources/assets/skyblocker/lang/en_us.json | 1 + 4 files changed, 55 insertions(+) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java index f502a356..6d0f38b8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -5,6 +5,7 @@ import me.xmrvizzy.skyblocker.skyblock.api.ApiKeyListener; import me.xmrvizzy.skyblocker.skyblock.barn.HungryHiker; import me.xmrvizzy.skyblocker.skyblock.barn.TreasureHunter; import me.xmrvizzy.skyblocker.skyblock.dungeon.Reparty; +import me.xmrvizzy.skyblocker.skyblock.dungeon.RepartyRejoin; import me.xmrvizzy.skyblocker.skyblock.dungeon.ThreeWeirdos; import me.xmrvizzy.skyblocker.skyblock.dungeon.Trivia; import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur; @@ -41,6 +42,7 @@ public interface ChatMessageListener { new Fetchur(), new Puzzler(), new Reparty(), + new RepartyRejoin(), new ThreeWeirdos(), new Trivia(), new TreasureHunter(), diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index b1bc2001..3acbbdec 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -281,6 +281,7 @@ public class SkyblockerConfig implements ConfigData { public int mapX = 2; public int mapY = 2; public boolean solveThreeWeirdos = true; + public boolean repartyRejoin = true; public boolean blazesolver = true; public boolean solveTrivia = true; @ConfigEntry.Gui.CollapsibleObject diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java new file mode 100644 index 00000000..ad91adc9 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java @@ -0,0 +1,51 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; + +import net.minecraft.text.Text; + +import java.util.regex.Matcher; + +public class RepartyRejoin extends ChatPatternListener { + + private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); + + private boolean repartying; + + + public RepartyRejoin(){ + super("^(?:That party has been disbanded\\.|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)"); + this.repartying = false; + } + + @Override + protected ChatFilterResult state() { + return SkyblockerConfig.get().locations.dungeons.repartyRejoin ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + } + + @Override + protected boolean onMatch(Text message, Matcher matcher) { + if (matcher.group("name")!=null) { + this.repartying = true; + join(matcher.group("name")); + return false; + } else if ( repartying ) { + repartying = false; + return true; + } + return false; + } + + private void join(String player){ + String command = "/party accept " + player; + sendCommand(command); + + } + + private void sendCommand(String command) { + skyblocker.messageScheduler.queueMessage(command, 15 ); + } +} diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 858507fe..db10a327 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -169,6 +169,7 @@ "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Map Scaling", "text.autoconfig.skyblocker.option.locations.dungeons.mapX": "Map X", "text.autoconfig.skyblocker.option.locations.dungeons.mapY": "Map Y", + "text.autoconfig.skyblocker.option.locations.dungeons.repartyRejoin": "Auto Rejoin Reparty", "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Solve Three Weirdos Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Solve Blaze Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve Trivia Puzzle", -- cgit From 6d9b44a29e8268e155031baa53e06255569c18a3 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 10 Jun 2023 22:10:31 +0200 Subject: add translator to readme --- CHANGELOG.md | 10 +++++----- README.md | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7090ac5e..59b3fd68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,24 +13,24 @@ * Add option to hide empty tooltips in inventories. by @msg-programs in https://github.com/SkyblockerMod/Skyblocker/pull/135 * Translations update from hysky translate by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/144 * There is now 240 fairy souls! by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/138 -* Translations update from hysky translate [skip ci] by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/149 +* Translations update from hysky translate by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/149 * minor updates by @Fix3dll in https://github.com/SkyblockerMod/Skyblocker/pull/122 * Migrated to ClientReceiveMessageEvents and some fixes by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/131 * Renamed container package to gui and added docs by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/145 -* Translations update from hysky translate [skip ci] by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/153 +* Translations update from hysky translate by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/153 * REI Compatibility by @lantice3720 in https://github.com/SkyblockerMod/Skyblocker/pull/148 * Api migration, config command, and cleanup by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/154 -* Translations update from hysky translate [skip ci] by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/155 +* Translations update from hysky translate by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/155 * Refactors & docs by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/156 * return instead of assign by @Fix3dll in https://github.com/SkyblockerMod/Skyblocker/pull/158 -* Translations update from hysky translate [skip ci] by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/159 +* Translations update from hysky translate by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/159 * Add Fishing Helper by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/157 * Update Loom and Gradle by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/163 * Livid color by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/162 * fix repository update by @Fix3dll in https://github.com/SkyblockerMod/Skyblocker/pull/165 * remove backup LBIN server because it desn't exist anymore by @Julienraptor01 in https://github.com/SkyblockerMod/Skyblocker/pull/168 * fixing missing strings by @PumpkinXD in https://github.com/SkyblockerMod/Skyblocker/pull/170 -* Translations update from hysky translate [skip ci] by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/166 +* Translations update from hysky translate by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/166 * Replace tab/playerlist HUD with a more fancy version by @msg-programs in https://github.com/SkyblockerMod/Skyblocker/pull/137 * Add Dungeon Map Placement Screen by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/169 diff --git a/README.md b/README.md index 9b53abd4..00a172d5 100644 --- a/README.md +++ b/README.md @@ -120,4 +120,5 @@ Spanish ([IngeSebastian](https://github.com/IngeSebastian)) \ Norwegian Bokmål ([KdGaming0](https://github.com/KdGaming0)) \ Norwegian Nynorsk ([KdGaming0](https://github.com/KdGaming0)) \ Turkish ([Fix3dll](https://github.com/Fix3dll)) \ -Chinese (Simplified) ([catandA](https://github.com/catandA) & [PumpkinXD](https://github.com/PumpkinXD)) \ No newline at end of file +Chinese (Simplified) ([catandA](https://github.com/catandA) & [PumpkinXD](https://github.com/PumpkinXD)) \ +Canadian English ([AzureAaron](https://github.com/AzureAaron)) \ No newline at end of file -- cgit From 4a69272abbffddc5c03ac35b23971bfff3d4556b Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 10 Jun 2023 22:10:52 +0200 Subject: FIX Workflow --- .github/workflows/buildrelease.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/buildrelease.yml b/.github/workflows/buildrelease.yml index c9e3584b..4361f363 100644 --- a/.github/workflows/buildrelease.yml +++ b/.github/workflows/buildrelease.yml @@ -53,11 +53,13 @@ jobs: script: | const fs = require("fs") return fs.readdirSync("build/libs/").filter(e => !e.endsWith("dev.jar") && !e.endsWith("sources.jar") && e.endsWith(".jar"))[0] + - name: Release id: uploadrelease uses: softprops/action-gh-release@v1 with: body: ${{ steps.read_changelog.outputs.changelog }} + token: ${{ secrets.GH_RELEASE }} files: build/libs/${{ steps.fname.outputs.result }} - name: Publish to Modrinth -- cgit From 039605b548f279e73807d1ef83635dffd6280e91 Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Sun, 11 Jun 2023 02:32:31 +0200 Subject: Fix triggering when being leader --- .../java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java index ad91adc9..bbb842d5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java @@ -5,6 +5,7 @@ import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import me.xmrvizzy.skyblocker.chat.ChatPatternListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; import java.util.regex.Matcher; @@ -12,6 +13,7 @@ import java.util.regex.Matcher; public class RepartyRejoin extends ChatPatternListener { private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); + private static final MinecraftClient client = MinecraftClient.getInstance(); private boolean repartying; @@ -28,7 +30,7 @@ public class RepartyRejoin extends ChatPatternListener { @Override protected boolean onMatch(Text message, Matcher matcher) { - if (matcher.group("name")!=null) { + if (matcher.group("name") != null && !matcher.group("name").equals(client.getSession().getUsername())) { this.repartying = true; join(matcher.group("name")); return false; @@ -42,7 +44,7 @@ public class RepartyRejoin extends ChatPatternListener { private void join(String player){ String command = "/party accept " + player; sendCommand(command); - + skyblocker.scheduler.schedule(() -> this.repartying = false, 150); } private void sendCommand(String command) { -- cgit From 646ec39fc6cefe98e0ffac69e90156f6c6bfd412 Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Sun, 11 Jun 2023 03:03:23 +0200 Subject: Add Rejoin Reparty --- .../skyblocker/chat/ChatMessageListener.java | 2 - .../skyblocker/skyblock/dungeon/Reparty.java | 24 +++++++--- .../skyblocker/skyblock/dungeon/RepartyRejoin.java | 53 ---------------------- 3 files changed, 17 insertions(+), 62 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java index 6d0f38b8..f502a356 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -5,7 +5,6 @@ import me.xmrvizzy.skyblocker.skyblock.api.ApiKeyListener; import me.xmrvizzy.skyblocker.skyblock.barn.HungryHiker; import me.xmrvizzy.skyblocker.skyblock.barn.TreasureHunter; import me.xmrvizzy.skyblocker.skyblock.dungeon.Reparty; -import me.xmrvizzy.skyblocker.skyblock.dungeon.RepartyRejoin; import me.xmrvizzy.skyblocker.skyblock.dungeon.ThreeWeirdos; import me.xmrvizzy.skyblocker.skyblock.dungeon.Trivia; import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur; @@ -42,7 +41,6 @@ public interface ChatMessageListener { new Fetchur(), new Puzzler(), new Reparty(), - new RepartyRejoin(), new ThreeWeirdos(), new Trivia(), new TreasureHunter(), diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index 29c37b94..0fa13f80 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; @@ -16,7 +17,7 @@ import java.util.regex.Pattern; public class Reparty extends ChatPatternListener { private static final MinecraftClient client = MinecraftClient.getInstance(); private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); - public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); + public static final Pattern PLAYER_IN_LIST = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); private static final int BASE_DELAY = 10; private String[] players; @@ -24,7 +25,7 @@ public class Reparty extends ChatPatternListener { private boolean repartying; public Reparty() { - super("^(?:You are not currently in a party\\.|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*)))$"); + super("^(?:You are not currently in a party\\.|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))|That party has been disbanded\\.|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)$"); this.repartying = false; ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0; @@ -36,24 +37,27 @@ public class Reparty extends ChatPatternListener { @Override public ChatFilterResult state() { - return this.repartying ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + return (SkyblockerConfig.get().locations.dungeons.repartyRejoin || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; } @Override public boolean onMatch(Text message, Matcher matcher) { - if (matcher.group(1) != null) { + if (matcher.group(1) != null && repartying) { this.playersSoFar = 0; this.players = new String[Integer.parseInt(matcher.group(1)) - 1]; - } else if (matcher.group(2) != null) { - Matcher m = PLAYER.matcher(matcher.group(2)); + } else if (matcher.group(2) != null && repartying) { + Matcher m = PLAYER_IN_LIST.matcher(matcher.group(2)); while (m.find()) { this.players[playersSoFar++] = m.group(1); } + }else if (matcher.group("name") != null && !matcher.group("name").equals(client.getSession().getUsername())){ + join(matcher.group("name")); + return false; } else { this.repartying = false; return false; } - if (this.playersSoFar == this.players.length) reparty(); + if (this.playersSoFar == this.players.length && repartying) reparty(); return false; } @@ -71,6 +75,12 @@ public class Reparty extends ChatPatternListener { skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); } + private void join(String player){ + String command = "/party accept " + player; + skyblocker.messageScheduler.queueMessage(command, 15); + + } + private void sendCommand(String command, int delay) { skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java deleted file mode 100644 index bbb842d5..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/RepartyRejoin.java +++ /dev/null @@ -1,53 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.dungeon; - -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.chat.ChatFilterResult; -import me.xmrvizzy.skyblocker.chat.ChatPatternListener; -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; - -import java.util.regex.Matcher; - -public class RepartyRejoin extends ChatPatternListener { - - private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); - private static final MinecraftClient client = MinecraftClient.getInstance(); - - private boolean repartying; - - - public RepartyRejoin(){ - super("^(?:That party has been disbanded\\.|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)"); - this.repartying = false; - } - - @Override - protected ChatFilterResult state() { - return SkyblockerConfig.get().locations.dungeons.repartyRejoin ? ChatFilterResult.FILTER : ChatFilterResult.PASS; - } - - @Override - protected boolean onMatch(Text message, Matcher matcher) { - if (matcher.group("name") != null && !matcher.group("name").equals(client.getSession().getUsername())) { - this.repartying = true; - join(matcher.group("name")); - return false; - } else if ( repartying ) { - repartying = false; - return true; - } - return false; - } - - private void join(String player){ - String command = "/party accept " + player; - sendCommand(command); - skyblocker.scheduler.schedule(() -> this.repartying = false, 150); - } - - private void sendCommand(String command) { - skyblocker.messageScheduler.queueMessage(command, 15 ); - } -} -- cgit From 6a031e70ec7e55444dd6a984c8717306f6f9be38 Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Sun, 11 Jun 2023 03:21:11 +0200 Subject: Made regex easier to read --- .../java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index 0fa13f80..3c3dd2ba 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -17,7 +17,7 @@ import java.util.regex.Pattern; public class Reparty extends ChatPatternListener { private static final MinecraftClient client = MinecraftClient.getInstance(); private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); - public static final Pattern PLAYER_IN_LIST = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); + public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); private static final int BASE_DELAY = 10; private String[] players; @@ -25,7 +25,11 @@ public class Reparty extends ChatPatternListener { private boolean repartying; public Reparty() { - super("^(?:You are not currently in a party\\.|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))|That party has been disbanded\\.|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)$"); + super("^(?:You are not currently in a party\\." + + "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" + + "|That party has been disbanded\\." + + "|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)$"); + this.repartying = false; ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0; @@ -46,7 +50,7 @@ public class Reparty extends ChatPatternListener { this.playersSoFar = 0; this.players = new String[Integer.parseInt(matcher.group(1)) - 1]; } else if (matcher.group(2) != null && repartying) { - Matcher m = PLAYER_IN_LIST.matcher(matcher.group(2)); + Matcher m = PLAYER.matcher(matcher.group(2)); while (m.find()) { this.players[playersSoFar++] = m.group(1); } -- cgit From a1573035470922daf368f74bb2aa1c41431c0c97 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sun, 11 Jun 2023 19:24:51 +0200 Subject: Rename zh_Hant.json to zh_tw.json --- .../resources/assets/skyblocker/lang/zh_Hant.json | 24 ---------------------- .../resources/assets/skyblocker/lang/zh_tw.json | 24 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 24 deletions(-) delete mode 100644 src/main/resources/assets/skyblocker/lang/zh_Hant.json create mode 100644 src/main/resources/assets/skyblocker/lang/zh_tw.json diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json deleted file mode 100644 index 3613757e..00000000 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "text.autoconfig.skyblocker.title": "Skyblocker設定", - "text.autoconfig.skyblocker.category.general": "一般設定", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "血量條位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "魔力條位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "防禦條位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "經驗条位置", - "key.wikiLookup": "查閱Wiki", - "key.hotbarSlotLock": "鎖定快捷欄", - "key.categories.skyblocker": "Skyblocker", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "隱藏終焉之貌的提示訊息", - "text.autoconfig.skyblocker.option.messages.hideAds": "从公頻訊息中隱藏廣告", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "隱藏傳送點訊息", - "text.autoconfig.skyblocker.option.messages.hideCombo": "隱藏連殺訊息", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "隱藏自動寵物訊息", - "skyblocker.update.hover_text": "打開Modrinth", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "隱藏選單玻璃物品資訊\"", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2已自动設定你的API金鑰!", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "快捷欄右側", - "text.autoconfig.skyblocker.option.messages.hideAbility": "隱藏技能冷卻", - "text.autoconfig.skyblocker.option.messages.hideHeal": "隱藏治療訊息", - "text.autoconfig.skyblocker.option.messages.hideMana": "在動作欄中隱藏魔力消耗的提示訊息", - "text.autoconfig.skyblocker.option.general.bars": "血量,魔力,防御以及經驗計量條" -} diff --git a/src/main/resources/assets/skyblocker/lang/zh_tw.json b/src/main/resources/assets/skyblocker/lang/zh_tw.json new file mode 100644 index 00000000..3613757e --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/zh_tw.json @@ -0,0 +1,24 @@ +{ + "text.autoconfig.skyblocker.title": "Skyblocker設定", + "text.autoconfig.skyblocker.category.general": "一般設定", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "血量條位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "魔力條位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "防禦條位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "經驗条位置", + "key.wikiLookup": "查閱Wiki", + "key.hotbarSlotLock": "鎖定快捷欄", + "key.categories.skyblocker": "Skyblocker", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "隱藏終焉之貌的提示訊息", + "text.autoconfig.skyblocker.option.messages.hideAds": "从公頻訊息中隱藏廣告", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "隱藏傳送點訊息", + "text.autoconfig.skyblocker.option.messages.hideCombo": "隱藏連殺訊息", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "隱藏自動寵物訊息", + "skyblocker.update.hover_text": "打開Modrinth", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "隱藏選單玻璃物品資訊\"", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2已自动設定你的API金鑰!", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "快捷欄右側", + "text.autoconfig.skyblocker.option.messages.hideAbility": "隱藏技能冷卻", + "text.autoconfig.skyblocker.option.messages.hideHeal": "隱藏治療訊息", + "text.autoconfig.skyblocker.option.messages.hideMana": "在動作欄中隱藏魔力消耗的提示訊息", + "text.autoconfig.skyblocker.option.general.bars": "血量,魔力,防御以及經驗計量條" +} -- cgit From fa87edc869e0c9b5a4b6cd0900e9b17f5092d0de Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Sun, 11 Jun 2023 20:00:53 +0200 Subject: Code clean up --- .../java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index 3c3dd2ba..ff3c6036 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -27,7 +27,6 @@ public class Reparty extends ChatPatternListener { public Reparty() { super("^(?:You are not currently in a party\\." + "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" + - "|That party has been disbanded\\." + "|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)$"); this.repartying = false; @@ -54,14 +53,16 @@ public class Reparty extends ChatPatternListener { while (m.find()) { this.players[playersSoFar++] = m.group(1); } - }else if (matcher.group("name") != null && !matcher.group("name").equals(client.getSession().getUsername())){ + } else if (matcher.group("name") != null && !matcher.group("name").equals(client.getSession().getUsername())) { join(matcher.group("name")); return false; } else { this.repartying = false; return false; } - if (this.playersSoFar == this.players.length && repartying) reparty(); + if (this.playersSoFar == this.players.length && repartying) { + reparty(); + } return false; } @@ -79,10 +80,9 @@ public class Reparty extends ChatPatternListener { skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); } - private void join(String player){ + private void join(String player) { String command = "/party accept " + player; skyblocker.messageScheduler.queueMessage(command, 15); - } private void sendCommand(String command, int delay) { -- cgit From 24136a4e82c18e17d2cf88e389c665dffab3588d Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Sun, 11 Jun 2023 22:44:46 +0200 Subject: Change acceptReparty option placement --- src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java | 2 +- src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java | 2 +- src/main/resources/assets/skyblocker/lang/en_us.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 3acbbdec..ccf86eb2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -132,6 +132,7 @@ public class SkyblockerConfig implements ConfigData { public static class General { public boolean enableUpdateNotification = true; + public boolean acceptReparty = true; public boolean backpackPreviewWithoutShift = false; public boolean hideEmptyTooltips = true; @@ -281,7 +282,6 @@ public class SkyblockerConfig implements ConfigData { public int mapX = 2; public int mapY = 2; public boolean solveThreeWeirdos = true; - public boolean repartyRejoin = true; public boolean blazesolver = true; public boolean solveTrivia = true; @ConfigEntry.Gui.CollapsibleObject diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index ff3c6036..3a121eb2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -40,7 +40,7 @@ public class Reparty extends ChatPatternListener { @Override public ChatFilterResult state() { - return (SkyblockerConfig.get().locations.dungeons.repartyRejoin || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + return (SkyblockerConfig.get().general.acceptReparty || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; } @Override diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index db10a327..502efde3 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -20,6 +20,7 @@ "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Position", "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defence Bar Position", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar Position", + "text.autoconfig.skyblocker.option.general.acceptReparty": "Auto accept Reparty", "text.autoconfig.skyblocker.option.general.fishing": "Fishing Helper", "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper", "text.autoconfig.skyblocker.option.general.quicknav": "Quicknav", @@ -169,7 +170,6 @@ "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Map Scaling", "text.autoconfig.skyblocker.option.locations.dungeons.mapX": "Map X", "text.autoconfig.skyblocker.option.locations.dungeons.mapY": "Map Y", - "text.autoconfig.skyblocker.option.locations.dungeons.repartyRejoin": "Auto Rejoin Reparty", "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Solve Three Weirdos Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Solve Blaze Puzzle", "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve Trivia Puzzle", -- cgit From ff720f790b87b7caf26f722534a2dc42d12377e4 Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Mon, 12 Jun 2023 14:02:00 +0200 Subject: Alternative Solution --- .../skyblocker/chat/ChatMessageListener.java | 4 +- .../skyblocker/skyblock/dungeon/Reparty.java | 91 ---------------------- .../skyblock/dungeon/reparty/AcceptReparty.java | 40 ++++++++++ .../skyblock/dungeon/reparty/Reparty.java | 88 +++++++++++++++++++++ 4 files changed, 131 insertions(+), 92 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java index f502a356..da0f7ef9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -4,7 +4,8 @@ import me.xmrvizzy.skyblocker.chat.filters.*; import me.xmrvizzy.skyblocker.skyblock.api.ApiKeyListener; import me.xmrvizzy.skyblocker.skyblock.barn.HungryHiker; import me.xmrvizzy.skyblocker.skyblock.barn.TreasureHunter; -import me.xmrvizzy.skyblocker.skyblock.dungeon.Reparty; +import me.xmrvizzy.skyblocker.skyblock.dungeon.reparty.AcceptReparty; +import me.xmrvizzy.skyblocker.skyblock.dungeon.reparty.Reparty; import me.xmrvizzy.skyblocker.skyblock.dungeon.ThreeWeirdos; import me.xmrvizzy.skyblocker.skyblock.dungeon.Trivia; import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur; @@ -41,6 +42,7 @@ public interface ChatMessageListener { new Fetchur(), new Puzzler(), new Reparty(), + new AcceptReparty(), new ThreeWeirdos(), new Trivia(), new TreasureHunter(), diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java deleted file mode 100644 index 3a121eb2..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ /dev/null @@ -1,91 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.dungeon; - -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.chat.ChatFilterResult; -import me.xmrvizzy.skyblocker.chat.ChatPatternListener; -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.text.Text; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class Reparty extends ChatPatternListener { - private static final MinecraftClient client = MinecraftClient.getInstance(); - private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); - public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); - private static final int BASE_DELAY = 10; - - private String[] players; - private int playersSoFar; - private boolean repartying; - - public Reparty() { - super("^(?:You are not currently in a party\\." + - "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" + - "|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)$"); - - this.repartying = false; - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { - if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0; - this.repartying = true; - SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/p list"); - return 0; - }))); - } - - @Override - public ChatFilterResult state() { - return (SkyblockerConfig.get().general.acceptReparty || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; - } - - @Override - public boolean onMatch(Text message, Matcher matcher) { - if (matcher.group(1) != null && repartying) { - this.playersSoFar = 0; - this.players = new String[Integer.parseInt(matcher.group(1)) - 1]; - } else if (matcher.group(2) != null && repartying) { - Matcher m = PLAYER.matcher(matcher.group(2)); - while (m.find()) { - this.players[playersSoFar++] = m.group(1); - } - } else if (matcher.group("name") != null && !matcher.group("name").equals(client.getSession().getUsername())) { - join(matcher.group("name")); - return false; - } else { - this.repartying = false; - return false; - } - if (this.playersSoFar == this.players.length && repartying) { - reparty(); - } - return false; - } - - private void reparty() { - ClientPlayerEntity playerEntity = client.player; - if (playerEntity == null) { - this.repartying = false; - return; - } - sendCommand("/p disband", 1); - for (int i = 0; i < this.players.length; ++i) { - String command = "/p invite " + this.players[i]; - sendCommand(command, i + 2); - } - skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); - } - - private void join(String player) { - String command = "/party accept " + player; - skyblocker.messageScheduler.queueMessage(command, 15); - } - - private void sendCommand(String command, int delay) { - skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY); - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java new file mode 100644 index 00000000..3a243a57 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java @@ -0,0 +1,40 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon.reparty; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import net.minecraft.text.Text; + +import java.util.regex.Matcher; + +import static me.xmrvizzy.skyblocker.skyblock.dungeon.reparty.Reparty.partyLeader; + +public class AcceptReparty extends ChatPatternListener { + + private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); + + public AcceptReparty() { + super("-----------------------------------------------------" + + "\n([\\[A-z+\\]]* )?(?[A-z0-9_]*) has invited you to join their party!" + + "\nYou have 60 seconds to accept. Click here to join!" + + "\n-----------------------------------------------------"); + } + + @Override + protected ChatFilterResult state() { + return (partyLeader != null) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + } + + @Override + protected boolean onMatch(Text message, Matcher matcher) { + try { + if (matcher.group("name").equals(partyLeader)) { + skyblocker.messageScheduler.sendMessageAfterCooldown("/party accept " + partyLeader); + } + } catch (NullPointerException e) { + //in case if block executes after setting "partyLeader" variable to null + } + partyLeader = null; + return false; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java new file mode 100644 index 00000000..1bff342f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java @@ -0,0 +1,88 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon.reparty; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.text.Text; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Reparty extends ChatPatternListener { + private static final MinecraftClient client = MinecraftClient.getInstance(); + private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); + public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); + private static final int BASE_DELAY = 10; + + public static String partyLeader; + private String[] players; + private int playersSoFar; + private boolean repartying; + + public Reparty() { + super("^(?:You are not currently in a party\\." + + "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" + + "|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)$"); + + this.repartying = false; + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { + if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0; + this.repartying = true; + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/p list"); + return 0; + }))); + } + + @Override + public ChatFilterResult state() { + return (SkyblockerConfig.get().general.acceptReparty || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + } + + @Override + public boolean onMatch(Text message, Matcher matcher) { + if (matcher.group(1) != null && repartying) { + this.playersSoFar = 0; + this.players = new String[Integer.parseInt(matcher.group(1)) - 1]; + } else if (matcher.group(2) != null && repartying) { + Matcher m = PLAYER.matcher(matcher.group(2)); + while (m.find()) { + this.players[playersSoFar++] = m.group(1); + } + } else if (matcher.group("name") != null && !matcher.group("name").equals(client.getSession().getUsername())) { + partyLeader = matcher.group("name"); + skyblocker.scheduler.schedule(() -> partyLeader = null, 20); + return false; + } else { + this.repartying = false; + return false; + } + if (this.playersSoFar == this.players.length && repartying) { + reparty(); + } + return false; + } + + private void reparty() { + ClientPlayerEntity playerEntity = client.player; + if (playerEntity == null) { + this.repartying = false; + return; + } + sendCommand("/p disband", 1); + for (int i = 0; i < this.players.length; ++i) { + String command = "/p invite " + this.players[i]; + sendCommand(command, i + 2); + } + skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); + } + + private void sendCommand(String command, int delay) { + skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY); + } +} -- cgit From a84e6bab5f4205a7d2cf04fd73ec08ab16f9155d Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Mon, 12 Jun 2023 15:59:33 +0200 Subject: Alternative Solution --- .../me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java index 3a243a57..21513fc6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java @@ -32,7 +32,7 @@ public class AcceptReparty extends ChatPatternListener { skyblocker.messageScheduler.sendMessageAfterCooldown("/party accept " + partyLeader); } } catch (NullPointerException e) { - //in case if block executes after setting "partyLeader" variable to null + // In case if block executes after setting "partyLeader" variable to null } partyLeader = null; return false; -- cgit From 826a6d8fd9a38c794eb70b7a71aa969dfddd685c Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 17 Jun 2023 00:01:19 -0400 Subject: Add sound notification to fishing helper --- src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java index 790b27bf..d82464e1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java @@ -8,8 +8,10 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.FishingRodItem; import net.minecraft.item.ItemStack; import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; +import net.minecraft.sound.SoundEvent; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; @@ -51,6 +53,7 @@ public class FishingHelper { if (Math.abs(normalYawVector.x * soundToFishHook.z - normalYawVector.z * soundToFishHook.x) < 0.2D && Math.abs(normalYawVector.dotProduct(soundToFishHook)) < 4D && player.getPos().squaredDistanceTo(packet.getX(), packet.getY(), packet.getZ()) > 1D) { client.inGameHud.setTitleTicks(0, 10, 5); client.inGameHud.setTitle(Text.translatable("skyblocker.fishing.reelNow").formatted(Formatting.GREEN)); + player.playSound(SoundEvent.of(new Identifier("minecraft", "entity.experience_orb.pickup")), 100f, 0.1f); reset(); } } else { -- cgit From b28a20421348c3385022deeb3cb1ea0ea74928af Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 11 May 2023 01:54:39 -0400 Subject: 1.20 Port The game launches successfully without any crashes! --- gradle.properties | 8 +-- .../skyblocker/gui/ContainerSolverManager.java | 13 ++--- .../skyblocker/mixin/DrawContextMixin.java | 60 ++++++++++++++++++++++ .../skyblocker/mixin/HandledScreenMixin.java | 13 +++-- .../xmrvizzy/skyblocker/mixin/InGameHudMixin.java | 32 ++++++------ .../skyblocker/mixin/ItemRendererMixin.java | 60 ---------------------- .../skyblocker/mixin/PlayerListHudMixin.java | 8 +-- .../me/xmrvizzy/skyblocker/mixin/ScreenMixin.java | 24 --------- .../skyblocker/skyblock/BackpackPreview.java | 17 +++--- .../skyblocker/skyblock/FancyStatusBars.java | 37 ++++++------- .../skyblocker/skyblock/dungeon/DungeonMap.java | 8 ++- .../skyblock/dungeon/DungeonMapConfigScreen.java | 12 ++--- .../skyblocker/skyblock/dwarven/DwarvenHud.java | 32 ++++++------ .../skyblock/dwarven/DwarvenHudConfigScreen.java | 11 ++-- .../skyblock/itemlist/ItemListWidget.java | 24 ++++----- .../skyblock/itemlist/ResultButtonWidget.java | 27 ++++++---- .../skyblock/itemlist/SearchResultsWidget.java | 23 +++++---- .../skyblock/quicknav/QuickNavButton.java | 20 ++++---- .../skyblocker/skyblock/tabhud/screens/Screen.java | 5 +- .../skyblocker/skyblock/tabhud/widget/Widget.java | 37 ++++++------- .../tabhud/widget/component/Component.java | 5 +- .../widget/component/IcoFatTextComponent.java | 10 ++-- .../tabhud/widget/component/IcoTextComponent.java | 8 +-- .../widget/component/PlainTextComponent.java | 6 +-- .../tabhud/widget/component/PlayerComponent.java | 11 ++-- .../tabhud/widget/component/ProgressComponent.java | 15 +++--- .../tabhud/widget/component/TableComponent.java | 9 ++-- .../me/xmrvizzy/skyblocker/utils/ToastBuilder.java | 16 +++--- src/main/resources/fabric.mod.json | 4 +- src/main/resources/skyblocker.mixins.json | 6 +-- 30 files changed, 272 insertions(+), 289 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java diff --git a/gradle.properties b/gradle.properties index 64c5e5cd..7b8af977 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,19 +2,19 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.19.4 -minecraft_version=1.19.4 -yarn_mappings=1.19.4+build.2 +minecraft_version=1.20-pre1 +yarn_mappings=1.20-pre1+build.4 loader_version=0.14.19 #Fabric api ## 1.19.4 -fabric_api_version=0.81.1+1.19.4 +fabric_api_version=0.80.2+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) clothconfig_version=10.0.96 ## Mod Menu (https://www.curseforge.com/minecraft/mc-mods/modmenu/files) -mod_menu_version=6.1.0-rc.4 +mod_menu_version=7.0.0-beta.2 ## REI (https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items/files) rei_version=11.0.597 diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index e4ff229d..354e7e3a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -8,7 +8,7 @@ import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; @@ -24,7 +24,7 @@ import java.util.regex.Pattern; /** * Manager class for {@link ContainerSolver}s like terminal solvers and experiment solvers. To add a new gui solver, extend {@link ContainerSolver} and register it in {@link #ContainerSolverManager()}. */ -public class ContainerSolverManager extends DrawableHelper { +public class ContainerSolverManager { private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile(""); private final ContainerSolver[] solvers; private ContainerSolver currentSolver = null; @@ -43,10 +43,11 @@ public class ContainerSolverManager extends DrawableHelper { public void init() { ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (Utils.isOnSkyblock() && screen instanceof GenericContainerScreen genericContainerScreen) { - ScreenEvents.afterRender(screen).register((screen1, matrices, mouseX, mouseY, delta) -> { + ScreenEvents.afterRender(screen).register((screen1, context, mouseX, mouseY, delta) -> { + MatrixStack matrices = context.getMatrices(); matrices.push(); matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 300); - onDraw(matrices, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); + onDraw(context, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); matrices.pop(); }); onSetScreen(genericContainerScreen); @@ -83,7 +84,7 @@ public class ContainerSolverManager extends DrawableHelper { highlights = null; } - public void onDraw(MatrixStack matrices, List slots) { + public void onDraw(DrawContext context, List slots) { if (currentSolver == null) return; if (highlights == null) @@ -93,7 +94,7 @@ public class ContainerSolverManager extends DrawableHelper { for (ColorHighlight highlight : highlights) { Slot slot = slots.get(highlight.slot()); int color = highlight.color(); - fillGradient(matrices, slot.x, slot.y, slot.x + 16, slot.y + 16, color, color); + context.fillGradient(slot.x, slot.y, slot.x + 16, slot.y + 16, color, color); } RenderSystem.colorMask(true, true, true, true); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java new file mode 100644 index 00000000..ccbeaca2 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -0,0 +1,60 @@ +package me.xmrvizzy.skyblocker.mixin; + +import java.awt.Color; +import java.util.regex.Pattern; + +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.mojang.blaze3d.systems.RenderSystem; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.ItemUtils; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.util.math.ColorHelper; + +@Mixin(DrawContext.class) +public abstract class DrawContextMixin { + @Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) + public void skyblocker$renderItemBar(TextRenderer textRenderer, ItemStack stack, int x, int y, @Nullable String countOverride, CallbackInfo ci) { + + if (Utils.isOnSkyblock() && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) { + if (!stack.isEmpty()) { + NbtCompound tag = stack.getNbt(); + if (tag != null && tag.contains("ExtraAttributes")) { + if (tag.getCompound("ExtraAttributes").contains("drill_fuel")) { + float current = 3000.0F; + float max = 3000.0F; + + for (String line : ItemUtils.getTooltipStrings(stack)) { + if (line.contains("Fuel: ")) { + String clear = Pattern.compile("[^0-9 /]").matcher(line).replaceAll("").trim(); + String[] split = clear.split("/"); + current = Integer.parseInt(split[0]); + max = Integer.parseInt(split[1]) * 1000; + break; + } + } + + DrawContext context = ((DrawContext) (Object) this); + + RenderSystem.disableDepthTest(); + float hue = Math.max(0.0F, 1.0F - (max - current) / max); + int width = Math.round(current / max * 13.0F); + Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); + context.fill(x + 2, y + 13, x + 15, y + 15, 0xFF000000); + context.fill(x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); + RenderSystem.enableDepthTest(); + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 2d200a86..30aa1ed2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -3,9 +3,10 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; @@ -36,12 +37,18 @@ public abstract class HandledScreenMixin extends Screen { } @Inject(at = @At("HEAD"), method = "drawMouseoverTooltip", cancellable = true) - public void skyblocker$drawMouseOverTooltip(MatrixStack matrices, int x, int y, CallbackInfo ci) { + public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) { + //Hide Empty Tooltips + Text stackName = focusedSlot.getStack().getName(); + String strName = stackName.getString(); + if(this.focusedSlot != null && Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) ci.cancel(); + + //Backpack Preview String title = this.getTitle().getString(); boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); if (shiftDown && title.equals("Storage") && this.focusedSlot != null) { if (this.focusedSlot.inventory == this.client.player.getInventory()) return; - if (BackpackPreview.renderPreview(matrices, this.focusedSlot.getIndex(), x, y)) ci.cancel(); + if (BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) ci.cancel(); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index e17795ab..335737a1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -1,6 +1,5 @@ package me.xmrvizzy.skyblocker.mixin; -import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.FancyStatusBars; @@ -10,13 +9,14 @@ import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonMap; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Identifier; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -26,7 +26,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Environment(EnvType.CLIENT) @Mixin(InGameHud.class) -public abstract class InGameHudMixin extends DrawableHelper { +public abstract class InGameHudMixin { + //@Shadow + //@Final + //private static Identifier ICONS = new Identifier("textures/gui/icons.png"); @Unique private static final Identifier SLOT_LOCK = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/slot_lock.png"); @Unique @@ -35,7 +38,7 @@ public abstract class InGameHudMixin extends DrawableHelper { @Unique private final FancyStatusBars statusBars = new FancyStatusBars(); @Unique - private MatrixStack hotbarMatrices; + private DrawContext hotbarContext; @Unique private int hotbarSlotIndex; @@ -62,45 +65,44 @@ public abstract class InGameHudMixin extends DrawableHelper { } @Inject(method = "renderHotbar", at = @At("HEAD")) - public void skyblocker$renderHotbar(float f, MatrixStack matrices, CallbackInfo ci) { + public void skyblocker$renderHotbar(float f, DrawContext context, CallbackInfo ci) { if (Utils.isOnSkyblock()) { - hotbarMatrices = matrices; + hotbarContext = context; hotbarSlotIndex = 0; } } @Inject(method = "renderHotbarItem", at = @At("HEAD")) - public void skyblocker$renderHotbarItem(MatrixStack matrices, int i, int j, float f, PlayerEntity player, ItemStack stack, int seed, CallbackInfo ci) { + public void skyblocker$renderHotbarItem(DrawContext context, int i, int j, float f, PlayerEntity player, ItemStack stack, int seed, CallbackInfo ci) { if (Utils.isOnSkyblock()) { if (HotbarSlotLock.isLocked(hotbarSlotIndex)) { - RenderSystem.setShaderTexture(0, SLOT_LOCK); - DrawableHelper.drawTexture(hotbarMatrices, i, j, 0, 0, 16, 16); + hotbarContext.drawTexture(SLOT_LOCK, i, j, 0, 0, 16, 16); } hotbarSlotIndex++; } } @Inject(method = "renderExperienceBar", at = @At("HEAD"), cancellable = true) - private void skyblocker$renderExperienceBar(MatrixStack matrices, int x, CallbackInfo ci) { + private void skyblocker$renderExperienceBar(DrawContext context, int x, CallbackInfo ci) { if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars) ci.cancel(); } @Inject(method = "renderStatusBars", at = @At("HEAD"), cancellable = true) - private void skyblocker$renderStatusBars(MatrixStack matrices, CallbackInfo ci) { + private void skyblocker$renderStatusBars(DrawContext context, CallbackInfo ci) { if (!Utils.isOnSkyblock()) return; - if (statusBars.render(matrices, scaledWidth, scaledHeight)) + if (statusBars.render(context, scaledWidth, scaledHeight)) ci.cancel(); if (Utils.isInDungeons() && SkyblockerConfig.get().locations.dungeons.enableMap) - DungeonMap.render(matrices); + DungeonMap.render(context.getMatrices()); - RenderSystem.setShaderTexture(0, GUI_ICONS_TEXTURE); + //RenderSystem.setShaderTexture(0, ICONS); } @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) - private void skyblocker$renderMountHealth(MatrixStack matrices, CallbackInfo ci) { + private void skyblocker$renderMountHealth(DrawContext context, CallbackInfo ci) { if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars) ci.cancel(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java deleted file mode 100644 index 26bafc14..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java +++ /dev/null @@ -1,60 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import java.awt.Color; -import java.util.regex.Pattern; - -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import com.mojang.blaze3d.systems.RenderSystem; - -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.utils.ItemUtils; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.util.math.ColorHelper; - -@Mixin(ItemRenderer.class) -public abstract class ItemRendererMixin { - @Inject(method = "renderGuiItemOverlay(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) - public void skyblocker$renderItemBar(MatrixStack matrices, TextRenderer renderer, ItemStack stack, int x, int y, @Nullable String countLabel, CallbackInfo ci) { - - if (Utils.isOnSkyblock() && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) { - if (!stack.isEmpty()) { - NbtCompound tag = stack.getNbt(); - if (tag != null && tag.contains("ExtraAttributes")) { - if (tag.getCompound("ExtraAttributes").contains("drill_fuel")) { - float current = 3000.0F; - float max = 3000.0F; - - for (String line : ItemUtils.getTooltipStrings(stack)) { - if (line.contains("Fuel: ")) { - String clear = Pattern.compile("[^0-9 /]").matcher(line).replaceAll("").trim(); - String[] split = clear.split("/"); - current = Integer.parseInt(split[0]); - max = Integer.parseInt(split[1]) * 1000; - break; - } - } - - RenderSystem.disableDepthTest(); - float hue = Math.max(0.0F, 1.0F - (max - current) / max); - int width = Math.round(current / max * 13.0F); - Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); - DrawableHelper.fill(matrices, x + 2, y + 13, x + 15, y + 15, 0xFF000000); - DrawableHelper.fill(matrices, x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); - RenderSystem.enableDepthTest(); - } - } - } - } - } -} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index b5403ae2..ef65190f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -13,9 +13,9 @@ import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.PlayerListHud; import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.text.Text; @@ -27,8 +27,8 @@ public class PlayerListHudMixin { @Shadow private Text footer; - @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/util/math/MatrixStack;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true) - public void skyblocker$renderTabHud(MatrixStack ms, int scaledW, Scoreboard sb, ScoreboardObjective sbo, + @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/gui/DrawContext;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true) + public void skyblocker$renderTabHud(DrawContext context, int scaledW, Scoreboard sb, ScoreboardObjective sbo, CallbackInfo info) { if (!Utils.isOnSkyblock() @@ -47,7 +47,7 @@ public class PlayerListHudMixin { int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); try { Screen screen = Screen.getCorrect(w, h, footer); - screen.render(ms); + screen.render(context); info.cancel(); } catch (Exception e) { TabHud.LOGGER.error("Drawing default hud. Reason: Screen exception {}", e); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java deleted file mode 100644 index 9389b792..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Screen.class) -public abstract class ScreenMixin { - @Inject(at = @At("HEAD"), method = "renderTooltip(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/item/ItemStack;II)V", cancellable = true) - public void skyblocker$renderTooltip(MatrixStack matrices, ItemStack itemStack, int x, int y, CallbackInfo ci) { - Text stackName = itemStack.getName(); - String strName = stackName.getString(); - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) { - ci.cancel(); - } - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java index 4820bc0f..e35ef605 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java @@ -7,7 +7,7 @@ import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.network.PlayerListEntry; @@ -27,7 +27,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class BackpackPreview extends DrawableHelper { +public class BackpackPreview { private static final Identifier TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/inventory_background.png"); private static final BackpackPreview instance = new BackpackPreview(); private static final Pattern PROFILE_PATTERN = Pattern.compile("Profile: ([a-zA-Z]+)"); @@ -135,7 +135,7 @@ public class BackpackPreview extends DrawableHelper { } } - public static boolean renderPreview(MatrixStack matrices, int index, int mouseX, int mouseY) { + public static boolean renderPreview(DrawContext context, int index, int mouseX, int mouseY) { if (index >= 9 && index < 18) index -= 9; else if (index >= 27 && index < 45) index -= 18; else return false; @@ -149,12 +149,13 @@ public class BackpackPreview extends DrawableHelper { RenderSystem.disableDepthTest(); RenderSystem.setShaderTexture(0, TEXTURE); - BackpackPreview.drawTexture(matrices, x, y, 0, 0, 176, 7); + context.drawTexture(TEXTURE, x, y, 0, 0, 176, 7); for (int i = 0; i < rows; ++i) - BackpackPreview.drawTexture(matrices, x, y + i * 18 + 7, 0, 7, 176, 18); - BackpackPreview.drawTexture(matrices, x, y + rows * 18 + 7, 0, 25, 176, 7); + context.drawTexture(TEXTURE, x, y + i * 18 + 7, 0, 7, 176, 18); + context.drawTexture(TEXTURE, x, y + rows * 18 + 7, 0, 25, 176, 7); RenderSystem.enableDepthTest(); + MatrixStack matrices = context.getMatrices(); ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer(); TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; for (int i = 9; i < storage[index].size(); ++i) { @@ -162,8 +163,8 @@ public class BackpackPreview extends DrawableHelper { int itemY = y + (i - 9) / 9 * 18 + 8; matrices.push(); matrices.translate(0, 0, 200); - itemRenderer.renderInGui(matrices, storage[index].getStack(i), itemX, itemY); - itemRenderer.renderGuiItemOverlay(matrices, textRenderer, storage[index].getStack(i), itemX, itemY); + context.drawItem(storage[index].getStack(i), itemX, itemY); + context.drawItemInSlot(textRenderer, storage[index].getStack(i), itemX, itemY); matrices.pop(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java index 05b57410..6af06e6d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java @@ -1,15 +1,13 @@ package me.xmrvizzy.skyblocker.skyblock; -import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.util.Identifier; -public class FancyStatusBars extends DrawableHelper { +public class FancyStatusBars { private static final Identifier BARS = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/bars.png"); private final MinecraftClient client = MinecraftClient.getInstance(); @@ -39,7 +37,7 @@ public class FancyStatusBars extends DrawableHelper { return (100 * value) / max; } - public boolean render(MatrixStack matrices, int scaledWidth, int scaledHeight) { + public boolean render(DrawContext context, int scaledWidth, int scaledHeight) { var player = client.player; if (!SkyblockerConfig.get().general.bars.enableBars || player == null) return false; @@ -72,11 +70,10 @@ public class FancyStatusBars extends DrawableHelper { moveBar(i, configAnchorNum); } - RenderSystem.setShaderTexture(0, BARS); for (var bar : bars) - bar.draw(matrices); + bar.draw(context); for (var bar : bars) - bar.drawText(matrices); + bar.drawText(context); return true; } @@ -143,32 +140,32 @@ public class FancyStatusBars extends DrawableHelper { this.text = val; } - public void draw(MatrixStack matrices) { + public void draw(DrawContext context) { // Dont draw if anchorNum is outside of range if (anchorNum < 0 || anchorNum > 2) return; // Draw the icon for the bar - drawTexture(matrices, anchorsX[anchorNum] + offsetX, anchorsY[anchorNum], 0, v, 9, 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX, anchorsY[anchorNum], 0, v, 9, 9); // Draw the background for the bar - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 10, anchorsY[anchorNum], 10, v, 2, 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 10, anchorsY[anchorNum], 10, v, 2, 9); for (int i = 2; i < bar_width - 2; i += 58) - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 10 + i, anchorsY[anchorNum], 12, v, Math.min(58, bar_width - 2 - i), 9); - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 10 + bar_width - 2, anchorsY[anchorNum], 70, v, 2, 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 10 + i, anchorsY[anchorNum], 12, v, Math.min(58, bar_width - 2 - i), 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 10 + bar_width - 2, anchorsY[anchorNum], 70, v, 2, 9); // Draw the filled part of the bar for (int i = 0; i < fill.length; i++) { int fill_width = this.fill[i] * (bar_width - 2) / 100; if (fill_width >= 1) - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 11, anchorsY[anchorNum], 72 + i*60, v, 1, 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11, anchorsY[anchorNum], 72 + i*60, v, 1, 9); for (int j = 1; j < fill_width - 1; j += 58) - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 11 + j, anchorsY[anchorNum], 73 + i*60, v, Math.min(58, fill_width - 1 - j), 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11 + j, anchorsY[anchorNum], 73 + i*60, v, Math.min(58, fill_width - 1 - j), 9); if (fill_width == bar_width - 2) - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 11 + fill_width - 1, anchorsY[anchorNum], 131 + i*60, v, 1, 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11 + fill_width - 1, anchorsY[anchorNum], 131 + i*60, v, 1, 9); } } - public void drawText(MatrixStack matrices) { + public void drawText(DrawContext context) { // Dont draw if anchorNum is outside of range if (anchorNum < 0 || anchorNum > 2) return; @@ -179,10 +176,10 @@ public class FancyStatusBars extends DrawableHelper { final int[] offsets = new int[]{-1, 1}; for (int i : offsets) { - textRenderer.draw(matrices, text, (float) (x + i), (float) y, 0); - textRenderer.draw(matrices, text, (float) x, (float) (y + i), 0); + context.drawText(textRenderer, text, x + i, y, 0, false); + context.drawText(textRenderer, text, x, y + i, 0, false); } - textRenderer.draw(matrices, text, (float) x, (float) y, text_color); + context.drawText(textRenderer, text, x, y, text_color, false); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java index e5441b5c..2a97d0ee 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java @@ -2,14 +2,13 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; import org.apache.commons.lang3.StringUtils; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.brigadier.Command; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.MapRenderer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; @@ -50,11 +49,10 @@ public class DungeonMap { } } - public static void renderHUDMap(MatrixStack matrices, int x, int y) { + public static void renderHUDMap(DrawContext context, int x, int y) { float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; int size = (int) (128 * scaling); - RenderSystem.setShaderTexture(0, MAP_BACKGROUND); - DrawableHelper.drawTexture(matrices, x, y, 0, 0, size, size, size, size); + context.drawTexture(MAP_BACKGROUND, x, y, 0, 0, size, size, size, size); } public static void init() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java index 8fba6a7a..ffd7a8b6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java @@ -5,8 +5,8 @@ import java.awt.Color; import me.shedaniel.autoconfig.AutoConfig; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderUtils; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; public class DungeonMapConfigScreen extends Screen { @@ -19,11 +19,11 @@ public class DungeonMapConfigScreen extends Screen { } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - super.render(matrices, mouseX, mouseY, delta); - renderBackground(matrices); - DungeonMap.renderHUDMap(matrices, hudX, hudY); - drawCenteredTextWithShadow(matrices, textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + super.render(context, mouseX, mouseY, delta); + renderBackground(context); + DungeonMap.renderHUDMap(context, hudX, hudY); + context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java index 15f9e58b..122f6c6c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -6,7 +6,7 @@ import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -49,35 +49,35 @@ public class DwarvenHud { return 1; }))))); - HudRenderCallback.EVENT.register((matrixStack, tickDelta) -> { + HudRenderCallback.EVENT.register((context, tickDelta) -> { if (!SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled || client.options.playerListKey.isPressed() || client.player == null || commissionList.isEmpty()) { return; } - render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList); + render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList); }); } - public static void render(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + public static void render(DrawContext context, int hudX, int hudY, List commissions) { switch(SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { - case SIMPLE -> renderSimple(matrixStack, hudX, hudY, commissions); - case FANCY -> renderFancy(matrixStack, hudX, hudY, commissions); - case CLASSIC -> renderClassic(matrixStack, hudX, hudY, commissions); + case SIMPLE -> renderSimple(context, hudX, hudY, commissions); + case FANCY -> renderFancy(context, hudX, hudY, commissions); + case CLASSIC -> renderClassic(context, hudX, hudY, commissions); } } - public static void renderClassic(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + public static void renderClassic(DrawContext context, int hudX, int hudY, List commissions) { if (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground) { - DrawableHelper.fill(matrixStack, hudX, hudY, hudX + 200, hudY + (20 * commissions.size()), 0x64000000); + context.fill(hudX, hudY, hudX + 200, hudY + (20 * commissions.size()), 0x64000000); } int y = 0; for (Commission commission : commissions) { - client.textRenderer - .drawWithShadow(matrixStack, + context + .drawTextWithShadow(client.textRenderer, Text.literal(commission.commission + ": ") .styled(style -> style.withColor(Formatting.AQUA)) .append(Text.literal(commission.progression) @@ -87,18 +87,18 @@ public class DwarvenHud { } } - public static void renderSimple(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + public static void renderSimple(DrawContext context, int hudX, int hudY, List commissions) { CommsWidget cw = new CommsWidget(commissions, false); cw.setX(hudX); cw.setY(hudY); - cw.render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); + cw.render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); } - public static void renderFancy(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + public static void renderFancy(DrawContext context, int hudX, int hudY, List commissions) { CommsWidget cw = new CommsWidget(commissions, true); cw.setX(hudX); cw.setY(hudY); - cw.render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); + cw.render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); } public static void update() { @@ -121,4 +121,4 @@ public class DwarvenHud { // steamroller tactics to get visibility from outside classes (CommsWidget) public static record Commission(String commission, String progression){} -} +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java index 2d0ba892..f91ed921 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java @@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; import me.shedaniel.autoconfig.AutoConfig; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderUtils; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @@ -19,11 +20,11 @@ public class DwarvenHudConfigScreen extends Screen { } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - super.render(matrices, mouseX, mouseY, delta); - renderBackground(matrices); - DwarvenHud.render(matrices, hudX, hudY, List.of(new DwarvenHud.Commission("Test Commission 1", "1%"), new DwarvenHud.Commission("Test Commission 2", "2%"))); - drawCenteredTextWithShadow(matrices, textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + super.render(context, mouseX, mouseY, delta); + renderBackground(context); + DwarvenHud.render(context, hudX, hudY, List.of(new DwarvenHud.Commission("Test Commission 1", "1%"), new DwarvenHud.Commission("Test Commission 2", "2%"))); + context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java index d9acc75c..99715e29 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java @@ -5,12 +5,11 @@ import me.xmrvizzy.skyblocker.mixin.RecipeBookWidgetAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Drawable; -import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.screen.AbstractRecipeScreenHandler; import net.minecraft.text.Text; @@ -46,27 +45,26 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { + public void render(DrawContext context, int mouseX, int mouseY, float delta) { if (this.isOpen()) { - matrices.push(); + MatrixStack matrices = context.getMatrices(); + matrices.push(); matrices.translate(0.0D, 0.0D, 100.0D); - RenderSystem.setShader(GameRenderer::getPositionTexProgram); - RenderSystem.setShaderTexture(0, TEXTURE); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); int i = (this.parentWidth - 147) / 2 - this.leftOffset; int j = (this.parentHeight - 166) / 2; - DrawableHelper.drawTexture(matrices, i, j, 1, 1, 147, 166); + context.drawTexture(TEXTURE, i, j, 1, 1, 147, 166); this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); if (!ItemRegistry.filesImported && !this.searchField.isFocused() && this.searchField.getText().isEmpty()) { Text hintText = (Text.literal("Loading...")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY); - drawTextWithShadow(matrices, this.client.textRenderer, hintText, i + 25, j + 14, -1); + context.drawTextWithShadow(this.client.textRenderer, hintText, i + 25, j + 14, -1); } else if (!this.searchField.isFocused() && this.searchField.getText().isEmpty()) { Text hintText = (Text.translatable("gui.recipebook.search_hint")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY); - drawTextWithShadow(matrices, this.client.textRenderer, hintText, i + 25, j + 14, -1); + context.drawTextWithShadow(this.client.textRenderer, hintText, i + 25, j + 14, -1); } else { - this.searchField.render(matrices, mouseX, mouseY, delta); + this.searchField.render(context, mouseX, mouseY, delta); } if (ItemRegistry.filesImported){ if (results == null) { @@ -75,16 +73,16 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select this.results = new SearchResultsWidget(this.client, x, y); } this.updateSearchResult(); - this.results.render(matrices, mouseX, mouseY, delta); + this.results.render(context, mouseX, mouseY, delta); } matrices.pop(); } } @Override - public void drawTooltip(MatrixStack matrices, int x, int y, int mouseX, int mouseY) { + public void drawTooltip(DrawContext context, int x, int y, int mouseX, int mouseY) { if (this.isOpen() && ItemRegistry.filesImported && results != null) { - this.results.drawTooltip(matrices, mouseX, mouseY); + this.results.drawTooltip(context, mouseX, mouseY); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java index 41e5469d..8b0fe91d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java @@ -1,17 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; import java.util.List; +import java.util.function.Function; +import java.util.ArrayList; +import com.google.common.collect.Lists; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.text.OrderedText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -36,23 +40,26 @@ public class ResultButtonWidget extends ClickableWidget { } @Override - public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) { + public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { MinecraftClient client = MinecraftClient.getInstance(); - RenderSystem.setShader(GameRenderer::getPositionTexProgram); - RenderSystem.setShaderTexture(0, BACKGROUND_TEXTURE); // this.drawTexture(matrices, this.x, this.y, 29, 206, this.width, this.height); - DrawableHelper.drawTexture(matrices, this.getX(), this.getY(), 29, 206, this.getWidth(), this.getHeight()); + context.drawTexture(BACKGROUND_TEXTURE, this.getX(), this.getY(), 29, 206, this.getWidth(), this.getHeight()); // client.getItemRenderer().renderInGui(this.itemStack, this.x + 4, this.y + 4); - client.getItemRenderer().renderInGui(matrices, this.itemStack, this.getX() + 4, this.getY() + 4); + context.drawItem(this.itemStack, this.getX() + 4, this.getY() + 4); // client.getItemRenderer().renderGuiItemOverlay(client.textRenderer, itemStack, this.x + 4, this.y + 4); - client.getItemRenderer().renderGuiItemOverlay(matrices, client.textRenderer, itemStack, this.getX() + 4, this.getY() + 4); + context.drawItemInSlot(client.textRenderer, itemStack, this.getX() + 4, this.getY() + 4); } - public void renderTooltip(MatrixStack matrices, int mouseX, int mouseY) { + public void renderTooltip(DrawContext context, int mouseX, int mouseY) { MinecraftClient client = MinecraftClient.getInstance(); - List tooltip = client.currentScreen.getTooltipFromItem(this.itemStack); + List tooltip = client.currentScreen.getTooltipFromItem(client, this.itemStack); + List orderedTooltip = new ArrayList<>(); + + for(int i = 0; i < tooltip.size(); i++) orderedTooltip.add(tooltip.get(i).asOrderedText()); + // TODO : add null check with log error - client.currentScreen.renderTooltip(matrices, tooltip, mouseX, mouseY); + client.currentScreen.setTooltip(orderedTooltip); + client.currentScreen.renderWithTooltip(context, mouseX, mouseY, mouseY); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java index ce53112b..058495a2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java @@ -2,6 +2,8 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.widget.ToggleButtonWidget; import net.minecraft.client.util.math.MatrixStack; @@ -106,32 +108,33 @@ public class SearchResultsWidget implements Drawable { this.nextPageButton.active = this.currentPage < this.pageCount - 1; } - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; RenderSystem.disableDepthTest(); if (this.displayRecipes) { String craftText = this.recipeResults.get(this.currentPage).craftText; - this.client.textRenderer.drawWithShadow(matrices, craftText, this.parentX + 11, this.parentY + 31, 0xffffffff); + context.drawTextWithShadow(textRenderer, craftText, this.parentX + 11, this.parentY + 31, 0xffffffff); Text resultText = this.recipeResults.get(this.currentPage).result.getName(); - this.client.textRenderer.drawWithShadow(matrices, resultText, this.parentX + 11, this.parentY + 43, 0xffffffff); - this.client.textRenderer.drawWithShadow(matrices, "▶", this.parentX + 96, this.parentY + 90, 0xaaffffff); + context.drawTextWithShadow(textRenderer, resultText, this.parentX + 11, this.parentY + 43, 0xffffffff); + context.drawTextWithShadow(textRenderer, "▶", this.parentX + 96, this.parentY + 90, 0xaaffffff); } for (ResultButtonWidget button : resultButtons) - button.render(matrices, mouseX, mouseY, delta); + button.render(context, mouseX, mouseY, delta); if (this.pageCount > 1) { String string = (this.currentPage + 1) + "/" + this.pageCount; int dx = this.client.textRenderer.getWidth(string) / 2; - this.client.textRenderer.draw(matrices, string, this.parentX - dx + 73, this.parentY + 141, -1); + context.drawText(textRenderer, string, this.parentX - dx + 73, this.parentY + 141, -1, false); } - if (this.prevPageButton.active) this.prevPageButton.render(matrices, mouseX, mouseY, delta); - if (this.nextPageButton.active) this.nextPageButton.render(matrices, mouseX, mouseY, delta); + if (this.prevPageButton.active) this.prevPageButton.render(context, mouseX, mouseY, delta); + if (this.nextPageButton.active) this.nextPageButton.render(context, mouseX, mouseY, delta); RenderSystem.enableDepthTest(); } - public void drawTooltip(MatrixStack matrices, int mouseX, int mouseY) { + public void drawTooltip(DrawContext context, int mouseX, int mouseY) { RenderSystem.disableDepthTest(); for (ResultButtonWidget button : resultButtons) if (button.isMouseOver(mouseX, mouseY)) - button.renderTooltip(matrices, mouseX, mouseY); + button.renderTooltip(context, mouseX, mouseY); RenderSystem.enableDepthTest(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java index 7269840a..c02463a3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -7,7 +7,7 @@ import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; @@ -64,41 +64,41 @@ public class QuickNavButton extends ClickableWidget { } @Override - public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) { + public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { this.updateCoordinates(); - RenderSystem.setShaderTexture(0, BUTTON_TEXTURE); + MatrixStack matrices = context.getMatrices(); RenderSystem.disableDepthTest(); // render button background if (!this.toggled) { if (this.index >= 6) // this.drawTexture(matrices, this.x, this.y + 4, this.u, this.v + 4, this.width, this.height - 4); - DrawableHelper.drawTexture(matrices, this.getX(), this.getY() + 4, this.u, this.v + 4, this.width, this.height - 4); + context.drawTexture(BUTTON_TEXTURE, this.getX(), this.getY() + 4, this.u, this.v + 4, this.width, this.height - 4); else // this.drawTexture(matrices, this.x, this.y, this.u, this.v, this.width, this.height - 4); - DrawableHelper.drawTexture(matrices, this.getX(), this.getY() - 2, this.u, this.v, this.width, this.height - 4); + context.drawTexture(BUTTON_TEXTURE, this.getX(), this.getY() - 2, this.u, this.v, this.width, this.height - 4); // } else this.drawTexture(matrices, this.x, this.y, this.u, this.v, this.width, this.height); } else { matrices.push(); //Move the top buttons 2 pixels up if they're selected if (this.index < 6) matrices.translate(0f, -2f, 0f); - DrawableHelper.drawTexture(matrices, this.getX(), this.getY(), this.u, this.v, this.width, this.height); + context.drawTexture(BUTTON_TEXTURE, this.getX(), this.getY(), this.u, this.v, this.width, this.height); matrices.pop(); } // render button icon if (!this.toggled) { if (this.index >= 6) // CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 6); - CLIENT.getItemRenderer().renderInGui(matrices, this.icon,this.getX() + 5, this.getY() + 6); + context.drawItem(this.icon,this.getX() + 5, this.getY() + 6); else // CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 9); - CLIENT.getItemRenderer().renderInGui(matrices, this.icon,this.getX() + 5, this.getY() + 7); + context.drawItem(this.icon,this.getX() + 5, this.getY() + 7); } else { if (this.index >= 6) // CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 9); - CLIENT.getItemRenderer().renderInGui(matrices, this.icon,this.getX() + 5, this.getY() + 9); + context.drawItem(this.icon,this.getX() + 5, this.getY() + 9); else // CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 6); - CLIENT.getItemRenderer().renderInGui(matrices, this.icon,this.getX() + 5, this.getY() + 6); + context.drawItem(this.icon,this.getX() + 5, this.getY() + 6); } RenderSystem.enableDepthTest(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index 43b7f956..2ed15f27 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -23,6 +23,7 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.HomePlayerScree import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.PlayerListScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @@ -98,9 +99,9 @@ public class Screen { } } - public void render(MatrixStack ms) { + public void render(DrawContext context) { for (Widget w : widgets) { - w.render(ms); + w.render(context); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index 6b96c151..33f77933 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -10,7 +10,7 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; @@ -103,14 +103,15 @@ public abstract class Widget { /** * Draw this widget with a background */ - public final void render(MatrixStack ms) { - this.render(ms, true); + public final void render(DrawContext context) { + this.render(context, true); } /** * Draw this widget, possibly with a background */ - public final void render(MatrixStack ms, boolean hasBG) { + public final void render(DrawContext context, boolean hasBG) { + MatrixStack ms = context.getMatrices(); // not sure if this is the way to go, but it fixes Z-layer issues // like blocks being rendered behind the BG and the hotbar clipping into things @@ -123,9 +124,9 @@ public abstract class Widget { // move above other UI elements ms.translate(0, 0, 200); if (hasBG) { - DrawableHelper.fill(ms, x + 1, y, x + w - 1, y + h, COL_BG_BOX); - DrawableHelper.fill(ms, x, y + 1, x + 1, y + h - 1, COL_BG_BOX); - DrawableHelper.fill(ms, x + w - 1, y + 1, x + w, y + h - 1, COL_BG_BOX); + context.fill(x + 1, y, x + w - 1, y + h, COL_BG_BOX); + context.fill(x, y + 1, x + 1, y + h - 1, COL_BG_BOX); + context.fill(x + w - 1, y + 1, x + w, y + h - 1, COL_BG_BOX); } // move above background (if exists) ms.translate(0, 0, 100); @@ -133,19 +134,19 @@ public abstract class Widget { int strHeightHalf = Widget.txtRend.fontHeight / 2; int strAreaWidth = Widget.txtRend.getWidth(title) + 4; - txtRend.draw(ms, title, x + 8, y + 2, this.color); + context.drawText(txtRend, title, x + 8, y + 2, this.color, false); - this.drawHLine(ms, x + 2, y + 1 + strHeightHalf, 4); - this.drawHLine(ms, x + 2 + strAreaWidth + 4, y + 1 + strHeightHalf, w - 4 - 4 - strAreaWidth); - this.drawHLine(ms, x + 2, y + h - 2, w - 4); + this.drawHLine(context, x + 2, y + 1 + strHeightHalf, 4); + this.drawHLine(context, x + 2 + strAreaWidth + 4, y + 1 + strHeightHalf, w - 4 - 4 - strAreaWidth); + this.drawHLine(context, x + 2, y + h - 2, w - 4); - this.drawVLine(ms, x + 1, y + 2 + strHeightHalf, h - 4 - strHeightHalf); - this.drawVLine(ms, x + w - 2, y + 2 + strHeightHalf, h - 4 - strHeightHalf); + this.drawVLine(context, x + 1, y + 2 + strHeightHalf, h - 4 - strHeightHalf); + this.drawVLine(context, x + w - 2, y + 2 + strHeightHalf, h - 4 - strHeightHalf); int yOffs = y + BORDER_SZE_N; for (Component c : components) { - c.render(ms, x + BORDER_SZE_W, yOffs); + c.render(context, x + BORDER_SZE_W, yOffs); yOffs += c.getHeight() + Component.PAD_L; } // pop manipulations above @@ -153,12 +154,12 @@ public abstract class Widget { RenderSystem.disableDepthTest(); } - private void drawHLine(MatrixStack ms, int xpos, int ypos, int width) { - DrawableHelper.fill(ms, xpos, ypos, xpos + width, ypos + 1, this.color); + private void drawHLine(DrawContext context, int xpos, int ypos, int width) { + context.fill(xpos, ypos, xpos + width, ypos + 1, this.color); } - private void drawVLine(MatrixStack ms, int xpos, int ypos, int height) { - DrawableHelper.fill(ms, xpos, ypos, xpos + 1, ypos + height, this.color); + private void drawVLine(DrawContext context, int xpos, int ypos, int height) { + context.fill(xpos, ypos, xpos + 1, ypos + height, this.color); } /** diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java index 671b1f41..850cb3d2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java @@ -2,8 +2,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.util.math.MatrixStack; /** * Abstract base class for a component that may be added to a Widget. @@ -15,12 +15,11 @@ public abstract class Component { public static final int PAD_L = 4; static TextRenderer txtRend = MinecraftClient.getInstance().textRenderer; - static ItemRenderer itmRend = MinecraftClient.getInstance().getItemRenderer(); // these should always be the content dimensions without any padding. int width, height; - public abstract void render(MatrixStack ms, int x, int y); + public abstract void render(DrawContext context, int x, int y); public int getWidth() { return this.width; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java index f845eba5..afd05c26 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java @@ -1,7 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -36,10 +36,10 @@ public class IcoFatTextComponent extends Component { } @Override - public void render(MatrixStack ms, int x, int y) { - itmRend.renderGuiItemIcon(ms, ico, x, y + ICO_OFFS); - txtRend.draw(ms, line1, x + ICO_DIM + PAD_L, y, 0xffffffff); - txtRend.draw(ms, line2, x + ICO_DIM + PAD_L, y + txtRend.fontHeight + PAD_S, 0xffffffff); + public void render(DrawContext context, int x, int y) { + context.drawItem(ico, x, y + ICO_OFFS); + context.drawText(txtRend, line1, x + ICO_DIM + PAD_L, y, 0xffffffff, false); + context.drawText(txtRend, line2, x + ICO_DIM + PAD_L, y + txtRend.fontHeight + PAD_S, 0xffffffff, false); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java index 7a495a13..7ab92dd5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java @@ -1,7 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -32,9 +32,9 @@ public class IcoTextComponent extends Component { } @Override - public void render(MatrixStack ms, int x, int y) { - itmRend.renderGuiItemIcon(ms, ico, x, y); - txtRend.draw(ms, text, x + ICO_DIM + PAD_L, y + 5, 0xffffffff); + public void render(DrawContext context, int x, int y) { + context.drawItem(ico, x, y); + context.drawText(txtRend, text, x + ICO_DIM + PAD_L, y + 5, 0xffffffff, false); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java index 265d11f1..34e0268b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -23,8 +23,8 @@ public class PlainTextComponent extends Component { } @Override - public void render(MatrixStack ms, int x, int y) { - txtRend.draw(ms, text, x + PAD_S, y, 0xffffffff); + public void render(DrawContext context, int x, int y) { + context.drawText(txtRend, text, x + PAD_S, y, 0xffffffff, false); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java index 18859080..fd66ec73 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java @@ -1,10 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; -import com.mojang.blaze3d.systems.RenderSystem; - +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.PlayerSkinDrawer; import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; /** @@ -27,10 +25,9 @@ public class PlayerComponent extends Component { } @Override - public void render(MatrixStack ms, int x, int y) { - RenderSystem.setShaderTexture(0, tex); - PlayerSkinDrawer.draw(ms, x, y, SKIN_ICO_DIM); - txtRend.draw(ms, name, x + SKIN_ICO_DIM + PAD_S, y, 0xffffffff); + public void render(DrawContext context, int x, int y) { + PlayerSkinDrawer.draw(context, tex, x, y, SKIN_ICO_DIM); + context.drawText(txtRend, name, x + SKIN_ICO_DIM + PAD_S, y, 0xffffffff, false); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java index b9ebc0e9..a7cc8d12 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java @@ -1,8 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -55,16 +54,16 @@ public class ProgressComponent extends Component { } @Override - public void render(MatrixStack ms, int x, int y) { - itmRend.renderGuiItemIcon(ms, ico, x, y + ICO_OFFS); - txtRend.draw(ms, desc, x + ICO_DIM + PAD_L, y, 0xffffffff); + public void render(DrawContext context, int x, int y) { + context.drawItem(ico, x, y + ICO_OFFS); + context.drawText(txtRend, desc, x + ICO_DIM + PAD_L, y, 0xffffffff, false); int barX = x + ICO_DIM + PAD_L; int barY = y + txtRend.fontHeight + PAD_S; int endOffsX = ((int) (this.barW * (this.pcnt / 100f))); - DrawableHelper.fill(ms, barX + endOffsX, barY, barX + this.barW, barY + BAR_HEIGHT, COL_BG_BAR); - DrawableHelper.fill(ms, barX, barY, barX + endOffsX, barY + BAR_HEIGHT, + context.fill(barX + endOffsX, barY, barX + this.barW, barY + BAR_HEIGHT, COL_BG_BAR); + context.fill(barX, barY, barX + endOffsX, barY + BAR_HEIGHT, this.color); - txtRend.drawWithShadow(ms, bar, barX + 3, barY + 2, 0xffffffff); + context.drawTextWithShadow(txtRend, bar, barX + 3, barY + 2, 0xffffffff); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java index 5d49be2c..30287dc0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java @@ -1,7 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; /** * Meta-Component that consists of a grid of other components @@ -38,11 +37,11 @@ public class TableComponent extends Component { } @Override - public void render(MatrixStack ms, int xpos, int ypos) { + public void render(DrawContext context, int xpos, int ypos) { for (int x = 0; x < cols; x++) { for (int y = 0; y < rows; y++) { if (comps[x][y] != null) { - comps[x][y].render(ms, xpos + (x * cellW), ypos + y * cellH); + comps[x][y].render(context, xpos + (x * cellW), ypos + y * cellH); } } // add a line before the col if we're not drawing the first one @@ -51,7 +50,7 @@ public class TableComponent extends Component { int lineX2 = xpos + (x * cellW) - PAD_S; int lineY1 = ypos + 1; int lineY2 = ypos + this.height - PAD_S - 1; // not sure why but it looks correct - DrawableHelper.fill(ms, lineX1, lineY1, lineX2, lineY2, this.color); + context.fill(lineX1, lineY1, lineX2, lineY2, this.color); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java b/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java index 7a0ad754..919975b0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java @@ -3,11 +3,10 @@ package me.xmrvizzy.skyblocker.utils; import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.toast.Toast; import net.minecraft.client.toast.ToastManager; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @Environment(value= EnvType.CLIENT) @@ -21,14 +20,13 @@ public class ToastBuilder implements Toast { } @Override - public Toast.Visibility draw(MatrixStack matrices, ToastManager manager, long startTime) { - RenderSystem.setShader(GameRenderer::getPositionTexProgram); - RenderSystem.setShaderTexture(0, TEXTURE); + public Toast.Visibility draw(DrawContext context, ToastManager manager, long startTime) { + TextRenderer textRenderer = manager.getClient().textRenderer; RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - DrawableHelper.drawTexture(matrices, 0, 0, 0, 0, this.getWidth(), this.getHeight()); - manager.getClient().textRenderer.draw(matrices, title, 7.0f, 7.0f, -11534256); - manager.getClient().textRenderer.draw(matrices, description, 7.0f, 18.0f, -16777216); + context.drawTexture(TEXTURE, 0, 0, 0, 0, this.getWidth(), this.getHeight()); + context.drawText(textRenderer, title, 7, 7, -11534256, false); + context.drawText(textRenderer, description, 7, 18, -16777216, false); return startTime >= 3000L ? Toast.Visibility.HIDE : Toast.Visibility.SHOW; } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 14c1e6f1..b407b737 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,9 +30,9 @@ ], "depends": { "fabricloader": ">=0.14.19", - "fabric-api": ">=0.81.0+1.19.4", + "fabric-api": ">=0.80.2+1.20", "cloth-config2": "*", - "minecraft": "~1.19.4" + "minecraft": "~1.20-beta.1" }, "custom": { "modmenu": { diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 6fa2596a..f8b39c93 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -6,20 +6,18 @@ "AccessorWorldRenderer", "ClientPlayerEntityMixin", "ClientPlayNetworkHandlerMixin", + "DrawContextMixin", "FarmlandBlockMixin", "GenericContainerScreenHandlerMixin", "HandledScreenAccessor", "HandledScreenMixin", "InGameHudMixin", "InventoryScreenMixin", - "ItemRendererMixin", "LeverBlockMixin", "MinecraftClientMixin", - "RecipeBookWidgetAccessor", - "HandledScreenAccessor", "PlayerListHudAccessor", "PlayerListHudMixin", - "ScreenMixin" + "RecipeBookWidgetAccessor" ], "injectors": { "defaultRequire": 1 -- cgit From dddb48315bd373b4e19f6a45da6ad21eacc26ff9 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 11 May 2023 01:57:03 -0400 Subject: Fix null check being useless --- .../java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 30aa1ed2..2638db7e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -39,9 +39,11 @@ public abstract class HandledScreenMixin extends Screen { @Inject(at = @At("HEAD"), method = "drawMouseoverTooltip", cancellable = true) public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) { //Hide Empty Tooltips - Text stackName = focusedSlot.getStack().getName(); - String strName = stackName.getString(); - if(this.focusedSlot != null && Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) ci.cancel(); + if(this.focusedSlot != null) { + Text stackName = focusedSlot.getStack().getName(); + String strName = stackName.getString(); + if(Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) ci.cancel(); + } //Backpack Preview String title = this.getTitle().getString(); -- cgit From 866e3a036fadd35032917a66894a7a656fbbead5 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 17 May 2023 23:24:00 -0400 Subject: 1.20-pre2 --- gradle.properties | 6 +++--- src/main/resources/fabric.mod.json | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7b8af977..a905e0d5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.19.4 -minecraft_version=1.20-pre1 -yarn_mappings=1.20-pre1+build.4 +minecraft_version=1.20-pre2 +yarn_mappings=1.20-pre2+build.1 loader_version=0.14.19 #Fabric api ## 1.19.4 -fabric_api_version=0.80.2+1.20 +fabric_api_version=0.81.2+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b407b737..f9089c9a 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,9 +30,9 @@ ], "depends": { "fabricloader": ">=0.14.19", - "fabric-api": ">=0.80.2+1.20", + "fabric-api": ">=0.81.2+1.20", "cloth-config2": "*", - "minecraft": "~1.20-beta.1" + "minecraft": "~1.20-beta.2" }, "custom": { "modmenu": { -- cgit From c108bf1e72f52b011db493bd452022a7ae8901fc Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 20 May 2023 12:48:53 -0400 Subject: 1.20-pre4 --- gradle.properties | 4 ++-- src/main/resources/fabric.mod.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index a905e0d5..29e15b0b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,8 +2,8 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.19.4 -minecraft_version=1.20-pre2 -yarn_mappings=1.20-pre2+build.1 +minecraft_version=1.20-pre4 +yarn_mappings=1.20-pre4+build.3 loader_version=0.14.19 #Fabric api diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f9089c9a..80588b7e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -32,7 +32,7 @@ "fabricloader": ">=0.14.19", "fabric-api": ">=0.81.2+1.20", "cloth-config2": "*", - "minecraft": "~1.20-beta.2" + "minecraft": "~1.20-beta.4" }, "custom": { "modmenu": { -- cgit From 0a07a44eab9b65dd2fe5d2e3b69b6122b4cddd68 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 27 May 2023 04:15:00 -0400 Subject: 1.20-pre6 --- gradle.properties | 8 ++++---- src/main/resources/fabric.mod.json | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index 29e15b0b..f5f10ba5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.19.4 -minecraft_version=1.20-pre4 -yarn_mappings=1.20-pre4+build.3 -loader_version=0.14.19 +minecraft_version=1.20-pre6 +yarn_mappings=1.20-pre6+build.2 +loader_version=0.14.21 #Fabric api ## 1.19.4 -fabric_api_version=0.81.2+1.20 +fabric_api_version=0.82.1+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 80588b7e..fa0c44d8 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -29,10 +29,10 @@ "skyblocker.mixins.json" ], "depends": { - "fabricloader": ">=0.14.19", - "fabric-api": ">=0.81.2+1.20", + "fabricloader": ">=0.14.21", + "fabric-api": ">=0.82.1.20", "cloth-config2": "*", - "minecraft": "~1.20-beta.4" + "minecraft": "~1.20-beta.6" }, "custom": { "modmenu": { -- cgit From ddf96fa87a28c8f2d664a31d0c5ffdaffc14f8c4 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 5 Jun 2023 00:15:43 -0400 Subject: Trails and Talesify things! --- README.md | 2 +- gradle.properties | 10 +++++----- src/main/resources/fabric.mod.json | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 00a172d5..e5a78047 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![Discord](https://img.shields.io/discord/879732108745125969?logo=discord&labelColor=cecece&color=7289DA&label=)](https://discord.com/invite/aNNJHQykck) [![modrinth statistic](https://img.shields.io/badge/buy%20me%20coffee-skyblocker?color=434B57&logo=kofi)](https://ko-fi.com/wohlhabend) -Hypixel Skyblock Mod for Minecraft 1.17.x + 1.18.x + 1.19.x +Hypixel Skyblock Mod for Minecraft 1.17.x + 1.18.x + 1.19.x + 1.20 Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/installation) diff --git a/gradle.properties b/gradle.properties index f5f10ba5..556932c1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,14 +1,14 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.country=US # Fabric Properties (https://fabricmc.net/versions.html) -## 1.19.4 -minecraft_version=1.20-pre6 -yarn_mappings=1.20-pre6+build.2 +## 1.20 +minecraft_version=1.20-rc1 +yarn_mappings=1.20-rc1+build.2 loader_version=0.14.21 #Fabric api -## 1.19.4 -fabric_api_version=0.82.1+1.20 +## 1.20 +fabric_api_version=0.83.0+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index fa0c44d8..661bfda5 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,9 +30,9 @@ ], "depends": { "fabricloader": ">=0.14.21", - "fabric-api": ">=0.82.1.20", + "fabric-api": ">=0.83.0+1.20", "cloth-config2": "*", - "minecraft": "~1.20-beta.6" + "minecraft": "~1.20-rc.1" }, "custom": { "modmenu": { -- cgit From afe72f1857428dfdf7d9788992b5ff1b518c8a9c Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 7 Jun 2023 12:03:54 -0400 Subject: 1.20 --- gradle.properties | 6 +++--- src/main/resources/fabric.mod.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index 556932c1..3d1c4190 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,8 +2,8 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.20 -minecraft_version=1.20-rc1 -yarn_mappings=1.20-rc1+build.2 +minecraft_version=1.20 +yarn_mappings=1.20+build.1 loader_version=0.14.21 #Fabric api @@ -12,7 +12,7 @@ fabric_api_version=0.83.0+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) -clothconfig_version=10.0.96 +clothconfig_version=11.0.98 ## Mod Menu (https://www.curseforge.com/minecraft/mc-mods/modmenu/files) mod_menu_version=7.0.0-beta.2 ## REI (https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items/files) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 661bfda5..ead46adc 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -32,7 +32,7 @@ "fabricloader": ">=0.14.21", "fabric-api": ">=0.83.0+1.20", "cloth-config2": "*", - "minecraft": "~1.20-rc.1" + "minecraft": "~1.20" }, "custom": { "modmenu": { -- cgit From fad36a20ca0b05dc1004c0453eeddc335b3848e4 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 7 Jun 2023 13:01:52 -0400 Subject: Fix recipe book crash --- .../skyblocker/skyblock/itemlist/ResultButtonWidget.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java index 8b0fe91d..12636ce1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java @@ -9,6 +9,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.render.GameRenderer; @@ -52,14 +53,14 @@ public class ResultButtonWidget extends ClickableWidget { public void renderTooltip(DrawContext context, int mouseX, int mouseY) { MinecraftClient client = MinecraftClient.getInstance(); - List tooltip = client.currentScreen.getTooltipFromItem(client, this.itemStack); + List tooltip = Screen.getTooltipFromItem(client, this.itemStack); List orderedTooltip = new ArrayList<>(); - - for(int i = 0; i < tooltip.size(); i++) orderedTooltip.add(tooltip.get(i).asOrderedText()); - - // TODO : add null check with log error + + for(int i = 0; i < tooltip.size(); i++) { + orderedTooltip.add(tooltip.get(i).asOrderedText()); + } + client.currentScreen.setTooltip(orderedTooltip); - client.currentScreen.renderWithTooltip(context, mouseX, mouseY, mouseY); } @Override -- cgit From 9e142941684bb40fe48f7f68bcd456894d3acd57 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 7 Jun 2023 13:13:24 -0400 Subject: Fix drill fuel Z layering --- .../java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java index ccbeaca2..0c28491d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -5,6 +5,8 @@ import java.util.regex.Pattern; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -16,12 +18,15 @@ import me.xmrvizzy.skyblocker.utils.ItemUtils; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.ColorHelper; @Mixin(DrawContext.class) public abstract class DrawContextMixin { + @Shadow @Final private MatrixStack matrices; + @Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) public void skyblocker$renderItemBar(TextRenderer textRenderer, ItemStack stack, int x, int y, @Nullable String countOverride, CallbackInfo ci) { @@ -44,13 +49,17 @@ public abstract class DrawContextMixin { } DrawContext context = ((DrawContext) (Object) this); - + matrices.push(); + matrices.translate(0f, 0f, 200f); RenderSystem.disableDepthTest(); + float hue = Math.max(0.0F, 1.0F - (max - current) / max); int width = Math.round(current / max * 13.0F); Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); context.fill(x + 2, y + 13, x + 15, y + 15, 0xFF000000); context.fill(x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); + + matrices.pop(); RenderSystem.enableDepthTest(); } } -- cgit From 8278636bcf13450dfb0d505bd92d4355f7a85db8 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 7 Jun 2023 13:21:29 -0400 Subject: Write drill fuel bar to gui overlay buffer --- src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java index 0c28491d..32163c38 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -18,6 +18,7 @@ import me.xmrvizzy.skyblocker.utils.ItemUtils; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.RenderLayer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -56,8 +57,8 @@ public abstract class DrawContextMixin { float hue = Math.max(0.0F, 1.0F - (max - current) / max); int width = Math.round(current / max * 13.0F); Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); - context.fill(x + 2, y + 13, x + 15, y + 15, 0xFF000000); - context.fill(x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); + context.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 15, y + 15, 0xFF000000); + context.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); matrices.pop(); RenderSystem.enableDepthTest(); -- cgit From 4e00861a7a7bff86a6869cca69e820d118cf0375 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:29:11 -0400 Subject: Replace double cast with shadow --- src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java index 32163c38..a8a490b8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -28,6 +28,10 @@ import net.minecraft.util.math.ColorHelper; public abstract class DrawContextMixin { @Shadow @Final private MatrixStack matrices; + @Shadow + public void fill(RenderLayer layer, int x1, int x2, int y1, int y2, int color) { + } + @Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) public void skyblocker$renderItemBar(TextRenderer textRenderer, ItemStack stack, int x, int y, @Nullable String countOverride, CallbackInfo ci) { @@ -49,7 +53,6 @@ public abstract class DrawContextMixin { } } - DrawContext context = ((DrawContext) (Object) this); matrices.push(); matrices.translate(0f, 0f, 200f); RenderSystem.disableDepthTest(); @@ -57,8 +60,8 @@ public abstract class DrawContextMixin { float hue = Math.max(0.0F, 1.0F - (max - current) / max); int width = Math.round(current / max * 13.0F); Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); - context.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 15, y + 15, 0xFF000000); - context.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); + this.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 15, y + 15, 0xFF000000); + this.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); matrices.pop(); RenderSystem.enableDepthTest(); -- cgit From 067cb5a0ce9e664a88ec36ae5e2fa2e83541686b Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 12 Jun 2023 11:52:24 -0400 Subject: 1.20.1 exists now --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5a78047..9b5e323c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![Discord](https://img.shields.io/discord/879732108745125969?logo=discord&labelColor=cecece&color=7289DA&label=)](https://discord.com/invite/aNNJHQykck) [![modrinth statistic](https://img.shields.io/badge/buy%20me%20coffee-skyblocker?color=434B57&logo=kofi)](https://ko-fi.com/wohlhabend) -Hypixel Skyblock Mod for Minecraft 1.17.x + 1.18.x + 1.19.x + 1.20 +Hypixel Skyblock Mod for Minecraft 1.17.x + 1.18.x + 1.19.x + 1.20.x Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/installation) -- cgit From 79711da8090cfba910ce0cdcc61ab3b491478cf3 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 17 Jun 2023 19:18:36 -0400 Subject: Update REI, Mod Menu and Cloth Config --- gradle.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 3d1c4190..14a4fffc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,11 +12,11 @@ fabric_api_version=0.83.0+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) -clothconfig_version=11.0.98 +clothconfig_version=11.0.99 ## Mod Menu (https://www.curseforge.com/minecraft/mc-mods/modmenu/files) -mod_menu_version=7.0.0-beta.2 +mod_menu_version=7.0.1 ## REI (https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items/files) -rei_version=11.0.597 +rei_version=12.0.625 # Mod Properties mod_version = 1.10.0 -- cgit From 1f15c252969c6c09de7b4b11110b12eccf5e90da Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 17 Jun 2023 21:58:01 -0400 Subject: Improve Crimson Isle Tab HUD Fixed the reputation widget showing "Max -> Reputation" when you're at max reputation The faction quests text now retains its formatting to be more informative about whether you've not started, started or completed a quest --- .../skyblock/tabhud/util/PlayerListMgr.java | 37 ++++++++++++++++++++++ .../skyblock/tabhud/widget/QuestWidget.java | 14 +++++++- .../skyblock/tabhud/widget/ReputationWidget.java | 3 +- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 60915bc1..f797e6d0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,6 +14,7 @@ import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; /** @@ -93,6 +95,41 @@ public class PlayerListMgr { } return str; } + + /** + * Gets the display name at some index of the player list + * + * @return the text or null, if the display name is null + * + * @implNote currently designed specifically for crimson isles faction quests widget, might not work correctly without modification + * for other stuff. you've been warned! + */ + public static Text textAt4FactionQuests(int idx) { + + if(playerList == null) { + return null; + } + + if(playerList.size() <= idx) { + return null; + } + + Text txt = playerList.get(idx).getDisplayName(); + if(txt == null) { + return null; + } + + //Rebuild the text object to remove beginning space thats in all faction quest stuff + MutableText newTxt = Text.empty(); + + for(int i = 0; i < txt.getSiblings().size(); i++) { + Text current = txt.getSiblings().get(i); + String textToAppend = current.getString(); + newTxt.append(Text.literal((i == 0) ? StringUtils.removeStart(textToAppend, " ") : textToAppend ).setStyle(current.getStyle())); + } + + return newTxt; + } /** * Get the display name at some index of the player list as Text as seen in the diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java index 5c89964e..d13513e4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import net.minecraft.text.MutableText; @@ -13,12 +14,23 @@ public class QuestWidget extends Widget { private static final MutableText TITLE = Text.literal("Faction Quests").formatted(Formatting.AQUA, Formatting.BOLD); + + /** + * @return the entry at idx with it's formatting preserved + */ + public static Text passthroughEntryText(int idx) { + Text txt = PlayerListMgr.textAt4FactionQuests(idx); + if(txt == null) { + return null; + } + return txt; + } public QuestWidget() { super(TITLE, Formatting.AQUA.getColorValue()); for (int i = 51; i < 56; i++) { - Text q = Widget.plainEntryText(i); + Text q = passthroughEntryText(i); IcoTextComponent itc = new IcoTextComponent(Ico.BOOK, q); this.addComponent(itc); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java index c0379623..3685e0ca 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java @@ -54,8 +54,9 @@ public class ReputationWidget extends Widget { this.addComponent(new ProgressComponent()); } else { float pcnt = Float.parseFloat(prog.group("prog")); + Text reputationText = state.group("from").equals("Max") ? Text.literal("Max Reputation") : Text.literal(state.group("from") + " -> " + state.group("to")); ProgressComponent pc = new ProgressComponent(Ico.LANTERN, - Text.of(state.group("from") + " -> " + state.group("to")), rep, pcnt, + reputationText, rep, pcnt, Formatting.AQUA.getColorValue()); this.addComponent(pc); } -- cgit From 3c2ec1e9dc7dbcfff9f030619b0f088460841f21 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 18 Jun 2023 13:15:25 -0400 Subject: Small code changes --- .../skyblocker/skyblock/tabhud/util/PlayerListMgr.java | 2 +- .../skyblocker/skyblock/tabhud/widget/QuestWidget.java | 13 +------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index f797e6d0..665fc981 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -104,7 +104,7 @@ public class PlayerListMgr { * @implNote currently designed specifically for crimson isles faction quests widget, might not work correctly without modification * for other stuff. you've been warned! */ - public static Text textAt4FactionQuests(int idx) { + public static Text textAt(int idx) { if(playerList == null) { return null; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java index d13513e4..43b741ba 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java @@ -14,23 +14,12 @@ public class QuestWidget extends Widget { private static final MutableText TITLE = Text.literal("Faction Quests").formatted(Formatting.AQUA, Formatting.BOLD); - - /** - * @return the entry at idx with it's formatting preserved - */ - public static Text passthroughEntryText(int idx) { - Text txt = PlayerListMgr.textAt4FactionQuests(idx); - if(txt == null) { - return null; - } - return txt; - } public QuestWidget() { super(TITLE, Formatting.AQUA.getColorValue()); for (int i = 51; i < 56; i++) { - Text q = passthroughEntryText(i); + Text q = PlayerListMgr.textAt(i); IcoTextComponent itc = new IcoTextComponent(Ico.BOOK, q); this.addComponent(itc); } -- cgit From b21711bf9f5fcc5b28235a44d659e3ae4b5f6e7d Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Mon, 19 Jun 2023 00:52:02 +0200 Subject: Possibly shorter solution + tests added --- .../skyblocker/chat/ChatMessageListener.java | 4 +- .../skyblocker/skyblock/dungeon/Reparty.java | 94 ++++++++++++++++++++++ .../skyblock/dungeon/reparty/AcceptReparty.java | 40 --------- .../skyblock/dungeon/reparty/Reparty.java | 88 -------------------- .../skyblock/dungeon/AcceptRepartyTest.java | 35 ++++++++ 5 files changed, 130 insertions(+), 131 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java create mode 100644 src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java index da0f7ef9..f502a356 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -4,8 +4,7 @@ import me.xmrvizzy.skyblocker.chat.filters.*; import me.xmrvizzy.skyblocker.skyblock.api.ApiKeyListener; import me.xmrvizzy.skyblocker.skyblock.barn.HungryHiker; import me.xmrvizzy.skyblocker.skyblock.barn.TreasureHunter; -import me.xmrvizzy.skyblocker.skyblock.dungeon.reparty.AcceptReparty; -import me.xmrvizzy.skyblocker.skyblock.dungeon.reparty.Reparty; +import me.xmrvizzy.skyblocker.skyblock.dungeon.Reparty; import me.xmrvizzy.skyblocker.skyblock.dungeon.ThreeWeirdos; import me.xmrvizzy.skyblocker.skyblock.dungeon.Trivia; import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur; @@ -42,7 +41,6 @@ public interface ChatMessageListener { new Fetchur(), new Puzzler(), new Reparty(), - new AcceptReparty(), new ThreeWeirdos(), new Trivia(), new TreasureHunter(), diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java new file mode 100644 index 00000000..8becd757 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -0,0 +1,94 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.text.Text; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Reparty extends ChatPatternListener { + private static final MinecraftClient client = MinecraftClient.getInstance(); + private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); + public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); + private static final int BASE_DELAY = 10; + + private String[] players; + private int playersSoFar; + private boolean repartying; + private String partyLeader; + + public Reparty() { + super("^(?:You are not currently in a party\\." + + "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" + + "|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded .*" + + "|.*\n([\\[A-z+\\]]* )?(?[A-z0-9_]*) has invited you to join their party!" + + "\nYou have 60 seconds to accept. Click here to join!\n.*)$"); + + this.repartying = false; + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { + if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0; + this.repartying = true; + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/p list"); + return 0; + }))); + } + + @Override + public ChatFilterResult state() { + return (SkyblockerConfig.get().general.acceptReparty || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + } + + @Override + public boolean onMatch(Text message, Matcher matcher) { + if (matcher.group(1) != null && repartying) { + this.playersSoFar = 0; + this.players = new String[Integer.parseInt(matcher.group(1)) - 1]; + } else if (matcher.group(2) != null && repartying) { + Matcher m = PLAYER.matcher(matcher.group(2)); + while (m.find()) { + this.players[playersSoFar++] = m.group(1); + } + } else if (matcher.group("disband") != null && !matcher.group("disband").equals(client.getSession().getUsername())) { + partyLeader = matcher.group("disband"); + skyblocker.scheduler.schedule(() -> partyLeader = null, 21); + return false; + } else if (matcher.group("invite") != null && matcher.group("invite").equals(partyLeader)) { + String command = "/party accept " + partyLeader; + sendCommand(command, 0); + return false; + } else { + this.repartying = false; + return false; + } + if (this.playersSoFar == this.players.length) { + reparty(); + } + return false; + } + + private void reparty() { + ClientPlayerEntity playerEntity = client.player; + if (playerEntity == null) { + this.repartying = false; + return; + } + sendCommand("/p disband", 1); + for (int i = 0; i < this.players.length; ++i) { + String command = "/p invite " + this.players[i]; + sendCommand(command, i + 2); + } + skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); + } + + private void sendCommand(String command, int delay) { + skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY); + } +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java deleted file mode 100644 index 21513fc6..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java +++ /dev/null @@ -1,40 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.dungeon.reparty; - -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.chat.ChatFilterResult; -import me.xmrvizzy.skyblocker.chat.ChatPatternListener; -import net.minecraft.text.Text; - -import java.util.regex.Matcher; - -import static me.xmrvizzy.skyblocker.skyblock.dungeon.reparty.Reparty.partyLeader; - -public class AcceptReparty extends ChatPatternListener { - - private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); - - public AcceptReparty() { - super("-----------------------------------------------------" + - "\n([\\[A-z+\\]]* )?(?[A-z0-9_]*) has invited you to join their party!" + - "\nYou have 60 seconds to accept. Click here to join!" + - "\n-----------------------------------------------------"); - } - - @Override - protected ChatFilterResult state() { - return (partyLeader != null) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; - } - - @Override - protected boolean onMatch(Text message, Matcher matcher) { - try { - if (matcher.group("name").equals(partyLeader)) { - skyblocker.messageScheduler.sendMessageAfterCooldown("/party accept " + partyLeader); - } - } catch (NullPointerException e) { - // In case if block executes after setting "partyLeader" variable to null - } - partyLeader = null; - return false; - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java deleted file mode 100644 index 1bff342f..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java +++ /dev/null @@ -1,88 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.dungeon.reparty; - -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.chat.ChatFilterResult; -import me.xmrvizzy.skyblocker.chat.ChatPatternListener; -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.text.Text; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class Reparty extends ChatPatternListener { - private static final MinecraftClient client = MinecraftClient.getInstance(); - private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); - public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); - private static final int BASE_DELAY = 10; - - public static String partyLeader; - private String[] players; - private int playersSoFar; - private boolean repartying; - - public Reparty() { - super("^(?:You are not currently in a party\\." + - "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" + - "|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)$"); - - this.repartying = false; - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { - if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0; - this.repartying = true; - SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/p list"); - return 0; - }))); - } - - @Override - public ChatFilterResult state() { - return (SkyblockerConfig.get().general.acceptReparty || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; - } - - @Override - public boolean onMatch(Text message, Matcher matcher) { - if (matcher.group(1) != null && repartying) { - this.playersSoFar = 0; - this.players = new String[Integer.parseInt(matcher.group(1)) - 1]; - } else if (matcher.group(2) != null && repartying) { - Matcher m = PLAYER.matcher(matcher.group(2)); - while (m.find()) { - this.players[playersSoFar++] = m.group(1); - } - } else if (matcher.group("name") != null && !matcher.group("name").equals(client.getSession().getUsername())) { - partyLeader = matcher.group("name"); - skyblocker.scheduler.schedule(() -> partyLeader = null, 20); - return false; - } else { - this.repartying = false; - return false; - } - if (this.playersSoFar == this.players.length && repartying) { - reparty(); - } - return false; - } - - private void reparty() { - ClientPlayerEntity playerEntity = client.player; - if (playerEntity == null) { - this.repartying = false; - return; - } - sendCommand("/p disband", 1); - for (int i = 0; i < this.players.length; ++i) { - String command = "/p invite " + this.players[i]; - sendCommand(command, i + 2); - } - skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); - } - - private void sendCommand(String command, int delay) { - skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY); - } -} diff --git a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java new file mode 100644 index 00000000..0fd0363b --- /dev/null +++ b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java @@ -0,0 +1,35 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon; + +import me.xmrvizzy.skyblocker.chat.ChatPatternListenerTest; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.regex.Matcher; + +public class AcceptRepartyTest extends ChatPatternListenerTest { + + public AcceptRepartyTest() { super(new Reparty()); } + + protected void assertGroup(String message, String group, String expect) { + Matcher matcher = matcher(message); + assertTrue(matcher.matches()); + assertEquals(expect, matcher.group(group)); + } + + @Test + void testDisband() { + assertGroup("[VIP+] KoloiYolo has disbanded the party!", + /* group: */ "disband", + /* expect: */ "KoloiYolo"); + } + + @Test + void testInvite() { + assertGroup("-----------------------------------------------------" + + "\nStefan has invited you to join their party!" + + "\nYou have 60 seconds to accept. Click here to join!" + + "\n-----------------------------------------------------", + /* group: */ "invite", + /* expect: */ "Stefan"); + } +} \ No newline at end of file -- cgit From f3dd77b530bc3fb0866b16eea334fdbe3b5642de Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 19 Jun 2023 23:30:58 -0400 Subject: Improve documentation and trim trailing space --- .../skyblocker/skyblock/tabhud/util/PlayerListMgr.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 665fc981..82a4ae01 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -119,16 +119,22 @@ public class PlayerListMgr { return null; } - //Rebuild the text object to remove beginning space thats in all faction quest stuff - MutableText newTxt = Text.empty(); + //Rebuild the text object to remove leading space thats in all faction quest stuff (also removes trailing space just in case) + MutableText newText = Text.empty(); + int size = txt.getSiblings().size(); - for(int i = 0; i < txt.getSiblings().size(); i++) { + for(int i = 0; i < size; i++) { Text current = txt.getSiblings().get(i); String textToAppend = current.getString(); - newTxt.append(Text.literal((i == 0) ? StringUtils.removeStart(textToAppend, " ") : textToAppend ).setStyle(current.getStyle())); + + //Trim leading & trailing space - this can only be done at the start and end otherwise it'll produce malformed results + if(i == 0) textToAppend = StringUtils.removeStart(textToAppend, " "); + if(i == size - 1) textToAppend = StringUtils.removeEnd(textToAppend, " "); + + newText.append(Text.literal(textToAppend).setStyle(current.getStyle())); } - return newTxt; + return newText; } /** -- cgit From bc8f4c4f75432a6e516c86990a1e6f52136b21a3 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 19 Jun 2023 23:31:55 -0400 Subject: Format file --- .../skyblock/tabhud/util/PlayerListMgr.java | 259 +++++++++++---------- 1 file changed, 130 insertions(+), 129 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 82a4ae01..5ace64ea 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -18,137 +18,138 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; /** - * This class may be used to get data from the player list. - * It doesn't get its data every frame, instead, a scheduler is used to - * update the data this class is holding periodically. - * The list is sorted like in the vanilla game. + * This class may be used to get data from the player list. It doesn't get its + * data every frame, instead, a scheduler is used to update the data this class + * is holding periodically. The list is sorted like in the vanilla game. */ public class PlayerListMgr { - public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Regex"); - - private static List playerList; - - public static void updateList() { - - if (!Utils.isOnSkyblock()) { - return; - } - - ClientPlayNetworkHandler cpnwh = MinecraftClient.getInstance().getNetworkHandler(); - - // check is needed, else game crash on server leave - if (cpnwh != null) { - playerList = cpnwh.getPlayerList() - .stream() - .sorted(PlayerListHudAccessor.getOrdering()) - .toList(); - } - } - - /** - * Get the display name at some index of the player list and apply a pattern to - * it - * - * @return the matcher if p fully matches, else null - */ - public static Matcher regexAt(int idx, Pattern p) { - - String str = PlayerListMgr.strAt(idx); - - if (str == null) { - return null; - } - - Matcher m = p.matcher(str); - if (!m.matches()) { - LOGGER.error("no match: \"{}\" against \"{}\"", str, p); - return null; - } else { - return m; - } - } - - /** - * Get the display name at some index of the player list as string - * - * @return the string or null, if the display name is null, empty or whitespace - * only - */ - public static String strAt(int idx) { - - if (playerList == null) { - return null; - } - - if (playerList.size() <= idx) { - return null; - } - - Text txt = playerList.get(idx).getDisplayName(); - if (txt == null) { - return null; - } - String str = txt.getString().trim(); - if (str.length() == 0) { - return null; - } - return str; - } - - /** - * Gets the display name at some index of the player list - * - * @return the text or null, if the display name is null - * - * @implNote currently designed specifically for crimson isles faction quests widget, might not work correctly without modification - * for other stuff. you've been warned! - */ - public static Text textAt(int idx) { - - if(playerList == null) { - return null; - } - - if(playerList.size() <= idx) { - return null; - } - - Text txt = playerList.get(idx).getDisplayName(); - if(txt == null) { - return null; - } - - //Rebuild the text object to remove leading space thats in all faction quest stuff (also removes trailing space just in case) - MutableText newText = Text.empty(); - int size = txt.getSiblings().size(); - - for(int i = 0; i < size; i++) { - Text current = txt.getSiblings().get(i); - String textToAppend = current.getString(); - - //Trim leading & trailing space - this can only be done at the start and end otherwise it'll produce malformed results - if(i == 0) textToAppend = StringUtils.removeStart(textToAppend, " "); - if(i == size - 1) textToAppend = StringUtils.removeEnd(textToAppend, " "); - - newText.append(Text.literal(textToAppend).setStyle(current.getStyle())); - } - - return newText; - } - - /** - * Get the display name at some index of the player list as Text as seen in the - * game - * - * @return the PlayerListEntry at that index - */ - public static PlayerListEntry getRaw(int idx) { - return playerList.get(idx); - } - - public static int getSize() { - return playerList.size(); - } + public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Regex"); + + private static List playerList; + + public static void updateList() { + + if (!Utils.isOnSkyblock()) { + return; + } + + ClientPlayNetworkHandler cpnwh = MinecraftClient.getInstance().getNetworkHandler(); + + // check is needed, else game crash on server leave + if (cpnwh != null) { + playerList = cpnwh.getPlayerList().stream().sorted(PlayerListHudAccessor.getOrdering()).toList(); + } + } + + /** + * Get the display name at some index of the player list and apply a pattern to + * it + * + * @return the matcher if p fully matches, else null + */ + public static Matcher regexAt(int idx, Pattern p) { + + String str = PlayerListMgr.strAt(idx); + + if (str == null) { + return null; + } + + Matcher m = p.matcher(str); + if (!m.matches()) { + LOGGER.error("no match: \"{}\" against \"{}\"", str, p); + return null; + } else { + return m; + } + } + + /** + * Get the display name at some index of the player list as string + * + * @return the string or null, if the display name is null, empty or whitespace + * only + */ + public static String strAt(int idx) { + + if (playerList == null) { + return null; + } + + if (playerList.size() <= idx) { + return null; + } + + Text txt = playerList.get(idx).getDisplayName(); + if (txt == null) { + return null; + } + String str = txt.getString().trim(); + if (str.length() == 0) { + return null; + } + return str; + } + + /** + * Gets the display name at some index of the player list + * + * @return the text or null, if the display name is null + * + * @implNote currently designed specifically for crimson isles faction quests + * widget, might not work correctly without modification for other + * stuff. you've been warned! + */ + public static Text textAt(int idx) { + + if (playerList == null) { + return null; + } + + if (playerList.size() <= idx) { + return null; + } + + Text txt = playerList.get(idx).getDisplayName(); + if (txt == null) { + return null; + } + + // Rebuild the text object to remove leading space thats in all faction quest + // stuff (also removes trailing space just in case) + MutableText newText = Text.empty(); + int size = txt.getSiblings().size(); + + for (int i = 0; i < size; i++) { + Text current = txt.getSiblings().get(i); + String textToAppend = current.getString(); + + // Trim leading & trailing space - this can only be done at the start and end + // otherwise it'll produce malformed results + if (i == 0) + textToAppend = StringUtils.removeStart(textToAppend, " "); + if (i == size - 1) + textToAppend = StringUtils.removeEnd(textToAppend, " "); + + newText.append(Text.literal(textToAppend).setStyle(current.getStyle())); + } + + return newText; + } + + /** + * Get the display name at some index of the player list as Text as seen in the + * game + * + * @return the PlayerListEntry at that index + */ + public static PlayerListEntry getRaw(int idx) { + return playerList.get(idx); + } + + public static int getSize() { + return playerList.size(); + } } -- cgit From 6dcbd5b6ceda32e6c347a2c0d40f9f522b9eaa02 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 19 Jun 2023 19:41:22 +0800 Subject: Fix DiscordRPC briefly showing --- .../skyblocker/discord/DiscordRPCManager.java | 26 +++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java index 4fa5265f..1ac2f6d5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -18,26 +18,30 @@ public class DiscordRPCManager { public static long startTimeStamp; public static int cycleCount; - public static void init(){ + public static void init() { SkyblockEvents.LEAVE.register(DiscordIPC::stop); SkyblockEvents.JOIN.register(() -> { startTimeStamp = System.currentTimeMillis(); if (DiscordIPC.start(934607927837356052L, null)) { - DiscordIPC.setActivity(buildPresence()); - LOGGER.info("Discord RPC started"); + if (SkyblockerConfig.get().richPresence.enableRichPresence) { + DiscordIPC.setActivity(buildPresence()); + LOGGER.info("Discord RPC started successfully"); + } else { + LOGGER.info("Discord RPC started successfully but is currently disabled"); + } } else { LOGGER.error("Discord RPC failed to start"); } }); } - public static void update(){ + public static void update() { // If the custom message is empty, discord will keep the last message, this is can serve as a default if the user doesn't want a custom message if (SkyblockerConfig.get().richPresence.customMessage.isEmpty()) { SkyblockerConfig.get().richPresence.customMessage = "Playing Skyblock"; AutoConfig.getConfigHolder(SkyblockerConfig.class).save(); } - if ((!Utils.isOnSkyblock() || !SkyblockerConfig.get().richPresence.enableRichPresence) && DiscordIPC.isConnected()){ + if ((!Utils.isOnSkyblock() || !SkyblockerConfig.get().richPresence.enableRichPresence) && DiscordIPC.isConnected()) { DiscordIPC.stop(); LOGGER.info("Discord RPC stopped"); return; @@ -46,7 +50,7 @@ public class DiscordRPCManager { DiscordIPC.setActivity(buildPresence()); } - public static RichPresence buildPresence(){ + public static RichPresence buildPresence() { RichPresence presence = new RichPresence(); presence.setLargeImage("skyblocker-default", null); presence.setStart(startTimeStamp); @@ -55,16 +59,16 @@ public class DiscordRPCManager { return presence; } - public static String getInfo(){ + public static String getInfo() { String info = null; - if (!SkyblockerConfig.get().richPresence.cycleMode){ - switch (SkyblockerConfig.get().richPresence.info){ + if (!SkyblockerConfig.get().richPresence.cycleMode) { + switch (SkyblockerConfig.get().richPresence.info) { case BITS -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits()); case PURSE -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse()); case LOCATION -> info = "⏣ " + Utils.getLocation(); } - } else if (SkyblockerConfig.get().richPresence.cycleMode){ - switch (cycleCount){ + } else if (SkyblockerConfig.get().richPresence.cycleMode) { + switch (cycleCount) { case 0 -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits()); case 1 -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse()); case 2 -> info = "⏣ " + Utils.getLocation(); -- cgit From 8a5abeaec788dd5d17d8ddfb548a16fd2e8c5e43 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 20 Jun 2023 12:08:38 +0800 Subject: Async DiscordRPC --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 +- .../skyblocker/discord/DiscordRPCManager.java | 67 ++++++++++++++++------ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 4 +- 3 files changed, 52 insertions(+), 21 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index bfc5013b..189ecca3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -82,7 +82,7 @@ public class SkyblockerMod implements ClientModInitializer { containerSolverManager.init(); DungeonMap.init(); scheduler.scheduleCyclic(Utils::sbChecker, 20); - scheduler.scheduleCyclic(DiscordRPCManager::update, 100); + scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); scheduler.scheduleCyclic(DungeonBlaze::update, 4); scheduler.scheduleCyclic(LividColor::update, 10); scheduler.scheduleCyclic(BackpackPreview::tick, 50); diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java index 1ac2f6d5..f7ec2f33 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -11,43 +11,74 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.DecimalFormat; +import java.util.concurrent.CompletableFuture; public class DiscordRPCManager { public static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("###,###.##"); public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Discord RPC"); + public static CompletableFuture updateTask; public static long startTimeStamp; public static int cycleCount; public static void init() { - SkyblockEvents.LEAVE.register(DiscordIPC::stop); + SkyblockEvents.LEAVE.register(DiscordRPCManager::initAndUpdatePresence); SkyblockEvents.JOIN.register(() -> { startTimeStamp = System.currentTimeMillis(); - if (DiscordIPC.start(934607927837356052L, null)) { - if (SkyblockerConfig.get().richPresence.enableRichPresence) { - DiscordIPC.setActivity(buildPresence()); - LOGGER.info("Discord RPC started successfully"); - } else { - LOGGER.info("Discord RPC started successfully but is currently disabled"); - } - } else { - LOGGER.error("Discord RPC failed to start"); - } + initAndUpdatePresence(true); }); } - public static void update() { + public static void updateDataAndPresence() { // If the custom message is empty, discord will keep the last message, this is can serve as a default if the user doesn't want a custom message if (SkyblockerConfig.get().richPresence.customMessage.isEmpty()) { SkyblockerConfig.get().richPresence.customMessage = "Playing Skyblock"; AutoConfig.getConfigHolder(SkyblockerConfig.class).save(); } - if ((!Utils.isOnSkyblock() || !SkyblockerConfig.get().richPresence.enableRichPresence) && DiscordIPC.isConnected()) { - DiscordIPC.stop(); - LOGGER.info("Discord RPC stopped"); - return; - } if (SkyblockerConfig.get().richPresence.cycleMode) cycleCount = (cycleCount + 1) % 3; - DiscordIPC.setActivity(buildPresence()); + initAndUpdatePresence(); + } + + private static void initAndUpdatePresence() { + initAndUpdatePresence(false); + } + + /** + * Updates discord presence asynchronously. + *

+ * When the {@link #updateTask previous update} does not exist or {@link CompletableFuture#isDone() has completed}: + *

+ * Connects to discord if {@link SkyblockerConfig.RichPresence#enableRichPresence rich presence is enabled}, + * the player {@link Utils#isOnSkyblock() is on Skyblock}, and {@link DiscordIPC#isConnected() discord is not already connected}. + * Updates the presence if {@link SkyblockerConfig.RichPresence#enableRichPresence rich presence is enabled} + * and the player {@link Utils#isOnSkyblock() is on Skyblock}. + * Stops the connection if {@link SkyblockerConfig.RichPresence#enableRichPresence rich presence is disabled} + * or the player {@link Utils#isOnSkyblock() is not on Skyblock} and {@link DiscordIPC#isConnected() discord is connected}. + * Saves the update task in {@link #updateTask} + * + * @param initialization whether this is the first time the presence is being updates. If {@code true}, a message will be logged + * if {@link SkyblockerConfig.RichPresence#enableRichPresence rich presence is disabled}. + */ + private static void initAndUpdatePresence(boolean initialization) { + if (updateTask == null || updateTask.isDone()) { + updateTask = CompletableFuture.runAsync(() -> { + if (SkyblockerConfig.get().richPresence.enableRichPresence && Utils.isOnSkyblock()) { + if (!DiscordIPC.isConnected()) { + if (DiscordIPC.start(934607927837356052L, null)) { + LOGGER.info("Discord RPC started successfully"); + } else { + LOGGER.error("Discord RPC failed to start"); + return; + } + } + DiscordIPC.setActivity(buildPresence()); + } else if (DiscordIPC.isConnected()) { + DiscordIPC.stop(); + LOGGER.info("Discord RPC stopped"); + } else if (initialization) { + LOGGER.info("Discord RPC is currently disabled"); + } + }); + } } public static RichPresence buildPresence() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 028386ab..a4e403fc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -52,13 +52,13 @@ public class Utils { isInjected = true; ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip); } - SkyblockEvents.JOIN.invoker().onSkyblockJoin(); isOnSkyblock = true; + SkyblockEvents.JOIN.invoker().onSkyblockJoin(); } } else if (isOnSkyblock) { - SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); isOnSkyblock = false; isInDungeons = false; + SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); } -- cgit From f7434efeae8f4ea0d193cdad11928f5a13eb6374 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 20 Jun 2023 12:25:22 +0800 Subject: Add docs --- .../me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java index f7ec2f33..29a2c958 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -13,9 +13,15 @@ import org.slf4j.LoggerFactory; import java.text.DecimalFormat; import java.util.concurrent.CompletableFuture; +/** + * Manages the discord rich presence. Automatically connects to discord and displays a customizable activity when playing Skyblock. + */ public class DiscordRPCManager { public static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("###,###.##"); public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Discord RPC"); + /** + * The update task used to avoid multiple update tasks running simultaneously. + */ public static CompletableFuture updateTask; public static long startTimeStamp; public static int cycleCount; @@ -28,6 +34,9 @@ public class DiscordRPCManager { }); } + /** + * Checks the {@link SkyblockerConfig.RichPresence#customMessage custom message}, updates {@link #cycleCount} if enabled, and updates rich presence. + */ public static void updateDataAndPresence() { // If the custom message is empty, discord will keep the last message, this is can serve as a default if the user doesn't want a custom message if (SkyblockerConfig.get().richPresence.customMessage.isEmpty()) { @@ -38,6 +47,9 @@ public class DiscordRPCManager { initAndUpdatePresence(); } + /** + * @see #initAndUpdatePresence(boolean) + */ private static void initAndUpdatePresence() { initAndUpdatePresence(false); } -- cgit From 027426aacac048b85cd310e9e3d4101e0156a917 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 22 May 2023 20:30:12 -0400 Subject: Add Fairy Souls Helper --- build.gradle | 3 + gradle.properties | 2 + .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 22 +-- .../skyblocker/config/SkyblockerConfig.java | 8 + .../accessor/BeaconBlockEntityRendererInvoker.java | 16 ++ .../xmrvizzy/skyblocker/skyblock/FairySouls.java | 184 +++++++++++++++++++++ .../skyblocker/skyblock/api/RepositoryUpdate.java | 62 ------- .../skyblocker/skyblock/dungeon/LividColor.java | 3 +- .../skyblocker/skyblock/itemlist/ItemRegistry.java | 75 ++------- .../skyblock/itemlist/ItemStackBuilder.java | 5 +- .../java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 90 ++++++++++ .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 30 ++++ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 91 +++++++++- .../resources/assets/skyblocker/lang/en_us.json | 6 +- 14 files changed, 454 insertions(+), 143 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java diff --git a/build.gradle b/build.gradle index 4d2dc8ef..83da3489 100644 --- a/build.gradle +++ b/build.gradle @@ -60,6 +60,9 @@ dependencies { // https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit used pull data from the NEU item repo include(implementation("org.eclipse.jgit:org.eclipse.jgit:6.4.0.202211300538-r")) + // Renderer (https://github.com/0x3C50/Renderer) + include modImplementation("com.github.0x3C50:Renderer:${project.renderer_version}") + include(modImplementation ("meteordevelopment:discord-ipc:1.1")) } diff --git a/gradle.properties b/gradle.properties index 14a4fffc..d90dc6f2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,6 +17,8 @@ clothconfig_version=11.0.99 mod_menu_version=7.0.1 ## REI (https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items/files) rei_version=12.0.625 +## Renderer (https://github.com/0x3C50/Renderer) +renderer_version = master-SNAPSHOT # Mod Properties mod_version = 1.10.0 diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 189ecca3..04ab384f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -1,14 +1,12 @@ package me.xmrvizzy.skyblocker; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import me.xmrvizzy.skyblocker.chat.ChatMessageListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.discord.DiscordRPCManager; import me.xmrvizzy.skyblocker.gui.ContainerSolverManager; -import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; -import me.xmrvizzy.skyblocker.skyblock.FishingHelper; -import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; -import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; -import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate; +import me.xmrvizzy.skyblocker.skyblock.*; import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonMap; @@ -20,14 +18,14 @@ import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; -import me.xmrvizzy.skyblocker.utils.MessageScheduler; -import me.xmrvizzy.skyblocker.utils.Scheduler; -import me.xmrvizzy.skyblocker.utils.UpdateChecker; -import me.xmrvizzy.skyblocker.utils.Utils; +import me.xmrvizzy.skyblocker.utils.*; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; +import java.nio.file.Path; + /** * Main class for Skyblocker which initializes features, registers events, and * manages ticks. This class will be instantiated by Fabric. Do not instantiate @@ -35,6 +33,8 @@ import net.minecraft.client.MinecraftClient; */ public class SkyblockerMod implements ClientModInitializer { public static final String NAMESPACE = "skyblocker"; + public static final Path CONFIG_DIR = FabricLoader.getInstance().getConfigDir().resolve(NAMESPACE); + public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); private static SkyblockerMod INSTANCE; @SuppressWarnings("deprecation") @@ -63,12 +63,13 @@ public class SkyblockerMod implements ClientModInitializer { @Override public void onInitializeClient() { ClientTickEvents.END_CLIENT_TICK.register(this::tick); + Utils.init(); HotbarSlotLock.init(); SkyblockerConfig.init(); PriceInfoTooltip.init(); WikiLookup.init(); ItemRegistry.init(); - RepositoryUpdate.init(); + NEURepo.init(); BackpackPreview.init(); QuickNav.init(); StatsCommand.init(); @@ -78,6 +79,7 @@ public class SkyblockerMod implements ClientModInitializer { DiscordRPCManager.init(); LividColor.init(); FishingHelper.init(); + FairySouls.init(); TabHud.init(); containerSolverManager.init(); DungeonMap.init(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index b1bc2001..f296e487 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -150,6 +150,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public Fishing fishing = new Fishing(); + @ConfigEntry.Category("fairySouls") + @ConfigEntry.Gui.CollapsibleObject() + public FairySouls fairySouls = new FairySouls(); + @ConfigEntry.Category("itemList") @ConfigEntry.Gui.CollapsibleObject() public ItemList itemList = new ItemList(); @@ -219,6 +223,10 @@ public class SkyblockerConfig implements ConfigData { public boolean enableFishingHelper = true; } + public static class FairySouls { + public boolean enableFairySouls = true; + } + public static class Hitbox { public boolean oldFarmlandHitbox = true; public boolean oldLeverHitbox = false; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java new file mode 100644 index 00000000..ff7c7cbc --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java @@ -0,0 +1,16 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; +import net.minecraft.client.util.math.MatrixStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(BeaconBlockEntityRenderer.class) +public interface BeaconBlockEntityRendererInvoker { + @SuppressWarnings("unused") + @Invoker("renderBeam") + static void renderBeam(MatrixStack matrices, VertexConsumerProvider vertexConsumers, float tickDelta, long worldTime, int yOffset, int maxY, float[] color) { + throw new IllegalStateException("Mixin invoker failed to apply."); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java new file mode 100644 index 00000000..4480c5e1 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java @@ -0,0 +1,184 @@ +package me.xmrvizzy.skyblocker.skyblock; + +import com.google.common.collect.ImmutableSet; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.NEURepo; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.text.Text; +import net.minecraft.util.DyeColor; +import net.minecraft.util.math.BlockPos; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.util.*; +import java.util.concurrent.CompletableFuture; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + +public class FairySouls { + private static final Logger LOGGER = LoggerFactory.getLogger(FairySouls.class); + private static CompletableFuture fairySoulsLoaded; + private static final Map> fairySouls = new HashMap<>(); + private static final Map>> foundFairies = new HashMap<>(); + + public static void init() { + fairySoulsLoaded = NEURepo.runAsyncAfterLoad(() -> { + try { + BufferedReader reader = new BufferedReader(new FileReader(NEURepo.LOCAL_REPO_DIR.resolve("constants").resolve("fairy_souls.json").toFile())); + for (Map.Entry fairySoulJson : JsonParser.parseReader(reader).getAsJsonObject().asMap().entrySet()) { + if (fairySoulJson.getKey().equals("//") || fairySoulJson.getKey().equals("Max Souls")) { + continue; + } + ImmutableSet.Builder fairySoulsForLocation = ImmutableSet.builder(); + for (JsonElement fairySoul : fairySoulJson.getValue().getAsJsonArray().asList()) { + fairySoulsForLocation.add(parseBlockPos(fairySoul)); + } + fairySouls.put(fairySoulJson.getKey(), fairySoulsForLocation.build()); + } + reader = new BufferedReader(new FileReader(SkyblockerMod.CONFIG_DIR.resolve("found_fairy_souls.json").toFile())); + for (Map.Entry foundFairiesForProfileJson : JsonParser.parseReader(reader).getAsJsonObject().asMap().entrySet()) { + Map> foundFairiesForProfile = new HashMap<>(); + for (Map.Entry foundFairiesForLocationJson : foundFairiesForProfileJson.getValue().getAsJsonObject().asMap().entrySet()) { + Set foundFairiesForLocation = new HashSet<>(); + for (JsonElement foundFairy : foundFairiesForLocationJson.getValue().getAsJsonArray().asList()) { + foundFairiesForLocation.add(parseBlockPos(foundFairy)); + } + foundFairiesForProfile.put(foundFairiesForLocationJson.getKey(), foundFairiesForLocation); + } + foundFairies.put(foundFairiesForProfileJson.getKey(), foundFairiesForProfile); + } + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + LOGGER.error("Failed to load found fairy souls."); + } catch (Exception e) { + e.printStackTrace(); + } + }); + ClientLifecycleEvents.CLIENT_STOPPING.register(FairySouls::saveFoundFairySouls); + WorldRenderEvents.AFTER_TRANSLUCENT.register(FairySouls::render); + ClientReceiveMessageEvents.GAME.register(FairySouls::onChatMessage); + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE) + .then(literal("fairySouls") + .then(literal("markAllInCurrentIslandFound").executes(context -> { + FairySouls.markAllFairiesFound(); + context.getSource().sendFeedback(Text.translatable("skyblocker.fairySouls.markAllFound")); + return 1; + })) + .then(literal("markAllInCurrentIslandMissing").executes(context -> { + FairySouls.markAllFairiesNotFound(); + context.getSource().sendFeedback(Text.translatable("skyblocker.fairySouls.markAllMissing")); + return 1; + }))))); + } + + private static BlockPos parseBlockPos(JsonElement posJson) { + String[] posArray = posJson.getAsString().split(","); + return new BlockPos(Integer.parseInt(posArray[0]), Integer.parseInt(posArray[1]), Integer.parseInt(posArray[2])); + } + + public static void saveFoundFairySouls(MinecraftClient client) { + try { + BufferedWriter writer = new BufferedWriter(new FileWriter(SkyblockerMod.CONFIG_DIR.resolve("found_fairy_souls.json").toFile())); + JsonObject foundFairiesJson = new JsonObject(); + for (Map.Entry>> foundFairiesForProfile : foundFairies.entrySet()) { + JsonObject foundFairiesForProfileJson = new JsonObject(); + for (Map.Entry> foundFairiesForLocation : foundFairiesForProfile.getValue().entrySet()) { + JsonArray foundFairiesForLocationJson = new JsonArray(); + for (BlockPos foundFairy : foundFairiesForLocation.getValue()) { + foundFairiesForLocationJson.add(foundFairy.getX() + "," + foundFairy.getY() + "," + foundFairy.getZ()); + } + foundFairiesForProfileJson.add(foundFairiesForLocation.getKey(), foundFairiesForLocationJson); + } + foundFairiesJson.add(foundFairiesForProfile.getKey(), foundFairiesForProfileJson); + } + SkyblockerMod.GSON.toJson(foundFairiesJson, writer); + writer.close(); + } catch (IOException e) { + LOGGER.error("Failed to write found fairy souls to file."); + } + } + + public static void render(WorldRenderContext context) { + if (!SkyblockerConfig.get().general.fairySouls.enableFairySouls) { + return; + } + if (!fairySoulsLoaded.isDone()) { + LOGGER.warn("Fairy souls are not loaded yet."); + return; + } + if (!fairySouls.containsKey(Utils.getLocationRaw())) { + return; + } + for (BlockPos fairySoul : fairySouls.get(Utils.getLocationRaw())) { + float[] colorComponents = isFairySoulNotFound(fairySoul) ? DyeColor.GREEN.getColorComponents() : DyeColor.RED.getColorComponents(); + RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, fairySoul, colorComponents, 0.5F); + } + } + + private static boolean isFairySoulNotFound(BlockPos fairySoul) { + Map> foundFairiesForProfile = foundFairies.get(Utils.getProfile()); + if (foundFairiesForProfile == null) { + return true; + } + Set foundFairiesForProfileAndLocation = foundFairiesForProfile.get(Utils.getLocationRaw()); + if (foundFairiesForProfileAndLocation == null) { + return true; + } + return !foundFairiesForProfileAndLocation.contains(fairySoul); + } + + public static void onChatMessage(Text text, boolean overlay) { + String message = text.getString(); + if (message.equals("You have already found that Fairy Soul!") || message.equals("SOUL! You found a Fairy Soul!")) { + markClosestFairyFound(); + } + } + + private static void markClosestFairyFound() { + PlayerEntity player = MinecraftClient.getInstance().player; + if (player == null) { + LOGGER.warn("Failed to mark closest fairy soul as found because player is null."); + return; + } + fairySouls.get(Utils.getLocationRaw()).stream().filter(FairySouls::isFairySoulNotFound).min(Comparator.comparingDouble(fairySoul -> fairySoul.getSquaredDistance(player.getPos()))).ifPresent(fairySoul -> { + initializeFoundFairiesForCurrentProfileAndLocation(); + foundFairies.get(Utils.getProfile()).get(Utils.getLocationRaw()).add(fairySoul); + }); + } + + public static void markAllFairiesFound() { + initializeFoundFairiesForCurrentProfileAndLocation(); + foundFairies.get(Utils.getProfile()).get(Utils.getLocationRaw()).addAll(fairySouls.get(Utils.getLocationRaw())); + } + + public static void markAllFairiesNotFound() { + Map> foundFairiesForProfile = foundFairies.get(Utils.getProfile()); + if (foundFairiesForProfile != null) { + foundFairiesForProfile.remove(Utils.getLocationRaw()); + } + } + + private static void initializeFoundFairiesForCurrentProfileAndLocation() { + initializeFoundFairiesForProfileAndLocation(Utils.getProfile(), Utils.getLocationRaw()); + } + + private static void initializeFoundFairiesForProfileAndLocation(String profile, String location) { + foundFairies.computeIfAbsent(profile, profileKey -> new HashMap<>()); + foundFairies.get(profile).computeIfAbsent(location, locationKey -> new HashSet<>()); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java deleted file mode 100644 index e08cb1c0..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java +++ /dev/null @@ -1,62 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.api; - -import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; - -import java.io.File; -import java.nio.file.Files; -import java.util.concurrent.CompletableFuture; - -public class RepositoryUpdate { - public static final MinecraftClient client = MinecraftClient.getInstance(); - - /** - * Adds command to update repository manually from ingame. - *

- * TODO A button could be added to the settings menu that will trigger this command. - */ - public static void init(){ - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register( - ClientCommandManager.literal("skyblocker") - .then(ClientCommandManager.literal("updaterepository") - .executes(context -> { - updateRepository(); - return 1; - }) - ) - ) - ); - - } - - public static void updateRepository() { - CompletableFuture.runAsync(() -> { - try { - ItemRegistry.filesImported = false; - File dir = ItemRegistry.LOCAL_ITEM_REPO_DIR.toFile(); - recursiveDelete(dir); - } catch (Exception ex) { - if (client.player != null) - client.player.sendMessage( - Text.translatable("skyblocker.updaterepository.failed") - , false - ); - return; - } - - ItemRegistry.init(); - }); - } - - private static void recursiveDelete(File dir) { - if (dir.isDirectory() && !Files.isSymbolicLink(dir.toPath())) { - for (File child : dir.listFiles()) { - recursiveDelete(child); - } - } - dir.delete(); - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java index 276a41b6..4701c485 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java @@ -11,11 +11,10 @@ public class LividColor { private static int tenTicks = 0; public static void init() { - ClientReceiveMessageEvents.ALLOW_GAME.register((message, overlay) -> { + ClientReceiveMessageEvents.GAME.register((message, overlay) -> { if (SkyblockerConfig.get().locations.dungeons.lividColor.enableLividColor && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) { tenTicks = 8; } - return true; }); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index d9f3b473..13ca356a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -2,32 +2,23 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; import com.google.gson.JsonObject; import com.google.gson.JsonParser; - -import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate; -import net.fabricmc.loader.api.FabricLoader; +import me.xmrvizzy.skyblocker.utils.NEURepo; import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.text.Text; -import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.PullResult; -import org.eclipse.jgit.errors.RepositoryNotFoundException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.*; -import java.util.concurrent.CompletableFuture; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class ItemRegistry { - private static final Logger LOGGER = LoggerFactory.getLogger(ItemRegistry.class); - protected static final String REMOTE_ITEM_REPO = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO"; - public static final Path LOCAL_ITEM_REPO_DIR = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/item-repo"); - - protected static final Path ITEM_LIST_DIR = LOCAL_ITEM_REPO_DIR.resolve("items"); + protected static final Path ITEM_LIST_DIR = NEURepo.LOCAL_REPO_DIR.resolve("items"); protected static final List items = new ArrayList<>(); protected static final Map itemsMap = new HashMap<>(); @@ -36,52 +27,8 @@ public class ItemRegistry { public static boolean filesImported = false; public static void init() { - CompletableFuture.runAsync(ItemRegistry::updateItemRepo) - .whenComplete((result, ex) -> { - if (ex == null) { - ItemStackBuilder.init(); - importItemFiles(); - } - else { - LOGGER.error("[Skyblocker-ItemRegistry] " + ex); - } - }); - } - - private static void updateItemRepo() { - Git git; - if (!Files.isDirectory(LOCAL_ITEM_REPO_DIR)) { - try { - git = Git.cloneRepository() - .setURI(REMOTE_ITEM_REPO) - .setDirectory(LOCAL_ITEM_REPO_DIR.toFile()) - .setBranchesToClone(List.of("refs/heads/master")) - .setBranch("refs/heads/master") - .call(); - git.close(); - LOGGER.info("[Skyblocker Repository Update] Repository updated."); - } catch (Exception e) { - e.printStackTrace(); - } - } else { - try { - git = Git.open(LOCAL_ITEM_REPO_DIR.toFile()); - PullResult pull = git.pull().setRebase(true).call(); - git.close(); - - if (pull.getRebaseResult() == null) { - LOGGER.info("[Skyblocker Repository Update] No update result"); - } else if (pull.getRebaseResult().getStatus().isSuccessful()) { - LOGGER.info("[Skyblocker Repository Update] Status: " + pull.getRebaseResult().getStatus().name()); - } else if (!pull.getRebaseResult().getStatus().isSuccessful()) { - LOGGER.warn("[Skyblocker Repository Update] Status: " + pull.getRebaseResult().getStatus().name()); - } - } catch (RepositoryNotFoundException e) { - RepositoryUpdate.updateRepository(); - } catch (Exception e) { - e.printStackTrace(); - } - } + NEURepo.runAsyncAfterLoad(ItemStackBuilder::loadPetNums); + NEURepo.runAsyncAfterLoad(ItemRegistry::importItemFiles); } private static void importItemFiles() { @@ -119,8 +66,7 @@ public class ItemRegistry { if (lhsFamilyName.equals(rhsFamilyName)) { if (lhsInternalName.length() != rhsInternalName.length()) return lhsInternalName.length() - rhsInternalName.length(); - else - return lhsInternalName.compareTo(rhsInternalName); + else return lhsInternalName.compareTo(rhsInternalName); } return lhsFamilyName.compareTo(rhsFamilyName); }); @@ -147,8 +93,7 @@ public class ItemRegistry { public static List getRecipes(String internalName) { List result = new ArrayList<>(); for (SkyblockCraftingRecipe recipe : recipes) - if (getInternalName(recipe.result).equals(internalName)) - result.add(recipe); + if (getInternalName(recipe.result).equals(internalName)) result.add(recipe); for (SkyblockCraftingRecipe recipe : recipes) for (ItemStack ingredient : recipe.grid) if (!ingredient.getItem().equals(Items.AIR) && getInternalName(ingredient).equals(internalName)) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemStackBuilder.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemStackBuilder.java index b2d909a8..d420d54f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemStackBuilder.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemStackBuilder.java @@ -4,6 +4,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import me.xmrvizzy.skyblocker.utils.NEURepo; import net.minecraft.item.ItemStack; import net.minecraft.nbt.*; import net.minecraft.text.Text; @@ -16,10 +17,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class ItemStackBuilder { - private final static Path PETNUMS_PATH = ItemRegistry.LOCAL_ITEM_REPO_DIR.resolve("constants/petnums.json"); + private final static Path PETNUMS_PATH = NEURepo.LOCAL_REPO_DIR.resolve("constants/petnums.json"); private static JsonObject petNums; - public static void init() { + public static void loadPetNums() { try { petNums = JsonParser.parseString(Files.readString(PETNUMS_PATH)).getAsJsonObject(); } catch (Exception e) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java new file mode 100644 index 00000000..027cfa7a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -0,0 +1,90 @@ +package me.xmrvizzy.skyblocker.utils; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.errors.RepositoryNotFoundException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class NEURepo { + private static final Logger LOGGER = LoggerFactory.getLogger(NEURepo.class); + public static final String REMOTE_REPO_URL = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO.git"; + public static final Path LOCAL_REPO_DIR = SkyblockerMod.CONFIG_DIR.resolve("item-repo"); + private static final CompletableFuture REPO_INITIALIZED = initRepository(); + + /** + * Adds command to update repository manually from ingame. + *

+ * TODO A button could be added to the settings menu that will trigger this command. + */ + public static void init() { + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> + dispatcher.register(ClientCommandManager.literal(SkyblockerMod.NAMESPACE) + .then(ClientCommandManager.literal("updaterepository").executes(context -> { + deleteAndDownloadRepository(); + return 1; + })))); + } + + public static CompletableFuture initRepository() { + return CompletableFuture.runAsync(() -> { + try { + if (Files.isDirectory(NEURepo.LOCAL_REPO_DIR)) { + try (Git localRepo = Git.open(NEURepo.LOCAL_REPO_DIR.toFile())) { + localRepo.pull().setRebase(true).call(); + LOGGER.info("[Skyblocker] NEU Repository Updated"); + } + } else { + Git.cloneRepository().setURI(REMOTE_REPO_URL).setDirectory(NEURepo.LOCAL_REPO_DIR.toFile()).setBranchesToClone(List.of("refs/heads/master")).setBranch("refs/heads/master").call().close(); + LOGGER.info("[Skyblocker] NEU Repository Downloaded"); + } + } catch (RepositoryNotFoundException e) { + LOGGER.warn("Local NEU Repository not found or corrupted, downloading new one", e); + deleteAndDownloadRepository(); + } catch (Exception e) { + LOGGER.error("Encountered unknown exception while initializing NEU Repository", e); + } + }); + } + + public static void deleteAndDownloadRepository() { + CompletableFuture.runAsync(() -> { + try { + ItemRegistry.filesImported = false; + File dir = NEURepo.LOCAL_REPO_DIR.toFile(); + recursiveDelete(dir); + } catch (Exception ex) { + if (MinecraftClient.getInstance().player != null) + MinecraftClient.getInstance().player.sendMessage(Text.translatable("skyblocker.updaterepository.failed"), false); + return; + } + initRepository(); + }); + } + + @SuppressWarnings("ResultOfMethodCallIgnored") + private static void recursiveDelete(File dir) { + File[] children; + if (dir.isDirectory() && !Files.isSymbolicLink(dir.toPath()) && (children = dir.listFiles()) != null) { + for (File child : children) { + recursiveDelete(child); + } + } + dir.delete(); + } + + public static CompletableFuture runAsyncAfterLoad(Runnable runnable) { + return REPO_INITIALIZED.thenRunAsync(runnable); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java new file mode 100644 index 00000000..79308dc3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.utils; + +import me.x150.renderer.render.Renderer3d; +import me.xmrvizzy.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +import java.awt.*; + +public class RenderHelper { + public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + renderFilledThroughWalls(context, pos, colorComponents, alpha); + renderBeaconBeam(context, pos, colorComponents); + } + + public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + Renderer3d.renderThroughWalls(); + Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), new Vec3d(1, 1, 1)); + Renderer3d.stopRenderThroughWalls(); + } + + public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { + context.matrixStack().push(); + context.matrixStack().translate(pos.getX() - context.camera().getPos().x, pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); + BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); + context.matrixStack().pop(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index a4e403fc..40c96660 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -1,13 +1,21 @@ package me.xmrvizzy.skyblocker.utils; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.scoreboard.ScoreboardPlayerScore; import net.minecraft.scoreboard.Team; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; import java.util.ArrayList; @@ -21,6 +29,14 @@ public class Utils { private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; + private static String profile = ""; + private static String server = ""; + private static String gameType = ""; + private static String locationRaw = ""; + private static String map = ""; + private static long clientWorldJoinTime = 0; + private static boolean sentLocRaw = false; + private static long lastLocRaw = 0; public static boolean isOnSkyblock() { return isOnSkyblock; @@ -34,6 +50,31 @@ public class Utils { return isInjected; } + public static String getProfile() { + return profile; + } + + public static String getServer() { + return server; + } + + public static String getGameType() { + return gameType; + } + + public static String getLocationRaw() { + return locationRaw; + } + + public static String getMap() { + return map; + } + + public static void init() { + ClientPlayConnectionEvents.JOIN.register(Utils::onClientWorldJoin); + ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); + } + public static void sbChecker() { MinecraftClient client = MinecraftClient.getInstance(); List sidebar; @@ -61,13 +102,14 @@ public class Utils { SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); + updateLocRaw(); } public static String getLocation() { String location = null; List sidebarLines = getSidebar(); try { - if( sidebarLines != null) { + if (sidebarLines != null) { for (String sidebarLine : sidebarLines) { if (sidebarLine.contains("⏣")) location = sidebarLine; } @@ -149,4 +191,51 @@ public class Utils { return null; } } + + public static void onClientWorldJoin(ClientPlayNetworkHandler handler, PacketSender sender, MinecraftClient client) { + clientWorldJoinTime = System.currentTimeMillis(); + resetLocRawInfo(); + } + + private static void updateLocRaw() { + if (isOnSkyblock) { + long currentTime = System.currentTimeMillis(); + if (!sentLocRaw && currentTime > clientWorldJoinTime + 1000 && currentTime > lastLocRaw + 15000) { + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/locraw"); + sentLocRaw = true; + lastLocRaw = currentTime; + } + } else { + resetLocRawInfo(); + } + } + + public static boolean onChatMessage(Text text, boolean overlay) { + String message = text.getString(); + if (message.startsWith("{\"server\":") && message.endsWith("}")) { + JsonObject locRaw = JsonParser.parseString(message).getAsJsonObject(); + if (locRaw.has("server")) { + server = locRaw.get("server").getAsString(); + if (locRaw.has("gameType")) { + gameType = locRaw.get("gameType").getAsString(); + } + if (locRaw.has("mode")) { + locationRaw = locRaw.get("mode").getAsString(); + } + if (locRaw.has("map")) { + map = locRaw.get("map").getAsString(); + } + return !sentLocRaw; + } + } + return true; + } + + private static void resetLocRawInfo() { + sentLocRaw = false; + server = ""; + gameType = ""; + locationRaw = ""; + map = ""; + } } \ No newline at end of file diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 858507fe..b40dd52e 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -22,6 +22,8 @@ "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar Position", "text.autoconfig.skyblocker.option.general.fishing": "Fishing Helper", "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper", + "text.autoconfig.skyblocker.option.general.fairySouls": "Fairy Souls Helper", + "text.autoconfig.skyblocker.option.general.fairySouls.enableFairySoulsHelper": "Enable Fairy Souls Helper", "text.autoconfig.skyblocker.option.general.quicknav": "Quicknav", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Enable Quicknav", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "View backpack preview without holding Shift", @@ -222,5 +224,7 @@ "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Automatically set your API key!", - "skyblocker.fishing.reelNow": "Reel in now!" + "skyblocker.fishing.reelNow": "Reel in now!", + "skyblocker.fairySouls.markAllFound": "Marked all fairy souls in the current island as found", + "skyblocker.fairySouls.markAllMissing": "Marked all fairy souls in the current island as missing" } -- cgit From 131d3afe215d1236a46c209569f6b4b0c5bb493e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 17:47:49 -0400 Subject: Add BeaconBlockEntityRendererInvoker to skyblocker.mixins.json --- src/main/resources/skyblocker.mixins.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index f8b39c93..253e42d7 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -17,7 +17,8 @@ "MinecraftClientMixin", "PlayerListHudAccessor", "PlayerListHudMixin", - "RecipeBookWidgetAccessor" + "RecipeBookWidgetAccessor", + "accessor.BeaconBlockEntityRendererInvoker" ], "injectors": { "defaultRequire": 1 -- cgit From 3ecd4afc187a69c174fa4dfa1622e705700f674c Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 17:58:00 -0400 Subject: Add profile updating from player list --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 40c96660..6f238b44 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -11,6 +11,7 @@ import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.network.PlayerListEntry; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.scoreboard.ScoreboardPlayerScore; @@ -26,6 +27,7 @@ import java.util.List; * Utility variables and methods for retrieving Skyblock related information. */ public class Utils { + private static final String PROFILE_PREFIX = "§r§e§lProfile: §r§a"; private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; @@ -102,6 +104,7 @@ public class Utils { SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); + updateFromPlayerList(client); updateLocRaw(); } @@ -192,6 +195,21 @@ public class Utils { } } + private static void updateFromPlayerList(MinecraftClient client) { + if (client.getNetworkHandler() == null) { + return; + } + for (PlayerListEntry playerListEntry : client.getNetworkHandler().getPlayerList()) { + if (playerListEntry.getDisplayName() == null) { + continue; + } + String name = playerListEntry.getDisplayName().getString(); + if (name.startsWith(PROFILE_PREFIX)) { + profile = name.substring(PROFILE_PREFIX.length()); + } + } + } + public static void onClientWorldJoin(ClientPlayNetworkHandler handler, PacketSender sender, MinecraftClient client) { clientWorldJoinTime = System.currentTimeMillis(); resetLocRawInfo(); -- cgit From 284518527393aa3363c15119c41d28f863122e37 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 18:03:56 -0400 Subject: Abstract different checking methods in Utils --- src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 4 ++-- .../java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java | 2 +- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 10 +++++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 04ab384f..add81791 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -81,9 +81,9 @@ public class SkyblockerMod implements ClientModInitializer { FishingHelper.init(); FairySouls.init(); TabHud.init(); - containerSolverManager.init(); DungeonMap.init(); - scheduler.scheduleCyclic(Utils::sbChecker, 20); + containerSolverManager.init(); + scheduler.scheduleCyclic(Utils::update, 20); scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); scheduler.scheduleCyclic(DungeonBlaze::update, 4); scheduler.scheduleCyclic(LividColor::update, 10); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java index e35ef605..d89a18e0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java @@ -50,7 +50,7 @@ public class BackpackPreview { } public static void tick() { - Utils.sbChecker(); // force update isOnSkyblock to prevent crash on disconnect + Utils.update(); // force update isOnSkyblock to prevent crash on disconnect if (Utils.isOnSkyblock()) { // save all dirty storages saveStorage(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 6f238b44..887476f2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -77,8 +77,14 @@ public class Utils { ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); } - public static void sbChecker() { + public static void update() { MinecraftClient client = MinecraftClient.getInstance(); + updateFromScoreboard(client); + updateFromPlayerList(client); + updateLocRaw(); + } + + public static void updateFromScoreboard(MinecraftClient client) { List sidebar; if (client.world == null || client.isInSingleplayer() || (sidebar = getSidebar()) == null) { @@ -104,8 +110,6 @@ public class Utils { SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); - updateFromPlayerList(client); - updateLocRaw(); } public static String getLocation() { -- cgit From 08fa8669d4ff3ec098688a3e85b58ee8e9e0eea4 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 18:08:02 -0400 Subject: Add docs to Utils and NEURepo --- .../java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 8 ++++++ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 33 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java index 027cfa7a..0de6cecd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -17,6 +17,9 @@ import java.nio.file.Path; import java.util.List; import java.util.concurrent.CompletableFuture; +/** + * Initializes the NEU repo, which contains item metadata and fairy souls location data. Clones the repo if it does not exist and checks for updates. Use {@link #runAsyncAfterLoad(Runnable)} to run code after the repo is initialized. + */ public class NEURepo { private static final Logger LOGGER = LoggerFactory.getLogger(NEURepo.class); public static final String REMOTE_REPO_URL = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO.git"; @@ -84,6 +87,11 @@ public class NEURepo { dir.delete(); } + /** + * Runs the given runnable after the NEU repo is initialized. + * @param runnable the runnable to run + * @return a completable future of the given runnable + */ public static CompletableFuture runAsyncAfterLoad(Runnable runnable) { return REPO_INITIALIZED.thenRunAsync(runnable); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 887476f2..1b5019a7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -31,6 +31,10 @@ public class Utils { private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; + /** + * The following fields store data returned from /locraw: {@link #profile}, {@link #server}, {@link #gameType}, {@link #locationRaw}, and {@link #map}. + */ + @SuppressWarnings("JavadocDeclaration") private static String profile = ""; private static String server = ""; private static String gameType = ""; @@ -52,22 +56,37 @@ public class Utils { return isInjected; } + /** + * @return the profile parsed from the player list. + */ public static String getProfile() { return profile; } + /** + * @return the server parsed from /locraw. + */ public static String getServer() { return server; } + /** + * @return the game type parsed from /locraw. + */ public static String getGameType() { return gameType; } + /** + * @return the location raw parsed from /locraw. + */ public static String getLocationRaw() { return locationRaw; } + /** + * @return the map parsed from /locraw. + */ public static String getMap() { return map; } @@ -77,6 +96,9 @@ public class Utils { ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); } + /** + * Updates all the fields stored in this class from the sidebar, player list, and /locraw. + */ public static void update() { MinecraftClient client = MinecraftClient.getInstance(); updateFromScoreboard(client); @@ -84,6 +106,9 @@ public class Utils { updateLocRaw(); } + /** + * Updates {@link #isOnSkyblock}, {@link #isInDungeons}, and {@link #isInjected} from the scoreboard. + */ public static void updateFromScoreboard(MinecraftClient client) { List sidebar; @@ -219,6 +244,9 @@ public class Utils { resetLocRawInfo(); } + /** + * Sends /locraw to the server if the player is on skyblock and on a new island. + */ private static void updateLocRaw() { if (isOnSkyblock) { long currentTime = System.currentTimeMillis(); @@ -232,6 +260,11 @@ public class Utils { } } + /** + * Parses the /locraw reply from the server + * + * @return not display the message in chat is the command is sent by the mod + */ public static boolean onChatMessage(Text text, boolean overlay) { String message = text.getString(); if (message.startsWith("{\"server\":") && message.endsWith("}")) { -- cgit From d1bdb78708bfd7f289b59e17dd0b225c1aedd9a2 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 20:13:03 -0400 Subject: Fix fairy souls option name --- src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java | 2 +- src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index f296e487..31887a90 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -224,7 +224,7 @@ public class SkyblockerConfig implements ConfigData { } public static class FairySouls { - public boolean enableFairySouls = true; + public boolean enableFairySoulsHelper = false; } public static class Hitbox { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java index 4480c5e1..ff3c7fae 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java @@ -114,7 +114,7 @@ public class FairySouls { } public static void render(WorldRenderContext context) { - if (!SkyblockerConfig.get().general.fairySouls.enableFairySouls) { + if (!SkyblockerConfig.get().general.fairySouls.enableFairySoulsHelper) { return; } if (!fairySoulsLoaded.isDone()) { -- cgit From a0d504d9e2ffa95bbd2d9d99e546a44572417de9 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 31 May 2023 08:31:57 +0800 Subject: Updated NEU repo error handling --- src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java | 5 ++--- .../me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java | 4 +++- src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 7 +++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java index ff3c7fae..838b2a55 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java @@ -63,10 +63,9 @@ public class FairySouls { } reader.close(); } catch (IOException e) { - e.printStackTrace(); - LOGGER.error("Failed to load found fairy souls."); + LOGGER.error("Failed to load found fairy souls", e); } catch (Exception e) { - e.printStackTrace(); + LOGGER.error("Encountered unknown exception loading fairy souls", e); } }); ClientLifecycleEvents.CLIENT_STOPPING.register(FairySouls::saveFoundFairySouls); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index 13ca356a..dc63e351 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -36,7 +36,9 @@ public class ItemRegistry { File dir = ITEM_LIST_DIR.toFile(); File[] files = dir.listFiles(); - assert files != null; + if (files == null) { + return; + } for (File file : files) { Path path = ITEM_LIST_DIR.resolve(file.getName()); try { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java index 0de6cecd..5254feb1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -7,6 +7,7 @@ import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallba import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.TransportException; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,11 +53,13 @@ public class NEURepo { Git.cloneRepository().setURI(REMOTE_REPO_URL).setDirectory(NEURepo.LOCAL_REPO_DIR.toFile()).setBranchesToClone(List.of("refs/heads/master")).setBranch("refs/heads/master").call().close(); LOGGER.info("[Skyblocker] NEU Repository Downloaded"); } + } catch (TransportException e){ + LOGGER.error("[Skyblocker] Transport operation failed. Most likely unable to connect to the remote NEU repo on github", e); } catch (RepositoryNotFoundException e) { - LOGGER.warn("Local NEU Repository not found or corrupted, downloading new one", e); + LOGGER.warn("[Skyblocker] Local NEU Repository not found or corrupted, downloading new one", e); deleteAndDownloadRepository(); } catch (Exception e) { - LOGGER.error("Encountered unknown exception while initializing NEU Repository", e); + LOGGER.error("[Skyblocker] Encountered unknown exception while initializing NEU Repository", e); } }); } -- cgit From 5f8683ab480d9efadbe1b39c006bcc33ae68458e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 2 Jun 2023 15:51:19 +0800 Subject: Narrowed access to methods --- src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java index 5254feb1..29b39aa3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -41,7 +41,7 @@ public class NEURepo { })))); } - public static CompletableFuture initRepository() { + private static CompletableFuture initRepository() { return CompletableFuture.runAsync(() -> { try { if (Files.isDirectory(NEURepo.LOCAL_REPO_DIR)) { @@ -64,7 +64,7 @@ public class NEURepo { }); } - public static void deleteAndDownloadRepository() { + private static void deleteAndDownloadRepository() { CompletableFuture.runAsync(() -> { try { ItemRegistry.filesImported = false; -- cgit From 3f7d97daa8b531c6bbb2019106947575cbe0b89a Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 11:25:22 +0800 Subject: Fix profile detection --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 1b5019a7..94ead7c1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -27,7 +27,7 @@ import java.util.List; * Utility variables and methods for retrieving Skyblock related information. */ public class Utils { - private static final String PROFILE_PREFIX = "§r§e§lProfile: §r§a"; + private static final String PROFILE_PREFIX = "Profile: "; private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; -- cgit From 8dbfca923398ce1c5c279fcdd07371d4624b2f5e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 17 Jun 2023 12:55:11 +0800 Subject: Refactor rendering checks --- .../me/xmrvizzy/skyblocker/skyblock/FairySouls.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java index 838b2a55..ccffdcca 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java @@ -113,19 +113,11 @@ public class FairySouls { } public static void render(WorldRenderContext context) { - if (!SkyblockerConfig.get().general.fairySouls.enableFairySoulsHelper) { - return; - } - if (!fairySoulsLoaded.isDone()) { - LOGGER.warn("Fairy souls are not loaded yet."); - return; - } - if (!fairySouls.containsKey(Utils.getLocationRaw())) { - return; - } - for (BlockPos fairySoul : fairySouls.get(Utils.getLocationRaw())) { - float[] colorComponents = isFairySoulNotFound(fairySoul) ? DyeColor.GREEN.getColorComponents() : DyeColor.RED.getColorComponents(); - RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, fairySoul, colorComponents, 0.5F); + if (SkyblockerConfig.get().general.fairySouls.enableFairySoulsHelper && fairySoulsLoaded.isDone() && fairySouls.containsKey(Utils.getLocationRaw())) { + for (BlockPos fairySoul : fairySouls.get(Utils.getLocationRaw())) { + float[] colorComponents = isFairySoulNotFound(fairySoul) ? DyeColor.GREEN.getColorComponents() : DyeColor.RED.getColorComponents(); + RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, fairySoul, colorComponents, 0.5F); + } } } -- cgit From 272131e0c082493e0df12b510012460f07a88694 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:39:09 +0800 Subject: Fix cancel game message incompatibility --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 94ead7c1..90939fe8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -94,6 +94,7 @@ public class Utils { public static void init() { ClientPlayConnectionEvents.JOIN.register(Utils::onClientWorldJoin); ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); + ClientReceiveMessageEvents.GAME_CANCELED.register(Utils::onChatMessage); // Somehow this works even though onChatMessage returns a boolean } /** -- cgit From 4a1075ce0e7c7bb53179820c44f639ce79fe7404 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:34:16 +0800 Subject: Add Chronomatron Solver --- .../skyblocker/config/SkyblockerConfig.java | 10 ++ .../me/xmrvizzy/skyblocker/gui/ColorHighlight.java | 15 +++ .../xmrvizzy/skyblocker/gui/ContainerSolver.java | 21 +++- .../skyblocker/gui/ContainerSolverManager.java | 20 +++- .../skyblocker/mixin/HandledScreenMixin.java | 45 +++++++- .../skyblocker/skyblock/dungeon/CroesusHelper.java | 4 +- .../skyblock/dungeon/terminal/ColorTerminal.java | 4 +- .../skyblock/dungeon/terminal/OrderTerminal.java | 4 +- .../dungeon/terminal/StartsWithTerminal.java | 4 +- .../skyblock/experiment/ChronomatronSolver.java | 126 +++++++++++++++++++++ .../skyblock/experiment/ExperimentSolver.java | 59 ++++++++++ .../skyblock/experiment/SuperpairsSolver.java | 44 +++++++ .../skyblock/experiment/UltrasequencerSolver.java | 40 +++++++ 13 files changed, 378 insertions(+), 18 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 31887a90..5621a258 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -146,6 +146,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public Bars bars = new Bars(); + @ConfigEntry.Category("experiments") + @ConfigEntry.Gui.CollapsibleObject() + public Experiments experiments = new Experiments(); + @ConfigEntry.Category("fishing") @ConfigEntry.Gui.CollapsibleObject() public Fishing fishing = new Fishing(); @@ -219,6 +223,12 @@ public class SkyblockerConfig implements ConfigData { } } + public static class Experiments { + public boolean enableChronomatronSolver = true; + public boolean enableSuperpairsSolver = true; + public boolean enableUltrasequencerSolver = true; + } + public static class Fishing { public boolean enableFishingHelper = true; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java index 5120ceac..d0bd68ae 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java @@ -1,4 +1,19 @@ package me.xmrvizzy.skyblocker.gui; public record ColorHighlight(int slot, int color) { + public static ColorHighlight red(int slot) { + return new ColorHighlight(slot, ContainerSolver.RED_HIGHLIGHT); + } + + public static ColorHighlight yellow(int slot) { + return new ColorHighlight(slot, ContainerSolver.YELLOW_HIGHLIGHT); + } + + public static ColorHighlight green(int slot) { + return new ColorHighlight(slot, ContainerSolver.GREEN_HIGHLIGHT); + } + + public static ColorHighlight gray(int slot) { + return new ColorHighlight(slot, ContainerSolver.GRAY_HIGHLIGHT); + } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java index 84de64eb..e52855a2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.gui; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.item.ItemStack; import java.util.List; @@ -11,22 +12,30 @@ import java.util.regex.Pattern; */ public abstract class ContainerSolver { private final Pattern CONTAINER_NAME; - protected final static int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; - protected final static int GRAY_HIGHLIGHT = 128 << 24 | 64 << 16 | 64 << 8 | 64; + protected static final int RED_HIGHLIGHT = 64 << 24 | 255 << 16; + protected static final int YELLOW_HIGHLIGHT = 128 << 24 | 255 << 16 | 255 << 8; + protected static final int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; + protected static final int GRAY_HIGHLIGHT = 128 << 24 | 64 << 16 | 64 << 8 | 64; - public ContainerSolver(String containerName) { + protected ContainerSolver(String containerName) { CONTAINER_NAME = Pattern.compile(containerName); } - public abstract boolean isEnabled(); + protected abstract boolean isEnabled(); public Pattern getName() { return CONTAINER_NAME; } - public abstract List getColors(String[] groups, Map slots); + protected void start(GenericContainerScreen screen) { + } + + protected void reset() { + } + + protected abstract List getColors(String[] groups, Map slots); - public void trimEdges(Map slots, int rows) { + protected void trimEdges(Map slots, int rows) { for (int i = 0; i < rows; i++) { slots.remove(9 * i); slots.remove(9 * i + 8); diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 354e7e3a..43bf32d7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -6,6 +6,9 @@ import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; +import me.xmrvizzy.skyblocker.skyblock.experiment.ChronomatronSolver; +import me.xmrvizzy.skyblocker.skyblock.experiment.SuperpairsSolver; +import me.xmrvizzy.skyblocker.skyblock.experiment.UltrasequencerSolver; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.gui.DrawContext; @@ -36,10 +39,17 @@ public class ContainerSolverManager { new ColorTerminal(), new OrderTerminal(), new StartsWithTerminal(), - new CroesusHelper() + new CroesusHelper(), + new ChronomatronSolver(), + new SuperpairsSolver(), + new UltrasequencerSolver() }; } + public ContainerSolver getCurrentSolver() { + return currentSolver; + } + public void init() { ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (Utils.isOnSkyblock() && screen instanceof GenericContainerScreen genericContainerScreen) { @@ -50,6 +60,7 @@ public class ContainerSolverManager { onDraw(context, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); matrices.pop(); }); + ScreenEvents.remove(screen).register(screen1 -> clearScreen()); onSetScreen(genericContainerScreen); } else { clearScreen(); @@ -67,16 +78,19 @@ public class ContainerSolverManager { if (matcher.matches()) { currentSolver = solver; groups = new String[matcher.groupCount()]; - for (int i = 0; i < groups.length; i++) + for (int i = 0; i < groups.length; i++) { groups[i] = matcher.group(i + 1); + } + currentSolver.start(screen); return; } } } - currentSolver = null; + clearScreen(); } public void clearScreen() { + currentSolver.reset(); currentSolver = null; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 2638db7e..b8df488c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -1,19 +1,27 @@ package me.xmrvizzy.skyblocker.mixin; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ContainerSolver; import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; +import me.xmrvizzy.skyblocker.skyblock.experiment.ChronomatronSolver; +import me.xmrvizzy.skyblocker.skyblock.experiment.ExperimentSolver; +import me.xmrvizzy.skyblocker.skyblock.experiment.SuperpairsSolver; +import me.xmrvizzy.skyblocker.skyblock.experiment.UltrasequencerSolver; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.screen.slot.Slot; +import net.minecraft.screen.slot.SlotActionType; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -44,7 +52,7 @@ public abstract class HandledScreenMixin extends Screen { String strName = stackName.getString(); if(Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) ci.cancel(); } - + //Backpack Preview String title = this.getTitle().getString(); boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); @@ -53,4 +61,39 @@ public abstract class HandledScreenMixin extends Screen { if (BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) ci.cancel(); } } + + @Redirect(method = {"drawSlot", "drawMouseoverTooltip"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/slot/Slot;getStack()Lnet/minecraft/item/ItemStack;", ordinal = 0)) + private ItemStack skyblocker$experimentSolvers$getStack(Slot slot) { + ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); + if ((currentSolver instanceof SuperpairsSolver || currentSolver instanceof UltrasequencerSolver) && ((ExperimentSolver) currentSolver).getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { + ItemStack itemStack = ((ExperimentSolver) currentSolver).getSlots().get(slot.getIndex()); + return itemStack == null ? slot.getStack() : itemStack; + } + return slot.getStack(); + } + + @Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;clickSlot(IIILnet/minecraft/screen/slot/SlotActionType;Lnet/minecraft/entity/player/PlayerEntity;)V")) + private void skyblockmod_onSlotClick(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) { + if (slot != null) { + ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); + if (currentSolver instanceof ExperimentSolver experimentSolver && experimentSolver.getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { + if (currentSolver instanceof ChronomatronSolver chronomatronSolver) { + Item item = chronomatronSolver.getChronomatronSlots().get(chronomatronSolver.getChronomatronCurrentOrdinal()); + if (slot.getStack().isOf(item) || ChronomatronSolver.TERRACOTTA_TO_GLASS.get(slot.getStack().getItem()) == item) { + if (chronomatronSolver.incrementChronomatronCurrentOrdinal() >= chronomatronSolver.getChronomatronSlots().size()) { + chronomatronSolver.setState(ExperimentSolver.State.END); + } + } + } else if (currentSolver instanceof SuperpairsSolver superpairsSolver) { + superpairsSolver.setSuperpairsPrevClickedSlot(slot.getIndex()); + superpairsSolver.setSuperpairsCurrentSlot(ItemStack.EMPTY); + } else if (currentSolver instanceof UltrasequencerSolver ultrasequencerSolver) { + if (slot.getIndex() == ultrasequencerSolver.getUltrasequencerNextSlot()) { + int count = ultrasequencerSolver.getSlots().get(ultrasequencerSolver.getUltrasequencerNextSlot()).getCount() + 1; + ultrasequencerSolver.getSlots().entrySet().stream().filter(entry -> entry.getValue().getCount() == count).findAny().ifPresentOrElse((entry) -> ultrasequencerSolver.setUltrasequencerNextSlot(entry.getKey()), () -> ultrasequencerSolver.setState(ExperimentSolver.State.END)); + } + } + } + } + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java index ec3655f0..5e7ca95f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -14,12 +14,12 @@ public class CroesusHelper extends ContainerSolver { public CroesusHelper() { super("^Croesus$"); } @Override - public boolean isEnabled() { + protected boolean isEnabled() { return SkyblockerConfig.get().locations.dungeons.croesusHelper; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { List highlights = new ArrayList<>(); for (Map.Entry entry : slots.entrySet()) { ItemStack stack = entry.getValue(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java index 0bfc0d60..30376254 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -27,13 +27,13 @@ public class ColorTerminal extends ContainerSolver { } @Override - public boolean isEnabled() { + protected boolean isEnabled() { targetColor = null; return SkyblockerConfig.get().locations.dungeons.terminals.solveColor; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { trimEdges(slots, 6); List highlights = new ArrayList<>(); String colorString = groups[0]; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java index 1cf0dcfc..3b4e1c50 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java @@ -21,14 +21,14 @@ public class OrderTerminal extends ContainerSolver { } @Override - public boolean isEnabled() { + protected boolean isEnabled() { orderedSlots = null; currentNum = 0; return SkyblockerConfig.get().locations.dungeons.terminals.solveOrder; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { if(orderedSlots == null && !orderSlots(slots)) return Collections.emptyList(); while(currentNum < PANES_NUM && Items.LIME_STAINED_GLASS_PANE.equals(slots.get(orderedSlots[currentNum]).getItem())) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java index 26d2a2c4..a836a679 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -15,12 +15,12 @@ public class StartsWithTerminal extends ContainerSolver { } @Override - public boolean isEnabled() { + protected boolean isEnabled() { return SkyblockerConfig.get().locations.dungeons.terminals.solveStartsWith; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { trimEdges(slots, 6); String prefix = groups[0]; List highlights = new ArrayList<>(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java new file mode 100644 index 00000000..ee88b98f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -0,0 +1,126 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import com.google.common.collect.ImmutableMap; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class ChronomatronSolver extends ExperimentSolver { + public static final ImmutableMap TERRACOTTA_TO_GLASS = ImmutableMap.ofEntries( + new AbstractMap.SimpleImmutableEntry<>(Items.RED_TERRACOTTA, Items.RED_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.ORANGE_TERRACOTTA, Items.ORANGE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.YELLOW_TERRACOTTA, Items.YELLOW_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.LIME_TERRACOTTA, Items.LIME_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.GREEN_TERRACOTTA, Items.GREEN_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.CYAN_TERRACOTTA, Items.CYAN_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.LIGHT_BLUE_TERRACOTTA, Items.LIGHT_BLUE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.BLUE_TERRACOTTA, Items.BLUE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.PURPLE_TERRACOTTA, Items.PURPLE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.PINK_TERRACOTTA, Items.PINK_STAINED_GLASS) + ); + + private final List chronomatronSlots = new ArrayList<>(); + private int chronomatronChainLengthCount; + private int chronomatronCurrentSlot; + private int chronomatronCurrentOrdinal; + + public ChronomatronSolver() { + super("^Chronomatron \\("); + } + + public List getChronomatronSlots() { + return chronomatronSlots; + } + + public int getChronomatronCurrentOrdinal() { + return chronomatronCurrentOrdinal; + } + + public int incrementChronomatronCurrentOrdinal() { + return ++chronomatronCurrentOrdinal; + } + + @Override + protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + return experimentsConfig.enableChronomatronSolver; + } + + @Override + protected void tick(Screen screen) { + if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Chronomatron (")) { + switch (state) { + case REMEMBER -> { + Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); + if (chronomatronCurrentSlot == 0) { + for (int index = 10; index < 43; index++) { + if (inventory.getStack(index).hasEnchantments()) { + if (chronomatronSlots.size() <= chronomatronChainLengthCount) { + chronomatronSlots.add(TERRACOTTA_TO_GLASS.get(inventory.getStack(index).getItem())); + state = State.WAIT; + } else { + chronomatronChainLengthCount++; + } + chronomatronCurrentSlot = index; + return; + } + } + } else if (!inventory.getStack(chronomatronCurrentSlot).hasEnchantments()) { + chronomatronCurrentSlot = 0; + } + } + case WAIT -> { + if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { + state = State.SHOW; + } + } + case END -> { + String name = genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString(); + if (!name.startsWith("Timer: ")) { + if (name.equals("Remember the pattern!")) { + chronomatronChainLengthCount = 0; + chronomatronCurrentOrdinal = 0; + state = State.REMEMBER; + } else { + reset(); + } + } + } + } + } else { + reset(); + } + } + + @Override + protected List getColors(String[] groups, Map slots) { + List highlights = new ArrayList<>(); + for (Map.Entry indexStack : slots.entrySet()) { + int index = indexStack.getKey(); + ItemStack stack = indexStack.getValue(); + Item item = chronomatronSlots.get(chronomatronCurrentOrdinal); + if (stack.isOf(item) || TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) { + highlights.add(ColorHighlight.green(index)); + } + } + return highlights; + } + + @Override + protected void reset() { + super.reset(); + chronomatronSlots.clear(); + chronomatronChainLengthCount = 0; + chronomatronCurrentSlot = 0; + chronomatronCurrentOrdinal = 0; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java new file mode 100644 index 00000000..91eabcfe --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java @@ -0,0 +1,59 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ContainerSolver; +import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.item.ItemStack; + +import java.util.HashMap; +import java.util.Map; + +public abstract class ExperimentSolver extends ContainerSolver { + public enum State { + REMEMBER, WAIT, SHOW, END + } + + protected State state = State.REMEMBER; + protected final Map slots = new HashMap<>(); + + protected ExperimentSolver(String containerName) { + super(containerName); + } + + public State getState() { + return state; + } + + public void setState(State state) { + this.state = state; + } + + public Map getSlots() { + return slots; + } + + @Override + protected final boolean isEnabled() { + return isEnabled(SkyblockerConfig.get().general.experiments); + } + + protected abstract boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig); + + @Override + protected void start(GenericContainerScreen screen) { + super.start(screen); + state = State.REMEMBER; + ScreenEvents.afterTick(screen).register(this::tick); + } + + @Override + protected void reset() { + super.reset(); + state = State.REMEMBER; + slots.clear(); + } + + protected abstract void tick(Screen screen); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java new file mode 100644 index 00000000..5a5993bc --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -0,0 +1,44 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.item.ItemStack; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class SuperpairsSolver extends ExperimentSolver { + private int superpairsPrevClickedSlot; + private ItemStack superpairsCurrentSlot; + private final Set superpairsDuplicatedSlots = new HashSet<>(); + + public SuperpairsSolver() { + super("^Superpairs \\("); + } + + public void setSuperpairsPrevClickedSlot(int superpairsPrevClickedSlot) { + this.superpairsPrevClickedSlot = superpairsPrevClickedSlot; + } + + public void setSuperpairsCurrentSlot(ItemStack superpairsCurrentSlot) { + this.superpairsCurrentSlot = superpairsCurrentSlot; + } + + @Override + protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + return experimentsConfig.enableSuperpairsSolver; + } + + @Override + protected void tick(Screen screen) { + + } + + @Override + protected List getColors(String[] groups, Map slots) { + return null; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java new file mode 100644 index 00000000..8ea44bce --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -0,0 +1,40 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.item.ItemStack; + +import java.util.List; +import java.util.Map; + +public class UltrasequencerSolver extends ExperimentSolver { + private int ultrasequencerNextSlot; + + public UltrasequencerSolver() { + super("^Ultrasequencer \\("); + } + + public int getUltrasequencerNextSlot() { + return ultrasequencerNextSlot; + } + + public void setUltrasequencerNextSlot(int ultrasequencerNextSlot) { + this.ultrasequencerNextSlot = ultrasequencerNextSlot; + } + + @Override + protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + return experimentsConfig.enableUltrasequencerSolver; + } + + @Override + protected void tick(Screen screen) { + + } + + @Override + protected List getColors(String[] groups, Map slots) { + return null; + } +} -- cgit From 8cf9c0835c5ed1567acf10f6e22766212f33dbc6 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:46:46 +0800 Subject: Add Superpairs and Ultrasequencer Solver --- .../skyblock/experiment/SuperpairsSolver.java | 43 +++++++++++++++--- .../skyblock/experiment/UltrasequencerSolver.java | 51 +++++++++++++++++++++- 2 files changed, 85 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java index 5a5993bc..117bcdf3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -3,12 +3,11 @@ package me.xmrvizzy.skyblocker.skyblock.experiment; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.gui.ColorHighlight; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; public class SuperpairsSolver extends ExperimentSolver { private int superpairsPrevClickedSlot; @@ -34,11 +33,41 @@ public class SuperpairsSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { - + if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Superpairs (")) { + if (state == State.SHOW) { + if (genericContainerScreen.getScreenHandler().getInventory().getStack(4).isOf(Items.CAULDRON)) { + reset(); + } else if (slots.get(superpairsPrevClickedSlot) == null) { + ItemStack itemStack = genericContainerScreen.getScreenHandler().getInventory().getStack(superpairsPrevClickedSlot); + if (!(itemStack.isOf(Items.CYAN_STAINED_GLASS) || itemStack.isOf(Items.BLACK_STAINED_GLASS_PANE) || itemStack.isOf(Items.AIR))) { + slots.entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey())); + slots.put(superpairsPrevClickedSlot, itemStack); + superpairsCurrentSlot = itemStack; + } + } + } + } else { + reset(); + } } @Override - protected List getColors(String[] groups, Map slots) { - return null; + protected List getColors(String[] groups, Map displaySlots) { + List highlights = new ArrayList<>(); + for (Map.Entry indexStack : displaySlots.entrySet()){ + int index = indexStack.getKey(); + ItemStack displayStack = indexStack.getValue(); + ItemStack stack = slots.get(index); + if (stack != null && !ItemStack.areEqual(stack, displayStack)) { + if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { + highlights.add(ColorHighlight.green(index)); + } else if (superpairsDuplicatedSlots.contains(index)) { + highlights.add(ColorHighlight.yellow(index)); + } else { + highlights.add(ColorHighlight.red(index)); + } + } + } + return highlights; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java index 8ea44bce..edda257c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -3,8 +3,11 @@ package me.xmrvizzy.skyblocker.skyblock.experiment; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.gui.ColorHighlight; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -30,11 +33,55 @@ public class UltrasequencerSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { - + if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Ultrasequencer (")) { + switch (state) { + case REMEMBER -> { + Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); + if (inventory.getStack(49).getName().getString().equals("Remember the pattern!")) { + for (int index = 9; index < 45; index++) { + ItemStack itemStack = inventory.getStack(index); + String name = itemStack.getName().getString(); + if (name.matches("\\d+")) { + if (name.equals("1")) { + ultrasequencerNextSlot = index; + } + slots.put(index, itemStack); + } + } + state = State.WAIT; + } + } + case WAIT -> { + if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { + state = State.SHOW; + } + } + case END -> { + String name = genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString(); + if (!name.startsWith("Timer: ")) { + if (name.equals("Remember the pattern!")) { + slots.clear(); + state = State.REMEMBER; + } else { + reset(); + } + } + } + } + } else { + reset(); + } } @Override protected List getColors(String[] groups, Map slots) { - return null; + List highlights = new ArrayList<>(); + for (Map.Entry indexStack : slots.entrySet()) { + int index = indexStack.getKey(); + if (index == ultrasequencerNextSlot) { + highlights.add(ColorHighlight.green(index)); + } + } + return highlights; } } -- cgit From 9f302adedceb0ab4f8ecd23cbb416f454fb688af Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:49:38 +0800 Subject: Fix mixin method name --- src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index b8df488c..753ae986 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -73,7 +73,7 @@ public abstract class HandledScreenMixin extends Screen { } @Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;clickSlot(IIILnet/minecraft/screen/slot/SlotActionType;Lnet/minecraft/entity/player/PlayerEntity;)V")) - private void skyblockmod_onSlotClick(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) { + private void skyblocker$experimentSolvers$onSlotClick(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) { if (slot != null) { ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); if (currentSolver instanceof ExperimentSolver experimentSolver && experimentSolver.getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { -- cgit From e9c2a6916ff744c935c4330c259b641159ec9b80 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:56:15 +0800 Subject: Fix Superpairs Solver initial state and refactor Experiment Solver fields to private --- .../skyblock/experiment/ChronomatronSolver.java | 8 ++++---- .../skyblocker/skyblock/experiment/ExperimentSolver.java | 4 ++-- .../skyblocker/skyblock/experiment/SuperpairsSolver.java | 16 +++++++++++----- .../skyblock/experiment/UltrasequencerSolver.java | 12 ++++++------ 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java index ee88b98f..1a6f0b55 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -58,7 +58,7 @@ public class ChronomatronSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Chronomatron (")) { - switch (state) { + switch (getState()) { case REMEMBER -> { Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); if (chronomatronCurrentSlot == 0) { @@ -66,7 +66,7 @@ public class ChronomatronSolver extends ExperimentSolver { if (inventory.getStack(index).hasEnchantments()) { if (chronomatronSlots.size() <= chronomatronChainLengthCount) { chronomatronSlots.add(TERRACOTTA_TO_GLASS.get(inventory.getStack(index).getItem())); - state = State.WAIT; + setState(State.WAIT); } else { chronomatronChainLengthCount++; } @@ -80,7 +80,7 @@ public class ChronomatronSolver extends ExperimentSolver { } case WAIT -> { if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { - state = State.SHOW; + setState(State.SHOW); } } case END -> { @@ -89,7 +89,7 @@ public class ChronomatronSolver extends ExperimentSolver { if (name.equals("Remember the pattern!")) { chronomatronChainLengthCount = 0; chronomatronCurrentOrdinal = 0; - state = State.REMEMBER; + setState(State.REMEMBER); } else { reset(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java index 91eabcfe..5dad908e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java @@ -15,8 +15,8 @@ public abstract class ExperimentSolver extends ContainerSolver { REMEMBER, WAIT, SHOW, END } - protected State state = State.REMEMBER; - protected final Map slots = new HashMap<>(); + private State state = State.REMEMBER; + private final Map slots = new HashMap<>(); protected ExperimentSolver(String containerName) { super(containerName); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java index 117bcdf3..f40b0fa0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -31,17 +31,23 @@ public class SuperpairsSolver extends ExperimentSolver { return experimentsConfig.enableSuperpairsSolver; } + @Override + protected void start(GenericContainerScreen screen) { + super.start(screen); + setState(State.SHOW); + } + @Override protected void tick(Screen screen) { if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Superpairs (")) { - if (state == State.SHOW) { + if (getState() == State.SHOW) { if (genericContainerScreen.getScreenHandler().getInventory().getStack(4).isOf(Items.CAULDRON)) { reset(); - } else if (slots.get(superpairsPrevClickedSlot) == null) { + } else if (getSlots().get(superpairsPrevClickedSlot) == null) { ItemStack itemStack = genericContainerScreen.getScreenHandler().getInventory().getStack(superpairsPrevClickedSlot); if (!(itemStack.isOf(Items.CYAN_STAINED_GLASS) || itemStack.isOf(Items.BLACK_STAINED_GLASS_PANE) || itemStack.isOf(Items.AIR))) { - slots.entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey())); - slots.put(superpairsPrevClickedSlot, itemStack); + getSlots().entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey())); + getSlots().put(superpairsPrevClickedSlot, itemStack); superpairsCurrentSlot = itemStack; } } @@ -57,7 +63,7 @@ public class SuperpairsSolver extends ExperimentSolver { for (Map.Entry indexStack : displaySlots.entrySet()){ int index = indexStack.getKey(); ItemStack displayStack = indexStack.getValue(); - ItemStack stack = slots.get(index); + ItemStack stack = getSlots().get(index); if (stack != null && !ItemStack.areEqual(stack, displayStack)) { if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { highlights.add(ColorHighlight.green(index)); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java index edda257c..90968fe2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -34,7 +34,7 @@ public class UltrasequencerSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Ultrasequencer (")) { - switch (state) { + switch (getState()) { case REMEMBER -> { Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); if (inventory.getStack(49).getName().getString().equals("Remember the pattern!")) { @@ -45,23 +45,23 @@ public class UltrasequencerSolver extends ExperimentSolver { if (name.equals("1")) { ultrasequencerNextSlot = index; } - slots.put(index, itemStack); + getSlots().put(index, itemStack); } } - state = State.WAIT; + setState(State.WAIT); } } case WAIT -> { if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { - state = State.SHOW; + setState(State.SHOW); } } case END -> { String name = genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString(); if (!name.startsWith("Timer: ")) { if (name.equals("Remember the pattern!")) { - slots.clear(); - state = State.REMEMBER; + getSlots().clear(); + setState(State.REMEMBER); } else { reset(); } -- cgit From 631dd509925041c8ca6b63687fec565ecdff585d Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 23:34:51 +0800 Subject: Fix currentSolver null crash and refactor mixin --- .../me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java | 6 ++++-- .../me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 14 +++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 43bf32d7..0c27704d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -90,8 +90,10 @@ public class ContainerSolverManager { } public void clearScreen() { - currentSolver.reset(); - currentSolver = null; + if (currentSolver != null) { + currentSolver.reset(); + currentSolver = null; + } } public void markDirty() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 753ae986..6d523343 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -19,8 +19,10 @@ import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -62,7 +64,17 @@ public abstract class HandledScreenMixin extends Screen { } } - @Redirect(method = {"drawSlot", "drawMouseoverTooltip"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/slot/Slot;getStack()Lnet/minecraft/item/ItemStack;", ordinal = 0)) + @Redirect(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/slot/Slot;getStack()Lnet/minecraft/item/ItemStack;", ordinal = 0)) + private ItemStack skyblocker$experimentSolvers$replaceTooltipDisplayStack(Slot slot) { + return skyblocker$experimentSolvers$getStack(slot); + } + + @ModifyVariable(method = "drawSlot", at = @At(value = "LOAD", ordinal = 10), ordinal = 0) + private ItemStack skyblocker$experimentSolvers$replaceDisplayStack(ItemStack stack, MatrixStack matrices, Slot slot) { + return skyblocker$experimentSolvers$getStack(slot); + } + + @Unique private ItemStack skyblocker$experimentSolvers$getStack(Slot slot) { ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); if ((currentSolver instanceof SuperpairsSolver || currentSolver instanceof UltrasequencerSolver) && ((ExperimentSolver) currentSolver).getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { -- cgit From 28699078b09780e9447b72b2859bba46b0e8dca9 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 17 Jun 2023 12:52:19 +0800 Subject: Fix solver detection and highlights --- .../skyblock/experiment/ChronomatronSolver.java | 16 +++++++------ .../skyblock/experiment/SuperpairsSolver.java | 26 ++++++++++++---------- .../skyblock/experiment/UltrasequencerSolver.java | 11 ++------- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java index 1a6f0b55..40793169 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -35,7 +35,7 @@ public class ChronomatronSolver extends ExperimentSolver { private int chronomatronCurrentOrdinal; public ChronomatronSolver() { - super("^Chronomatron \\("); + super("^Chronomatron \\(\\w+\\)$"); } public List getChronomatronSlots() { @@ -104,12 +104,14 @@ public class ChronomatronSolver extends ExperimentSolver { @Override protected List getColors(String[] groups, Map slots) { List highlights = new ArrayList<>(); - for (Map.Entry indexStack : slots.entrySet()) { - int index = indexStack.getKey(); - ItemStack stack = indexStack.getValue(); - Item item = chronomatronSlots.get(chronomatronCurrentOrdinal); - if (stack.isOf(item) || TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) { - highlights.add(ColorHighlight.green(index)); + if (getState() == State.SHOW && chronomatronSlots.size() > chronomatronCurrentOrdinal) { + for (Map.Entry indexStack : slots.entrySet()) { + int index = indexStack.getKey(); + ItemStack stack = indexStack.getValue(); + Item item = chronomatronSlots.get(chronomatronCurrentOrdinal); + if (stack.isOf(item) || TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) { + highlights.add(ColorHighlight.green(index)); + } } } return highlights; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java index f40b0fa0..9f6e8b2a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -15,7 +15,7 @@ public class SuperpairsSolver extends ExperimentSolver { private final Set superpairsDuplicatedSlots = new HashSet<>(); public SuperpairsSolver() { - super("^Superpairs \\("); + super("^Superpairs \\(\\w+\\)$"); } public void setSuperpairsPrevClickedSlot(int superpairsPrevClickedSlot) { @@ -60,17 +60,19 @@ public class SuperpairsSolver extends ExperimentSolver { @Override protected List getColors(String[] groups, Map displaySlots) { List highlights = new ArrayList<>(); - for (Map.Entry indexStack : displaySlots.entrySet()){ - int index = indexStack.getKey(); - ItemStack displayStack = indexStack.getValue(); - ItemStack stack = getSlots().get(index); - if (stack != null && !ItemStack.areEqual(stack, displayStack)) { - if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { - highlights.add(ColorHighlight.green(index)); - } else if (superpairsDuplicatedSlots.contains(index)) { - highlights.add(ColorHighlight.yellow(index)); - } else { - highlights.add(ColorHighlight.red(index)); + if (getState() == State.SHOW) { + for (Map.Entry indexStack : displaySlots.entrySet()) { + int index = indexStack.getKey(); + ItemStack displayStack = indexStack.getValue(); + ItemStack stack = getSlots().get(index); + if (stack != null && !ItemStack.areEqual(stack, displayStack)) { + if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { + highlights.add(ColorHighlight.green(index)); + } else if (superpairsDuplicatedSlots.contains(index)) { + highlights.add(ColorHighlight.yellow(index)); + } else { + highlights.add(ColorHighlight.red(index)); + } } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java index 90968fe2..45d6c0c6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -15,7 +15,7 @@ public class UltrasequencerSolver extends ExperimentSolver { private int ultrasequencerNextSlot; public UltrasequencerSolver() { - super("^Ultrasequencer \\("); + super("^Ultrasequencer \\(\\w+\\)$"); } public int getUltrasequencerNextSlot() { @@ -75,13 +75,6 @@ public class UltrasequencerSolver extends ExperimentSolver { @Override protected List getColors(String[] groups, Map slots) { - List highlights = new ArrayList<>(); - for (Map.Entry indexStack : slots.entrySet()) { - int index = indexStack.getKey(); - if (index == ultrasequencerNextSlot) { - highlights.add(ColorHighlight.green(index)); - } - } - return highlights; + return getState() == State.SHOW && ultrasequencerNextSlot != 0 ? List.of(ColorHighlight.green(ultrasequencerNextSlot)) : new ArrayList<>(); } } -- cgit From 2825aa0dd980f1909941cea87e37d47b9c80efab Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 17 Jun 2023 16:35:36 +0800 Subject: Refactor ColorHighlight --- .../java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java | 13 +++++++++---- .../java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java | 10 +++------- .../xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java | 9 ++++++--- .../skyblocker/skyblock/dungeon/terminal/ColorTerminal.java | 13 ++++++------- .../skyblock/dungeon/terminal/StartsWithTerminal.java | 7 ++++--- 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java index d0bd68ae..4367e6e7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java @@ -1,19 +1,24 @@ package me.xmrvizzy.skyblocker.gui; public record ColorHighlight(int slot, int color) { + private static final int RED_HIGHLIGHT = 64 << 24 | 255 << 16; + private static final int YELLOW_HIGHLIGHT = 128 << 24 | 255 << 16 | 255 << 8; + private static final int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; + private static final int GRAY_HIGHLIGHT = 128 << 24 | 64 << 16 | 64 << 8 | 64; + public static ColorHighlight red(int slot) { - return new ColorHighlight(slot, ContainerSolver.RED_HIGHLIGHT); + return new ColorHighlight(slot, RED_HIGHLIGHT); } public static ColorHighlight yellow(int slot) { - return new ColorHighlight(slot, ContainerSolver.YELLOW_HIGHLIGHT); + return new ColorHighlight(slot, YELLOW_HIGHLIGHT); } public static ColorHighlight green(int slot) { - return new ColorHighlight(slot, ContainerSolver.GREEN_HIGHLIGHT); + return new ColorHighlight(slot, GREEN_HIGHLIGHT); } public static ColorHighlight gray(int slot) { - return new ColorHighlight(slot, ContainerSolver.GRAY_HIGHLIGHT); + return new ColorHighlight(slot, GRAY_HIGHLIGHT); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java index e52855a2..c5e3cf09 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java @@ -11,20 +11,16 @@ import java.util.regex.Pattern; * Abstract class for gui solvers. Extend this class to add a new gui solver, like terminal solvers or experiment solvers. */ public abstract class ContainerSolver { - private final Pattern CONTAINER_NAME; - protected static final int RED_HIGHLIGHT = 64 << 24 | 255 << 16; - protected static final int YELLOW_HIGHLIGHT = 128 << 24 | 255 << 16 | 255 << 8; - protected static final int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; - protected static final int GRAY_HIGHLIGHT = 128 << 24 | 64 << 16 | 64 << 8 | 64; + private final Pattern containerName; protected ContainerSolver(String containerName) { - CONTAINER_NAME = Pattern.compile(containerName); + this.containerName = Pattern.compile(containerName); } protected abstract boolean isEnabled(); public Pattern getName() { - return CONTAINER_NAME; + return containerName; } protected void start(GenericContainerScreen screen) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java index 5e7ca95f..2d868782 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -11,7 +11,9 @@ import java.util.Map; public class CroesusHelper extends ContainerSolver { - public CroesusHelper() { super("^Croesus$"); } + public CroesusHelper() { + super("^Croesus$"); + } @Override protected boolean isEnabled() { @@ -23,8 +25,9 @@ public class CroesusHelper extends ContainerSolver { List highlights = new ArrayList<>(); for (Map.Entry entry : slots.entrySet()) { ItemStack stack = entry.getValue(); - if (stack != null && stack.getNbt() != null && stack.getNbt().toString().contains("opened")) - highlights.add(new ColorHighlight(entry.getKey(), GRAY_HIGHLIGHT)); + if (stack != null && stack.getNbt() != null && stack.getNbt().toString().contains("opened")) { + highlights.add(ColorHighlight.gray(entry.getKey())); + } } return highlights; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java index 30376254..add30907 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -6,7 +6,6 @@ import me.xmrvizzy.skyblocker.gui.ContainerSolver; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -// import net.minecraft.registry.Registry; import net.minecraft.registry.Registries; import net.minecraft.util.DyeColor; import net.minecraft.util.Identifier; @@ -37,17 +36,18 @@ public class ColorTerminal extends ContainerSolver { trimEdges(slots, 6); List highlights = new ArrayList<>(); String colorString = groups[0]; - if(targetColor == null) { + if (targetColor == null) { targetColor = colorFromName.get(colorString); - if(targetColor == null) { + if (targetColor == null) { LOGGER.error("[Skyblocker] Couldn't find dye color corresponding to \"" + colorString + "\""); return Collections.emptyList(); } } - for(Map.Entry slot : slots.entrySet()) { + for (Map.Entry slot : slots.entrySet()) { ItemStack itemStack = slot.getValue(); - if(!itemStack.hasEnchantments() && targetColor.equals(itemColor.get(itemStack.getItem()))) - highlights.add(new ColorHighlight(slot.getKey(), GREEN_HIGHLIGHT)); + if (!itemStack.hasEnchantments() && targetColor.equals(itemColor.get(itemStack.getItem()))) { + highlights.add(ColorHighlight.green(slot.getKey())); + } } return highlights; } @@ -63,7 +63,6 @@ public class ColorTerminal extends ContainerSolver { itemColor = new HashMap<>(); for (DyeColor color : DyeColor.values()) for (String item : new String[]{"dye", "wool", "stained_glass", "terracotta"}) - // itemColor.put(Registry.ITEM.get(new Identifier(color.getName() + '_' + item)), color); itemColor.put(Registries.ITEM.get(new Identifier(color.getName() + '_' + item)), color); itemColor.put(Items.BONE_MEAL, DyeColor.WHITE); itemColor.put(Items.LAPIS_LAZULI, DyeColor.BLUE); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java index a836a679..18326254 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -24,10 +24,11 @@ public class StartsWithTerminal extends ContainerSolver { trimEdges(slots, 6); String prefix = groups[0]; List highlights = new ArrayList<>(); - for(Map.Entry slot : slots.entrySet()) { + for (Map.Entry slot : slots.entrySet()) { ItemStack stack = slot.getValue(); - if(!stack.hasEnchantments() && stack.getName().getString().startsWith(prefix)) - highlights.add(new ColorHighlight(slot.getKey(), GREEN_HIGHLIGHT)); + if (!stack.hasEnchantments() && stack.getName().getString().startsWith(prefix)) { + highlights.add(ColorHighlight.green(slot.getKey())); + } } return highlights; } -- cgit From d4f787a86da7cada1b02463ee137a2aab334c590 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 17 Jun 2023 17:41:12 +0800 Subject: Add English localization --- src/main/resources/assets/skyblocker/lang/en_us.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index b40dd52e..f2eec8fd 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -20,6 +20,10 @@ "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Position", "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defence Bar Position", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar Position", + "text.autoconfig.skyblocker.option.general.experiments": "Experiments Solver", + "text.autoconfig.skyblocker.option.general.experiments.enableChronomatronSolver": "Enable Chronomatron Solver", + "text.autoconfig.skyblocker.option.general.experiments.enableSuperpairsSolver": "Enable Superpairs Solver", + "text.autoconfig.skyblocker.option.general.experiments.enableUltrasequencerSolver": "Enable Ultrasequencer Solver", "text.autoconfig.skyblocker.option.general.fishing": "Fishing Helper", "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper", "text.autoconfig.skyblocker.option.general.fairySouls": "Fairy Souls Helper", -- cgit From 28d137d777ad1e78043f4639d8fbadd0d3392d2c Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:08:33 +0800 Subject: Fix HandledScreenMixin for 1.20 --- .../xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 6d523343..b715560e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -13,6 +13,9 @@ import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.inventory.SimpleInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; import net.minecraft.text.Text; @@ -48,14 +51,15 @@ public abstract class HandledScreenMixin extends Screen { @Inject(at = @At("HEAD"), method = "drawMouseoverTooltip", cancellable = true) public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) { - //Hide Empty Tooltips - if(this.focusedSlot != null) { + // Hide Empty Tooltips + if (this.focusedSlot != null) { Text stackName = focusedSlot.getStack().getName(); String strName = stackName.getString(); - if(Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) ci.cancel(); - } + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) + ci.cancel(); + } - //Backpack Preview + // Backpack Preview String title = this.getTitle().getString(); boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); if (shiftDown && title.equals("Storage") && this.focusedSlot != null) { @@ -69,8 +73,8 @@ public abstract class HandledScreenMixin extends Screen { return skyblocker$experimentSolvers$getStack(slot); } - @ModifyVariable(method = "drawSlot", at = @At(value = "LOAD", ordinal = 10), ordinal = 0) - private ItemStack skyblocker$experimentSolvers$replaceDisplayStack(ItemStack stack, MatrixStack matrices, Slot slot) { + @ModifyVariable(method = "drawSlot", at = @At(value = "LOAD", ordinal = 4), ordinal = 0) + private ItemStack skyblocker$experimentSolvers$replaceDisplayStack(ItemStack stack, DrawContext context, Slot slot) { return skyblocker$experimentSolvers$getStack(slot); } -- cgit From e4b5090141ff10983c0d443d0f21b0c60d27f049 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:10:26 +0800 Subject: Add null checks --- src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index b715560e..431880e5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -42,7 +42,7 @@ public abstract class HandledScreenMixin extends Screen { @Inject(at = @At("HEAD"), method = "keyPressed") public void skyblocker$keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { - if (this.focusedSlot != null) { + if (this.client != null && this.focusedSlot != null) { if (keyCode != 256 && !this.client.options.inventoryKey.matchesKey(keyCode, scanCode)) { if (WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) WikiLookup.openWiki(this.focusedSlot); } @@ -62,7 +62,7 @@ public abstract class HandledScreenMixin extends Screen { // Backpack Preview String title = this.getTitle().getString(); boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); - if (shiftDown && title.equals("Storage") && this.focusedSlot != null) { + if (this.client != null && this.client.player != null && this.focusedSlot != null && shiftDown && title.equals("Storage")) { if (this.focusedSlot.inventory == this.client.player.getInventory()) return; if (BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) ci.cancel(); } -- cgit From 9da77e918acd36fa21181db43a80c6ac9429e489 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:20:41 +0800 Subject: Refactor HandledScreenMixin --- .../skyblocker/mixin/HandledScreenMixin.java | 37 ++++++++-------------- 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 431880e5..aefe11c6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -42,29 +42,22 @@ public abstract class HandledScreenMixin extends Screen { @Inject(at = @At("HEAD"), method = "keyPressed") public void skyblocker$keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { - if (this.client != null && this.focusedSlot != null) { - if (keyCode != 256 && !this.client.options.inventoryKey.matchesKey(keyCode, scanCode)) { - if (WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) WikiLookup.openWiki(this.focusedSlot); - } + if (this.client != null && this.focusedSlot != null && keyCode != 256 && !this.client.options.inventoryKey.matchesKey(keyCode, scanCode) && WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) { + WikiLookup.openWiki(this.focusedSlot); } } @Inject(at = @At("HEAD"), method = "drawMouseoverTooltip", cancellable = true) public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) { // Hide Empty Tooltips - if (this.focusedSlot != null) { - Text stackName = focusedSlot.getStack().getName(); - String strName = stackName.getString(); - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) - ci.cancel(); + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && this.focusedSlot != null && focusedSlot.getStack().getName().getString().equals(" ")) { + ci.cancel(); } // Backpack Preview - String title = this.getTitle().getString(); boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); - if (this.client != null && this.client.player != null && this.focusedSlot != null && shiftDown && title.equals("Storage")) { - if (this.focusedSlot.inventory == this.client.player.getInventory()) return; - if (BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) ci.cancel(); + if (this.client != null && this.client.player != null && this.focusedSlot != null && shiftDown && this.getTitle().getString().equals("Storage") && this.focusedSlot.inventory != this.client.player.getInventory() && BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) { + ci.cancel(); } } @@ -93,21 +86,17 @@ public abstract class HandledScreenMixin extends Screen { if (slot != null) { ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); if (currentSolver instanceof ExperimentSolver experimentSolver && experimentSolver.getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { - if (currentSolver instanceof ChronomatronSolver chronomatronSolver) { + if (experimentSolver instanceof ChronomatronSolver chronomatronSolver) { Item item = chronomatronSolver.getChronomatronSlots().get(chronomatronSolver.getChronomatronCurrentOrdinal()); - if (slot.getStack().isOf(item) || ChronomatronSolver.TERRACOTTA_TO_GLASS.get(slot.getStack().getItem()) == item) { - if (chronomatronSolver.incrementChronomatronCurrentOrdinal() >= chronomatronSolver.getChronomatronSlots().size()) { - chronomatronSolver.setState(ExperimentSolver.State.END); - } + if ((slot.getStack().isOf(item) || ChronomatronSolver.TERRACOTTA_TO_GLASS.get(slot.getStack().getItem()) == item) && chronomatronSolver.incrementChronomatronCurrentOrdinal() >= chronomatronSolver.getChronomatronSlots().size()) { + chronomatronSolver.setState(ExperimentSolver.State.END); } - } else if (currentSolver instanceof SuperpairsSolver superpairsSolver) { + } else if (experimentSolver instanceof SuperpairsSolver superpairsSolver) { superpairsSolver.setSuperpairsPrevClickedSlot(slot.getIndex()); superpairsSolver.setSuperpairsCurrentSlot(ItemStack.EMPTY); - } else if (currentSolver instanceof UltrasequencerSolver ultrasequencerSolver) { - if (slot.getIndex() == ultrasequencerSolver.getUltrasequencerNextSlot()) { - int count = ultrasequencerSolver.getSlots().get(ultrasequencerSolver.getUltrasequencerNextSlot()).getCount() + 1; - ultrasequencerSolver.getSlots().entrySet().stream().filter(entry -> entry.getValue().getCount() == count).findAny().ifPresentOrElse((entry) -> ultrasequencerSolver.setUltrasequencerNextSlot(entry.getKey()), () -> ultrasequencerSolver.setState(ExperimentSolver.State.END)); - } + } else if (experimentSolver instanceof UltrasequencerSolver ultrasequencerSolver && slot.getIndex() == ultrasequencerSolver.getUltrasequencerNextSlot()) { + int count = ultrasequencerSolver.getSlots().get(ultrasequencerSolver.getUltrasequencerNextSlot()).getCount() + 1; + ultrasequencerSolver.getSlots().entrySet().stream().filter(entry -> entry.getValue().getCount() == count).findAny().ifPresentOrElse((entry) -> ultrasequencerSolver.setUltrasequencerNextSlot(entry.getKey()), () -> ultrasequencerSolver.setState(ExperimentSolver.State.END)); } } } -- cgit From 0a3c3d61b749172464665634b392b1f68a32288e Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 23 Jun 2023 14:27:42 -0400 Subject: Added Rift Tab Hud + 1 Rift related fix --- .../skyblocker/discord/DiscordRPCManager.java | 4 +- .../skyblocker/skyblock/tabhud/screens/Screen.java | 4 + .../screens/genericInfo/GenericRiftInfoScreen.java | 38 ++++++++++ .../skyblock/tabhud/screens/main/RiftScreen.java | 28 +++++++ .../skyblocker/skyblock/tabhud/util/Ico.java | 5 ++ .../skyblock/tabhud/util/PlayerListMgr.java | 13 +++- .../skyblock/tabhud/util/PlayerLocator.java | 3 + .../tabhud/widget/rift/AdvertisementWidget.java | 26 +++++++ .../tabhud/widget/rift/GoodToKnowWidget.java | 46 +++++++++++ .../tabhud/widget/rift/RiftProfileWidget.java | 19 +++++ .../tabhud/widget/rift/RiftProgressWidget.java | 88 ++++++++++++++++++++++ .../tabhud/widget/rift/RiftServerInfoWidget.java | 26 +++++++ .../tabhud/widget/rift/RiftStatsWidget.java | 41 ++++++++++ .../skyblock/tabhud/widget/rift/ShenWidget.java | 20 +++++ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 3 +- 15 files changed, 357 insertions(+), 7 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java index 29a2c958..325f271a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -108,13 +108,13 @@ public class DiscordRPCManager { switch (SkyblockerConfig.get().richPresence.info) { case BITS -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits()); case PURSE -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse()); - case LOCATION -> info = "⏣ " + Utils.getLocation(); + case LOCATION -> info = Utils.getLocation(); } } else if (SkyblockerConfig.get().richPresence.cycleMode) { switch (cycleCount) { case 0 -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits()); case 1 -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse()); - case 2 -> info = "⏣ " + Utils.getLocation(); + case 2 -> info = Utils.getLocation(); } } return info; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index 2ed15f27..6d06c637 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -6,6 +6,7 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GardenInfoScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GenericInfoScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GenericRiftInfoScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.CrimsonIsleScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonHubScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonScreen; @@ -17,6 +18,7 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HomeServerScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HubServerScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.MineServerScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.ParkServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.RiftScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.DungeonPlayerScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.GuestPlayerScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.HomePlayerScreen; @@ -51,6 +53,7 @@ public class Screen { private static Screen correctGenericScrn(int w, int h, Text footer) { return switch (PlayerLocator.getPlayerLocation()) { case GARDEN -> new GardenInfoScreen(w, h, footer); // ok + case THE_RIFT -> new GenericRiftInfoScreen(w, h, footer); case UNKNOWN -> new EmptyScreen(w, h, footer); // ok default -> new GenericInfoScreen(w, h, footer); // ok }; @@ -78,6 +81,7 @@ public class Screen { case DUNGEON -> new DungeonScreen(w, h, footer); // ok case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, footer); case GARDEN -> new GardenScreen(w, h, footer); // ok + case THE_RIFT -> new RiftScreen(w, h, footer); case UNKNOWN -> new EmptyScreen(w, h, footer); // ok default -> new GenericServerScreen(w, h, footer); // ok }; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java new file mode 100644 index 00000000..9821b5a3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java @@ -0,0 +1,38 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftProfileWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftStatsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.ShenWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.AdvertisementWidget; +import net.minecraft.text.Text; + +public class GenericRiftInfoScreen extends Screen { + + public GenericRiftInfoScreen(int w, int h, Text footer) { + super(w, h); + + String f = footer.getString(); + + RiftProfileWidget profile = new RiftProfileWidget(); + RiftStatsWidget stats = new RiftStatsWidget(); + ShenWidget shen = new ShenWidget(); + + CookieWidget cookie = new CookieWidget(f); + AdvertisementWidget advertisement = new AdvertisementWidget(); + + this.stackWidgetsH(stats, advertisement); + this.stackWidgetsH(profile, shen, cookie); + + this.offCenterL(stats); + this.offCenterL(advertisement); + + this.offCenterR(profile); + this.offCenterR(shen); + this.offCenterR(cookie); + + this.addWidgets(profile, stats, shen, cookie, advertisement); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java new file mode 100644 index 00000000..d63bcf62 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java @@ -0,0 +1,28 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftProgressWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.GoodToKnowWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftServerInfoWidget; + + +import net.minecraft.text.Text; + +public class RiftScreen extends Screen { + + public RiftScreen(int w, int h, Text footer) { + super(w, h); + + RiftProgressWidget rftProg = new RiftProgressWidget(); + GoodToKnowWidget gtk = new GoodToKnowWidget(); + RiftServerInfoWidget si = new RiftServerInfoWidget(); + + this.stackWidgetsH(si, gtk); + this.stackWidgetsH(rftProg); + this.offCenterL(si); + this.offCenterL(gtk); + this.offCenterR(rftProg); + this.addWidgets(si, gtk, rftProg); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java index ca767617..97237769 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java @@ -52,4 +52,9 @@ public class Ico { public static final ItemStack SAPLING = new ItemStack(Items.OAK_SAPLING); public static final ItemStack MILESTONE = new ItemStack(Items.LODESTONE); public static final ItemStack PICKAXE = new ItemStack(Items.IRON_PICKAXE); + public static final ItemStack NETHER_STAR = new ItemStack(Items.NETHER_STAR); + public static final ItemStack HEART_OF_THE_SEA = new ItemStack(Items.HEART_OF_THE_SEA); + public static final ItemStack EXPERIENCE_BOTTLE = new ItemStack(Items.EXPERIENCE_BOTTLE); + public static final ItemStack PINK_DYE = new ItemStack(Items.PINK_DYE); + public static final ItemStack ENCHANTED_BOOK = new ItemStack(Items.ENCHANTED_BOOK); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 5ace64ea..ee4319dc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -98,8 +98,8 @@ public class PlayerListMgr { * @return the text or null, if the display name is null * * @implNote currently designed specifically for crimson isles faction quests - * widget, might not work correctly without modification for other - * stuff. you've been warned! + * widget and the rift widgets, might not work correctly without + * modification for other stuff. you've been warned! */ public static Text textAt(int idx) { @@ -128,13 +128,18 @@ public class PlayerListMgr { // Trim leading & trailing space - this can only be done at the start and end // otherwise it'll produce malformed results if (i == 0) - textToAppend = StringUtils.removeStart(textToAppend, " "); + textToAppend = textToAppend.stripLeading(); if (i == size - 1) - textToAppend = StringUtils.removeEnd(textToAppend, " "); + textToAppend = textToAppend.stripTrailing(); newText.append(Text.literal(textToAppend).setStyle(current.getStyle())); } + // Avoid returning an empty component - Rift advertisements needed this + if (newText.getString().length() == 0) { + return null; + } + return newText; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java index d7abdfc2..c2f14d3c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java @@ -25,6 +25,7 @@ public class PlayerLocator { JERRY, GARDEN, INSTANCED, + THE_RIFT, UNKNOWN } @@ -82,6 +83,8 @@ public class PlayerLocator { return Location.GARDEN; case "Instanced": return Location.INSTANCED; + case "The Rift": + return Location.THE_RIFT; default: return Location.UNKNOWN; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java new file mode 100644 index 00000000..61c79c26 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java @@ -0,0 +1,26 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class AdvertisementWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Advertisement").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + + public AdvertisementWidget() { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + + for(int i = 73; i < 80; i++) { + Text text = PlayerListMgr.textAt(i); + if(text != null) this.addComponent(new PlainTextComponent(text)); + } + + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java new file mode 100644 index 00000000..ca95f811 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java @@ -0,0 +1,46 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class GoodToKnowWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Good To Know").formatted(Formatting.BLUE, Formatting.BOLD); + + public GoodToKnowWidget() { + super(TITLE, Formatting.BLUE.getColorValue()); + + //After you progress further the tab adds more info so we need to be careful of that + //In beginning it only shows montezuma, then timecharms and enigma souls are added + Text pos49 = PlayerListMgr.textAt(49); //Can be times visited rift + Text pos51 = PlayerListMgr.textAt(51); //Can be lifetime motes or visited rift + Text pos53 = PlayerListMgr.textAt(53); //Can be lifetime motes + + int visitedRiftPos = 0; + int lifetimeMotesPos = 0; + + //Check each position to see what is or isn't there so we don't try adding invalid components + if(pos49.getString().contains("times")) visitedRiftPos = 49; + if(pos51.getString().contains("Motes")) lifetimeMotesPos = 51; + if(pos51.getString().contains("times")) visitedRiftPos = 51; + if(pos53.getString().contains("Motes")) lifetimeMotesPos = 53; + + Text timesVisitedRift = (visitedRiftPos == 51) ? pos51 : (visitedRiftPos == 49) ? pos49 : null; + Text lifetimeMotesEarned = (lifetimeMotesPos == 53) ? pos53 : (lifetimeMotesPos == 51) ? pos51 : null; + + if(visitedRiftPos != 0) { + this.addComponent(new IcoTextComponent(Ico.EXPERIENCE_BOTTLE, Text.literal("Visited Rift: ").append(timesVisitedRift))); + } + + if(lifetimeMotesPos != 0) { + this.addComponent(new IcoTextComponent(Ico.PINK_DYE, Text.literal("Lifetime Earned: ").append(lifetimeMotesEarned))); + } + + this.pack(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java new file mode 100644 index 00000000..5460de49 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java @@ -0,0 +1,19 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class RiftProfileWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Profile").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + + public RiftProfileWidget() { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + this.addSimpleIcoText(Ico.SIGN, "Profile:", Formatting.GREEN, 61); + this.pack(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java new file mode 100644 index 00000000..615d3cb0 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java @@ -0,0 +1,88 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.math.MathHelper; + +public class RiftProgressWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Rift Progress").formatted(Formatting.BLUE, Formatting.BOLD); + + private static final Pattern TIMECHARMS_PATTERN = Pattern.compile("Timecharms: (?[0-9]+)\\/(?[0-9]+)"); + private static final Pattern ENIGMA_SOULS_PATTERN = Pattern.compile("Enigma Souls: (?[0-9]+)\\/(?[0-9]+)"); + private static final Pattern MONTEZUMA_PATTERN = Pattern.compile("Montezuma: (?[0-9]+)\\/(?[0-9]+)"); + + public RiftProgressWidget() { + super(TITLE, Formatting.BLUE.getColorValue()); + + //After you progress further the tab adds more info so we need to be careful of that + //In beginning it only shows montezuma, then timecharms and enigma souls are added + String pos45 = PlayerListMgr.strAt(45); //Can be Montezuma or Timecharms + String pos46 = PlayerListMgr.strAt(46); //Can be Enigma Souls or Empty + String pos47 = PlayerListMgr.strAt(47); //Can be Montezuma or "Good to know" heading + + boolean hasTimecharms = false; + boolean hasEnigmaSouls = false; + int montezumaPos = 0; + + //Check each position to see what is or isn't there so we don't try adding invalid components + if(pos45.contains("Timecharms")) hasTimecharms = true; + if(pos46.contains("Enigma Souls")) hasEnigmaSouls = true; + + //Small ternary to account for positions, defaults to -1 if it for some reason does not exist (which shouldn't be the case!) + montezumaPos = (pos47.contains("Montezuma")) ? 47 : (pos45.contains("Montezuma")) ? 45 : -1; + + if(hasTimecharms) { + Matcher m = PlayerListMgr.regexAt(45, TIMECHARMS_PATTERN); + + int current = Integer.parseInt(m.group("current")); + int total = Integer.parseInt(m.group("total")); + float pcnt = ((float) current / (float) total) * 100f; + Text progressText = Text.literal(current + "/" + total); + + ProgressComponent pc = new ProgressComponent(Ico.NETHER_STAR, Text.literal("Timecharms"), progressText, pcnt, pcntToCol(pcnt)); + + this.addComponent(pc); + } + + if(hasEnigmaSouls) { + Matcher m = PlayerListMgr.regexAt(46, ENIGMA_SOULS_PATTERN); + + int current = Integer.parseInt(m.group("current")); + int total = Integer.parseInt(m.group("total")); + float pcnt = ((float) current / (float) total) * 100f; + Text progressText = Text.literal(current + "/" + total); + + ProgressComponent pc = new ProgressComponent(Ico.HEART_OF_THE_SEA, Text.literal("Enigma Souls"), progressText, pcnt, pcntToCol(pcnt)); + + this.addComponent(pc); + } + + if(montezumaPos != -1) { + Matcher m = PlayerListMgr.regexAt(montezumaPos, MONTEZUMA_PATTERN); + + int current = Integer.parseInt(m.group("current")); + int total = Integer.parseInt(m.group("total")); + float pcnt = ((float) current / (float) total) * 100f; + Text progressText = Text.literal(current + "/" + total); + + ProgressComponent pc = new ProgressComponent(Ico.BONE, Text.literal("Montezuma"), progressText, pcnt, pcntToCol(pcnt)); + + this.addComponent(pc); + } + + this.pack(); + } + + private static int pcntToCol(float pcnt) { + return MathHelper.hsvToRgb(pcnt / 300f, 0.9f, 0.9f); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java new file mode 100644 index 00000000..2ac2a35d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java @@ -0,0 +1,26 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +/** + * Special version of the server info widget for the rift! + * + */ +public class RiftServerInfoWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Server Info").formatted(Formatting.LIGHT_PURPLE, Formatting.BOLD); + + public RiftServerInfoWidget() { + super(TITLE, Formatting.LIGHT_PURPLE.getColorValue()); + + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.LIGHT_PURPLE, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java new file mode 100644 index 00000000..ef5876f2 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java @@ -0,0 +1,41 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; + +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class RiftStatsWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Stats").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + + public RiftStatsWidget() { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + Text riftDamage = Widget.simpleEntryText(64, "RDG", Formatting.DARK_PURPLE); + IcoTextComponent rdg = new IcoTextComponent(Ico.DIASWORD, riftDamage); + + Text speed = Widget.simpleEntryText(65, "SPD", Formatting.WHITE); + IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); + + Text intelligence = Widget.simpleEntryText(66, "INT", Formatting.AQUA); + IcoTextComponent intel = new IcoTextComponent(Ico.ENCHANTED_BOOK, intelligence); + + Text manaRegen = Widget.simpleEntryText(67, "MRG", Formatting.AQUA); + IcoTextComponent mrg = new IcoTextComponent(Ico.DIAMOND, manaRegen); + + TableComponent tc = new TableComponent(2, 2, Formatting.AQUA.getColorValue()); + tc.addToCell(0, 0, rdg); + tc.addToCell(0, 1, spd); + tc.addToCell(1, 0, intel); + tc.addToCell(1, 1, mrg); + + this.addComponent(tc); + this.pack(); + } + +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java new file mode 100644 index 00000000..5dcc08c0 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java @@ -0,0 +1,20 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class ShenWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Shen's Countdown").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + + public ShenWidget() { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + this.addComponent(new PlainTextComponent(Text.literal(PlayerListMgr.strAt(70)))); + this.pack(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 90939fe8..d961ba7e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -145,9 +145,10 @@ public class Utils { if (sidebarLines != null) { for (String sidebarLine : sidebarLines) { if (sidebarLine.contains("⏣")) location = sidebarLine; + if (sidebarLine.contains("ф")) location = sidebarLine; //Rift } if (location == null) location = "Unknown"; - location = location.replace('⏣', ' ').strip(); + location = location.strip(); } } catch (IndexOutOfBoundsException e) { e.printStackTrace(); -- cgit From 0cd67350de6b4b127322ed703a0bab3a18ac2f04 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 24 Jun 2023 01:04:34 -0400 Subject: Reformat files --- .../tabhud/widget/rift/AdvertisementWidget.java | 15 ++-- .../tabhud/widget/rift/GoodToKnowWidget.java | 55 ++++++++------- .../tabhud/widget/rift/RiftProgressWidget.java | 79 ++++++++++++---------- 3 files changed, 84 insertions(+), 65 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java index 61c79c26..287b25b1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java @@ -8,18 +8,19 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class AdvertisementWidget extends Widget { - - private static final MutableText TITLE = Text.literal("Advertisement").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + + private static final MutableText TITLE = Text.literal("Advertisement").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); public AdvertisementWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - - - for(int i = 73; i < 80; i++) { + + for (int i = 73; i < 80; i++) { Text text = PlayerListMgr.textAt(i); - if(text != null) this.addComponent(new PlainTextComponent(text)); + if (text != null) + this.addComponent(new PlainTextComponent(text)); } - + this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java index ca95f811..667bc154 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java @@ -9,38 +9,47 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class GoodToKnowWidget extends Widget { - + private static final MutableText TITLE = Text.literal("Good To Know").formatted(Formatting.BLUE, Formatting.BOLD); - + public GoodToKnowWidget() { super(TITLE, Formatting.BLUE.getColorValue()); - - //After you progress further the tab adds more info so we need to be careful of that - //In beginning it only shows montezuma, then timecharms and enigma souls are added - Text pos49 = PlayerListMgr.textAt(49); //Can be times visited rift - Text pos51 = PlayerListMgr.textAt(51); //Can be lifetime motes or visited rift - Text pos53 = PlayerListMgr.textAt(53); //Can be lifetime motes - + + // After you progress further the tab adds more info so we need to be careful of + // that + // In beginning it only shows montezuma, then timecharms and enigma souls are + // added + Text pos49 = PlayerListMgr.textAt(49); // Can be times visited rift + Text pos51 = PlayerListMgr.textAt(51); // Can be lifetime motes or visited rift + Text pos53 = PlayerListMgr.textAt(53); // Can be lifetime motes + int visitedRiftPos = 0; int lifetimeMotesPos = 0; - - //Check each position to see what is or isn't there so we don't try adding invalid components - if(pos49.getString().contains("times")) visitedRiftPos = 49; - if(pos51.getString().contains("Motes")) lifetimeMotesPos = 51; - if(pos51.getString().contains("times")) visitedRiftPos = 51; - if(pos53.getString().contains("Motes")) lifetimeMotesPos = 53; - + + // Check each position to see what is or isn't there so we don't try adding + // invalid components + if (pos49.getString().contains("times")) + visitedRiftPos = 49; + if (pos51.getString().contains("Motes")) + lifetimeMotesPos = 51; + if (pos51.getString().contains("times")) + visitedRiftPos = 51; + if (pos53.getString().contains("Motes")) + lifetimeMotesPos = 53; + Text timesVisitedRift = (visitedRiftPos == 51) ? pos51 : (visitedRiftPos == 49) ? pos49 : null; Text lifetimeMotesEarned = (lifetimeMotesPos == 53) ? pos53 : (lifetimeMotesPos == 51) ? pos51 : null; - - if(visitedRiftPos != 0) { - this.addComponent(new IcoTextComponent(Ico.EXPERIENCE_BOTTLE, Text.literal("Visited Rift: ").append(timesVisitedRift))); + + if (visitedRiftPos != 0) { + this.addComponent(new IcoTextComponent(Ico.EXPERIENCE_BOTTLE, + Text.literal("Visited Rift: ").append(timesVisitedRift))); } - - if(lifetimeMotesPos != 0) { - this.addComponent(new IcoTextComponent(Ico.PINK_DYE, Text.literal("Lifetime Earned: ").append(lifetimeMotesEarned))); + + if (lifetimeMotesPos != 0) { + this.addComponent( + new IcoTextComponent(Ico.PINK_DYE, Text.literal("Lifetime Earned: ").append(lifetimeMotesEarned))); } - + this.pack(); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java index 615d3cb0..9ce12e76 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java @@ -13,75 +13,84 @@ import net.minecraft.util.Formatting; import net.minecraft.util.math.MathHelper; public class RiftProgressWidget extends Widget { - + private static final MutableText TITLE = Text.literal("Rift Progress").formatted(Formatting.BLUE, Formatting.BOLD); - + private static final Pattern TIMECHARMS_PATTERN = Pattern.compile("Timecharms: (?[0-9]+)\\/(?[0-9]+)"); private static final Pattern ENIGMA_SOULS_PATTERN = Pattern.compile("Enigma Souls: (?[0-9]+)\\/(?[0-9]+)"); private static final Pattern MONTEZUMA_PATTERN = Pattern.compile("Montezuma: (?[0-9]+)\\/(?[0-9]+)"); public RiftProgressWidget() { super(TITLE, Formatting.BLUE.getColorValue()); - - //After you progress further the tab adds more info so we need to be careful of that - //In beginning it only shows montezuma, then timecharms and enigma souls are added - String pos45 = PlayerListMgr.strAt(45); //Can be Montezuma or Timecharms - String pos46 = PlayerListMgr.strAt(46); //Can be Enigma Souls or Empty - String pos47 = PlayerListMgr.strAt(47); //Can be Montezuma or "Good to know" heading - + + // After you progress further the tab adds more info so we need to be careful of + // that + // In beginning it only shows montezuma, then timecharms and enigma souls are + // added + String pos45 = PlayerListMgr.strAt(45); // Can be Montezuma or Timecharms + String pos46 = PlayerListMgr.strAt(46); // Can be Enigma Souls or Empty + String pos47 = PlayerListMgr.strAt(47); // Can be Montezuma or "Good to know" heading + boolean hasTimecharms = false; boolean hasEnigmaSouls = false; int montezumaPos = 0; - - //Check each position to see what is or isn't there so we don't try adding invalid components - if(pos45.contains("Timecharms")) hasTimecharms = true; - if(pos46.contains("Enigma Souls")) hasEnigmaSouls = true; - - //Small ternary to account for positions, defaults to -1 if it for some reason does not exist (which shouldn't be the case!) + + // Check each position to see what is or isn't there so we don't try adding + // invalid components + if (pos45.contains("Timecharms")) + hasTimecharms = true; + if (pos46.contains("Enigma Souls")) + hasEnigmaSouls = true; + + // Small ternary to account for positions, defaults to -1 if it for some reason + // does not exist (which shouldn't be the case!) montezumaPos = (pos47.contains("Montezuma")) ? 47 : (pos45.contains("Montezuma")) ? 45 : -1; - - if(hasTimecharms) { + + if (hasTimecharms) { Matcher m = PlayerListMgr.regexAt(45, TIMECHARMS_PATTERN); - + int current = Integer.parseInt(m.group("current")); int total = Integer.parseInt(m.group("total")); float pcnt = ((float) current / (float) total) * 100f; Text progressText = Text.literal(current + "/" + total); - - ProgressComponent pc = new ProgressComponent(Ico.NETHER_STAR, Text.literal("Timecharms"), progressText, pcnt, pcntToCol(pcnt)); - + + ProgressComponent pc = new ProgressComponent(Ico.NETHER_STAR, Text.literal("Timecharms"), progressText, + pcnt, pcntToCol(pcnt)); + this.addComponent(pc); } - - if(hasEnigmaSouls) { + + if (hasEnigmaSouls) { Matcher m = PlayerListMgr.regexAt(46, ENIGMA_SOULS_PATTERN); - + int current = Integer.parseInt(m.group("current")); int total = Integer.parseInt(m.group("total")); float pcnt = ((float) current / (float) total) * 100f; Text progressText = Text.literal(current + "/" + total); - - ProgressComponent pc = new ProgressComponent(Ico.HEART_OF_THE_SEA, Text.literal("Enigma Souls"), progressText, pcnt, pcntToCol(pcnt)); - + + ProgressComponent pc = new ProgressComponent(Ico.HEART_OF_THE_SEA, Text.literal("Enigma Souls"), + progressText, pcnt, pcntToCol(pcnt)); + this.addComponent(pc); } - - if(montezumaPos != -1) { + + if (montezumaPos != -1) { Matcher m = PlayerListMgr.regexAt(montezumaPos, MONTEZUMA_PATTERN); - + int current = Integer.parseInt(m.group("current")); int total = Integer.parseInt(m.group("total")); float pcnt = ((float) current / (float) total) * 100f; Text progressText = Text.literal(current + "/" + total); - - ProgressComponent pc = new ProgressComponent(Ico.BONE, Text.literal("Montezuma"), progressText, pcnt, pcntToCol(pcnt)); - + + ProgressComponent pc = new ProgressComponent(Ico.BONE, Text.literal("Montezuma"), progressText, pcnt, + pcntToCol(pcnt)); + this.addComponent(pc); } - + this.pack(); } - + private static int pcntToCol(float pcnt) { return MathHelper.hsvToRgb(pcnt / 300f, 0.9f, 0.9f); } -- cgit From a09b4d0bf3db598ada645c10122500191cb07daa Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 25 Jun 2023 05:36:05 -0400 Subject: Fix recipe book search field not being selectable (#187) --- .../java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java index 99715e29..3a1f91d3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java @@ -91,8 +91,10 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select if (this.isOpen() && !this.client.player.isSpectator() && ItemRegistry.filesImported && results != null) { if (this.searchField != null && this.searchField.mouseClicked(mouseX, mouseY, button)) { this.results.closeRecipeView(); + this.searchField.setFocused(true); return true; } else + this.searchField.setFocused(false); return this.results.mouseClicked(mouseX, mouseY, button); } else return false; -- cgit From 9d71ef0f17197db692a45be9be3866d4573c9621 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 25 Jun 2023 05:36:58 -0400 Subject: Fix chat ad filter (#188) --- .../xmrvizzy/skyblocker/chat/filters/AdFilter.java | 46 +++++++++++----------- .../skyblocker/chat/filters/AdFilterTest.java | 18 ++++----- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java index 5f9f463d..67734438 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java @@ -9,30 +9,30 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class AdFilter extends ChatPatternListener { - private static final Pattern[] AD_FILTERS = new Pattern[]{ - Pattern.compile("^(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|$)", Pattern.CASE_INSENSITIVE), - Pattern.compile("(.)\\1{7,}"), - Pattern.compile("\\W(?:on|in|check|at) my (?:ah|bin)(?:\\W|$)", Pattern.CASE_INSENSITIVE), - }; + private static final Pattern[] AD_FILTERS = new Pattern[] { + Pattern.compile("^(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|$)", Pattern.CASE_INSENSITIVE), + Pattern.compile("(.)\\1{7,}"), + Pattern.compile("\\W(?:on|in|check|at) my (?:ah|bin)(?:\\W|$)", Pattern.CASE_INSENSITIVE), }; - public AdFilter() { - // Groups: - // 1. Player name - // 2. Message - super("^§[67ab](?:\\[(?:MVP|VIP)(?:§[0-9a-f]\\+{1,2}§[6ab])?] )?([a-zA-Z0-9_]{2,16})§[7f]: (.*)$"); - } + public AdFilter() { + // Groups: + // 1. Player name + // 2. Message + // (?:§8\[[§fadbc0-9]+§8\] )?§[67abc](?:\[[§A-Za-z0-9+]+\] )?([A-Za-z0-9_]+)§[f7]: (.+) + super("(?:§8\\[[§fadbc0-9]+§8\\] )?§[67abc](?:\\[[§A-Za-z0-9+]+\\] )?([A-Za-z0-9_]+)§[f7]: (.+)"); + } - @Override - public boolean onMatch(Text _message, Matcher matcher) { - String message = matcher.group(2); - for (Pattern adFilter : AD_FILTERS) - if (adFilter.matcher(message).find()) - return true; - return false; - } + @Override + public boolean onMatch(Text _message, Matcher matcher) { + String message = matcher.group(2); + for (Pattern adFilter : AD_FILTERS) + if (adFilter.matcher(message).find()) + return true; + return false; + } - @Override - protected ChatFilterResult state() { - return SkyblockerConfig.get().messages.hideAds; - } + @Override + protected ChatFilterResult state() { + return SkyblockerConfig.get().messages.hideAds; + } } \ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java index 73fb5dbd..a769dca2 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java @@ -14,47 +14,47 @@ class AdFilterTest extends ChatPatternListenerTest { @Test void noRank() { - assertMatches("§7Advertiser§7: advertisement"); + assertMatches("§8[§a86§8] §7Advertiser§7: advertisement"); } @Test void vip() { - assertMatches("§a[VIP] Advertiser§f: advertisement"); + assertMatches("§8[§b280§8] §a[VIP] Advertiser§f: advertisement"); } @Test void mvp() { - assertMatches("§b[MVP§c+§b] Advertiser§f: advertisement"); + assertMatches("§8[§d256§8] §b[MVP§c+§b] Advertiser§f: advertisement"); } @Test void plusPlus() { - assertMatches("§6[MVP§c++§6] Advertiser§f: advertisement"); + assertMatches("§8[§6222§8] §6[MVP§c++§6] Advertiser§f: advertisement"); } @Test void capturesMessage() { - assertGroup("§b[MVP§c+§b] b2dderr§f: buying prismapump", 2, "buying prismapump"); + assertGroup("§8[§c325§8] §b[MVP§c+§b] b2dderr§f: buying prismapump", 2, "buying prismapump"); } @Test void simpleAd() { - assertFilters("§b[MVP§c+§b] b2dderr§f: buying prismapump"); + assertFilters("§8[§c320§8] §b[MVP§c+§b] b2dderr§f: buying prismapump"); } @Test void uppercaseAd() { - assertFilters("§a[VIP] Tecnoisnoob§f: SELLING REJUVENATE 5 Book on ah!"); + assertFilters("§8[§f70§8] §a[VIP] Tecnoisnoob§f: SELLING REJUVENATE 5 Book on ah!"); } @Test void characterSpam() { - assertFilters("§a[VIP] Benyyy_§f: Hey, Visit my Island, i spent lots of time to build it! I also made donate room! <<<<<<<<<<<<<<<<<<<"); + assertFilters("§8[§9144§8] §a[VIP] Benyyy_§f: Hey, Visit my Island, i spent lots of time to build it! I also made donate room! <<<<<<<<<<<<<<<<<<<"); } @Test void notAd() { - Matcher matcher = listener.pattern.matcher("§a[VIP] NotMatching§f: This message shouldn't match!"); + Matcher matcher = listener.pattern.matcher("§8[§6200§8] §a[VIP] NotMatching§f: This message shouldn't match!"); assertTrue(matcher.matches()); assertFalse(listener.onMatch(null, matcher)); } -- cgit From cfc0ecf96ef179b0cac0b31e90eca6e86fe2488e Mon Sep 17 00:00:00 2001 From: Yasin Date: Sun, 25 Jun 2023 11:38:03 +0200 Subject: Workflow fix discord character limit (#180) * limit to 2000 char max because discord * Update buildrelease.yml --- .github/workflows/buildrelease.yml | 42 +++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/.github/workflows/buildrelease.yml b/.github/workflows/buildrelease.yml index 4361f363..d79c40e8 100644 --- a/.github/workflows/buildrelease.yml +++ b/.github/workflows/buildrelease.yml @@ -39,11 +39,51 @@ jobs: id: read_changelog shell: bash run: | - CHANGELOG=$(sed '/___/Q' CHANGELOG.md | grep -v '# ') + CHANGELOG=$(sed '/___/Q' CHANGELOG.md) echo "Changelog:\n$CHANGELOG" + + changelog="${CHANGELOG}" + + # Because of the 2000 char limit in Discord shorten the changelog + + # Calculate the number of characters to delete + delete_chars=$((${#changelog} + 350 - 2000 - 15)) + + # Check if delete_chars is greater than 0 + if [ $delete_chars -gt 0 ]; then + + # Extract the "What's Changed" section from the changelog + changed_section=$(echo "$changelog" | awk '/## What'\''s Changed/{flag=1;next}/^$/{flag=0}flag') + + # Trim the changed_section based on the delete_chars value and remove the last line + modified_section="${changed_section::-delete_chars}" + modified_section=$(echo "$modified_section" | sed '$d') + + # Add "[...] and more" at the end of modified_section + modified_section+="\n[...] and more" + + # Format modified_section with printf + modified_section=$(printf "%s" "$modified_section") + + # Generate the modified_changelog by inserting modified_section after the "What's Changed" section + modified_changelog=$(awk -v modified_section="$modified_section" ' + /^## What'\''s Changed/ { print; print modified_section; f=1; next } + f && /^$/ { f=0 } + !f { print } + END { if (f) print "" } + ' ORS='\n' <<< "$changelog") + + # Format the modified_changelog by removing "@" characters and enclosing URLs in "<>" + modified_changelog=$(echo "$modified_changelog" | sed -e 's/@//g' -e 's|https\?://[^[:space:]]*|<\0>|g') + + # Store the modified_changelog in the CHANGELOG variable + CHANGELOG=$(echo -n "$modified_changelog") + fi + CHANGELOG="${CHANGELOG//'%'/'%25'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" + echo "::set-output name=changelog::$CHANGELOG" - uses: actions/github-script@v2 -- cgit From f3f000a7e5a015aa7690502c8c3b74ce558decf6 Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Sun, 25 Jun 2023 13:02:20 +0200 Subject: Resolve conflicts with master --- src/main/resources/assets/skyblocker/lang/en_us.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 502efde3..3889777c 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -20,6 +20,10 @@ "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Position", "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defence Bar Position", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar Position", + "text.autoconfig.skyblocker.option.general.experiments": "Experiments Solver", + "text.autoconfig.skyblocker.option.general.experiments.enableChronomatronSolver": "Enable Chronomatron Solver", + "text.autoconfig.skyblocker.option.general.experiments.enableSuperpairsSolver": "Enable Superpairs Solver", + "text.autoconfig.skyblocker.option.general.experiments.enableUltrasequencerSolver": "Enable Ultrasequencer Solver", "text.autoconfig.skyblocker.option.general.acceptReparty": "Auto accept Reparty", "text.autoconfig.skyblocker.option.general.fishing": "Fishing Helper", "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper", -- cgit From 6907c2b9a237ea25f5bf4114fdbcf7698a2ad127 Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Sun, 25 Jun 2023 20:38:22 +0200 Subject: fix to crashes on checks --- src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index 8becd757..cb28a4de 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -16,7 +16,6 @@ import java.util.regex.Pattern; public class Reparty extends ChatPatternListener { private static final MinecraftClient client = MinecraftClient.getInstance(); - private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); private static final int BASE_DELAY = 10; @@ -58,7 +57,7 @@ public class Reparty extends ChatPatternListener { } } else if (matcher.group("disband") != null && !matcher.group("disband").equals(client.getSession().getUsername())) { partyLeader = matcher.group("disband"); - skyblocker.scheduler.schedule(() -> partyLeader = null, 21); + SkyblockerMod.getInstance().scheduler.schedule(() -> partyLeader = null, 21); return false; } else if (matcher.group("invite") != null && matcher.group("invite").equals(partyLeader)) { String command = "/party accept " + partyLeader; @@ -85,10 +84,10 @@ public class Reparty extends ChatPatternListener { String command = "/p invite " + this.players[i]; sendCommand(command, i + 2); } - skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); + SkyblockerMod.getInstance().scheduler.schedule(() -> this.repartying = false, this.players.length + 2); } private void sendCommand(String command, int delay) { - skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY); + SkyblockerMod.getInstance().messageScheduler.queueMessage(command, delay * BASE_DELAY); } } \ No newline at end of file -- cgit From 384f75a5aec98713d719f01662fc95464bed84f3 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 26 Jun 2023 02:24:56 -0400 Subject: Add Mirrorverse Waypoints + Rift Fixes --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 + .../skyblocker/config/SkyblockerConfig.java | 8 + .../xmrvizzy/skyblocker/mixin/InGameHudMixin.java | 7 +- .../skyblocker/mixin/accessor/FrustumInvoker.java | 17 + .../skyblocker/skyblock/FancyStatusBars.java | 5 +- .../skyblocker/skyblock/dungeon/Trivia.java | 4 +- .../skyblock/rift/MirrorverseWaypoints.java | 101 ++ .../xmrvizzy/skyblocker/skyblock/rift/TheRift.java | 11 + .../resources/assets/skyblocker/lang/en_us.json | 3 + .../assets/skyblocker/mirrorverse_waypoints.json | 1019 ++++++++++++++++++++ src/main/resources/skyblocker.mixins.json | 3 +- 11 files changed, 1173 insertions(+), 7 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java create mode 100644 src/main/resources/assets/skyblocker/mirrorverse_waypoints.json diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index add81791..a629f851 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -16,6 +16,7 @@ import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav; +import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.utils.*; @@ -82,6 +83,7 @@ public class SkyblockerMod implements ClientModInitializer { FairySouls.init(); TabHud.init(); DungeonMap.init(); + TheRift.init(); containerSolverManager.init(); scheduler.scheduleCyclic(Utils::update, 20); scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 5621a258..988f5f77 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -289,6 +289,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Category("dwarvenmines") @ConfigEntry.Gui.CollapsibleObject() public DwarvenMines dwarvenMines = new DwarvenMines(); + + @ConfigEntry.Category("rift") + @ConfigEntry.Gui.CollapsibleObject() + public Rift rift = new Rift(); } public static class Dungeons { @@ -357,6 +361,10 @@ public class SkyblockerConfig implements ConfigData { public boolean solveHungryHiker = true; public boolean solveTreasureHunter = true; } + + public static class Rift { + public boolean mirrorverseWaypoints = true; + } public static class Messages { @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index 335737a1..4c89d497 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -6,6 +6,7 @@ import me.xmrvizzy.skyblocker.skyblock.FancyStatusBars; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonMap; +import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -53,7 +54,7 @@ public abstract class InGameHudMixin { @Inject(method = "setOverlayMessage(Lnet/minecraft/text/Text;Z)V", at = @At("HEAD"), cancellable = true) private void skyblocker$onSetOverlayMessage(Text message, boolean tinted, CallbackInfo ci) { - if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().general.bars.enableBars) + if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().general.bars.enableBars || Utils.getLocationRaw().equals(TheRift.LOCATION)) return; String msg = message.getString(); String res = statusBarTracker.update(msg, SkyblockerConfig.get().messages.hideMana); @@ -84,7 +85,7 @@ public abstract class InGameHudMixin { @Inject(method = "renderExperienceBar", at = @At("HEAD"), cancellable = true) private void skyblocker$renderExperienceBar(DrawContext context, int x, CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars) + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars && !Utils.getLocationRaw().equals(TheRift.LOCATION)) ci.cancel(); } @@ -103,7 +104,7 @@ public abstract class InGameHudMixin { @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) private void skyblocker$renderMountHealth(DrawContext context, CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars) + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars && !Utils.getLocationRaw().equals(TheRift.LOCATION)) ci.cancel(); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java new file mode 100644 index 00000000..f086b9e5 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java @@ -0,0 +1,17 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import net.minecraft.client.render.Frustum; + +/** + * For the purpose of avoiding object allocations! + * + */ +@Mixin(Frustum.class) +public interface FrustumInvoker { + + @Invoker("isVisible") + public boolean isVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java index 6af06e6d..8e0d43da 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java @@ -2,6 +2,8 @@ package me.xmrvizzy.skyblocker.skyblock; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; +import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; @@ -9,6 +11,7 @@ import net.minecraft.util.Identifier; public class FancyStatusBars { private static final Identifier BARS = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/bars.png"); + private static final String RIFT_LOCATION = "rift"; private final MinecraftClient client = MinecraftClient.getInstance(); private final StatusBarTracker statusBarTracker = SkyblockerMod.getInstance().statusBarTracker; @@ -39,7 +42,7 @@ public class FancyStatusBars { public boolean render(DrawContext context, int scaledWidth, int scaledHeight) { var player = client.player; - if (!SkyblockerConfig.get().general.bars.enableBars || player == null) + if (!SkyblockerConfig.get().general.bars.enableBars || player == null || Utils.getLocationRaw().equals(TheRift.LOCATION)) return false; anchorsX[0] = scaledWidth / 2 - 91; anchorsY[0] = scaledHeight - 33; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java index 10a2e413..f7598af5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java @@ -69,7 +69,7 @@ public class Trivia extends ChatPatternListener { answers.put("What is the status of Storm?", new String[]{"The Wither Lords"}); answers.put("What is the status of Necron?", new String[]{"The Wither Lords"}); answers.put("What is the status of Maxor, Storm, Goldor and Necron?", new String[]{"The Wither Lords"}); - answers.put("How many total Fairy Souls are there?", new String[]{"240 Fairy Souls"}); + answers.put("How many total Fairy Souls are there?", new String[]{"242 Fairy Souls"}); answers.put("How many Fairy Souls are there in Spider's Den?", new String[]{"19 Fairy Souls"}); answers.put("How many Fairy Souls are there in The End?", new String[]{"12 Fairy Souls"}); answers.put("How many Fairy Souls are there in The Farming Islands?", new String[]{"20 Fairy Souls"}); @@ -87,7 +87,7 @@ public class Trivia extends ChatPatternListener { answers.put("What is the name of the person that upgrades pets?", new String[]{"Kat"}); answers.put("What is the name of the lady of the Nether?", new String[]{"Elle"}); answers.put("Which villager in the Village gives you a Rogue Sword?", new String[]{"Jamie"}); - answers.put("How many unique minions are there?", new String[]{"58 Minions"}); + answers.put("How many unique minions are there?", new String[]{"59 Minions"}); answers.put("Which of these enemies does not spawn in the Spider's Den?", new String[]{"Zombie Spider", "Cave Spider", "Wither Skeleton", "Dashing Spooder", "Broodfather", "Night Spider"}); answers.put("Which of these monsters only spawns at night?", new String[]{"Zombie Villager", "Ghast"}); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java new file mode 100644 index 00000000..c0493d18 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java @@ -0,0 +1,101 @@ +package me.xmrvizzy.skyblocker.skyblock.rift; + +import java.awt.Color; +import java.io.BufferedReader; +import java.io.IOException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import me.x150.renderer.render.Renderer3d; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.mixin.accessor.FrustumInvoker; +import me.xmrvizzy.skyblocker.utils.FrustumUtils; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.MinecraftClient; +import net.minecraft.util.DyeColor; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +public class MirrorverseWaypoints { + private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static final Identifier WAYPOINTS_JSON = new Identifier("skyblocker", "mirrorverse_waypoints.json"); + private static final BlockPos[] LAVA_PATH_WAYPOINTS = new BlockPos[107]; + private static final BlockPos[] UPSIDE_DOWN_WAYPOINTS = new BlockPos[66]; + private static final BlockPos[] TURBULATOR_WAYPOINTS = new BlockPos[27]; + private static final float[] COLOR_COMPONENTS = DyeColor.RED.getColorComponents(); + private static final Vec3d ONE = new Vec3d(1, 1, 1); + + static { + loadWaypoints(); + } + + /** + * Loads the waypoint locations into memory + */ + public static void loadWaypoints() { + try(BufferedReader reader = CLIENT.getResourceManager().openAsReader(WAYPOINTS_JSON)) { + JsonObject file = JsonParser.parseReader(reader).getAsJsonObject(); + JsonArray sections = file.get("sections").getAsJsonArray(); + + /// Lava Path + JsonArray lavaPathWaypoints = sections.get(0).getAsJsonObject().get("waypoints").getAsJsonArray(); + + for(int i = 0; i < lavaPathWaypoints.size(); i++) { + JsonObject point = lavaPathWaypoints.get(i).getAsJsonObject(); + LAVA_PATH_WAYPOINTS[i] = new BlockPos(point.get("x").getAsInt(), point.get("y").getAsInt(), point.get("z").getAsInt()); + } + + /// Upside Down Parkour + JsonArray upsideDownParkourWaypoints = sections.get(1).getAsJsonObject().get("waypoints").getAsJsonArray(); + + for(int i = 0; i < upsideDownParkourWaypoints.size(); i++) { + JsonObject point = upsideDownParkourWaypoints.get(i).getAsJsonObject(); + UPSIDE_DOWN_WAYPOINTS[i] = new BlockPos(point.get("x").getAsInt(), point.get("y").getAsInt(), point.get("z").getAsInt()); + } + + /// Turbulator Parkour + JsonArray turbulatorParkourWaypoints = sections.get(2).getAsJsonObject().get("waypoints").getAsJsonArray(); + + for(int i = 0; i < turbulatorParkourWaypoints.size(); i++) { + JsonObject point = turbulatorParkourWaypoints.get(i).getAsJsonObject(); + TURBULATOR_WAYPOINTS[i] = new BlockPos(point.get("x").getAsInt(), point.get("y").getAsInt(), point.get("z").getAsInt()); + } + + } catch (IOException e) { + LOGGER.info("[Skyblocker] Mirrorverse Waypoints failed to load ;("); + e.printStackTrace(); + } + } + + public static void render(WorldRenderContext wrc) { + FrustumInvoker frustum = ((FrustumInvoker) FrustumUtils.getFrustum()); + //I would also check for the mirrorverse location but the scoreboard stuff is not performant at all... + if(Utils.getLocationRaw().equals(TheRift.LOCATION) && SkyblockerConfig.get().locations.rift.mirrorverseWaypoints) { + for(BlockPos pos : LAVA_PATH_WAYPOINTS) { + if(frustum.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + Renderer3d.renderFilled(wrc.matrixStack(), new Color(COLOR_COMPONENTS[0], COLOR_COMPONENTS[1], COLOR_COMPONENTS[2], 0.5f), Vec3d.of(pos), ONE); + }; + } + + for(BlockPos pos : UPSIDE_DOWN_WAYPOINTS) { + if(frustum.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + Renderer3d.renderFilled(wrc.matrixStack(), new Color(COLOR_COMPONENTS[0], COLOR_COMPONENTS[1], COLOR_COMPONENTS[2], 0.5f), Vec3d.of(pos), ONE); + }; + } + + for(BlockPos pos : TURBULATOR_WAYPOINTS) { + if(frustum.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + Renderer3d.renderFilled(wrc.matrixStack(), new Color(COLOR_COMPONENTS[0], COLOR_COMPONENTS[1], COLOR_COMPONENTS[2], 0.5f), Vec3d.of(pos), ONE); + }; + } + } + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java new file mode 100644 index 00000000..24f92238 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java @@ -0,0 +1,11 @@ +package me.xmrvizzy.skyblocker.skyblock.rift; + +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; + +public class TheRift { + public static final String LOCATION = "rift"; + + public static void init() { + WorldRenderEvents.AFTER_TRANSLUCENT.register(MirrorverseWaypoints::render); + } +} diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index f2eec8fd..d18e180e 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -200,6 +200,9 @@ "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Enable Background", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + + "text.autoconfig.skyblocker.option.locations.rift": "The Rift", + "text.autoconfig.skyblocker.option.locations.rift.mirrorverseWaypoints": "Enable Mirrorverse Waypoints", "text.autoconfig.skyblocker.category.messages": "Messages", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Disabled", diff --git a/src/main/resources/assets/skyblocker/mirrorverse_waypoints.json b/src/main/resources/assets/skyblocker/mirrorverse_waypoints.json new file mode 100644 index 00000000..2bc0296e --- /dev/null +++ b/src/main/resources/assets/skyblocker/mirrorverse_waypoints.json @@ -0,0 +1,1019 @@ +{ + "sections": [ + { + "name": "Lava Path", + "waypoints": [ + { + "x": -101, + "y": 52, + "z": -116 + }, + { + "x": -99, + "y": 52, + "z": -110 + }, + { + "x": -95, + "y": 52, + "z": -108 + }, + { + "x": -88, + "y": 52, + "z": -107 + }, + { + "x": -95, + "y": 52, + "z": -114 + }, + { + "x": -95, + "y": 52, + "z": -109 + }, + { + "x": -84, + "y": 52, + "z": -112 + }, + { + "x": -91, + "y": 52, + "z": -108 + }, + { + "x": -94, + "y": 52, + "z": -116 + }, + { + "x": -88, + "y": 52, + "z": -112 + }, + { + "x": -101, + "y": 52, + "z": -108 + }, + { + "x": -94, + "y": 52, + "z": -114 + }, + { + "x": -85, + "y": 52, + "z": -112 + }, + { + "x": -88, + "y": 52, + "z": -114 + }, + { + "x": -90, + "y": 52, + "z": -110 + }, + { + "x": -84, + "y": 52, + "z": -113 + }, + { + "x": -90, + "y": 52, + "z": -116 + }, + { + "x": -105, + "y": 52, + "z": -113 + }, + { + "x": -82, + "y": 52, + "z": -112 + }, + { + "x": -90, + "y": 52, + "z": -112 + }, + { + "x": -88, + "y": 52, + "z": -111 + }, + { + "x": -82, + "y": 52, + "z": -111 + }, + { + "x": -104, + "y": 52, + "z": -112 + }, + { + "x": -87, + "y": 52, + "z": -107 + }, + { + "x": -100, + "y": 52, + "z": -108 + }, + { + "x": -86, + "y": 52, + "z": -109 + }, + { + "x": -91, + "y": 52, + "z": -110 + }, + { + "x": -96, + "y": 52, + "z": -108 + }, + { + "x": -102, + "y": 52, + "z": -111 + }, + { + "x": -96, + "y": 52, + "z": -115 + }, + { + "x": -97, + "y": 52, + "z": -116 + }, + { + "x": -83, + "y": 52, + "z": -111 + }, + { + "x": -84, + "y": 52, + "z": -107 + }, + { + "x": -90, + "y": 52, + "z": -115 + }, + { + "x": -86, + "y": 52, + "z": -107 + }, + { + "x": -97, + "y": 52, + "z": -112 + }, + { + "x": -86, + "y": 52, + "z": -113 + }, + { + "x": -92, + "y": 52, + "z": -110 + }, + { + "x": -95, + "y": 52, + "z": -111 + }, + { + "x": -90, + "y": 52, + "z": -114 + }, + { + "x": -93, + "y": 52, + "z": -108 + }, + { + "x": -98, + "y": 52, + "z": -116 + }, + { + "x": -98, + "y": 52, + "z": -115 + }, + { + "x": -90, + "y": 52, + "z": -107 + }, + { + "x": -98, + "y": 52, + "z": -112 + }, + { + "x": -98, + "y": 52, + "z": -109 + }, + { + "x": -98, + "y": 52, + "z": -113 + }, + { + "x": -100, + "y": 52, + "z": -116 + }, + { + "x": -96, + "y": 52, + "z": -114 + }, + { + "x": -86, + "y": 52, + "z": -110 + }, + { + "x": -93, + "y": 52, + "z": -109 + }, + { + "x": -88, + "y": 52, + "z": -110 + }, + { + "x": -94, + "y": 52, + "z": -115 + }, + { + "x": -84, + "y": 52, + "z": -111 + }, + { + "x": -84, + "y": 52, + "z": -108 + }, + { + "x": -86, + "y": 52, + "z": -115 + }, + { + "x": -98, + "y": 52, + "z": -110 + }, + { + "x": -102, + "y": 52, + "z": -108 + }, + { + "x": -92, + "y": 52, + "z": -114 + }, + { + "x": -102, + "y": 52, + "z": -114 + }, + { + "x": -85, + "y": 52, + "z": -109 + }, + { + "x": -86, + "y": 52, + "z": -112 + }, + { + "x": -104, + "y": 52, + "z": -113 + }, + { + "x": -105, + "y": 52, + "z": -112 + }, + { + "x": -91, + "y": 52, + "z": -114 + }, + { + "x": -100, + "y": 52, + "z": -112 + }, + { + "x": -93, + "y": 52, + "z": -110 + }, + { + "x": -91, + "y": 52, + "z": -112 + }, + { + "x": -101, + "y": 52, + "z": -112 + }, + { + "x": -92, + "y": 52, + "z": -108 + }, + { + "x": -82, + "y": 52, + "z": -113 + }, + { + "x": -87, + "y": 52, + "z": -115 + }, + { + "x": -84, + "y": 52, + "z": -109 + }, + { + "x": -88, + "y": 52, + "z": -113 + }, + { + "x": -92, + "y": 52, + "z": -116 + }, + { + "x": -96, + "y": 52, + "z": -111 + }, + { + "x": -96, + "y": 52, + "z": -116 + }, + { + "x": -98, + "y": 52, + "z": -108 + }, + { + "x": -98, + "y": 52, + "z": -114 + }, + { + "x": -96, + "y": 52, + "z": -112 + }, + { + "x": -85, + "y": 52, + "z": -107 + }, + { + "x": -102, + "y": 52, + "z": -115 + }, + { + "x": -87, + "y": 52, + "z": -110 + }, + { + "x": -100, + "y": 52, + "z": -113 + }, + { + "x": -103, + "y": 52, + "z": -114 + }, + { + "x": -102, + "y": 52, + "z": -116 + }, + { + "x": -95, + "y": 52, + "z": -110 + }, + { + "x": -89, + "y": 52, + "z": -107 + }, + { + "x": -92, + "y": 52, + "z": -113 + }, + { + "x": -100, + "y": 52, + "z": -110 + }, + { + "x": -100, + "y": 52, + "z": -115 + }, + { + "x": -86, + "y": 52, + "z": -114 + }, + { + "x": -88, + "y": 52, + "z": -115 + }, + { + "x": -92, + "y": 52, + "z": -112 + }, + { + "x": -100, + "y": 52, + "z": -114 + }, + { + "x": -91, + "y": 52, + "z": -116 + }, + { + "x": -102, + "y": 52, + "z": -110 + }, + { + "x": -102, + "y": 52, + "z": -112 + }, + { + "x": -93, + "y": 52, + "z": -116 + }, + { + "x": -90, + "y": 52, + "z": -111 + }, + { + "x": -104, + "y": 52, + "z": -114 + }, + { + "x": -83, + "y": 52, + "z": -112 + }, + { + "x": -83, + "y": 52, + "z": -113 + }, + { + "x": -100, + "y": 52, + "z": -109 + }, + { + "x": -102, + "y": 52, + "z": -109 + }, + { + "x": -90, + "y": 52, + "z": -108 + }, + { + "x": -97, + "y": 52, + "z": -108 + } + ] + }, + { + "name": "Upside Down Parkour", + "waypoints": [ + { + "x": -137, + "y": 39, + "z": -104 + }, + { + "x": -169, + "y": 42, + "z": -116 + }, + { + "x": -173, + "y": 43, + "z": -112 + }, + { + "x": -197, + "y": 39, + "z": -92 + }, + { + "x": -161, + "y": 39, + "z": -92 + }, + { + "x": -137, + "y": 40, + "z": -116 + }, + { + "x": -213, + "y": 41, + "z": -116 + }, + { + "x": -173, + "y": 41, + "z": -96 + }, + { + "x": -205, + "y": 41, + "z": -100 + }, + { + "x": -205, + "y": 43, + "z": -108 + }, + { + "x": -137, + "y": 41, + "z": -96 + }, + { + "x": -145, + "y": 40, + "z": -104 + }, + { + "x": -149, + "y": 43, + "z": -112 + }, + { + "x": -189, + "y": 42, + "z": -120 + }, + { + "x": -157, + "y": 41, + "z": -104 + }, + { + "x": -189, + "y": 43, + "z": -116 + }, + { + "x": -193, + "y": 42, + "z": -104 + }, + { + "x": -161, + "y": 40, + "z": -120 + }, + { + "x": -221, + "y": 43, + "z": -104 + }, + { + "x": -185, + "y": 41, + "z": -108 + }, + { + "x": -141, + "y": 41, + "z": -120 + }, + { + "x": -157, + "y": 39, + "z": -116 + }, + { + "x": -153, + "y": 40, + "z": -100 + }, + { + "x": -209, + "y": 43, + "z": -120 + }, + { + "x": -129, + "y": 39, + "z": -108 + }, + { + "x": -189, + "y": 43, + "z": -100 + }, + { + "x": -141, + "y": 42, + "z": -100 + }, + { + "x": -133, + "y": 40, + "z": -108 + }, + { + "x": -209, + "y": 42, + "z": -104 + }, + { + "x": -173, + "y": 41, + "z": -100 + }, + { + "x": -189, + "y": 43, + "z": -112 + }, + { + "x": -145, + "y": 40, + "z": -108 + }, + { + "x": -217, + "y": 42, + "z": -108 + }, + { + "x": -169, + "y": 41, + "z": -120 + }, + { + "x": -165, + "y": 43, + "z": -109 + }, + { + "x": -145, + "y": 42, + "z": -116 + }, + { + "x": -165, + "y": 42, + "z": -104 + }, + { + "x": -181, + "y": 40, + "z": -112 + }, + { + "x": -193, + "y": 41, + "z": -108 + }, + { + "x": -201, + "y": 40, + "z": -96 + }, + { + "x": -137, + "y": 41, + "z": -124 + }, + { + "x": -173, + "y": 43, + "z": -108 + }, + { + "x": -133, + "y": 40, + "z": -100 + }, + { + "x": -201, + "y": 40, + "z": -116 + }, + { + "x": -185, + "y": 41, + "z": -108 + }, + { + "x": -125, + "y": 39, + "z": -108 + }, + { + "x": -161, + "y": 42, + "z": -112 + }, + { + "x": -165, + "y": 40, + "z": -96 + }, + { + "x": -141, + "y": 39, + "z": -112 + }, + { + "x": -177, + "y": 39, + "z": -92 + }, + { + "x": -213, + "y": 41, + "z": -112 + }, + { + "x": -153, + "y": 42, + "z": -108 + }, + { + "x": -205, + "y": 42, + "z": -120 + }, + { + "x": -197, + "y": 43, + "z": -112 + }, + { + "x": -181, + "y": 42, + "z": -104 + }, + { + "x": -165, + "y": 41, + "z": -100 + }, + { + "x": -193, + "y": 42, + "z": -96 + }, + { + "x": -133, + "y": 40, + "z": -120 + }, + { + "x": -185, + "y": 41, + "z": -100 + }, + { + "x": -165, + "y": 41, + "z": -124 + }, + { + "x": -177, + "y": 40, + "z": -104 + }, + { + "x": -157, + "y": 40, + "z": -96 + }, + { + "x": -205, + "y": 41, + "z": -116 + }, + { + "x": -181, + "y": 40, + "z": -96 + }, + { + "x": -201, + "y": 43, + "z": -108 + }, + { + "x": -185, + "y": 41, + "z": -116 + } + ] + }, + { + "name": "Turbulator Parkour", + "waypoints": [ + { + "x": -302, + "y": 34, + "z": -107 + }, + { + "x": -304, + "y": 52, + "z": -109 + }, + { + "x": -306, + "y": 16, + "z": -107 + }, + { + "x": -304, + "y": 12, + "z": -107 + }, + { + "x": -308, + "y": 6, + "z": -105 + }, + { + "x": -302, + "y": 44, + "z": -107 + }, + { + "x": -306, + "y": 24, + "z": -109 + }, + { + "x": -302, + "y": 18, + "z": -111 + }, + { + "x": -300, + "y": 36, + "z": -109 + }, + { + "x": -304, + "y": 30, + "z": -103 + }, + { + "x": -302, + "y": 26, + "z": -111 + }, + { + "x": -308, + "y": 14, + "z": -103 + }, + { + "x": -300, + "y": 46, + "z": -103 + }, + { + "x": -300, + "y": 10, + "z": -111 + }, + { + "x": -300, + "y": 20, + "z": -107 + }, + { + "x": -306, + "y": 54, + "z": -111 + }, + { + "x": -306, + "y": 4, + "z": -103 + }, + { + "x": -300, + "y": 28, + "z": -107 + }, + { + "x": -306, + "y": 42, + "z": -111 + }, + { + "x": -308, + "y": 50, + "z": -105 + }, + { + "x": -304, + "y": 48, + "z": -107 + }, + { + "x": -302, + "y": 38, + "z": -105 + }, + { + "x": -304, + "y": 22, + "z": -111 + }, + { + "x": -304, + "y": 2, + "z": -107 + }, + { + "x": -304, + "y": 40, + "z": -107 + }, + { + "x": -306, + "y": 32, + "z": -105 + }, + { + "x": -304, + "y": 8, + "z": -109 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 253e42d7..701d54e5 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -18,7 +18,8 @@ "PlayerListHudAccessor", "PlayerListHudMixin", "RecipeBookWidgetAccessor", - "accessor.BeaconBlockEntityRendererInvoker" + "accessor.BeaconBlockEntityRendererInvoker", + "accessor.FrustumInvoker" ], "injectors": { "defaultRequire": 1 -- cgit From 5764eed4cfd41e78a8cc1bb6ceb51fc0f5b84d9c Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 26 Jun 2023 19:39:18 +0800 Subject: Refactor MirrorverseWaypoints --- .../skyblocker/mixin/accessor/FrustumInvoker.java | 12 ++-- .../skyblock/rift/MirrorverseWaypoints.java | 73 +++++++++------------- .../me/xmrvizzy/skyblocker/utils/FrustumUtils.java | 5 ++ .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 12 +++- 4 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java index f086b9e5..108a7344 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java @@ -1,17 +1,15 @@ package me.xmrvizzy.skyblocker.mixin.accessor; +import me.xmrvizzy.skyblocker.utils.FrustumUtils; +import net.minecraft.client.render.Frustum; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; -import net.minecraft.client.render.Frustum; - /** - * For the purpose of avoiding object allocations! - * + * Use {@link FrustumUtils#isVisible(double, double, double, double, double, double) FrustumUtils#isVisible} which is shorter. For the purpose of avoiding object allocations! */ @Mixin(Frustum.class) public interface FrustumInvoker { - - @Invoker("isVisible") - public boolean isVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ); + @Invoker("isVisible") + boolean isVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java index c0493d18..630d953b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java @@ -1,74 +1,68 @@ package me.xmrvizzy.skyblocker.skyblock.rift; -import java.awt.Color; -import java.io.BufferedReader; -import java.io.IOException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; - -import me.x150.renderer.render.Renderer3d; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.mixin.accessor.FrustumInvoker; -import me.xmrvizzy.skyblocker.utils.FrustumUtils; +import me.xmrvizzy.skyblocker.utils.RenderHelper; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.client.MinecraftClient; import net.minecraft.util.DyeColor; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.IOException; public class MirrorverseWaypoints { private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final Identifier WAYPOINTS_JSON = new Identifier("skyblocker", "mirrorverse_waypoints.json"); + private static final Identifier WAYPOINTS_JSON = new Identifier(SkyblockerMod.NAMESPACE, "mirrorverse_waypoints.json"); private static final BlockPos[] LAVA_PATH_WAYPOINTS = new BlockPos[107]; private static final BlockPos[] UPSIDE_DOWN_WAYPOINTS = new BlockPos[66]; private static final BlockPos[] TURBULATOR_WAYPOINTS = new BlockPos[27]; private static final float[] COLOR_COMPONENTS = DyeColor.RED.getColorComponents(); - private static final Vec3d ONE = new Vec3d(1, 1, 1); - + static { loadWaypoints(); } - + /** * Loads the waypoint locations into memory */ public static void loadWaypoints() { - try(BufferedReader reader = CLIENT.getResourceManager().openAsReader(WAYPOINTS_JSON)) { + try (BufferedReader reader = CLIENT.getResourceManager().openAsReader(WAYPOINTS_JSON)) { JsonObject file = JsonParser.parseReader(reader).getAsJsonObject(); JsonArray sections = file.get("sections").getAsJsonArray(); - + /// Lava Path JsonArray lavaPathWaypoints = sections.get(0).getAsJsonObject().get("waypoints").getAsJsonArray(); - - for(int i = 0; i < lavaPathWaypoints.size(); i++) { + + for (int i = 0; i < lavaPathWaypoints.size(); i++) { JsonObject point = lavaPathWaypoints.get(i).getAsJsonObject(); LAVA_PATH_WAYPOINTS[i] = new BlockPos(point.get("x").getAsInt(), point.get("y").getAsInt(), point.get("z").getAsInt()); } - + /// Upside Down Parkour JsonArray upsideDownParkourWaypoints = sections.get(1).getAsJsonObject().get("waypoints").getAsJsonArray(); - - for(int i = 0; i < upsideDownParkourWaypoints.size(); i++) { + + for (int i = 0; i < upsideDownParkourWaypoints.size(); i++) { JsonObject point = upsideDownParkourWaypoints.get(i).getAsJsonObject(); UPSIDE_DOWN_WAYPOINTS[i] = new BlockPos(point.get("x").getAsInt(), point.get("y").getAsInt(), point.get("z").getAsInt()); } - + /// Turbulator Parkour JsonArray turbulatorParkourWaypoints = sections.get(2).getAsJsonObject().get("waypoints").getAsJsonArray(); - - for(int i = 0; i < turbulatorParkourWaypoints.size(); i++) { + + for (int i = 0; i < turbulatorParkourWaypoints.size(); i++) { JsonObject point = turbulatorParkourWaypoints.get(i).getAsJsonObject(); TURBULATOR_WAYPOINTS[i] = new BlockPos(point.get("x").getAsInt(), point.get("y").getAsInt(), point.get("z").getAsInt()); } - + } catch (IOException e) { LOGGER.info("[Skyblocker] Mirrorverse Waypoints failed to load ;("); e.printStackTrace(); @@ -76,25 +70,18 @@ public class MirrorverseWaypoints { } public static void render(WorldRenderContext wrc) { - FrustumInvoker frustum = ((FrustumInvoker) FrustumUtils.getFrustum()); //I would also check for the mirrorverse location but the scoreboard stuff is not performant at all... - if(Utils.getLocationRaw().equals(TheRift.LOCATION) && SkyblockerConfig.get().locations.rift.mirrorverseWaypoints) { - for(BlockPos pos : LAVA_PATH_WAYPOINTS) { - if(frustum.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { - Renderer3d.renderFilled(wrc.matrixStack(), new Color(COLOR_COMPONENTS[0], COLOR_COMPONENTS[1], COLOR_COMPONENTS[2], 0.5f), Vec3d.of(pos), ONE); - }; + if (Utils.getLocationRaw().equals(TheRift.LOCATION) && SkyblockerConfig.get().locations.rift.mirrorverseWaypoints) { + for (BlockPos pos : LAVA_PATH_WAYPOINTS) { + RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); } - - for(BlockPos pos : UPSIDE_DOWN_WAYPOINTS) { - if(frustum.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { - Renderer3d.renderFilled(wrc.matrixStack(), new Color(COLOR_COMPONENTS[0], COLOR_COMPONENTS[1], COLOR_COMPONENTS[2], 0.5f), Vec3d.of(pos), ONE); - }; + + for (BlockPos pos : UPSIDE_DOWN_WAYPOINTS) { + RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); } - - for(BlockPos pos : TURBULATOR_WAYPOINTS) { - if(frustum.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { - Renderer3d.renderFilled(wrc.matrixStack(), new Color(COLOR_COMPONENTS[0], COLOR_COMPONENTS[1], COLOR_COMPONENTS[2], 0.5f), Vec3d.of(pos), ONE); - }; + + for (BlockPos pos : TURBULATOR_WAYPOINTS) { + RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java index 6973aa1e..9ea90c16 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.utils; import me.xmrvizzy.skyblocker.mixin.AccessorWorldRenderer; +import me.xmrvizzy.skyblocker.mixin.accessor.FrustumInvoker; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Frustum; import net.minecraft.util.math.Box; @@ -14,4 +15,8 @@ public class FrustumUtils { public static boolean isBoxVisible(Box box) { return getFrustum().isVisible(box); } + + public static boolean isVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) { + return ((FrustumInvoker) getFrustum()).isVisible(minX, minY, minZ, maxX, maxY, maxZ); + } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index 79308dc3..c843dc43 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -17,10 +17,20 @@ public class RenderHelper { public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { Renderer3d.renderThroughWalls(); - Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), new Vec3d(1, 1, 1)); + renderFilled(context, pos, colorComponents, alpha); Renderer3d.stopRenderThroughWalls(); } + public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + renderFilled(context, pos, colorComponents, alpha); + } + } + + public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), new Vec3d(1, 1, 1)); + } + public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { context.matrixStack().push(); context.matrixStack().translate(pos.getX() - context.camera().getPos().x, pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); -- cgit From 86189e6455662e25e3f8cc64cc3ebbffea201db2 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 26 Jun 2023 14:33:00 -0400 Subject: Reuse vector --- src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index c843dc43..b37d324d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -10,6 +10,8 @@ import net.minecraft.util.math.Vec3d; import java.awt.*; public class RenderHelper { + private static final Vec3d DIMENSIONS = new Vec3d(1, 1, 1); + public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { renderFilledThroughWalls(context, pos, colorComponents, alpha); renderBeaconBeam(context, pos, colorComponents); @@ -28,7 +30,7 @@ public class RenderHelper { } public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), new Vec3d(1, 1, 1)); + Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), DIMENSIONS); } public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { -- cgit From f941ae83603d242972567710021192f1a4dfdc02 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 26 Jun 2023 17:41:32 -0400 Subject: Format file --- .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 64 ++++++++++++---------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index b37d324d..3c3e30d1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -11,32 +11,40 @@ import java.awt.*; public class RenderHelper { private static final Vec3d DIMENSIONS = new Vec3d(1, 1, 1); - - public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - renderFilledThroughWalls(context, pos, colorComponents, alpha); - renderBeaconBeam(context, pos, colorComponents); - } - - public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - Renderer3d.renderThroughWalls(); - renderFilled(context, pos, colorComponents, alpha); - Renderer3d.stopRenderThroughWalls(); - } - - public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { - renderFilled(context, pos, colorComponents, alpha); - } - } - - public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), DIMENSIONS); - } - - public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { - context.matrixStack().push(); - context.matrixStack().translate(pos.getX() - context.camera().getPos().x, pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); - BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); - context.matrixStack().pop(); - } + + public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, + float[] colorComponents, float alpha) { + renderFilledThroughWalls(context, pos, colorComponents, alpha); + renderBeaconBeam(context, pos, colorComponents); + } + + public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, + float alpha) { + Renderer3d.renderThroughWalls(); + renderFilled(context, pos, colorComponents, alpha); + Renderer3d.stopRenderThroughWalls(); + } + + public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, + float alpha) { + if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, + pos.getZ() + 1)) { + renderFilled(context, pos, colorComponents, alpha); + } + } + + public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + Renderer3d.renderFilled(context.matrixStack(), + new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), + DIMENSIONS); + } + + public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { + context.matrixStack().push(); + context.matrixStack().translate(pos.getX() - context.camera().getPos().x, + pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); + BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), + context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); + context.matrixStack().pop(); + } } -- cgit From fa6c260672468ed412e65a685f89cf2e09e2f1d7 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 27 Jun 2023 13:26:28 +0800 Subject: Refactor RenderHelper --- .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 66 ++++++++++------------ 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index 3c3e30d1..2e942905 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -10,41 +10,33 @@ import net.minecraft.util.math.Vec3d; import java.awt.*; public class RenderHelper { - private static final Vec3d DIMENSIONS = new Vec3d(1, 1, 1); - - public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, - float[] colorComponents, float alpha) { - renderFilledThroughWalls(context, pos, colorComponents, alpha); - renderBeaconBeam(context, pos, colorComponents); - } - - public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, - float alpha) { - Renderer3d.renderThroughWalls(); - renderFilled(context, pos, colorComponents, alpha); - Renderer3d.stopRenderThroughWalls(); - } - - public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, - float alpha) { - if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, - pos.getZ() + 1)) { - renderFilled(context, pos, colorComponents, alpha); - } - } - - public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - Renderer3d.renderFilled(context.matrixStack(), - new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), - DIMENSIONS); - } - - public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { - context.matrixStack().push(); - context.matrixStack().translate(pos.getX() - context.camera().getPos().x, - pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); - BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), - context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); - context.matrixStack().pop(); - } + private static final Vec3d ONE = new Vec3d(1, 1, 1); + + public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + renderFilledThroughWalls(context, pos, colorComponents, alpha); + renderBeaconBeam(context, pos, colorComponents); + } + + public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + Renderer3d.renderThroughWalls(); + renderFilled(context, pos, colorComponents, alpha); + Renderer3d.stopRenderThroughWalls(); + } + + public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + renderFilled(context, pos, colorComponents, alpha); + } + } + + public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), ONE); + } + + public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { + context.matrixStack().push(); + context.matrixStack().translate(pos.getX() - context.camera().getPos().x, pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); + BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); + context.matrixStack().pop(); + } } -- cgit From c3dd9419010ba36647ee330ffb4e6873359d494a Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Thu, 29 Jun 2023 06:18:23 -0400 Subject: Implement Vampire Slayer Features (#191) Implement Vampire Slayer Features Co-authored-by: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> --- .../skyblocker/config/SkyblockerConfig.java | 39 +++++++++-- .../skyblocker/mixin/ClientPlayerEntityMixin.java | 8 +++ .../xmrvizzy/skyblocker/mixin/InGameHudMixin.java | 8 +-- .../skyblocker/skyblock/FancyStatusBars.java | 28 ++++---- .../skyblocker/skyblock/FishingHelper.java | 8 +-- .../skyblocker/skyblock/rift/EffigyWaypoints.java | 79 ++++++++++++++++++++++ .../skyblock/rift/HealingMelonIndicator.java | 21 ++++++ .../skyblock/rift/MirrorverseWaypoints.java | 2 +- .../skyblocker/skyblock/rift/StakeIndicator.java | 21 ++++++ .../xmrvizzy/skyblocker/skyblock/rift/TheRift.java | 17 +++-- .../skyblock/rift/TwinClawsIndicator.java | 32 +++++++++ .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 17 +++++ .../me/xmrvizzy/skyblocker/utils/SlayerUtils.java | 66 ++++++++++++++++++ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 5 ++ .../resources/assets/skyblocker/lang/en_us.json | 19 ++++++ 15 files changed, 337 insertions(+), 33 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/SlayerUtils.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 988f5f77..4b1398e0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -30,6 +30,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.TransitiveObject public Locations locations = new Locations(); + @ConfigEntry.Category("slayer") + @ConfigEntry.Gui.TransitiveObject + public Slayer slayer = new Slayer(); + @ConfigEntry.Category("quickNav") @ConfigEntry.Gui.TransitiveObject public QuickNav quickNav = new QuickNav(); @@ -177,7 +181,7 @@ public class SkyblockerConfig implements ConfigData { public static class TabHudConf { public boolean tabHudEnabled = true; - @ConfigEntry.BoundedDiscrete(min=10, max=200) + @ConfigEntry.BoundedDiscrete(min = 10, max = 200) @ConfigEntry.Gui.Tooltip() public int tabHudScale = 100; } @@ -289,7 +293,7 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Category("dwarvenmines") @ConfigEntry.Gui.CollapsibleObject() public DwarvenMines dwarvenMines = new DwarvenMines(); - + @ConfigEntry.Category("rift") @ConfigEntry.Gui.CollapsibleObject() public Rift rift = new Rift(); @@ -348,7 +352,7 @@ public class SkyblockerConfig implements ConfigData { CLASSIC; @Override - public String toString() { + public String toString() { return switch (this) { case SIMPLE -> "Simple"; case FANCY -> "Fancy"; @@ -361,9 +365,34 @@ public class SkyblockerConfig implements ConfigData { public boolean solveHungryHiker = true; public boolean solveTreasureHunter = true; } - + public static class Rift { - public boolean mirrorverseWaypoints = true; + public boolean mirrorverseWaypoints = true; + } + + public static class Slayer { + @ConfigEntry.Category("vampire") + @ConfigEntry.Gui.CollapsibleObject() + public VampireSlayer vampireSlayer = new VampireSlayer(); + } + + public static class VampireSlayer { + public boolean enableEffigyWaypoints = true; + public boolean compactEffigyWaypoints; + @ConfigEntry.BoundedDiscrete(min = 1, max = 10) + @ConfigEntry.Gui.Tooltip() + public int effigyUpdateFrequency = 5; + public boolean enableHolyIceIndicator = true; + public int holyIceIndicatorTickDelay = 10; + @ConfigEntry.BoundedDiscrete(min = 1, max = 10) + @ConfigEntry.Gui.Tooltip() + public int holyIceUpdateFrequency = 5; + public boolean enableHealingMelonIndicator = true; + public float healingMelonHealthThreshold = 4F; + public boolean enableSteakStakeIndicator = true; + @ConfigEntry.BoundedDiscrete(min = 1, max = 10) + @ConfigEntry.Gui.Tooltip() + public int steakStakeUpdateFrequency = 5; } public static class Messages { diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java index 76c4e8ec..e48e725e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java @@ -2,13 +2,16 @@ package me.xmrvizzy.skyblocker.mixin; import com.mojang.authlib.GameProfile; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; +import me.xmrvizzy.skyblocker.skyblock.rift.HealingMelonIndicator; import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.world.ClientWorld; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ClientPlayerEntity.class) @@ -21,4 +24,9 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity public void skyblocker$dropSelectedItem(boolean dropEntireStack, CallbackInfoReturnable cir) { if (Utils.isOnSkyblock()) HotbarSlotLock.handleDropSelectedItem(this.getInventory().selectedSlot, cir); } + + @Inject(method = "updateHealth", at = @At("HEAD")) + public void skyblocker$updateHealth(float health, CallbackInfo info) { + HealingMelonIndicator.updateHealth(MinecraftClient.getInstance()); + } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index 4c89d497..7d9182b5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -6,13 +6,11 @@ import me.xmrvizzy.skyblocker.skyblock.FancyStatusBars; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonMap; -import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -54,7 +52,7 @@ public abstract class InGameHudMixin { @Inject(method = "setOverlayMessage(Lnet/minecraft/text/Text;Z)V", at = @At("HEAD"), cancellable = true) private void skyblocker$onSetOverlayMessage(Text message, boolean tinted, CallbackInfo ci) { - if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().general.bars.enableBars || Utils.getLocationRaw().equals(TheRift.LOCATION)) + if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().general.bars.enableBars || Utils.isInTheRift()) return; String msg = message.getString(); String res = statusBarTracker.update(msg, SkyblockerConfig.get().messages.hideMana); @@ -85,7 +83,7 @@ public abstract class InGameHudMixin { @Inject(method = "renderExperienceBar", at = @At("HEAD"), cancellable = true) private void skyblocker$renderExperienceBar(DrawContext context, int x, CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars && !Utils.getLocationRaw().equals(TheRift.LOCATION)) + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars && !Utils.isInTheRift()) ci.cancel(); } @@ -104,7 +102,7 @@ public abstract class InGameHudMixin { @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) private void skyblocker$renderMountHealth(DrawContext context, CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars && !Utils.getLocationRaw().equals(TheRift.LOCATION)) + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars && !Utils.isInTheRift()) ci.cancel(); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java index 8e0d43da..1a460f5b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java @@ -2,7 +2,6 @@ package me.xmrvizzy.skyblocker.skyblock; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; @@ -11,7 +10,6 @@ import net.minecraft.util.Identifier; public class FancyStatusBars { private static final Identifier BARS = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/bars.png"); - private static final String RIFT_LOCATION = "rift"; private final MinecraftClient client = MinecraftClient.getInstance(); private final StatusBarTracker statusBarTracker = SkyblockerMod.getInstance().statusBarTracker; @@ -42,7 +40,7 @@ public class FancyStatusBars { public boolean render(DrawContext context, int scaledWidth, int scaledHeight) { var player = client.player; - if (!SkyblockerConfig.get().general.bars.enableBars || player == null || Utils.getLocationRaw().equals(TheRift.LOCATION)) + if (!SkyblockerConfig.get().general.bars.enableBars || player == null || Utils.isInTheRift()) return false; anchorsX[0] = scaledWidth / 2 - 91; anchorsY[0] = scaledHeight - 33; @@ -73,10 +71,12 @@ public class FancyStatusBars { moveBar(i, configAnchorNum); } - for (var bar : bars) + for (var bar : bars) { bar.draw(context); - for (var bar : bars) + } + for (var bar : bars) { bar.drawText(context); + } return true; } @@ -152,19 +152,23 @@ public class FancyStatusBars { // Draw the background for the bar context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 10, anchorsY[anchorNum], 10, v, 2, 9); - for (int i = 2; i < bar_width - 2; i += 58) + for (int i = 2; i < bar_width - 2; i += 58) { context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 10 + i, anchorsY[anchorNum], 12, v, Math.min(58, bar_width - 2 - i), 9); + } context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 10 + bar_width - 2, anchorsY[anchorNum], 70, v, 2, 9); // Draw the filled part of the bar for (int i = 0; i < fill.length; i++) { int fill_width = this.fill[i] * (bar_width - 2) / 100; - if (fill_width >= 1) - context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11, anchorsY[anchorNum], 72 + i*60, v, 1, 9); - for (int j = 1; j < fill_width - 1; j += 58) - context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11 + j, anchorsY[anchorNum], 73 + i*60, v, Math.min(58, fill_width - 1 - j), 9); - if (fill_width == bar_width - 2) - context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11 + fill_width - 1, anchorsY[anchorNum], 131 + i*60, v, 1, 9); + if (fill_width >= 1) { + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11, anchorsY[anchorNum], 72 + i * 60, v, 1, 9); + } + for (int j = 1; j < fill_width - 1; j += 58) { + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11 + j, anchorsY[anchorNum], 73 + i * 60, v, Math.min(58, fill_width - 1 - j), 9); + } + if (fill_width == bar_width - 2) { + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11 + fill_width - 1, anchorsY[anchorNum], 131 + i * 60, v, 1, 9); + } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java index d82464e1..822b89d9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.RenderHelper; import net.fabricmc.fabric.api.event.player.UseItemCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; @@ -8,10 +9,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.FishingRodItem; import net.minecraft.item.ItemStack; import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; -import net.minecraft.sound.SoundEvent; -import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import net.minecraft.util.Identifier; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; @@ -51,9 +49,7 @@ public class FishingHelper { if (player != null && player.fishHook != null) { Vec3d soundToFishHook = player.fishHook.getPos().subtract(packet.getX(), 0, packet.getZ()); if (Math.abs(normalYawVector.x * soundToFishHook.z - normalYawVector.z * soundToFishHook.x) < 0.2D && Math.abs(normalYawVector.dotProduct(soundToFishHook)) < 4D && player.getPos().squaredDistanceTo(packet.getX(), packet.getY(), packet.getZ()) > 1D) { - client.inGameHud.setTitleTicks(0, 10, 5); - client.inGameHud.setTitle(Text.translatable("skyblocker.fishing.reelNow").formatted(Formatting.GREEN)); - player.playSound(SoundEvent.of(new Identifier("minecraft", "entity.experience_orb.pickup")), 100f, 0.1f); + RenderHelper.displayTitleAndPlaySound(10, 5, "skyblocker.fishing.reelNow", Formatting.GREEN); reset(); } } else { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java new file mode 100644 index 00000000..0d44900a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java @@ -0,0 +1,79 @@ +package me.xmrvizzy.skyblocker.skyblock.rift; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.scoreboard.ScoreboardObjective; +import net.minecraft.scoreboard.ScoreboardPlayerScore; +import net.minecraft.scoreboard.Team; +import net.minecraft.text.Text; +import net.minecraft.text.TextColor; +import net.minecraft.util.DyeColor; +import net.minecraft.util.math.BlockPos; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +public class EffigyWaypoints { + private static final Logger LOGGER = LoggerFactory.getLogger(EffigyWaypoints.class); + private static final List effigies = List.of( + new BlockPos(150, 79, 95), //Effigy 1 + new BlockPos(193, 93, 119), //Effigy 2 + new BlockPos(235, 110, 147), //Effigy 3 + new BlockPos(293, 96, 134), //Effigy 4 + new BlockPos(262, 99, 94), //Effigy 5 + new BlockPos(240, 129, 118) //Effigy 6 + ); + private static final List unBrokenEffigies = new ArrayList<>(); + + public static void updateEffigies() { + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableEffigyWaypoints || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) return; + + unBrokenEffigies.clear(); + try { + ClientPlayerEntity player = MinecraftClient.getInstance().player; + if (player == null) return; + Scoreboard scoreboard = player.getScoreboard(); + ScoreboardObjective objective = scoreboard.getObjectiveForSlot(1); + for (ScoreboardPlayerScore score : scoreboard.getAllPlayerScores(objective)) { + Team team = scoreboard.getPlayerTeam(score.getPlayerName()); + if (team != null) { + String line = team.getPrefix().getString() + team.getSuffix().getString(); + if (line.contains("Effigies")) { + List newList = new ArrayList<>(team.getPrefix().getSiblings()); + newList.addAll(team.getSuffix().getSiblings()); + for (int i = 1; i < newList.size(); i++) { + if (newList.get(i).getStyle().getColor() == TextColor.parse("gray")) { + unBrokenEffigies.add(effigies.get(i - 1)); + } + } + } + } + } + } catch (NullPointerException e) { + LOGGER.error("[Skyblocker] Error while updating effigies.", e); + } + } + + public static void render(WorldRenderContext context) { + if (SkyblockerConfig.get().slayer.vampireSlayer.enableEffigyWaypoints && Utils.getLocation().contains("Stillgore Château")) { + for (BlockPos effigy : unBrokenEffigies) { + float[] colorComponents = DyeColor.RED.getColorComponents(); + if (SkyblockerConfig.get().slayer.vampireSlayer.compactEffigyWaypoints) { + RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, effigy.down(6), colorComponents, 0.5F); + } else { + RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, effigy, colorComponents, 0.5F); + for (int i = 1; i < 6; i++) { + RenderHelper.renderFilledThroughWalls(context, effigy.down(i), colorComponents, 0.5F - (0.075F * i)); + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java new file mode 100644 index 00000000..f98c17e7 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -0,0 +1,21 @@ +package me.xmrvizzy.skyblocker.skyblock.rift; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.util.Formatting; + +public class HealingMelonIndicator { + private static long lastDisplayTime = 0; + + public static void updateHealth(MinecraftClient client) { + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) return; + ClientPlayerEntity player = client.player; + if (player != null && player.getHealth() <= SkyblockerConfig.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F && System.currentTimeMillis() - lastDisplayTime > 2500) { + lastDisplayTime = System.currentTimeMillis(); + RenderHelper.displayTitleAndPlaySound(15, 5, "skyblocker.rift.healNow", Formatting.DARK_RED); + } + } +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java index 630d953b..276ec551 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java @@ -71,7 +71,7 @@ public class MirrorverseWaypoints { public static void render(WorldRenderContext wrc) { //I would also check for the mirrorverse location but the scoreboard stuff is not performant at all... - if (Utils.getLocationRaw().equals(TheRift.LOCATION) && SkyblockerConfig.get().locations.rift.mirrorverseWaypoints) { + if (Utils.isInTheRift() && SkyblockerConfig.get().locations.rift.mirrorverseWaypoints) { for (BlockPos pos : LAVA_PATH_WAYPOINTS) { RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java new file mode 100644 index 00000000..d1132be8 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java @@ -0,0 +1,21 @@ +package me.xmrvizzy.skyblocker.skyblock.rift; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.SlayerUtils; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.entity.Entity; +import net.minecraft.util.Formatting; + +public class StakeIndicator { + private static long lastDisplayTime = 0; + + public static void updateStake() { + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château") || !SlayerUtils.isInSlayer()) return; + Entity slayerEntity = SlayerUtils.getSlayerEntity(); + if (slayerEntity != null && slayerEntity.getDisplayName().toString().contains("҉") && System.currentTimeMillis() - lastDisplayTime > 2500) { + lastDisplayTime = System.currentTimeMillis(); + RenderHelper.displayTitleAndPlaySound(25, 5, "skyblocker.rift.stakeNow", Formatting.RED); + } + } +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java index 24f92238..91b727e2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java @@ -1,11 +1,20 @@ package me.xmrvizzy.skyblocker.skyblock.rift; +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; public class TheRift { - public static final String LOCATION = "rift"; + /** + * @see me.xmrvizzy.skyblocker.utils.Utils#isInTheRift() Utils#isInTheRift(). + */ + public static final String LOCATION = "rift"; - public static void init() { - WorldRenderEvents.AFTER_TRANSLUCENT.register(MirrorverseWaypoints::render); - } + public static void init() { + WorldRenderEvents.AFTER_TRANSLUCENT.register(MirrorverseWaypoints::render); + WorldRenderEvents.AFTER_TRANSLUCENT.register(EffigyWaypoints::render); + SkyblockerMod.getInstance().scheduler.scheduleCyclic(EffigyWaypoints::updateEffigies, SkyblockerConfig.get().slayer.vampireSlayer.effigyUpdateFrequency); + SkyblockerMod.getInstance().scheduler.scheduleCyclic(TwinClawsIndicator::updateIce, SkyblockerConfig.get().slayer.vampireSlayer.holyIceUpdateFrequency); + SkyblockerMod.getInstance().scheduler.scheduleCyclic(StakeIndicator::updateStake, SkyblockerConfig.get().slayer.vampireSlayer.steakStakeUpdateFrequency); + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java new file mode 100644 index 00000000..7e1d6605 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java @@ -0,0 +1,32 @@ +package me.xmrvizzy.skyblocker.skyblock.rift; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.SlayerUtils; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.entity.Entity; +import net.minecraft.util.Formatting; + +public class TwinClawsIndicator { + private static long lastDisplayTime = 0; + + public static void updateIce() { + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) return; + + Entity slayerEntity = SlayerUtils.getSlayerEntity(); + if (slayerEntity == null) return; + + for (Entity entity : SlayerUtils.getEntityArmorStands(slayerEntity)) { + if (entity.getDisplayName().toString().contains("TWINCLAWS")) { + SkyblockerMod.getInstance().scheduler.schedule(() -> { + if (System.currentTimeMillis() - lastDisplayTime > 2500) { + lastDisplayTime = System.currentTimeMillis(); + RenderHelper.displayTitleAndPlaySound(40, 5, "skyblocker.rift.iceNow", Formatting.AQUA); + } + }, SkyblockerConfig.get().slayer.vampireSlayer.holyIceIndicatorTickDelay); + } + } + + } +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index 2e942905..a7e1fc99 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -3,7 +3,12 @@ package me.xmrvizzy.skyblocker.utils; import me.x150.renderer.render.Renderer3d; import me.xmrvizzy.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; +import net.minecraft.sound.SoundEvent; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -39,4 +44,16 @@ public class RenderHelper { BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); context.matrixStack().pop(); } + + public static void displayTitleAndPlaySound(int stayTicks, int fadeOutTicks, String titleKey, Formatting formatting) { + MinecraftClient.getInstance().inGameHud.setTitleTicks(0, stayTicks, fadeOutTicks); + MinecraftClient.getInstance().inGameHud.setTitle(Text.translatable(titleKey).formatted(formatting)); + playNotificationSound(); + } + + private static void playNotificationSound() { + if (MinecraftClient.getInstance().player != null) { + MinecraftClient.getInstance().player.playSound(SoundEvent.of(new Identifier("entity.experience_orb.pickup")), 100f, 0.1f); + } + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/SlayerUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/SlayerUtils.java new file mode 100644 index 00000000..6bc09456 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/SlayerUtils.java @@ -0,0 +1,66 @@ +package me.xmrvizzy.skyblocker.utils; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.scoreboard.ScoreboardObjective; +import net.minecraft.scoreboard.ScoreboardPlayerScore; +import net.minecraft.scoreboard.Team; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +//TODO Slayer Packet system that can provide information about the current slayer boss, abstract so that different bosses can have different info +public class SlayerUtils { + private static final Logger LOGGER = LoggerFactory.getLogger(SlayerUtils.class); + + //TODO: Cache this, probably included in Packet system + public static List getEntityArmorStands(Entity entity) { + return entity.getEntityWorld().getOtherEntities(entity, entity.getBoundingBox().expand(1F, 2.5F, 1F), x -> x instanceof ArmorStandEntity && x.hasCustomName()); + } + + //Eventually this should be modified so that if you hit a slayer boss all slayer features will work on that boss. + public static Entity getSlayerEntity() { + if (MinecraftClient.getInstance().world != null) { + for (Entity entity : MinecraftClient.getInstance().world.getEntities()) { + //Check if entity is Bloodfiend + if (entity.hasCustomName() && entity.getCustomName().getString().contains("Bloodfiend")) { + //Grab the players username + String username = MinecraftClient.getInstance().getSession().getUsername(); + //Check all armor stands around the boss + for (Entity armorStand : getEntityArmorStands(entity)) { + //Check if the display name contains the players username + if (armorStand.getDisplayName().getString().contains(username)) { + return entity; + } + } + } + } + } + return null; + } + + public static boolean isInSlayer() { + try { + ClientPlayerEntity client = MinecraftClient.getInstance().player; + if (client == null) return false; + Scoreboard scoreboard = MinecraftClient.getInstance().player.getScoreboard(); + ScoreboardObjective objective = scoreboard.getObjectiveForSlot(1); + for (ScoreboardPlayerScore score : scoreboard.getAllPlayerScores(objective)) { + Team team = scoreboard.getPlayerTeam(score.getPlayerName()); + if (team != null) { + String line = team.getPrefix().getString() + team.getSuffix().getString(); + if (line.contains("Slay the boss!")) { + return true; + } + } + } + } catch (NullPointerException e) { + LOGGER.error("[Skyblocker] Error while checking if player is in slayer", e); + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index d961ba7e..35dfd368 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -4,6 +4,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; +import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; @@ -52,6 +53,10 @@ public class Utils { return isInDungeons; } + public static boolean isInTheRift() { + return getLocationRaw().equals(TheRift.LOCATION); + } + public static boolean isInjected() { return isInjected; } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index d18e180e..647092a9 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -220,6 +220,22 @@ "text.autoconfig.skyblocker.option.messages.hideMana": "Hide Mana Consumption Messages from Action Bar", "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "Gives a better experience with FancyBar", + "text.autoconfig.skyblocker.category.slayer": "Slayers", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer": "Vampire Slayer", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableEffigyWaypoints": "Enable Effigy Waypoints", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.compactEffigyWaypoints": "Compact Effigy Waypoints", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.effigyUpdateFrequency": "Effigy Waypoints Update Frequency (Ticks)", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.effigyUpdateFrequency.@Tooltip": "The lower the value, the more frequent the updates, which may cause lag.", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableHolyIceIndicator": "Enable Holy Ice Indicator", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.holyIceIndicatorTickDelay": "Holy Ice Indicator Delay (Ticks)", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.holyIceUpdateFrequency": "Holy Ice Indicator Update Frequency (Ticks)", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.holyIceUpdateFrequency.@Tooltip": "The lower the value, the more frequent the updates, which may cause lag.", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableHealingMelonIndicator": "Enable Healing Melon Indicator", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.healingMelonHealthThreshold": "Healing Melon Indicator Threshold (Hearts)", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableSteakStakeIndicator": "Enable Steak Stake Indicator", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.steakStakeUpdateFrequency": "Steak Stake Indicator Update Frequency (Ticks)", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.steakStakeUpdateFrequency.@Tooltip": "The lower the value, the more frequent the updates, which may cause lag.", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2There is a new version available!", "skyblocker.update.update_link": " §2§nClick here§r", "skyblocker.update.update_message_end" : " §ato find out about latest features.", @@ -232,6 +248,9 @@ "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Automatically set your API key!", "skyblocker.fishing.reelNow": "Reel in now!", + "skyblocker.rift.healNow": "Heal now!", + "skyblocker.rift.iceNow": "Ice now!", + "skyblocker.rift.stakeNow": "Stake now!", "skyblocker.fairySouls.markAllFound": "Marked all fairy souls in the current island as found", "skyblocker.fairySouls.markAllMissing": "Marked all fairy souls in the current island as missing" } -- cgit From 98e7aacc77dd06fc70a0967bee0944c5d8a28be6 Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Thu, 29 Jun 2023 19:51:52 +0200 Subject: changed "[A-z0-9_]" in regex to "." --- src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index cb28a4de..3166d995 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -27,8 +27,8 @@ public class Reparty extends ChatPatternListener { public Reparty() { super("^(?:You are not currently in a party\\." + "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" + - "|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded .*" + - "|.*\n([\\[A-z+\\]]* )?(?[A-z0-9_]*) has invited you to join their party!" + + "|([\\[A-z+\\]]* )?(?.*) has disbanded .*" + + "|.*\n([\\[A-z+\\]]* )?(?.*) has invited you to join their party!" + "\nYou have 60 seconds to accept. Click here to join!\n.*)$"); this.repartying = false; -- cgit From 8f3bc2b02dc66dfa337f77fa0109cac1bdc8816c Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Thu, 29 Jun 2023 19:56:24 +0200 Subject: changed "[A-z0-9_]" in regex to "." --- .../me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java index 0fd0363b..2465f7a2 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java @@ -26,10 +26,10 @@ public class AcceptRepartyTest extends ChatPatternListenerTest { @Test void testInvite() { assertGroup("-----------------------------------------------------" + - "\nStefan has invited you to join their party!" + + "\n[MVP+] 1wolvesgaming has invited you to join their party!" + "\nYou have 60 seconds to accept. Click here to join!" + "\n-----------------------------------------------------", /* group: */ "invite", - /* expect: */ "Stefan"); + /* expect: */ "1wolvesgaming"); } } \ No newline at end of file -- cgit From 6196600f51f59be3e1f2671ab3fd6d1dd103fd75 Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Thu, 29 Jun 2023 20:17:51 +0200 Subject: extended the reparty accept window from 1s to 3s --- src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index 3166d995..8ae7ce7b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -57,7 +57,7 @@ public class Reparty extends ChatPatternListener { } } else if (matcher.group("disband") != null && !matcher.group("disband").equals(client.getSession().getUsername())) { partyLeader = matcher.group("disband"); - SkyblockerMod.getInstance().scheduler.schedule(() -> partyLeader = null, 21); + SkyblockerMod.getInstance().scheduler.schedule(() -> partyLeader = null, 61); return false; } else if (matcher.group("invite") != null && matcher.group("invite").equals(partyLeader)) { String command = "/party accept " + partyLeader; -- cgit From f81e276c6fd27eac93fea03ecc6258d8d16d1cbd Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 1 Jul 2023 14:38:38 -0400 Subject: Add Motes Price Tooltip --- .../skyblocker/config/SkyblockerConfig.java | 2 ++ .../skyblocker/skyblock/item/PriceInfoTooltip.java | 32 ++++++++++++++++++++++ .../resources/assets/skyblocker/lang/en_us.json | 2 ++ 3 files changed, 36 insertions(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 3a8a4a1f..108eab47 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -273,6 +273,8 @@ public class SkyblockerConfig implements ConfigData { public static class ItemTooltip { public boolean enableNPCPrice = true; + @ConfigEntry.Gui.Tooltip + public boolean enableMotesPrice = true; public boolean enableAvgBIN = true; @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) @ConfigEntry.Gui.Tooltip() diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java index e2d2d415..5237f4ec 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java @@ -40,6 +40,7 @@ public class PriceInfoTooltip { private static JsonObject threeDayAvgPricesJson; private static JsonObject lowestPricesJson; private static JsonObject isMuseumJson; + private static JsonObject motesPricesJson; private static boolean nullMsgSend = false; private final static Gson gson = new Gson(); private static final Map apiAddresses; @@ -63,6 +64,17 @@ public class PriceInfoTooltip { .append(getCoinsMessage(npcPricesJson.get(name).getAsDouble(), count))); } } + + if (SkyblockerConfig.get().general.itemTooltip.enableMotesPrice && Utils.isInTheRift()) { + if(motesPricesJson == null) { + nullWarning(); + } + else if (motesPricesJson.has(name)) { + lines.add(Text.literal(String.format("%-20s", "Motes Price:")) + .formatted(Formatting.LIGHT_PURPLE) + .append(getMotesMessage(motesPricesJson.get(name).getAsInt(), count))); + } + } boolean bazaarExist = false; if (SkyblockerConfig.get().general.itemTooltip.enableBazaarPrice && !bazaarOpened) { @@ -289,6 +301,22 @@ public class PriceInfoTooltip { return priceTextTotal.append(priceTextEach); } } + + private static Text getMotesMessage(int price, int count) { + if (count == 1) { + String priceString = String.format(Locale.ENGLISH, "%1$,d", price); + return Text.literal(priceString + " Motes").formatted(Formatting.DARK_AQUA); + } + else { + String priceStringTotal = String.format(Locale.ENGLISH, "%1$,d", price * count); + MutableText priceTextTotal = Text.literal(priceStringTotal + " Motes ").formatted(Formatting.DARK_AQUA); + + String priceStringEach = String.format(Locale.ENGLISH, "%1$,d", price); + MutableText priceTextEach = Text.literal( "(" + priceStringEach + " each)").formatted(Formatting.GRAY); + + return priceTextTotal.append(priceTextEach); + } + } // If these options is true beforehand, the client will get first data of these options while loading. // After then, it will only fetch the data if it is on Skyblock. @@ -326,6 +354,9 @@ public class PriceInfoTooltip { if (SkyblockerConfig.get().general.itemTooltip.enableMuseumDate && isMuseumJson == null) futureList.add(CompletableFuture.runAsync(() -> isMuseumJson = downloadPrices("museum"))); + + if (SkyblockerConfig.get().general.itemTooltip.enableMotesPrice && motesPricesJson == null) + futureList.add(CompletableFuture.runAsync(() -> motesPricesJson = downloadPrices("motes"))); minute++; CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])) @@ -354,5 +385,6 @@ public class PriceInfoTooltip { apiAddresses.put("lowest bins", "https://lb.tricked.pro/lowestbins"); apiAddresses.put("npc", "https://hysky.de/api/npcprice"); apiAddresses.put("museum", "https://hysky.de/api/museum"); + apiAddresses.put("motes", "https://hysky.de/api/motesprice"); } } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index df610333..a22cbd8e 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -38,6 +38,8 @@ "text.autoconfig.skyblocker.option.general.tabHud.tabHudScale.@Tooltip": "Value in %, relative to your vanilla GUI scale", "text.autoconfig.skyblocker.option.general.itemTooltip": "Item Tooltip", "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Enable NPC Price", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMotesPrice": "Enable Motes Price", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMotesPrice.@Tooltip": "Displays the base Motes sell price of an item while in The Rift.", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Enable Avg. BIN Price", "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Average Type", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "You can choose how many days of average price to be", -- cgit From e700b19b7a39cb749290f0051d72ec8bd51653e2 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 1 Jul 2023 15:55:16 -0400 Subject: McGrubber Burgers --- .../java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java | 3 +++ .../me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java | 9 +++++---- src/main/resources/assets/skyblocker/lang/en_us.json | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 108eab47..26e59b40 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -371,6 +371,9 @@ public class SkyblockerConfig implements ConfigData { public static class Rift { public boolean mirrorverseWaypoints = true; + @ConfigEntry.BoundedDiscrete(min = 0, max = 5) + @ConfigEntry.Gui.Tooltip + public int mcGrubberStacks = 0; } public static class Slayer { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java index 5237f4ec..dc2a89f8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java @@ -66,7 +66,7 @@ public class PriceInfoTooltip { } if (SkyblockerConfig.get().general.itemTooltip.enableMotesPrice && Utils.isInTheRift()) { - if(motesPricesJson == null) { + if(motesPricesJson == null) { nullWarning(); } else if (motesPricesJson.has(name)) { @@ -303,15 +303,16 @@ public class PriceInfoTooltip { } private static Text getMotesMessage(int price, int count) { + float motesMultiplier = SkyblockerConfig.get().locations.rift.mcGrubberStacks * 0.05f + 1; if (count == 1) { - String priceString = String.format(Locale.ENGLISH, "%1$,d", price); + String priceString = String.format(Locale.ENGLISH, "%1$,.1f", price * motesMultiplier).replace(".0", ""); return Text.literal(priceString + " Motes").formatted(Formatting.DARK_AQUA); } else { - String priceStringTotal = String.format(Locale.ENGLISH, "%1$,d", price * count); + String priceStringTotal = String.format(Locale.ENGLISH, "%1$,.1f", price * count * motesMultiplier).replace(".0", ""); MutableText priceTextTotal = Text.literal(priceStringTotal + " Motes ").formatted(Formatting.DARK_AQUA); - String priceStringEach = String.format(Locale.ENGLISH, "%1$,d", price); + String priceStringEach = String.format(Locale.ENGLISH, "%1$,.1f", price * motesMultiplier).replace(".0", ""); MutableText priceTextEach = Text.literal( "(" + priceStringEach + " each)").formatted(Formatting.GRAY); return priceTextTotal.append(priceTextEach); diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index a22cbd8e..7ec78c00 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -206,6 +206,8 @@ "text.autoconfig.skyblocker.option.locations.rift": "The Rift", "text.autoconfig.skyblocker.option.locations.rift.mirrorverseWaypoints": "Enable Mirrorverse Waypoints", + "text.autoconfig.skyblocker.option.locations.rift.mcGrubberStacks": "McGrubber Stacks", + "text.autoconfig.skyblocker.option.locations.rift.mcGrubberStacks.@Tooltip": "Used for calculating Motes sell prices.", "text.autoconfig.skyblocker.category.messages": "Messages", "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Disabled", -- cgit From 1ab77d6b70452d969970ad3bd185d551f4b1ef97 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 1 Jul 2023 15:55:59 -0400 Subject: Fix translation string --- src/main/resources/assets/skyblocker/lang/en_us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 7ec78c00..20c2c27f 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -39,7 +39,7 @@ "text.autoconfig.skyblocker.option.general.itemTooltip": "Item Tooltip", "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Enable NPC Price", "text.autoconfig.skyblocker.option.general.itemTooltip.enableMotesPrice": "Enable Motes Price", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMotesPrice.@Tooltip": "Displays the base Motes sell price of an item while in The Rift.", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMotesPrice.@Tooltip": "Displays the Motes sell price of an item while in The Rift.", "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Enable Avg. BIN Price", "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Average Type", "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "You can choose how many days of average price to be", -- cgit From 55b777dd07087569d7c3565de5cf4808c70eadb9 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 1 Jul 2023 22:11:10 -0400 Subject: Fix dragged items not rendering (#193) --- .../java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index aefe11c6..903d3992 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -63,22 +63,22 @@ public abstract class HandledScreenMixin extends Screen { @Redirect(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/slot/Slot;getStack()Lnet/minecraft/item/ItemStack;", ordinal = 0)) private ItemStack skyblocker$experimentSolvers$replaceTooltipDisplayStack(Slot slot) { - return skyblocker$experimentSolvers$getStack(slot); + return skyblocker$experimentSolvers$getStack(slot, null); } @ModifyVariable(method = "drawSlot", at = @At(value = "LOAD", ordinal = 4), ordinal = 0) private ItemStack skyblocker$experimentSolvers$replaceDisplayStack(ItemStack stack, DrawContext context, Slot slot) { - return skyblocker$experimentSolvers$getStack(slot); + return skyblocker$experimentSolvers$getStack(slot, stack); } @Unique - private ItemStack skyblocker$experimentSolvers$getStack(Slot slot) { + private ItemStack skyblocker$experimentSolvers$getStack(Slot slot, ItemStack stack) { ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); if ((currentSolver instanceof SuperpairsSolver || currentSolver instanceof UltrasequencerSolver) && ((ExperimentSolver) currentSolver).getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { ItemStack itemStack = ((ExperimentSolver) currentSolver).getSlots().get(slot.getIndex()); return itemStack == null ? slot.getStack() : itemStack; } - return slot.getStack(); + return (stack != null) ? stack : slot.getStack(); } @Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;clickSlot(IIILnet/minecraft/screen/slot/SlotActionType;Lnet/minecraft/entity/player/PlayerEntity;)V")) -- cgit From 379cd758fb6895c4e88d7cb8245f79bde1494f34 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 2 Jul 2023 21:53:03 -0400 Subject: Vampire Minion (#194) --- .../java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java index 22082202..fe52fcdf 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java @@ -74,6 +74,7 @@ public class MinionWidget extends Widget { MIN_ICOS.put("Inferno", new ItemStack(Items.BLAZE_SPAWN_EGG)); MIN_ICOS.put("Revenant", new ItemStack(Items.ZOMBIE_SPAWN_EGG)); MIN_ICOS.put("Tarantula", new ItemStack(Items.SPIDER_SPAWN_EGG)); + MIN_ICOS.put("Vampire", new ItemStack(Items.REDSTONE)); MIN_ICOS.put("Voidling", new ItemStack(Items.ENDERMAN_SPAWN_EGG)); MIN_ICOS.put("Acacia", new ItemStack(Items.ACACIA_LOG)); MIN_ICOS.put("Birch", new ItemStack(Items.BIRCH_LOG)); -- cgit From 64e1de1f4f857d4c126b7610b008120a61f118d2 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Tue, 4 Jul 2023 20:19:40 -0400 Subject: New Slayer Stuff Implement TitleContainer for stacking titles. Implement Mania Indicator to show the player when they are standing on green terracotta during mania. --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 + .../skyblocker/config/SkyblockerConfig.java | 4 ++ .../skyblock/rift/HealingMelonIndicator.java | 26 +++++-- .../skyblocker/skyblock/rift/ManiaIndicator.java | 46 ++++++++++++ .../skyblocker/skyblock/rift/StakeIndicator.java | 25 +++++-- .../xmrvizzy/skyblocker/skyblock/rift/TheRift.java | 1 + .../skyblock/rift/TwinClawsIndicator.java | 36 +++++++--- .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 7 ++ .../me/xmrvizzy/skyblocker/utils/title/Title.java | 13 ++++ .../skyblocker/utils/title/TitleContainer.java | 82 ++++++++++++++++++++++ .../resources/assets/skyblocker/lang/en_us.json | 4 ++ 11 files changed, 224 insertions(+), 22 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index a629f851..4688d90f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -20,6 +20,7 @@ import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.utils.*; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.loader.api.FabricLoader; @@ -84,6 +85,7 @@ public class SkyblockerMod implements ClientModInitializer { TabHud.init(); DungeonMap.init(); TheRift.init(); + TitleContainer.init(); containerSolverManager.init(); scheduler.scheduleCyclic(Utils::update, 20); scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 26e59b40..ab4149fc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -399,6 +399,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.BoundedDiscrete(min = 1, max = 10) @ConfigEntry.Gui.Tooltip() public int steakStakeUpdateFrequency = 5; + public boolean enableManiaIndicator = true; + @ConfigEntry.BoundedDiscrete(min = 1, max = 10) + @ConfigEntry.Gui.Tooltip() + public int maniaUpdateFrequency = 5; } public static class Messages { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java index f98c17e7..050c300f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -3,19 +3,33 @@ package me.xmrvizzy.skyblocker.skyblock.rift; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderHelper; import me.xmrvizzy.skyblocker.utils.Utils; +import me.xmrvizzy.skyblocker.utils.title.Title; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class HealingMelonIndicator { - private static long lastDisplayTime = 0; - + private static Title title = null; public static void updateHealth(MinecraftClient client) { - if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) return; + if(title == null) + new Title(I18n.translate("skyblocker.rift.healNow"), Formatting.DARK_RED.getColorValue()); + + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) { + title.active = false; + return; + } + title.active = true; ClientPlayerEntity player = client.player; - if (player != null && player.getHealth() <= SkyblockerConfig.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F && System.currentTimeMillis() - lastDisplayTime > 2500) { - lastDisplayTime = System.currentTimeMillis(); - RenderHelper.displayTitleAndPlaySound(15, 5, "skyblocker.rift.healNow", Formatting.DARK_RED); + if (player != null && player.getHealth() <= SkyblockerConfig.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F) { + title.active = true; + if(!TitleContainer.titles.contains(title)) + RenderHelper.displayInTitleContainerAndPlaySound(title); + } + else { + title.active = false; } } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java new file mode 100644 index 00000000..7d5a1cb4 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java @@ -0,0 +1,46 @@ +package me.xmrvizzy.skyblocker.skyblock.rift; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.SlayerUtils; +import me.xmrvizzy.skyblocker.utils.Utils; +import me.xmrvizzy.skyblocker.utils.title.Title; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; +import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.entity.Entity; +import net.minecraft.util.Formatting; + +public class ManiaIndicator { + private static Title title = null; + public static void updateMania() { + if(title == null) + title = new Title("b", Formatting.RED.getColorValue()); + + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableManiaIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) { + title.active = false; + return; + } + + Entity slayerEntity = SlayerUtils.getSlayerEntity(); + if (slayerEntity == null) return; + + boolean anyMania = false; + for (Entity entity : SlayerUtils.getEntityArmorStands(slayerEntity)) { + if (entity.getDisplayName().toString().contains("MANIA")) { + anyMania = true; + title.active = true; + var pos = MinecraftClient.getInstance().player.getBlockPos().down(); + var isGreen = MinecraftClient.getInstance().world.getBlockState(pos).getBlock() == Blocks.GREEN_TERRACOTTA; + title.color = isGreen ? Formatting.GREEN.getColorValue() : Formatting.RED.getColorValue(); + if(!TitleContainer.titles.contains(title)) { + title.text = I18n.translate("skyblocker.rift.mania"); + RenderHelper.displayInTitleContainerAndPlaySound(title); + } + } + } + if(!anyMania) + title.active = false; + } +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java index d1132be8..01b6b738 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java @@ -4,18 +4,31 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderHelper; import me.xmrvizzy.skyblocker.utils.SlayerUtils; import me.xmrvizzy.skyblocker.utils.Utils; +import me.xmrvizzy.skyblocker.utils.title.Title; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; +import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class StakeIndicator { - private static long lastDisplayTime = 0; - + private static Title title = null; public static void updateStake() { - if (!SkyblockerConfig.get().slayer.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château") || !SlayerUtils.isInSlayer()) return; + if (title == null) + title = new Title("b", Formatting.RED.getColorValue()); + + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château") || !SlayerUtils.isInSlayer()) { + title.active = false; + return; + } Entity slayerEntity = SlayerUtils.getSlayerEntity(); - if (slayerEntity != null && slayerEntity.getDisplayName().toString().contains("҉") && System.currentTimeMillis() - lastDisplayTime > 2500) { - lastDisplayTime = System.currentTimeMillis(); - RenderHelper.displayTitleAndPlaySound(25, 5, "skyblocker.rift.stakeNow", Formatting.RED); + if (slayerEntity != null && slayerEntity.getDisplayName().toString().contains("҉")) { + title.active = true; + title.text = I18n.translate("skyblocker.rift.stakeNow"); + if(!TitleContainer.titles.contains(title)) + RenderHelper.displayInTitleContainerAndPlaySound(title); } + else + title.active = false; } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java index 91b727e2..5ca89dcf 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java @@ -15,6 +15,7 @@ public class TheRift { WorldRenderEvents.AFTER_TRANSLUCENT.register(EffigyWaypoints::render); SkyblockerMod.getInstance().scheduler.scheduleCyclic(EffigyWaypoints::updateEffigies, SkyblockerConfig.get().slayer.vampireSlayer.effigyUpdateFrequency); SkyblockerMod.getInstance().scheduler.scheduleCyclic(TwinClawsIndicator::updateIce, SkyblockerConfig.get().slayer.vampireSlayer.holyIceUpdateFrequency); + SkyblockerMod.getInstance().scheduler.scheduleCyclic(ManiaIndicator::updateMania, SkyblockerConfig.get().slayer.vampireSlayer.maniaUpdateFrequency); SkyblockerMod.getInstance().scheduler.scheduleCyclic(StakeIndicator::updateStake, SkyblockerConfig.get().slayer.vampireSlayer.steakStakeUpdateFrequency); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java index 7e1d6605..a062f7b7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java @@ -5,28 +5,44 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderHelper; import me.xmrvizzy.skyblocker.utils.SlayerUtils; import me.xmrvizzy.skyblocker.utils.Utils; +import me.xmrvizzy.skyblocker.utils.title.Title; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; +import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class TwinClawsIndicator { - private static long lastDisplayTime = 0; - + private static Title title = null; + public static boolean scheduling = false; public static void updateIce() { - if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) return; + if(title == null) + title = new Title("b", Formatting.AQUA.getColorValue()); + + if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) { + title.active = false; + return; + } Entity slayerEntity = SlayerUtils.getSlayerEntity(); if (slayerEntity == null) return; + boolean anyClaws = false; for (Entity entity : SlayerUtils.getEntityArmorStands(slayerEntity)) { if (entity.getDisplayName().toString().contains("TWINCLAWS")) { - SkyblockerMod.getInstance().scheduler.schedule(() -> { - if (System.currentTimeMillis() - lastDisplayTime > 2500) { - lastDisplayTime = System.currentTimeMillis(); - RenderHelper.displayTitleAndPlaySound(40, 5, "skyblocker.rift.iceNow", Formatting.AQUA); - } - }, SkyblockerConfig.get().slayer.vampireSlayer.holyIceIndicatorTickDelay); + anyClaws = true; + title.active = true; + if(!TitleContainer.titles.contains(title) && !scheduling) { + scheduling = true; + SkyblockerMod.getInstance().scheduler.schedule(() -> { + title.text = I18n.translate("skyblocker.rift.iceNow"); + RenderHelper.displayInTitleContainerAndPlaySound(title); + scheduling = false; + }, SkyblockerConfig.get().slayer.vampireSlayer.holyIceIndicatorTickDelay); + } } } - + if(!anyClaws) + title.active = false; } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index a7e1fc99..e75538f6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -2,6 +2,8 @@ package me.xmrvizzy.skyblocker.utils; import me.x150.renderer.render.Renderer3d; import me.xmrvizzy.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker; +import me.xmrvizzy.skyblocker.utils.title.Title; +import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; @@ -51,6 +53,11 @@ public class RenderHelper { playNotificationSound(); } + public static void displayInTitleContainerAndPlaySound(Title title) { + TitleContainer.addTitle(title); + playNotificationSound(); + } + private static void playNotificationSound() { if (MinecraftClient.getInstance().player != null) { MinecraftClient.getInstance().player.playSound(SoundEvent.of(new Identifier("entity.experience_orb.pickup")), 100f, 0.1f); diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java new file mode 100644 index 00000000..44a636d7 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java @@ -0,0 +1,13 @@ +package me.xmrvizzy.skyblocker.utils.title; + +public class Title { + public String text = ""; + public boolean active = true; + public int color; + public float lastX = 0; + + public Title(String text, int color) { + this.text = text; + this.color = color; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java new file mode 100644 index 00000000..c8747596 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -0,0 +1,82 @@ +package me.xmrvizzy.skyblocker.utils.title; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.skyblock.FairySouls; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.entity.decoration.DisplayEntity; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.math.MathHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + +public class TitleContainer { + public static List titles = new ArrayList<>(); + private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); + public static void init() { + HudRenderCallback.EVENT.register(TitleContainer::draw); + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE) + .then(literal("title") + .then(literal("ice").executes(context -> { + titles.add(new Title(Text.translatable("skyblocker.rift.iceNow").getString(), Formatting.AQUA.getColorValue())); + return 1; + })) + .then(literal("stake").executes(context -> { + titles.add(new Title("Stake", Formatting.RED.getColorValue())); + return 1; + })) + .then(literal("heal").executes(context -> { + titles.add(new Title("Heal", Formatting.DARK_RED.getColorValue())); + return 1; + })) + ))); + } + public static void addTitle(Title title) + { + title.active = true; + title.lastX = 0; + titles.add(title); + } + public static void draw(DrawContext context, float tickDelta) { + var client = MinecraftClient.getInstance(); + TextRenderer textRenderer = client.textRenderer; + + List<Title> toRemove = new ArrayList<>(); + + float x; + float width = 0; + context.getMatrices().push(); + context.getMatrices().scale(3.0F, 3.0F, 3.0F); + for (Title title : titles) { + width += textRenderer.getWidth(title.text) * 3F + 10; + } + context.getMatrices().pop(); + + x = (client.getWindow().getScaledWidth() / 2) - width / 2; + + for (Title title : titles) { + context.getMatrices().push(); + context.getMatrices().translate(title.lastX, client.getWindow().getScaledHeight() * 0.6F, 0); + context.getMatrices().scale(3.0F, 3.0F, 3.0F); + + title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x); + x += textRenderer.getWidth(title.text) * 3F + 10; + context.drawText(textRenderer, title.text, 0, 0, title.color, true + ); + context.getMatrices().pop(); + if (!title.active) { + toRemove.add(title); + } + } + titles.removeAll(toRemove); + } +} \ No newline at end of file diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 20c2c27f..4686c31a 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -240,6 +240,9 @@ "text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableSteakStakeIndicator": "Enable Steak Stake Indicator", "text.autoconfig.skyblocker.option.slayer.vampireSlayer.steakStakeUpdateFrequency": "Steak Stake Indicator Update Frequency (Ticks)", "text.autoconfig.skyblocker.option.slayer.vampireSlayer.steakStakeUpdateFrequency.@Tooltip": "The lower the value, the more frequent the updates, which may cause lag.", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableManiaIndicator": "Enable Mania Block Indicator", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.maniaUpdateFrequency": "Mania Indicator Update Frequency (Ticks)", + "text.autoconfig.skyblocker.option.slayer.vampireSlayer.maniaUpdateFrequency.@Tooltip": "The lower the value, the more frequent the updates, which may cause lag.", "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2There is a new version available!", "skyblocker.update.update_link": " §2§nClick here§r", @@ -255,6 +258,7 @@ "skyblocker.fishing.reelNow": "Reel in now!", "skyblocker.rift.healNow": "Heal now!", "skyblocker.rift.iceNow": "Ice now!", + "skyblocker.rift.mania": "Mania!", "skyblocker.rift.stakeNow": "Stake now!", "skyblocker.fairySouls.markAllFound": "Marked all fairy souls in the current island as found", "skyblocker.fairySouls.markAllMissing": "Marked all fairy souls in the current island as missing" -- cgit From 77fe811d2347b7fb21da028ffe32205459804e3d Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Tue, 4 Jul 2023 20:21:03 -0400 Subject: Change Position --- .gitignore | 1 + src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 896dca7f..b95c73fb 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ bin/ # fabric run/ +libs/ diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index c8747596..472c39fd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -65,7 +65,7 @@ public class TitleContainer { for (Title title : titles) { context.getMatrices().push(); - context.getMatrices().translate(title.lastX, client.getWindow().getScaledHeight() * 0.6F, 0); + context.getMatrices().translate(title.lastX, client.getWindow().getScaledHeight() * 0.7F, 0); context.getMatrices().scale(3.0F, 3.0F, 3.0F); title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x); -- cgit From 83b5d6152bc73b8d550a45a46792c2ee2523d4fa Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Tue, 4 Jul 2023 20:31:44 -0400 Subject: oopsie daisy --- .../me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java index 050c300f..63cd2b7e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -15,7 +15,7 @@ public class HealingMelonIndicator { private static Title title = null; public static void updateHealth(MinecraftClient client) { if(title == null) - new Title(I18n.translate("skyblocker.rift.healNow"), Formatting.DARK_RED.getColorValue()); + title = new Title(I18n.translate("skyblocker.rift.healNow"), Formatting.DARK_RED.getColorValue()); if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) { title.active = false; -- cgit From f5eca35862beee810c4761a51f274bb89e726e55 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Tue, 4 Jul 2023 20:37:27 -0400 Subject: remove debug stuff --- .../skyblocker/skyblock/rift/HealingMelonIndicator.java | 1 - .../skyblocker/skyblock/rift/StakeIndicator.java | 1 - .../skyblocker/skyblock/rift/TwinClawsIndicator.java | 1 - .../xmrvizzy/skyblocker/utils/title/TitleContainer.java | 17 ----------------- 4 files changed, 20 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java index 63cd2b7e..d1657d67 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -8,7 +8,6 @@ import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.resource.language.I18n; -import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class HealingMelonIndicator { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java index 01b6b738..d946df6d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java @@ -8,7 +8,6 @@ import me.xmrvizzy.skyblocker.utils.title.Title; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; -import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class StakeIndicator { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java index a062f7b7..706aa95e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java @@ -9,7 +9,6 @@ import me.xmrvizzy.skyblocker.utils.title.Title; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; -import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class TwinClawsIndicator { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index 472c39fd..8eaf45a3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -1,13 +1,11 @@ package me.xmrvizzy.skyblocker.utils.title; import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.skyblock.FairySouls; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; -import net.minecraft.entity.decoration.DisplayEntity; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.math.MathHelper; @@ -24,21 +22,6 @@ public class TitleContainer { private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); public static void init() { HudRenderCallback.EVENT.register(TitleContainer::draw); - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE) - .then(literal("title") - .then(literal("ice").executes(context -> { - titles.add(new Title(Text.translatable("skyblocker.rift.iceNow").getString(), Formatting.AQUA.getColorValue())); - return 1; - })) - .then(literal("stake").executes(context -> { - titles.add(new Title("Stake", Formatting.RED.getColorValue())); - return 1; - })) - .then(literal("heal").executes(context -> { - titles.add(new Title("Heal", Formatting.DARK_RED.getColorValue())); - return 1; - })) - ))); } public static void addTitle(Title title) { -- cgit From 7c5916b985edbee5a428ff0af80e7104b8d3b3e4 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Tue, 4 Jul 2023 21:16:36 -0400 Subject: Fix Renderer --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d90dc6f2..cbb51b52 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ mod_menu_version=7.0.1 ## REI (https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items/files) rei_version=12.0.625 ## Renderer (https://github.com/0x3C50/Renderer) -renderer_version = master-SNAPSHOT +renderer_version = d687aced4c # Mod Properties mod_version = 1.10.0 -- cgit From 2abd16260b6b3296d32853baa7d062a518ec2b1c Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 5 Jul 2023 15:51:41 -0400 Subject: Loom 1.3 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 83da3489..8c83e515 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.2-SNAPSHOT' + id 'fabric-loom' version '1.3-SNAPSHOT' id 'maven-publish' id 'com.modrinth.minotaur' version '2.+' } -- cgit From e393d6f9fa44b0314734ce54927ebf3bf0551d47 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Wed, 5 Jul 2023 17:07:44 -0400 Subject: Make Changes + Add scaling --- .../skyblocker/config/SkyblockerConfig.java | 10 ++++++++ .../skyblocker/utils/title/TitleContainer.java | 28 +++++++--------------- .../resources/assets/skyblocker/lang/en_us.json | 3 +++ 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index ab4149fc..d461dbfe 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -175,6 +175,11 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public Hitbox hitbox = new Hitbox(); + @ConfigEntry.Gui.Tooltip() + @ConfigEntry.Category("titleContainer") + @ConfigEntry.Gui.CollapsibleObject() + public TitleContainer titleContainer = new TitleContainer(); + @ConfigEntry.Gui.Excluded public List<Integer> lockedSlots = new ArrayList<>(); } @@ -247,6 +252,11 @@ public class SkyblockerConfig implements ConfigData { public boolean oldLeverHitbox = false; } + public static class TitleContainer { + @ConfigEntry.BoundedDiscrete(min = 30, max = 140) + public float titleContainerScale = 100; + } + public static class RichPresence { public boolean enableRichPresence = false; @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index 8eaf45a3..9728e1eb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -1,30 +1,22 @@ package me.xmrvizzy.skyblocker.utils.title; -import me.xmrvizzy.skyblocker.SkyblockerMod; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import net.minecraft.util.math.MathHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; - public class TitleContainer { public static List<Title> titles = new ArrayList<>(); - private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); + public static void init() { HudRenderCallback.EVENT.register(TitleContainer::draw); } - public static void addTitle(Title title) - { + public static void addTitle(Title title) { title.active = true; title.lastX = 0; titles.add(title); @@ -35,26 +27,24 @@ public class TitleContainer { List<Title> toRemove = new ArrayList<>(); + float scale = 3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F); + float x; float width = 0; - context.getMatrices().push(); - context.getMatrices().scale(3.0F, 3.0F, 3.0F); for (Title title : titles) { - width += textRenderer.getWidth(title.text) * 3F + 10; + width += textRenderer.getWidth(title.text) * scale + 10; } - context.getMatrices().pop(); x = (client.getWindow().getScaledWidth() / 2) - width / 2; for (Title title : titles) { context.getMatrices().push(); context.getMatrices().translate(title.lastX, client.getWindow().getScaledHeight() * 0.7F, 0); - context.getMatrices().scale(3.0F, 3.0F, 3.0F); + context.getMatrices().scale(scale, scale, scale); title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x); - x += textRenderer.getWidth(title.text) * 3F + 10; - context.drawText(textRenderer, title.text, 0, 0, title.color, true - ); + x += textRenderer.getWidth(title.text) * scale + 10; + context.drawText(textRenderer, title.text, 0, 0, title.color, true); context.getMatrices().pop(); if (!title.active) { toRemove.add(title); diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 4686c31a..641fd202 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -52,6 +52,9 @@ "text.autoconfig.skyblocker.option.general.hitbox": "Hitboxes", "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Enable 1.8 farmland hitbox", "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Enable 1.8 lever hitbox", + "text.autoconfig.skyblocker.option.general.titleContainer": "Title Container", + "text.autoconfig.skyblocker.option.general.titleContainer.@Tooltip": "Used to display multiple titles at once, Example use: Vampire Slayer", + "text.autoconfig.skyblocker.option.general.titleContainer.titleContainerScale": "Title Container Scale", "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cItem price information on tooltip will renew in max 60 seconds. If not, check latest.log", "skyblocker.itemTooltip.noData": "§cNo Data", -- cgit From a4917d92ab77bc980b68017721adac2091a51f3e Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Fri, 7 Jul 2023 18:00:58 -0400 Subject: WIP Title Container movement + Duration methods Added a WIP configuration screen under /Skyblocker hud titleContainer that allows you to move, change alignment, and reorient the titles inside. Added methods(TitleContainer.addTitleWithDismiss, and RenderHelper.displayInTitleContainerWDismissAndPlaySound) that will display the given title and after a set amount of ticks will disable that title. --- .gitignore | 1 - .../skyblocker/config/SkyblockerConfig.java | 34 ++++++++ .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 5 ++ .../me/xmrvizzy/skyblocker/utils/title/Title.java | 1 + .../skyblocker/utils/title/TitleContainer.java | 81 ++++++++++++++++-- .../utils/title/TitleContainerConfigScreen.java | 95 ++++++++++++++++++++++ 6 files changed, 207 insertions(+), 10 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java diff --git a/.gitignore b/.gitignore index b95c73fb..896dca7f 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,3 @@ bin/ # fabric run/ -libs/ diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index d461dbfe..1aeee35e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -255,6 +255,40 @@ public class SkyblockerConfig implements ConfigData { public static class TitleContainer { @ConfigEntry.BoundedDiscrete(min = 30, max = 140) public float titleContainerScale = 100; + public int x = 540; + public int y = 10; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public Direction direction = Direction.HORIZONTAL; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.DROPDOWN) + public Alignment alignment = Alignment.MIDDLE; + } + + public enum Direction { + HORIZONTAL, + VERTICAL; + + @Override + public String toString() { + return switch (this) { + case HORIZONTAL -> "Horizontal"; + case VERTICAL -> "Vertical"; + }; + } + } + + public enum Alignment { + LEFT, + RIGHT, + MIDDLE; + + @Override + public String toString() { + return switch (this) { + case LEFT -> "Left"; + case RIGHT -> "Right"; + case MIDDLE -> "Middle"; + }; + } } public static class RichPresence { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index e75538f6..4a151129 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -58,6 +58,11 @@ public class RenderHelper { playNotificationSound(); } + public static void displayInTitleContainerWDismissAndPlaySound(Title title, int ticks) { + TitleContainer.addTitleWithDismiss(title, ticks); + playNotificationSound(); + } + private static void playNotificationSound() { if (MinecraftClient.getInstance().player != null) { MinecraftClient.getInstance().player.playSound(SoundEvent.of(new Identifier("entity.experience_orb.pickup")), 100f, 0.1f); diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java index 44a636d7..d1977470 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java @@ -5,6 +5,7 @@ public class Title { public boolean active = true; public int color; public float lastX = 0; + public float lastY = 0; public Title(String text, int color) { this.text = text; diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index 9728e1eb..e888fbda 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -1,27 +1,50 @@ package me.xmrvizzy.skyblocker.utils.title; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHudConfigScreen; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; +import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; import java.util.ArrayList; import java.util.List; public class TitleContainer { + public static final MinecraftClient client = MinecraftClient.getInstance(); public static List<Title> titles = new ArrayList<>(); public static void init() { HudRenderCallback.EVENT.register(TitleContainer::draw); + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") + .then(ClientCommandManager.literal("hud") + .then(ClientCommandManager.literal("titleContainer") + .executes(context -> { + client.send(() -> client.setScreen(new TitleContainerConfigScreen(Text.of("Title Container HUD Config")))); + return 1; + }))))); } public static void addTitle(Title title) { title.active = true; title.lastX = 0; + title.lastY = SkyblockerConfig.get().general.titleContainer.y; titles.add(title); } + public static void addTitleWithDismiss(Title title, int ticks) { + addTitle(title); + SkyblockerMod.getInstance().scheduler.schedule(() -> { + title.active = false; + }, ticks); + } public static void draw(DrawContext context, float tickDelta) { + draw(titles, SkyblockerConfig.get().general.titleContainer.x, SkyblockerConfig.get().general.titleContainer.y, context, tickDelta, false); + } + public static void draw(List<Title> titlesToDraw, int xPos, int yPos, DrawContext context, float tickDelta, boolean example) { var client = MinecraftClient.getInstance(); TextRenderer textRenderer = client.textRenderer; @@ -29,27 +52,67 @@ public class TitleContainer { float scale = 3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F); - float x; + var direction = SkyblockerConfig.get().general.titleContainer.direction; + var alignment = SkyblockerConfig.get().general.titleContainer.alignment; + float x = 0; + float y; float width = 0; - for (Title title : titles) { + for (Title title : titlesToDraw) { width += textRenderer.getWidth(title.text) * scale + 10; } + if (alignment == SkyblockerConfig.Alignment.MIDDLE) { + if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + x = xPos - width / 2; + } else { + if (titlesToDraw.size() > 0) { + if (titlesToDraw.size() > 0) { + x = xPos - (textRenderer.getWidth(titlesToDraw.get(0).text) / 2 * scale); + } + } + } + } else { + if (alignment == SkyblockerConfig.Alignment.LEFT) { + x = xPos; + } else { + if (titlesToDraw.size() > 0) { + x = xPos - (textRenderer.getWidth(titlesToDraw.get(0).text) * scale); + } + } + } + y = yPos; - x = (client.getWindow().getScaledWidth() / 2) - width / 2; - - for (Title title : titles) { + for (Title title : titlesToDraw) { context.getMatrices().push(); - context.getMatrices().translate(title.lastX, client.getWindow().getScaledHeight() * 0.7F, 0); + context.getMatrices().translate(title.lastX, title.lastY, 200); context.getMatrices().scale(scale, scale, scale); title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x); - x += textRenderer.getWidth(title.text) * scale + 10; + title.lastY = MathHelper.lerp(tickDelta * 0.5F, title.lastY, y); + + if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + switch (alignment) { + case LEFT -> x += textRenderer.getWidth(title.text) * scale + 10; + case RIGHT -> x -= (textRenderer.getWidth(title.text) * scale + 10); + case MIDDLE -> x += textRenderer.getWidth(title.text) * scale + 10; + } + y = yPos; + } else { + switch (alignment) { + case LEFT -> x = xPos; + case RIGHT -> x = xPos - (textRenderer.getWidth(title.text) * scale); + case MIDDLE -> x = xPos - ((textRenderer.getWidth(title.text) * scale)); + } + y += textRenderer.fontHeight * scale + 10; + } + context.drawText(textRenderer, title.text, 0, 0, title.color, true); context.getMatrices().pop(); - if (!title.active) { + if (!title.active && !example) { toRemove.add(title); } } - titles.removeAll(toRemove); + if (!example) { + titlesToDraw.removeAll(toRemove); + } } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java new file mode 100644 index 00000000..5a693ddb --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -0,0 +1,95 @@ +package me.xmrvizzy.skyblocker.utils.title; + +import me.shedaniel.autoconfig.AutoConfig; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; +import me.xmrvizzy.skyblocker.utils.RenderUtils; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.input.KeyCodes; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import org.lwjgl.glfw.GLFW; + +import java.awt.*; +import java.awt.event.KeyEvent; +import java.util.List; + +public class TitleContainerConfigScreen extends Screen { + + private final Title example1 = new Title("Test1", Formatting.RED.getColorValue()); + private final Title example2 = new Title("Test23", Formatting.AQUA.getColorValue()); + private final Title example3 = new Title("Testing123456", Formatting.DARK_GREEN.getColorValue()); + private int hudX = SkyblockerConfig.get().general.titleContainer.x; + private int hudY = SkyblockerConfig.get().general.titleContainer.y; + protected TitleContainerConfigScreen(Text title) { + super(title); + } + + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + super.render(context, mouseX, mouseY, delta); + renderBackground(context); + TitleContainer.draw(List.of(example1, example2, example3), hudX, hudY, context, delta, true); + context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); + int width1 = client.textRenderer.getWidth("Press Q/E to change Alignment"); + int width2 = client.textRenderer.getWidth("Press R to change Direction"); + context.drawText(client.textRenderer, "Press Q/E to change Alignment", (width / 2) - width1 / 2, client.textRenderer.fontHeight * 2, Color.GRAY.getRGB(), true); + context.drawText(client.textRenderer, "Press R to change Direction", (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.GRAY.getRGB(), true); + } + + @Override + public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { + if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX - 100, hudY - 20, hudX + 110, hudY + 30) && button == 0) { + hudX = (int) Math.max(Math.min(mouseX, this.width - 100), 110); + hudY = (int) Math.max(Math.min(mouseY, this.height - 30), 0); + } + return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + if (button == 1) { + hudX = this.width / 2; + hudY = (int) (this.height * 0.6F); + } + return super.mouseClicked(mouseX, mouseY, button); + } + + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + if(keyCode == GLFW.GLFW_KEY_Q) { + var current = SkyblockerConfig.get().general.titleContainer.alignment; + SkyblockerConfig.get().general.titleContainer.alignment = switch (current) { + case LEFT -> SkyblockerConfig.Alignment.MIDDLE; + case MIDDLE -> SkyblockerConfig.Alignment.RIGHT; + case RIGHT -> SkyblockerConfig.Alignment.LEFT; + }; + } + if(keyCode == GLFW.GLFW_KEY_E) { + var current = SkyblockerConfig.get().general.titleContainer.alignment; + SkyblockerConfig.get().general.titleContainer.alignment = switch (current) { + case LEFT -> SkyblockerConfig.Alignment.RIGHT; + case MIDDLE -> SkyblockerConfig.Alignment.LEFT; + case RIGHT -> SkyblockerConfig.Alignment.MIDDLE; + }; + } + if(keyCode == GLFW.GLFW_KEY_R) { + var current = SkyblockerConfig.get().general.titleContainer.direction; + SkyblockerConfig.get().general.titleContainer.direction = switch (current) { + case HORIZONTAL -> SkyblockerConfig.Direction.VERTICAL; + case VERTICAL -> SkyblockerConfig.Direction.HORIZONTAL; + }; + } + return super.keyPressed(keyCode, scanCode, modifiers); + } + + @Override + public void close() { + SkyblockerConfig.get().general.titleContainer.x = hudX; + SkyblockerConfig.get().general.titleContainer.y = hudY; + AutoConfig.getConfigHolder(SkyblockerConfig.class).save(); + super.close(); + } +} -- cgit From 558bb3c1b3a52cc4a8ec3610fa88b9552a063433 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Fri, 7 Jul 2023 21:31:19 -0400 Subject: Proper Movement Menu --- .../skyblocker/utils/title/TitleContainer.java | 51 ++++---- .../utils/title/TitleContainerConfigScreen.java | 141 +++++++++++++++++++-- 2 files changed, 159 insertions(+), 33 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index e888fbda..14db8d6e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -60,25 +60,18 @@ public class TitleContainer { for (Title title : titlesToDraw) { width += textRenderer.getWidth(title.text) * scale + 10; } - if (alignment == SkyblockerConfig.Alignment.MIDDLE) { - if(direction == SkyblockerConfig.Direction.HORIZONTAL) { - x = xPos - width / 2; - } else { - if (titlesToDraw.size() > 0) { - if (titlesToDraw.size() > 0) { - x = xPos - (textRenderer.getWidth(titlesToDraw.get(0).text) / 2 * scale); - } - } + if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + if (alignment == SkyblockerConfig.Alignment.MIDDLE) { + x = xPos - (width / 2); } } else { - if (alignment == SkyblockerConfig.Alignment.LEFT) { + if (alignment == SkyblockerConfig.Alignment.MIDDLE) { x = xPos; - } else { - if (titlesToDraw.size() > 0) { - x = xPos - (textRenderer.getWidth(titlesToDraw.get(0).text) * scale); - } } } + if(alignment == SkyblockerConfig.Alignment.LEFT || alignment == SkyblockerConfig.Alignment.RIGHT) { + x = xPos; + } y = yPos; for (Title title : titlesToDraw) { @@ -86,22 +79,30 @@ public class TitleContainer { context.getMatrices().translate(title.lastX, title.lastY, 200); context.getMatrices().scale(scale, scale, scale); - title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x); + float xToUse = 0; + if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + xToUse = alignment == SkyblockerConfig.Alignment.RIGHT ? + x - (textRenderer.getWidth(title.text) * scale) : + x; + } else { + xToUse = alignment == SkyblockerConfig.Alignment.MIDDLE ? + x - (textRenderer.getWidth(title.text) * scale) / 2 : + alignment == SkyblockerConfig.Alignment.RIGHT ? + x - (textRenderer.getWidth(title.text) * scale) : + x; + } + title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, xToUse); title.lastY = MathHelper.lerp(tickDelta * 0.5F, title.lastY, y); if(direction == SkyblockerConfig.Direction.HORIZONTAL) { - switch (alignment) { - case LEFT -> x += textRenderer.getWidth(title.text) * scale + 10; - case RIGHT -> x -= (textRenderer.getWidth(title.text) * scale + 10); - case MIDDLE -> x += textRenderer.getWidth(title.text) * scale + 10; + if (alignment == SkyblockerConfig.Alignment.MIDDLE || alignment == SkyblockerConfig.Alignment.LEFT) { + x += textRenderer.getWidth(title.text) * scale + 10; } - y = yPos; - } else { - switch (alignment) { - case LEFT -> x = xPos; - case RIGHT -> x = xPos - (textRenderer.getWidth(title.text) * scale); - case MIDDLE -> x = xPos - ((textRenderer.getWidth(title.text) * scale)); + + if (alignment == SkyblockerConfig.Alignment.RIGHT) { + x -= textRenderer.getWidth(title.text) * scale + 10; } + } else { y += textRenderer.fontHeight * scale + 10; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index 5a693ddb..41734dcb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -20,7 +20,7 @@ public class TitleContainerConfigScreen extends Screen { private final Title example1 = new Title("Test1", Formatting.RED.getColorValue()); private final Title example2 = new Title("Test23", Formatting.AQUA.getColorValue()); - private final Title example3 = new Title("Testing123456", Formatting.DARK_GREEN.getColorValue()); + private final Title example3 = new Title("Testing1234", Formatting.DARK_GREEN.getColorValue()); private int hudX = SkyblockerConfig.get().general.titleContainer.x; private int hudY = SkyblockerConfig.get().general.titleContainer.y; protected TitleContainerConfigScreen(Text title) { @@ -33,17 +33,142 @@ public class TitleContainerConfigScreen extends Screen { renderBackground(context); TitleContainer.draw(List.of(example1, example2, example3), hudX, hudY, context, delta, true); context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); - int width1 = client.textRenderer.getWidth("Press Q/E to change Alignment"); - int width2 = client.textRenderer.getWidth("Press R to change Direction"); - context.drawText(client.textRenderer, "Press Q/E to change Alignment", (width / 2) - width1 / 2, client.textRenderer.fontHeight * 2, Color.GRAY.getRGB(), true); - context.drawText(client.textRenderer, "Press R to change Direction", (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.GRAY.getRGB(), true); + var direction = SkyblockerConfig.get().general.titleContainer.direction; + var alignment = SkyblockerConfig.get().general.titleContainer.alignment; + int width1 = client.textRenderer.getWidth("Press Q/E to change Alignment: " + alignment.toString()); + int width2 = client.textRenderer.getWidth("Press R to change Direction: " + direction.toString()); + context.drawText(client.textRenderer, "Press Q/E to change Alignment: " + alignment.toString(), (width / 2) - width1 / 2, client.textRenderer.fontHeight * 2, Color.GRAY.getRGB(), true); + context.drawText(client.textRenderer, "Press R to change Direction: " + direction.toString(), (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.GRAY.getRGB(), true); + + int midWidth = getSelectionWidth() / 2; + int midHeight = getSelectionHeight() / 2; + int x1 = 0; + int x2 = 0; + int y1 = 0; + int y2 = 0; + if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + switch (alignment) { + case RIGHT: + x1 = hudX - midWidth * 2; + x2 = hudX; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case MIDDLE: + x1 = hudX - midWidth; + x2 = hudX + midWidth; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case LEFT: + x1 = hudX; + x2 = hudX + midWidth * 2; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + } + } else { + switch (alignment) { + case RIGHT: + x1 = hudX - midWidth * 2; + x2 = hudX; + y1 = hudY; + y2 = hudY + midHeight; + break; + case MIDDLE: + x1 = hudX - midWidth; + x2 = hudX + midWidth; + y1 = hudY; + y2 = hudY + midHeight; + break; + case LEFT: + x1 = hudX; + x2 = hudX + midWidth * 2; + y1 = hudY; + y2 = hudY + midHeight; + break; + } + } + context.drawHorizontalLine(x1, x2, y1, Color.RED.getRGB()); + context.drawHorizontalLine(x1, x2, y2, Color.RED.getRGB()); + context.drawVerticalLine(x1, y1, y2, Color.RED.getRGB()); + context.drawVerticalLine(x2, y1, y2, Color.RED.getRGB()); + } + + public int getSelectionHeight() + { + int scale = (int) (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); + return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? + textRenderer.fontHeight * scale : + (textRenderer.fontHeight + 10) * 3 * scale; + } + + public int getSelectionWidth() + { + int scale = (int) (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); + return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? + (textRenderer.getWidth("Test1") + 10 + textRenderer.getWidth("Test23") + 10 + textRenderer.getWidth("Testing1234")) * scale : + textRenderer.getWidth("Testing1234") * scale; } @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX - 100, hudY - 20, hudX + 110, hudY + 30) && button == 0) { - hudX = (int) Math.max(Math.min(mouseX, this.width - 100), 110); - hudY = (int) Math.max(Math.min(mouseY, this.height - 30), 0); + int midWidth = getSelectionWidth() / 2; + int midHeight = getSelectionHeight() / 2; + var direction = SkyblockerConfig.get().general.titleContainer.direction; + var alignment = SkyblockerConfig.get().general.titleContainer.alignment; + int x1 = 0; + int x2 = 0; + int y1 = 0; + int y2 = 0; + if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + switch (alignment) { + case RIGHT: + x1 = hudX - midWidth * 2; + x2 = hudX; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case MIDDLE: + x1 = hudX - midWidth; + x2 = hudX + midWidth; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case LEFT: + x1 = hudX; + x2 = hudX + midWidth * 2; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + } + } else { + switch (alignment) { + case RIGHT: + x1 = hudX - midWidth * 2; + x2 = hudX; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case MIDDLE: + x1 = hudX - midWidth; + x2 = hudX + midWidth; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + case LEFT: + x1 = hudX; + x2 = hudX + midWidth * 2; + y1 = hudY + 0; + y2 = hudY + midHeight * 2; + break; + } + } + if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, x1, y1, x2, y2) && button == 0) { + hudX = alignment == SkyblockerConfig.Alignment.RIGHT ? + (int) mouseX + midWidth : + (int) mouseX - (midWidth / 2); + hudY = (int) mouseY - (midHeight); } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); } -- cgit From b6cc175f8782ee94f5aeaef877466f9c81564cf6 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Fri, 7 Jul 2023 21:48:32 -0400 Subject: Remove Duplicate Code --- .../utils/title/TitleContainerConfigScreen.java | 89 +++++++++------------- 1 file changed, 37 insertions(+), 52 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index 41734dcb..cf59ff66 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -10,6 +10,8 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.input.KeyCodes; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import net.minecraft.util.math.Box; +import org.joml.Vector4i; import org.lwjgl.glfw.GLFW; import java.awt.*; @@ -40,6 +42,28 @@ public class TitleContainerConfigScreen extends Screen { context.drawText(client.textRenderer, "Press Q/E to change Alignment: " + alignment.toString(), (width / 2) - width1 / 2, client.textRenderer.fontHeight * 2, Color.GRAY.getRGB(), true); context.drawText(client.textRenderer, "Press R to change Direction: " + direction.toString(), (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.GRAY.getRGB(), true); + int x1; + int x2; + int y1; + int y2; + + var vec = getSelectionBounding(); + x1 = vec.x; + x2 = vec.y; + y1 = vec.z; + y2 = vec.w; + + context.drawHorizontalLine(x1, x2, y1, Color.RED.getRGB()); + context.drawHorizontalLine(x1, x2, y2, Color.RED.getRGB()); + context.drawVerticalLine(x1, y1, y2, Color.RED.getRGB()); + context.drawVerticalLine(x2, y1, y2, Color.RED.getRGB()); + } + + public Vector4i getSelectionBounding() + { + var direction = SkyblockerConfig.get().general.titleContainer.direction; + var alignment = SkyblockerConfig.get().general.titleContainer.alignment; + int midWidth = getSelectionWidth() / 2; int midHeight = getSelectionHeight() / 2; int x1 = 0; @@ -89,10 +113,7 @@ public class TitleContainerConfigScreen extends Screen { break; } } - context.drawHorizontalLine(x1, x2, y1, Color.RED.getRGB()); - context.drawHorizontalLine(x1, x2, y2, Color.RED.getRGB()); - context.drawVerticalLine(x1, y1, y2, Color.RED.getRGB()); - context.drawVerticalLine(x2, y1, y2, Color.RED.getRGB()); + return new Vector4i(x1, x2, y1, y2); } public int getSelectionHeight() @@ -115,55 +136,19 @@ public class TitleContainerConfigScreen extends Screen { public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { int midWidth = getSelectionWidth() / 2; int midHeight = getSelectionHeight() / 2; - var direction = SkyblockerConfig.get().general.titleContainer.direction; var alignment = SkyblockerConfig.get().general.titleContainer.alignment; - int x1 = 0; - int x2 = 0; - int y1 = 0; - int y2 = 0; - if(direction == SkyblockerConfig.Direction.HORIZONTAL) { - switch (alignment) { - case RIGHT: - x1 = hudX - midWidth * 2; - x2 = hudX; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - case MIDDLE: - x1 = hudX - midWidth; - x2 = hudX + midWidth; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - case LEFT: - x1 = hudX; - x2 = hudX + midWidth * 2; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - } - } else { - switch (alignment) { - case RIGHT: - x1 = hudX - midWidth * 2; - x2 = hudX; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - case MIDDLE: - x1 = hudX - midWidth; - x2 = hudX + midWidth; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - case LEFT: - x1 = hudX; - x2 = hudX + midWidth * 2; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - } - } + + int x1; + int x2; + int y1; + int y2; + + var vec = getSelectionBounding(); + x1 = vec.x; + x2 = vec.y; + y1 = vec.z; + y2 = vec.w; + if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, x1, y1, x2, y2) && button == 0) { hudX = alignment == SkyblockerConfig.Alignment.RIGHT ? (int) mouseX + midWidth : -- cgit From aed3973ad0cc33b3d3128695e6f660dc304bc9d6 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Fri, 7 Jul 2023 23:02:07 -0400 Subject: Simplify Code + Fix Vertical BB --- .../utils/title/TitleContainerConfigScreen.java | 61 ++++++---------------- .../resources/assets/skyblocker/lang/en_us.json | 4 ++ 2 files changed, 21 insertions(+), 44 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index cf59ff66..a035f862 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -39,8 +39,8 @@ public class TitleContainerConfigScreen extends Screen { var alignment = SkyblockerConfig.get().general.titleContainer.alignment; int width1 = client.textRenderer.getWidth("Press Q/E to change Alignment: " + alignment.toString()); int width2 = client.textRenderer.getWidth("Press R to change Direction: " + direction.toString()); - context.drawText(client.textRenderer, "Press Q/E to change Alignment: " + alignment.toString(), (width / 2) - width1 / 2, client.textRenderer.fontHeight * 2, Color.GRAY.getRGB(), true); - context.drawText(client.textRenderer, "Press R to change Direction: " + direction.toString(), (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.GRAY.getRGB(), true); + context.drawText(client.textRenderer, "Press Q/E to change Alignment: " + alignment.toString(), (width / 2) - width1 / 2, client.textRenderer.fontHeight * 2, Color.WHITE.getRGB(), true); + context.drawText(client.textRenderer, "Press R to change Direction: " + direction.toString(), (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.WHITE.getRGB(), true); int x1; int x2; @@ -70,48 +70,21 @@ public class TitleContainerConfigScreen extends Screen { int x2 = 0; int y1 = 0; int y2 = 0; - if(direction == SkyblockerConfig.Direction.HORIZONTAL) { - switch (alignment) { - case RIGHT: - x1 = hudX - midWidth * 2; - x2 = hudX; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - case MIDDLE: - x1 = hudX - midWidth; - x2 = hudX + midWidth; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - case LEFT: - x1 = hudX; - x2 = hudX + midWidth * 2; - y1 = hudY + 0; - y2 = hudY + midHeight * 2; - break; - } - } else { - switch (alignment) { - case RIGHT: - x1 = hudX - midWidth * 2; - x2 = hudX; - y1 = hudY; - y2 = hudY + midHeight; - break; - case MIDDLE: - x1 = hudX - midWidth; - x2 = hudX + midWidth; - y1 = hudY; - y2 = hudY + midHeight; - break; - case LEFT: - x1 = hudX; - x2 = hudX + midWidth * 2; - y1 = hudY; - y2 = hudY + midHeight; - break; - } + y1 = hudY; + y2 = hudY + midHeight * 2; + switch (alignment) { + case RIGHT: + x1 = hudX - midWidth * 2; + x2 = hudX; + break; + case MIDDLE: + x1 = hudX - midWidth; + x2 = hudX + midWidth; + break; + case LEFT: + x1 = hudX; + x2 = hudX + midWidth * 2; + break; } return new Vector4i(x1, x2, y1, y2); } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 641fd202..dc3a6cf8 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -55,6 +55,10 @@ "text.autoconfig.skyblocker.option.general.titleContainer": "Title Container", "text.autoconfig.skyblocker.option.general.titleContainer.@Tooltip": "Used to display multiple titles at once, Example use: Vampire Slayer", "text.autoconfig.skyblocker.option.general.titleContainer.titleContainerScale": "Title Container Scale", + "text.autoconfig.skyblocker.option.general.titleContainer.x": "Title Container X Position", + "text.autoconfig.skyblocker.option.general.titleContainer.y": "Title Container Y Position", + "text.autoconfig.skyblocker.option.general.titleContainer.direction": "Title Container Orientation", + "text.autoconfig.skyblocker.option.general.titleContainer.alignment": "Title Container Horizontal Alignment", "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cItem price information on tooltip will renew in max 60 seconds. If not, check latest.log", "skyblocker.itemTooltip.noData": "§cNo Data", -- cgit From 796177d64aac6c64949973a5604aedc0d1f2651f Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 8 Jul 2023 17:20:55 +0800 Subject: Refactor Title Container --- .../skyblocker/config/SkyblockerConfig.java | 10 +- .../skyblocker/skyblock/FishingHelper.java | 4 +- .../skyblocker/skyblock/rift/EffigyWaypoints.java | 4 +- .../skyblock/rift/HealingMelonIndicator.java | 19 +-- .../skyblocker/skyblock/rift/ManiaIndicator.java | 27 ++--- .../skyblock/rift/MirrorverseWaypoints.java | 4 +- .../skyblocker/skyblock/rift/StakeIndicator.java | 19 ++- .../skyblock/rift/TwinClawsIndicator.java | 25 ++-- .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 25 +++- .../me/xmrvizzy/skyblocker/utils/Scheduler.java | 21 ++++ .../me/xmrvizzy/skyblocker/utils/title/Title.java | 31 +++-- .../skyblocker/utils/title/TitleContainer.java | 128 +++++++++++++-------- .../utils/title/TitleContainerConfigScreen.java | 110 +++++++----------- 13 files changed, 237 insertions(+), 190 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 1aeee35e..7da9979a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.config; +import com.mojang.brigadier.Command; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import me.shedaniel.autoconfig.AutoConfig; import me.shedaniel.autoconfig.ConfigData; @@ -10,8 +11,6 @@ import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.resource.language.I18n; import java.util.ArrayList; @@ -500,11 +499,8 @@ public class SkyblockerConfig implements ConfigData { private static LiteralArgumentBuilder<FabricClientCommandSource> optionsLiteral(String name) { return literal(name).executes(context -> { // Don't immediately open the next screen as it will be closed by ChatScreen right after this command is executed - SkyblockerMod.getInstance().scheduler.schedule(() -> { - Screen a = AutoConfig.getConfigScreen(SkyblockerConfig.class, null).get(); - MinecraftClient.getInstance().setScreen(a); - }, 0); - return 1; + SkyblockerMod.getInstance().scheduler.queueOpenScreen(AutoConfig.getConfigScreen(SkyblockerConfig.class, null)); + return Command.SINGLE_SUCCESS; }); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java index 822b89d9..8dee3fcb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java @@ -2,6 +2,7 @@ package me.xmrvizzy.skyblocker.skyblock; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.title.Title; import net.fabricmc.fabric.api.event.player.UseItemCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; @@ -15,6 +16,7 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; public class FishingHelper { + private static final Title title = new Title("skyblocker.fishing.reelNow", Formatting.GREEN); private static long startTime; private static Vec3d normalYawVector; @@ -49,7 +51,7 @@ public class FishingHelper { if (player != null && player.fishHook != null) { Vec3d soundToFishHook = player.fishHook.getPos().subtract(packet.getX(), 0, packet.getZ()); if (Math.abs(normalYawVector.x * soundToFishHook.z - normalYawVector.z * soundToFishHook.x) < 0.2D && Math.abs(normalYawVector.dotProduct(soundToFishHook)) < 4D && player.getPos().squaredDistanceTo(packet.getX(), packet.getY(), packet.getZ()) > 1D) { - RenderHelper.displayTitleAndPlaySound(10, 5, "skyblocker.fishing.reelNow", Formatting.GREEN); + RenderHelper.displayInTitleContainerAndPlaySound(title, 10); reset(); } } else { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java index 0d44900a..7376c896 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java @@ -32,7 +32,7 @@ public class EffigyWaypoints { ); private static final List<BlockPos> unBrokenEffigies = new ArrayList<>(); - public static void updateEffigies() { + protected static void updateEffigies() { if (!SkyblockerConfig.get().slayer.vampireSlayer.enableEffigyWaypoints || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) return; unBrokenEffigies.clear(); @@ -61,7 +61,7 @@ public class EffigyWaypoints { } } - public static void render(WorldRenderContext context) { + protected static void render(WorldRenderContext context) { if (SkyblockerConfig.get().slayer.vampireSlayer.enableEffigyWaypoints && Utils.getLocation().contains("Stillgore Château")) { for (BlockPos effigy : unBrokenEffigies) { float[] colorComponents = DyeColor.RED.getColorComponents(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java index d1657d67..fed34796 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -7,28 +7,21 @@ import me.xmrvizzy.skyblocker.utils.title.Title; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.resource.language.I18n; import net.minecraft.util.Formatting; public class HealingMelonIndicator { - private static Title title = null; - public static void updateHealth(MinecraftClient client) { - if(title == null) - title = new Title(I18n.translate("skyblocker.rift.healNow"), Formatting.DARK_RED.getColorValue()); + private static final Title title = new Title("skyblocker.rift.healNow", Formatting.DARK_RED); + public static void updateHealth(MinecraftClient client) { if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) { - title.active = false; + TitleContainer.removeTitle(title); return; } - title.active = true; ClientPlayerEntity player = client.player; if (player != null && player.getHealth() <= SkyblockerConfig.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F) { - title.active = true; - if(!TitleContainer.titles.contains(title)) - RenderHelper.displayInTitleContainerAndPlaySound(title); - } - else { - title.active = false; + RenderHelper.displayInTitleContainerAndPlaySound(title); + } else { + TitleContainer.removeTitle(title); } } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java index 7d5a1cb4..4e873eed 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java @@ -8,18 +8,16 @@ import me.xmrvizzy.skyblocker.utils.title.Title; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; import net.minecraft.util.Formatting; +import net.minecraft.util.math.BlockPos; public class ManiaIndicator { - private static Title title = null; - public static void updateMania() { - if(title == null) - title = new Title("b", Formatting.RED.getColorValue()); + private static final Title title = new Title("skyblocker.rift.mania", Formatting.RED); + protected static void updateMania() { if (!SkyblockerConfig.get().slayer.vampireSlayer.enableManiaIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) { - title.active = false; + TitleContainer.removeTitle(title); return; } @@ -30,17 +28,14 @@ public class ManiaIndicator { for (Entity entity : SlayerUtils.getEntityArmorStands(slayerEntity)) { if (entity.getDisplayName().toString().contains("MANIA")) { anyMania = true; - title.active = true; - var pos = MinecraftClient.getInstance().player.getBlockPos().down(); - var isGreen = MinecraftClient.getInstance().world.getBlockState(pos).getBlock() == Blocks.GREEN_TERRACOTTA; - title.color = isGreen ? Formatting.GREEN.getColorValue() : Formatting.RED.getColorValue(); - if(!TitleContainer.titles.contains(title)) { - title.text = I18n.translate("skyblocker.rift.mania"); - RenderHelper.displayInTitleContainerAndPlaySound(title); - } + BlockPos pos = MinecraftClient.getInstance().player.getBlockPos().down(); + boolean isGreen = MinecraftClient.getInstance().world.getBlockState(pos).getBlock() == Blocks.GREEN_TERRACOTTA; + title.setFormatting(isGreen ? Formatting.GREEN : Formatting.RED); + RenderHelper.displayInTitleContainerAndPlaySound(title); } } - if(!anyMania) - title.active = false; + if (!anyMania) { + TitleContainer.removeTitle(title); + } } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java index 276ec551..32551179 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java @@ -34,7 +34,7 @@ public class MirrorverseWaypoints { /** * Loads the waypoint locations into memory */ - public static void loadWaypoints() { + private static void loadWaypoints() { try (BufferedReader reader = CLIENT.getResourceManager().openAsReader(WAYPOINTS_JSON)) { JsonObject file = JsonParser.parseReader(reader).getAsJsonObject(); JsonArray sections = file.get("sections").getAsJsonArray(); @@ -69,7 +69,7 @@ public class MirrorverseWaypoints { } } - public static void render(WorldRenderContext wrc) { + protected static void render(WorldRenderContext wrc) { //I would also check for the mirrorverse location but the scoreboard stuff is not performant at all... if (Utils.isInTheRift() && SkyblockerConfig.get().locations.rift.mirrorverseWaypoints) { for (BlockPos pos : LAVA_PATH_WAYPOINTS) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java index d946df6d..90fc436d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java @@ -6,28 +6,23 @@ import me.xmrvizzy.skyblocker.utils.SlayerUtils; import me.xmrvizzy.skyblocker.utils.Utils; import me.xmrvizzy.skyblocker.utils.title.Title; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; -import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class StakeIndicator { - private static Title title = null; - public static void updateStake() { - if (title == null) - title = new Title("b", Formatting.RED.getColorValue()); + private static final Title title = new Title("skyblocker.rift.stakeNow",Formatting.RED); + protected static void updateStake() { if (!SkyblockerConfig.get().slayer.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château") || !SlayerUtils.isInSlayer()) { - title.active = false; + TitleContainer.removeTitle(title); return; } Entity slayerEntity = SlayerUtils.getSlayerEntity(); if (slayerEntity != null && slayerEntity.getDisplayName().toString().contains("҉")) { - title.active = true; - title.text = I18n.translate("skyblocker.rift.stakeNow"); - if(!TitleContainer.titles.contains(title)) - RenderHelper.displayInTitleContainerAndPlaySound(title); + RenderHelper.displayInTitleContainerAndPlaySound(title); + } else { + TitleContainer.removeTitle(title); } - else - title.active = false; } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java index 706aa95e..f36b97df 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java @@ -7,19 +7,17 @@ import me.xmrvizzy.skyblocker.utils.SlayerUtils; import me.xmrvizzy.skyblocker.utils.Utils; import me.xmrvizzy.skyblocker.utils.title.Title; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; -import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.Entity; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class TwinClawsIndicator { - private static Title title = null; - public static boolean scheduling = false; - public static void updateIce() { - if(title == null) - title = new Title("b", Formatting.AQUA.getColorValue()); + private static final Title title = new Title("skyblocker.rift.iceNow",Formatting.AQUA); + private static boolean scheduled = false; + protected static void updateIce() { if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) { - title.active = false; + TitleContainer.removeTitle(title); return; } @@ -30,18 +28,17 @@ public class TwinClawsIndicator { for (Entity entity : SlayerUtils.getEntityArmorStands(slayerEntity)) { if (entity.getDisplayName().toString().contains("TWINCLAWS")) { anyClaws = true; - title.active = true; - if(!TitleContainer.titles.contains(title) && !scheduling) { - scheduling = true; + if (!TitleContainer.containsTitle(title) && !scheduled) { + scheduled = true; SkyblockerMod.getInstance().scheduler.schedule(() -> { - title.text = I18n.translate("skyblocker.rift.iceNow"); RenderHelper.displayInTitleContainerAndPlaySound(title); - scheduling = false; + scheduled = false; }, SkyblockerConfig.get().slayer.vampireSlayer.holyIceIndicatorTickDelay); } } } - if(!anyClaws) - title.active = false; + if (!anyClaws) { + TitleContainer.removeTitle(title); + } } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index 4a151129..6fa93735 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -53,14 +53,29 @@ public class RenderHelper { playNotificationSound(); } + /** + * Adds the title to {@link TitleContainer} and {@link #playNotificationSound() plays the notification sound} if the title is not in the {@link TitleContainer} already. + * No checking needs to be done on whether the title is in the {@link TitleContainer} already by the caller. + * + * @param title the title + */ public static void displayInTitleContainerAndPlaySound(Title title) { - TitleContainer.addTitle(title); - playNotificationSound(); + if (TitleContainer.addTitle(title)) { + playNotificationSound(); + } } - public static void displayInTitleContainerWDismissAndPlaySound(Title title, int ticks) { - TitleContainer.addTitleWithDismiss(title, ticks); - playNotificationSound(); + /** + * Adds the title to {@link TitleContainer} for a set number of ticks and {@link #playNotificationSound() plays the notification sound} if the title is not in the {@link TitleContainer} already. + * No checking needs to be done on whether the title is in the {@link TitleContainer} already by the caller. + * + * @param title the title + * @param ticks the number of ticks the title will remain + */ + public static void displayInTitleContainerAndPlaySound(Title title, int ticks) { + if (TitleContainer.addTitle(title, ticks)) { + playNotificationSound(); + } } private static void playNotificationSound() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 02162140..7b19e284 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -1,10 +1,13 @@ package me.xmrvizzy.skyblocker.utils; import me.xmrvizzy.skyblocker.SkyblockerMod; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.PriorityQueue; +import java.util.function.Supplier; /** * A scheduler for running tasks at a later time. Tasks will be run synchronously on the main client thread. Use the instance stored in {@link SkyblockerMod#scheduler}. Do not instantiate this class. @@ -50,6 +53,24 @@ public class Scheduler { } } + /** + * Schedules a screen to open in the next tick. Used in commands to avoid screen immediately closing after the command is executed. + * + * @param screenSupplier the supplier of the screen to open + */ + public void queueOpenScreen(Supplier<Screen> screenSupplier) { + queueOpenScreen(screenSupplier.get()); + } + + /** + * Schedules a screen to open in the next tick. Used in commands to avoid screen immediately closing after the command is executed. + * + * @param screen the supplier of the screen to open + */ + public void queueOpenScreen(Screen screen) { + MinecraftClient.getInstance().send(() -> MinecraftClient.getInstance().setScreen(screen)); + } + public void tick() { currentTick += 1; ScheduledTask task; diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java index d1977470..ac06eb36 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java @@ -1,14 +1,31 @@ package me.xmrvizzy.skyblocker.utils.title; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + public class Title { - public String text = ""; - public boolean active = true; - public int color; - public float lastX = 0; - public float lastY = 0; + private MutableText text; + protected float lastX = 0; + protected float lastY = 0; + + public MutableText getText() { + return text; + } + + public void setText(MutableText text) { + this.text = text; + } + + public void setFormatting(Formatting formatting) { + this.text.formatted(formatting); + } + + public Title(String textKey, Formatting formatting) { + this(Text.translatable(textKey).formatted(formatting)); + } - public Title(String text, int color) { + public Title(MutableText text) { this.text = text; - this.color = color; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index 14db8d6e..c4908a73 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -1,8 +1,8 @@ package me.xmrvizzy.skyblocker.utils.title; +import com.mojang.brigadier.Command; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHudConfigScreen; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; @@ -12,55 +12,99 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; -import java.util.ArrayList; -import java.util.List; +import java.util.LinkedHashSet; +import java.util.Set; public class TitleContainer { - public static final MinecraftClient client = MinecraftClient.getInstance(); - public static List<Title> titles = new ArrayList<>(); + /** + * The set of titles which will be rendered. + * + * @see #containsTitle(Title) + * @see #addTitle(Title) + * @see #addTitle(Title, int) + * @see #removeTitle(Title) + */ + private static final Set<Title> titles = new LinkedHashSet<>(); public static void init() { - HudRenderCallback.EVENT.register(TitleContainer::draw); + HudRenderCallback.EVENT.register(TitleContainer::render); ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") .then(ClientCommandManager.literal("hud") .then(ClientCommandManager.literal("titleContainer") .executes(context -> { - client.send(() -> client.setScreen(new TitleContainerConfigScreen(Text.of("Title Container HUD Config")))); - return 1; + SkyblockerMod.getInstance().scheduler.queueOpenScreen(new TitleContainerConfigScreen(Text.of("Title Container HUD Config"))); + return Command.SINGLE_SUCCESS; }))))); } - public static void addTitle(Title title) { - title.active = true; - title.lastX = 0; - title.lastY = SkyblockerConfig.get().general.titleContainer.y; - titles.add(title); + + /** + * Returns {@code true} if the title is currently shown. + * + * @param title the title to check + * @return whether the title in currently shown + */ + public static boolean containsTitle(Title title) { + return titles.contains(title); } - public static void addTitleWithDismiss(Title title, int ticks) { - addTitle(title); - SkyblockerMod.getInstance().scheduler.schedule(() -> { - title.active = false; - }, ticks); + + /** + * Adds a title to be shown + * + * @param title the title to be shown + * @return whether the title is already currently being shown + */ + public static boolean addTitle(Title title) { + if (titles.add(title)) { + title.lastX = 0; + title.lastY = SkyblockerConfig.get().general.titleContainer.y; + return true; + } + return false; } - public static void draw(DrawContext context, float tickDelta) { - draw(titles, SkyblockerConfig.get().general.titleContainer.x, SkyblockerConfig.get().general.titleContainer.y, context, tickDelta, false); + + /** + * Adds a title to be shown for a set number of ticks + * + * @param title the title to be shown + * @param ticks the number of ticks to show the title + * @return whether the title is already currently being shown + */ + public static boolean addTitle(Title title, int ticks) { + if (addTitle(title)) { + SkyblockerMod.getInstance().scheduler.schedule(() -> TitleContainer.removeTitle(title), ticks); + return true; + } + return false; + } + + /** + * Stops showing a title + * + * @param title the title to stop showing + */ + public static void removeTitle(Title title) { + titles.remove(title); } - public static void draw(List<Title> titlesToDraw, int xPos, int yPos, DrawContext context, float tickDelta, boolean example) { + + private static void render(DrawContext context, float tickDelta) { + render(context, titles, SkyblockerConfig.get().general.titleContainer.x, SkyblockerConfig.get().general.titleContainer.y, tickDelta); + } + + protected static void render(DrawContext context, Set<Title> titles, int xPos, int yPos, float tickDelta) { var client = MinecraftClient.getInstance(); TextRenderer textRenderer = client.textRenderer; - List<Title> toRemove = new ArrayList<>(); - float scale = 3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F); - var direction = SkyblockerConfig.get().general.titleContainer.direction; - var alignment = SkyblockerConfig.get().general.titleContainer.alignment; + SkyblockerConfig.Direction direction = SkyblockerConfig.get().general.titleContainer.direction; + SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; float x = 0; float y; float width = 0; - for (Title title : titlesToDraw) { - width += textRenderer.getWidth(title.text) * scale + 10; + for (Title title : titles) { + width += textRenderer.getWidth(title.getText()) * scale + 10; } - if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + if (direction == SkyblockerConfig.Direction.HORIZONTAL) { if (alignment == SkyblockerConfig.Alignment.MIDDLE) { x = xPos - (width / 2); } @@ -69,51 +113,45 @@ public class TitleContainer { x = xPos; } } - if(alignment == SkyblockerConfig.Alignment.LEFT || alignment == SkyblockerConfig.Alignment.RIGHT) { + if (alignment == SkyblockerConfig.Alignment.LEFT || alignment == SkyblockerConfig.Alignment.RIGHT) { x = xPos; } y = yPos; - for (Title title : titlesToDraw) { + for (Title title : titles) { context.getMatrices().push(); context.getMatrices().translate(title.lastX, title.lastY, 200); context.getMatrices().scale(scale, scale, scale); - float xToUse = 0; - if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + float xToUse; + if (direction == SkyblockerConfig.Direction.HORIZONTAL) { xToUse = alignment == SkyblockerConfig.Alignment.RIGHT ? - x - (textRenderer.getWidth(title.text) * scale) : + x - (textRenderer.getWidth(title.getText()) * scale) : x; } else { xToUse = alignment == SkyblockerConfig.Alignment.MIDDLE ? - x - (textRenderer.getWidth(title.text) * scale) / 2 : + x - (textRenderer.getWidth(title.getText()) * scale) / 2 : alignment == SkyblockerConfig.Alignment.RIGHT ? - x - (textRenderer.getWidth(title.text) * scale) : + x - (textRenderer.getWidth(title.getText()) * scale) : x; } title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, xToUse); title.lastY = MathHelper.lerp(tickDelta * 0.5F, title.lastY, y); - if(direction == SkyblockerConfig.Direction.HORIZONTAL) { + if (direction == SkyblockerConfig.Direction.HORIZONTAL) { if (alignment == SkyblockerConfig.Alignment.MIDDLE || alignment == SkyblockerConfig.Alignment.LEFT) { - x += textRenderer.getWidth(title.text) * scale + 10; + x += textRenderer.getWidth(title.getText()) * scale + 10; } if (alignment == SkyblockerConfig.Alignment.RIGHT) { - x -= textRenderer.getWidth(title.text) * scale + 10; + x -= textRenderer.getWidth(title.getText()) * scale + 10; } } else { y += textRenderer.fontHeight * scale + 10; } - context.drawText(textRenderer, title.text, 0, 0, title.color, true); + context.drawTextWithShadow(textRenderer, title.getText(), 0, 0, 0xFFFFFF); context.getMatrices().pop(); - if (!title.active && !example) { - toRemove.add(title); - } - } - if (!example) { - titlesToDraw.removeAll(toRemove); } } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index a035f862..b4f3093f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -2,29 +2,26 @@ package me.xmrvizzy.skyblocker.utils.title; import me.shedaniel.autoconfig.AutoConfig; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; import me.xmrvizzy.skyblocker.utils.RenderUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.input.KeyCodes; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import net.minecraft.util.math.Box; -import org.joml.Vector4i; +import net.minecraft.util.Pair; +import org.joml.Vector2i; import org.lwjgl.glfw.GLFW; import java.awt.*; -import java.awt.event.KeyEvent; -import java.util.List; +import java.util.Set; public class TitleContainerConfigScreen extends Screen { - - private final Title example1 = new Title("Test1", Formatting.RED.getColorValue()); - private final Title example2 = new Title("Test23", Formatting.AQUA.getColorValue()); - private final Title example3 = new Title("Testing1234", Formatting.DARK_GREEN.getColorValue()); + private final Title example1 = new Title(Text.literal("Test1").formatted(Formatting.RED)); + private final Title example2 = new Title(Text.literal("Test23").formatted(Formatting.AQUA)); + private final Title example3 = new Title(Text.literal("Testing1234").formatted(Formatting.DARK_GREEN)); private int hudX = SkyblockerConfig.get().general.titleContainer.x; private int hudY = SkyblockerConfig.get().general.titleContainer.y; + protected TitleContainerConfigScreen(Text title) { super(title); } @@ -33,25 +30,18 @@ public class TitleContainerConfigScreen extends Screen { public void render(DrawContext context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); renderBackground(context); - TitleContainer.draw(List.of(example1, example2, example3), hudX, hudY, context, delta, true); - context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); - var direction = SkyblockerConfig.get().general.titleContainer.direction; - var alignment = SkyblockerConfig.get().general.titleContainer.alignment; - int width1 = client.textRenderer.getWidth("Press Q/E to change Alignment: " + alignment.toString()); - int width2 = client.textRenderer.getWidth("Press R to change Direction: " + direction.toString()); - context.drawText(client.textRenderer, "Press Q/E to change Alignment: " + alignment.toString(), (width / 2) - width1 / 2, client.textRenderer.fontHeight * 2, Color.WHITE.getRGB(), true); - context.drawText(client.textRenderer, "Press R to change Direction: " + direction.toString(), (width / 2) - width2 / 2, client.textRenderer.fontHeight * 3 + 5, Color.WHITE.getRGB(), true); - - int x1; - int x2; - int y1; - int y2; - - var vec = getSelectionBounding(); - x1 = vec.x; - x2 = vec.y; - y1 = vec.z; - y2 = vec.w; + TitleContainer.render(context, Set.of(example1, example2, example3), hudX, hudY, delta); + SkyblockerConfig.Direction direction = SkyblockerConfig.get().general.titleContainer.direction; + SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; + context.drawCenteredTextWithShadow(client.textRenderer, "Press Q/E to change Alignment: " + alignment, width / 2, client.textRenderer.fontHeight * 2, Color.WHITE.getRGB()); + context.drawCenteredTextWithShadow(client.textRenderer, "Press R to change Direction: " + direction, width / 2, client.textRenderer.fontHeight * 3 + 5, Color.WHITE.getRGB()); + context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, client.textRenderer.fontHeight * 4 + 10, Color.GRAY.getRGB()); + + Pair<Vector2i, Vector2i> boundingBox = getSelectionBoundingBox(); + int x1 = boundingBox.getLeft().x; + int y1 = boundingBox.getLeft().y; + int x2 = boundingBox.getRight().x; + int y2 = boundingBox.getRight().y; context.drawHorizontalLine(x1, x2, y1, Color.RED.getRGB()); context.drawHorizontalLine(x1, x2, y2, Color.RED.getRGB()); @@ -59,46 +49,39 @@ public class TitleContainerConfigScreen extends Screen { context.drawVerticalLine(x2, y1, y2, Color.RED.getRGB()); } - public Vector4i getSelectionBounding() - { - var direction = SkyblockerConfig.get().general.titleContainer.direction; - var alignment = SkyblockerConfig.get().general.titleContainer.alignment; + public Pair<Vector2i, Vector2i> getSelectionBoundingBox() { + SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; int midWidth = getSelectionWidth() / 2; - int midHeight = getSelectionHeight() / 2; int x1 = 0; int x2 = 0; - int y1 = 0; - int y2 = 0; - y1 = hudY; - y2 = hudY + midHeight * 2; + int y1 = hudY; + int y2 = hudY + getSelectionHeight(); switch (alignment) { - case RIGHT: + case RIGHT -> { x1 = hudX - midWidth * 2; x2 = hudX; - break; - case MIDDLE: + } + case MIDDLE -> { x1 = hudX - midWidth; x2 = hudX + midWidth; - break; - case LEFT: + } + case LEFT -> { x1 = hudX; x2 = hudX + midWidth * 2; - break; + } } - return new Vector4i(x1, x2, y1, y2); + return new Pair<>(new Vector2i(x1, y1), new Vector2i(x2, y2)); } - public int getSelectionHeight() - { + public int getSelectionHeight() { int scale = (int) (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? textRenderer.fontHeight * scale : (textRenderer.fontHeight + 10) * 3 * scale; } - public int getSelectionWidth() - { + public int getSelectionWidth() { int scale = (int) (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? (textRenderer.getWidth("Test1") + 10 + textRenderer.getWidth("Test23") + 10 + textRenderer.getWidth("Testing1234")) * scale : @@ -111,16 +94,11 @@ public class TitleContainerConfigScreen extends Screen { int midHeight = getSelectionHeight() / 2; var alignment = SkyblockerConfig.get().general.titleContainer.alignment; - int x1; - int x2; - int y1; - int y2; - - var vec = getSelectionBounding(); - x1 = vec.x; - x2 = vec.y; - y1 = vec.z; - y2 = vec.w; + Pair<Vector2i, Vector2i> boundingBox = getSelectionBoundingBox(); + int x1 = boundingBox.getLeft().x; + int y1 = boundingBox.getLeft().y; + int x2 = boundingBox.getRight().x; + int y2 = boundingBox.getRight().y; if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, x1, y1, x2, y2) && button == 0) { hudX = alignment == SkyblockerConfig.Alignment.RIGHT ? @@ -135,31 +113,31 @@ public class TitleContainerConfigScreen extends Screen { public boolean mouseClicked(double mouseX, double mouseY, int button) { if (button == 1) { hudX = this.width / 2; - hudY = (int) (this.height * 0.6F); + hudY = this.height / 2; } return super.mouseClicked(mouseX, mouseY, button); } @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if(keyCode == GLFW.GLFW_KEY_Q) { - var current = SkyblockerConfig.get().general.titleContainer.alignment; + if (keyCode == GLFW.GLFW_KEY_Q) { + SkyblockerConfig.Alignment current = SkyblockerConfig.get().general.titleContainer.alignment; SkyblockerConfig.get().general.titleContainer.alignment = switch (current) { case LEFT -> SkyblockerConfig.Alignment.MIDDLE; case MIDDLE -> SkyblockerConfig.Alignment.RIGHT; case RIGHT -> SkyblockerConfig.Alignment.LEFT; }; } - if(keyCode == GLFW.GLFW_KEY_E) { - var current = SkyblockerConfig.get().general.titleContainer.alignment; + if (keyCode == GLFW.GLFW_KEY_E) { + SkyblockerConfig.Alignment current = SkyblockerConfig.get().general.titleContainer.alignment; SkyblockerConfig.get().general.titleContainer.alignment = switch (current) { case LEFT -> SkyblockerConfig.Alignment.RIGHT; case MIDDLE -> SkyblockerConfig.Alignment.LEFT; case RIGHT -> SkyblockerConfig.Alignment.MIDDLE; }; } - if(keyCode == GLFW.GLFW_KEY_R) { - var current = SkyblockerConfig.get().general.titleContainer.direction; + if (keyCode == GLFW.GLFW_KEY_R) { + SkyblockerConfig.Direction current = SkyblockerConfig.get().general.titleContainer.direction; SkyblockerConfig.get().general.titleContainer.direction = switch (current) { case HORIZONTAL -> SkyblockerConfig.Direction.VERTICAL; case VERTICAL -> SkyblockerConfig.Direction.HORIZONTAL; -- cgit From 28dde248aae76db0f82df54e7757292ecb5693ea Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Sat, 8 Jul 2023 09:33:18 -0400 Subject: Make Some more changes Add +/- to change scale Mouse now properly goes to center for text box Added comments to rendering code --- .../skyblocker/utils/title/TitleContainer.java | 34 +++++++++++++++------- .../utils/title/TitleContainerConfigScreen.java | 22 ++++++++++---- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index c4908a73..10b2553a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -94,62 +94,76 @@ public class TitleContainer { var client = MinecraftClient.getInstance(); TextRenderer textRenderer = client.textRenderer; + // Calculate Scale to use float scale = 3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F); + // Grab direction and alignment values SkyblockerConfig.Direction direction = SkyblockerConfig.get().general.titleContainer.direction; SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; + // x/y refer to the starting position for the text + // y always starts at yPos float x = 0; - float y; + float y = yPos; + + //Calculate the width of combined text float width = 0; for (Title title : titles) { width += textRenderer.getWidth(title.getText()) * scale + 10; } - if (direction == SkyblockerConfig.Direction.HORIZONTAL) { - if (alignment == SkyblockerConfig.Alignment.MIDDLE) { + + if (alignment == SkyblockerConfig.Alignment.MIDDLE) { + if (direction == SkyblockerConfig.Direction.HORIZONTAL) { + //If middle aligned horizontally, start the xPosition at half of the width to the left. x = xPos - (width / 2); - } - } else { - if (alignment == SkyblockerConfig.Alignment.MIDDLE) { + } else { + //If middle aligned vertically, start at xPos, we will shift each text to the left later x = xPos; } } if (alignment == SkyblockerConfig.Alignment.LEFT || alignment == SkyblockerConfig.Alignment.RIGHT) { + //If left or right aligned, start at xPos, we will shift each text later x = xPos; } - y = yPos; for (Title title : titles) { + //Translate the matrix to the texts position and scale context.getMatrices().push(); context.getMatrices().translate(title.lastX, title.lastY, 200); context.getMatrices().scale(scale, scale, scale); + //Calculate which x the text should use float xToUse; if (direction == SkyblockerConfig.Direction.HORIZONTAL) { xToUse = alignment == SkyblockerConfig.Alignment.RIGHT ? - x - (textRenderer.getWidth(title.getText()) * scale) : + x - (textRenderer.getWidth(title.getText()) * scale) : //if right aligned we need the text position to be aligned on the right side. x; } else { xToUse = alignment == SkyblockerConfig.Alignment.MIDDLE ? - x - (textRenderer.getWidth(title.getText()) * scale) / 2 : + x - (textRenderer.getWidth(title.getText()) * scale) / 2 : //if middle aligned we need the text position to be aligned in the middle. alignment == SkyblockerConfig.Alignment.RIGHT ? - x - (textRenderer.getWidth(title.getText()) * scale) : + x - (textRenderer.getWidth(title.getText()) * scale) : //if right aligned we need the text position to be aligned on the right side. x; } + //Lerp the texts x and y variables title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, xToUse); title.lastY = MathHelper.lerp(tickDelta * 0.5F, title.lastY, y); if (direction == SkyblockerConfig.Direction.HORIZONTAL) { if (alignment == SkyblockerConfig.Alignment.MIDDLE || alignment == SkyblockerConfig.Alignment.LEFT) { + //Move to the right if middle or left aligned x += textRenderer.getWidth(title.getText()) * scale + 10; } if (alignment == SkyblockerConfig.Alignment.RIGHT) { + //Move to the left if right aligned x -= textRenderer.getWidth(title.getText()) * scale + 10; } } else { + //Y always moves by the same amount if vertical y += textRenderer.fontHeight * scale + 10; } + //Draw text context.drawTextWithShadow(textRenderer, title.getText(), 0, 0, 0xFFFFFF); context.getMatrices().pop(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index b4f3093f..be5cc58d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -14,6 +14,7 @@ import org.lwjgl.glfw.GLFW; import java.awt.*; import java.util.Set; +import java.util.stream.Collectors; public class TitleContainerConfigScreen extends Screen { private final Title example1 = new Title(Text.literal("Test1").formatted(Formatting.RED)); @@ -33,9 +34,10 @@ public class TitleContainerConfigScreen extends Screen { TitleContainer.render(context, Set.of(example1, example2, example3), hudX, hudY, delta); SkyblockerConfig.Direction direction = SkyblockerConfig.get().general.titleContainer.direction; SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; - context.drawCenteredTextWithShadow(client.textRenderer, "Press Q/E to change Alignment: " + alignment, width / 2, client.textRenderer.fontHeight * 2, Color.WHITE.getRGB()); - context.drawCenteredTextWithShadow(client.textRenderer, "Press R to change Direction: " + direction, width / 2, client.textRenderer.fontHeight * 3 + 5, Color.WHITE.getRGB()); - context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, client.textRenderer.fontHeight * 4 + 10, Color.GRAY.getRGB()); + context.drawCenteredTextWithShadow(textRenderer, "Press Q/E to change Alignment: " + alignment, width / 2, textRenderer.fontHeight * 2, Color.WHITE.getRGB()); + context.drawCenteredTextWithShadow(textRenderer, "Press R to change Direction: " + direction, width / 2, textRenderer.fontHeight * 3 + 5, Color.WHITE.getRGB()); + context.drawCenteredTextWithShadow(textRenderer, "Press +/- to change Scale", width / 2, textRenderer.fontHeight * 4 + 10, Color.WHITE.getRGB()); + context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, textRenderer.fontHeight * 5 + 15, Color.GRAY.getRGB()); Pair<Vector2i, Vector2i> boundingBox = getSelectionBoundingBox(); int x1 = boundingBox.getLeft().x; @@ -101,9 +103,11 @@ public class TitleContainerConfigScreen extends Screen { int y2 = boundingBox.getRight().y; if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, x1, y1, x2, y2) && button == 0) { - hudX = alignment == SkyblockerConfig.Alignment.RIGHT ? - (int) mouseX + midWidth : - (int) mouseX - (midWidth / 2); + hudX = switch (alignment) { + case LEFT ->(int) mouseX - midWidth; + case MIDDLE -> (int) mouseX; + case RIGHT -> (int) mouseX + midWidth; + }; hudY = (int) mouseY - (midHeight); } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); @@ -143,6 +147,12 @@ public class TitleContainerConfigScreen extends Screen { case VERTICAL -> SkyblockerConfig.Direction.HORIZONTAL; }; } + if (keyCode == GLFW.GLFW_KEY_EQUAL) { + SkyblockerConfig.get().general.titleContainer.titleContainerScale += 10; + } + if (keyCode == GLFW.GLFW_KEY_MINUS) { + SkyblockerConfig.get().general.titleContainer.titleContainerScale -= 10; + } return super.keyPressed(keyCode, scanCode, modifiers); } -- cgit From c2d1d4d98bad10860629b00de89134a7cf590e06 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Sat, 8 Jul 2023 09:45:20 -0400 Subject: Fix scaling issues --- .../utils/title/TitleContainerConfigScreen.java | 65 +++++++++++----------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index be5cc58d..08a902ab 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -6,6 +6,7 @@ import me.xmrvizzy.skyblocker.utils.RenderUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.util.math.Vector2f; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Pair; @@ -20,8 +21,8 @@ public class TitleContainerConfigScreen extends Screen { private final Title example1 = new Title(Text.literal("Test1").formatted(Formatting.RED)); private final Title example2 = new Title(Text.literal("Test23").formatted(Formatting.AQUA)); private final Title example3 = new Title(Text.literal("Testing1234").formatted(Formatting.DARK_GREEN)); - private int hudX = SkyblockerConfig.get().general.titleContainer.x; - private int hudY = SkyblockerConfig.get().general.titleContainer.y; + private float hudX = SkyblockerConfig.get().general.titleContainer.x; + private float hudY = SkyblockerConfig.get().general.titleContainer.y; protected TitleContainerConfigScreen(Text title) { super(title); @@ -31,7 +32,7 @@ public class TitleContainerConfigScreen extends Screen { public void render(DrawContext context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); renderBackground(context); - TitleContainer.render(context, Set.of(example1, example2, example3), hudX, hudY, delta); + TitleContainer.render(context, Set.of(example1, example2, example3), (int) hudX, (int) hudY, delta); SkyblockerConfig.Direction direction = SkyblockerConfig.get().general.titleContainer.direction; SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; context.drawCenteredTextWithShadow(textRenderer, "Press Q/E to change Alignment: " + alignment, width / 2, textRenderer.fontHeight * 2, Color.WHITE.getRGB()); @@ -39,11 +40,11 @@ public class TitleContainerConfigScreen extends Screen { context.drawCenteredTextWithShadow(textRenderer, "Press +/- to change Scale", width / 2, textRenderer.fontHeight * 4 + 10, Color.WHITE.getRGB()); context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, textRenderer.fontHeight * 5 + 15, Color.GRAY.getRGB()); - Pair<Vector2i, Vector2i> boundingBox = getSelectionBoundingBox(); - int x1 = boundingBox.getLeft().x; - int y1 = boundingBox.getLeft().y; - int x2 = boundingBox.getRight().x; - int y2 = boundingBox.getRight().y; + Pair<Vector2f, Vector2f> boundingBox = getSelectionBoundingBox(); + int x1 = (int) boundingBox.getLeft().getX(); + int y1 = (int) boundingBox.getLeft().getY(); + int x2 = (int) boundingBox.getRight().getX(); + int y2 = (int) boundingBox.getRight().getY(); context.drawHorizontalLine(x1, x2, y1, Color.RED.getRGB()); context.drawHorizontalLine(x1, x2, y2, Color.RED.getRGB()); @@ -51,14 +52,14 @@ public class TitleContainerConfigScreen extends Screen { context.drawVerticalLine(x2, y1, y2, Color.RED.getRGB()); } - public Pair<Vector2i, Vector2i> getSelectionBoundingBox() { + public Pair<Vector2f, Vector2f> getSelectionBoundingBox() { SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; - int midWidth = getSelectionWidth() / 2; - int x1 = 0; - int x2 = 0; - int y1 = hudY; - int y2 = hudY + getSelectionHeight(); + float midWidth = getSelectionWidth() / 2F; + float x1 = 0; + float x2 = 0; + float y1 = hudY; + float y2 = hudY + getSelectionHeight(); switch (alignment) { case RIGHT -> { x1 = hudX - midWidth * 2; @@ -73,18 +74,18 @@ public class TitleContainerConfigScreen extends Screen { x2 = hudX + midWidth * 2; } } - return new Pair<>(new Vector2i(x1, y1), new Vector2i(x2, y2)); + return new Pair<>(new Vector2f(x1, y1), new Vector2f(x2, y2)); } - public int getSelectionHeight() { - int scale = (int) (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); + public float getSelectionHeight() { + float scale = (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? - textRenderer.fontHeight * scale : - (textRenderer.fontHeight + 10) * 3 * scale; + (textRenderer.fontHeight * scale) : + (textRenderer.fontHeight + 10F) * 3F * scale; } - public int getSelectionWidth() { - int scale = (int) (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); + public float getSelectionWidth() { + float scale = (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? (textRenderer.getWidth("Test1") + 10 + textRenderer.getWidth("Test23") + 10 + textRenderer.getWidth("Testing1234")) * scale : textRenderer.getWidth("Testing1234") * scale; @@ -92,23 +93,23 @@ public class TitleContainerConfigScreen extends Screen { @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - int midWidth = getSelectionWidth() / 2; - int midHeight = getSelectionHeight() / 2; + float midWidth = getSelectionWidth() / 2; + float midHeight = getSelectionHeight() / 2; var alignment = SkyblockerConfig.get().general.titleContainer.alignment; - Pair<Vector2i, Vector2i> boundingBox = getSelectionBoundingBox(); - int x1 = boundingBox.getLeft().x; - int y1 = boundingBox.getLeft().y; - int x2 = boundingBox.getRight().x; - int y2 = boundingBox.getRight().y; + Pair<Vector2f, Vector2f> boundingBox = getSelectionBoundingBox(); + float x1 = boundingBox.getLeft().getX(); + float y1 = boundingBox.getLeft().getY(); + float x2 = boundingBox.getRight().getX(); + float y2 = boundingBox.getRight().getY(); - if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, x1, y1, x2, y2) && button == 0) { + if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, (int) x1, (int) y1, (int) x2, (int) y2) && button == 0) { hudX = switch (alignment) { case LEFT ->(int) mouseX - midWidth; case MIDDLE -> (int) mouseX; case RIGHT -> (int) mouseX + midWidth; }; - hudY = (int) mouseY - (midHeight); + hudY = (int) (mouseY - midHeight); } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); } @@ -158,8 +159,8 @@ public class TitleContainerConfigScreen extends Screen { @Override public void close() { - SkyblockerConfig.get().general.titleContainer.x = hudX; - SkyblockerConfig.get().general.titleContainer.y = hudY; + SkyblockerConfig.get().general.titleContainer.x = (int) hudX; + SkyblockerConfig.get().general.titleContainer.y = (int) hudY; AutoConfig.getConfigHolder(SkyblockerConfig.class).save(); super.close(); } -- cgit From f2fb1c3d1152efc3cc4741f02fd42dce836bcbb1 Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Sat, 8 Jul 2023 13:53:26 -0400 Subject: Move to default y position back to 60% --- .../me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index 08a902ab..23df1f6c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -118,7 +118,7 @@ public class TitleContainerConfigScreen extends Screen { public boolean mouseClicked(double mouseX, double mouseY, int button) { if (button == 1) { hudX = this.width / 2; - hudY = this.height / 2; + hudY = this.height * 0.6F; } return super.mouseClicked(mouseX, mouseY, button); } -- cgit From 85e5615bac19cf70d00653355f1e01e7d1849f37 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sun, 9 Jul 2023 10:01:51 +0800 Subject: Refactor Title --- .../me/xmrvizzy/skyblocker/utils/title/Title.java | 33 ++++++++++++++++------ .../utils/title/TitleContainerConfigScreen.java | 13 ++++----- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java index ac06eb36..7dfef3d9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java @@ -4,11 +4,36 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +/** + * Represents a title used for {@link TitleContainer}. + * + * @see TitleContainer + */ public class Title { private MutableText text; protected float lastX = 0; protected float lastY = 0; + /** + * Constructs a new title with the given translation key and formatting to be applied. + * + * @param textKey the translation key + * @param formatting the formatting to be applied to the text + */ + public Title(String textKey, Formatting formatting) { + this(Text.translatable(textKey).formatted(formatting)); + } + + /** + * Constructs a new title with the given {@link MutableText}. + * Use {@link Text#literal(String)} or {@link Text#translatable(String)} to create a {@link MutableText} + * + * @param text the mutable text + */ + public Title(MutableText text) { + this.text = text; + } + public MutableText getText() { return text; } @@ -20,12 +45,4 @@ public class Title { public void setFormatting(Formatting formatting) { this.text.formatted(formatting); } - - public Title(String textKey, Formatting formatting) { - this(Text.translatable(textKey).formatted(formatting)); - } - - public Title(MutableText text) { - this.text = text; - } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index 23df1f6c..e729ea15 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -3,19 +3,16 @@ package me.xmrvizzy.skyblocker.utils.title; import me.shedaniel.autoconfig.AutoConfig; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderUtils; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.util.math.Vector2f; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Pair; -import org.joml.Vector2i; import org.lwjgl.glfw.GLFW; import java.awt.*; import java.util.Set; -import java.util.stream.Collectors; public class TitleContainerConfigScreen extends Screen { private final Title example1 = new Title(Text.literal("Test1").formatted(Formatting.RED)); @@ -52,7 +49,7 @@ public class TitleContainerConfigScreen extends Screen { context.drawVerticalLine(x2, y1, y2, Color.RED.getRGB()); } - public Pair<Vector2f, Vector2f> getSelectionBoundingBox() { + private Pair<Vector2f, Vector2f> getSelectionBoundingBox() { SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment; float midWidth = getSelectionWidth() / 2F; @@ -77,14 +74,14 @@ public class TitleContainerConfigScreen extends Screen { return new Pair<>(new Vector2f(x1, y1), new Vector2f(x2, y2)); } - public float getSelectionHeight() { + private float getSelectionHeight() { float scale = (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? (textRenderer.fontHeight * scale) : (textRenderer.fontHeight + 10F) * 3F * scale; } - public float getSelectionWidth() { + private float getSelectionWidth() { float scale = (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F)); return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? (textRenderer.getWidth("Test1") + 10 + textRenderer.getWidth("Test23") + 10 + textRenderer.getWidth("Testing1234")) * scale : @@ -105,7 +102,7 @@ public class TitleContainerConfigScreen extends Screen { if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, (int) x1, (int) y1, (int) x2, (int) y2) && button == 0) { hudX = switch (alignment) { - case LEFT ->(int) mouseX - midWidth; + case LEFT -> (int) mouseX - midWidth; case MIDDLE -> (int) mouseX; case RIGHT -> (int) mouseX + midWidth; }; @@ -117,7 +114,7 @@ public class TitleContainerConfigScreen extends Screen { @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { if (button == 1) { - hudX = this.width / 2; + hudX = (float) this.width / 2; hudY = this.height * 0.6F; } return super.mouseClicked(mouseX, mouseY, button); -- cgit From 675913a65470a228eead892a2b1d58a4e2f253f5 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sun, 9 Jul 2023 10:49:52 +0800 Subject: Update Title Container rendering --- .../me/xmrvizzy/skyblocker/utils/title/Title.java | 13 +++++++-- .../skyblocker/utils/title/TitleContainer.java | 32 ++++++++++++++-------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java index 7dfef3d9..4f6b2fb4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java @@ -11,8 +11,8 @@ import net.minecraft.util.Formatting; */ public class Title { private MutableText text; - protected float lastX = 0; - protected float lastY = 0; + protected float x = -1; + protected float y = -1; /** * Constructs a new title with the given translation key and formatting to be applied. @@ -45,4 +45,13 @@ public class Title { public void setFormatting(Formatting formatting) { this.text.formatted(formatting); } + + protected boolean isDefaultPos() { + return x == -1 && y == -1; + } + + protected void resetPos() { + this.x = -1; + this.y = -1; + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index 10b2553a..a4e445ee 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -55,8 +55,7 @@ public class TitleContainer { */ public static boolean addTitle(Title title) { if (titles.add(title)) { - title.lastX = 0; - title.lastY = SkyblockerConfig.get().general.titleContainer.y; + title.resetPos(); return true; } return false; @@ -126,10 +125,6 @@ public class TitleContainer { } for (Title title : titles) { - //Translate the matrix to the texts position and scale - context.getMatrices().push(); - context.getMatrices().translate(title.lastX, title.lastY, 200); - context.getMatrices().scale(scale, scale, scale); //Calculate which x the text should use float xToUse; @@ -144,10 +139,27 @@ public class TitleContainer { x - (textRenderer.getWidth(title.getText()) * scale) : //if right aligned we need the text position to be aligned on the right side. x; } + + //Start displaying the title at the correct position, not at the default position + if (title.isDefaultPos()) { + title.x = xToUse; + title.y = y; + } + //Lerp the texts x and y variables - title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, xToUse); - title.lastY = MathHelper.lerp(tickDelta * 0.5F, title.lastY, y); + title.x = MathHelper.lerp(tickDelta * 0.5F, title.x, xToUse); + title.y = MathHelper.lerp(tickDelta * 0.5F, title.y, y); + + //Translate the matrix to the texts position and scale + context.getMatrices().push(); + context.getMatrices().translate(title.x, title.y, 200); + context.getMatrices().scale(scale, scale, scale); + + //Draw text + context.drawTextWithShadow(textRenderer, title.getText(), 0, 0, 0xFFFFFF); + context.getMatrices().pop(); + //Calculate the x and y positions for the next title if (direction == SkyblockerConfig.Direction.HORIZONTAL) { if (alignment == SkyblockerConfig.Alignment.MIDDLE || alignment == SkyblockerConfig.Alignment.LEFT) { //Move to the right if middle or left aligned @@ -162,10 +174,6 @@ public class TitleContainer { //Y always moves by the same amount if vertical y += textRenderer.fontHeight * scale + 10; } - - //Draw text - context.drawTextWithShadow(textRenderer, title.getText(), 0, 0, 0xFFFFFF); - context.getMatrices().pop(); } } } \ No newline at end of file -- cgit From 324248b4c44d10d3a2cf5412b4ff4beeaa5f681c Mon Sep 17 00:00:00 2001 From: Futuremappermydud <54294576+Futuremappermydud@users.noreply.github.com> Date: Sun, 9 Jul 2023 13:38:46 -0400 Subject: Fix mania indicator --- .../java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java | 3 ++- src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java index 4e873eed..38f6b018 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java @@ -9,6 +9,7 @@ import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.math.BlockPos; @@ -30,7 +31,7 @@ public class ManiaIndicator { anyMania = true; BlockPos pos = MinecraftClient.getInstance().player.getBlockPos().down(); boolean isGreen = MinecraftClient.getInstance().world.getBlockState(pos).getBlock() == Blocks.GREEN_TERRACOTTA; - title.setFormatting(isGreen ? Formatting.GREEN : Formatting.RED); + title.setText(Text.translatable("skyblocker.rift.mania").formatted(isGreen ? Formatting.GREEN : Formatting.RED)); RenderHelper.displayInTitleContainerAndPlaySound(title); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java index 4f6b2fb4..0a3bc845 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/Title.java @@ -42,10 +42,6 @@ public class Title { this.text = text; } - public void setFormatting(Formatting formatting) { - this.text.formatted(formatting); - } - protected boolean isDefaultPos() { return x == -1 && y == -1; } -- cgit