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(-) (limited to 'src/main/java') 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(-) (limited to 'src/main/java') 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(-) (limited to 'src/main/java') 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(-) (limited to 'src/main/java') 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(-) (limited to 'src/main/java') 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(-) (limited to 'src/main/java') 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(-) (limited to 'src/main/java') 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 (limited to 'src/main/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 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(-) (limited to 'src/main/java') 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 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(-) (limited to 'src/main/java') 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 (limited to 'src/main/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(-) (limited to 'src/main/java') 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(-) (limited to 'src/main/java') 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 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(+) (limited to 'src/main/java') 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 (limited to 'src/main/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 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 (limited to 'src/main/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 (limited to 'src/main/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(-) (limited to 'src/main/java') 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(-) (limited to 'src/main/java') 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 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(-) (limited to 'src/main/java') 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 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(-) (limited to 'src/main/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 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 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(-) (limited to 'src/main/java') 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(-) (limited to 'src/main/java') 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