From 45fa1f8859a39583d0c1edc6e1e9e13f6b00c179 Mon Sep 17 00:00:00 2001 From: nmccullagh Date: Mon, 17 Jun 2024 01:32:48 +0100 Subject: Add Craft Cost Tooltip --- .../skyblock/item/tooltip/TooltipInfoType.java | 2 +- .../skyblock/item/tooltip/TooltipManager.java | 14 +++-- .../item/tooltip/adders/CraftPriceTooltip.java | 70 ++++++++++++++++++++++ 3 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java index d82b2682..1e3b5a7f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java @@ -22,7 +22,7 @@ import org.jetbrains.annotations.Nullable; public enum TooltipInfoType implements Runnable { NPC("https://hysky.de/api/npcprice", itemTooltip -> itemTooltip.enableNPCPrice, true), - BAZAAR("https://hysky.de/api/bazaar", itemTooltip -> itemTooltip.enableBazaarPrice || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableBazaarPrice, false), + BAZAAR("https://hysky.de/api/bazaar", itemTooltip -> itemTooltip.enableBazaarPrice || itemTooltip.enableCraftingCost || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableBazaarPrice, false), LOWEST_BINS("https://hysky.de/api/auctions/lowestbins", itemTooltip -> itemTooltip.enableLowestBIN || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableLowestBIN, false), ONE_DAY_AVERAGE("https://hysky.de/api/auctions/lowestbins/average/1day.json", itemTooltip -> itemTooltip.enableAvgBIN, false), THREE_DAY_AVERAGE("https://hysky.de/api/auctions/lowestbins/average/3day.json", itemTooltip -> itemTooltip.enableAvgBIN || SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.enableAuctionHouse, itemTooltip -> itemTooltip.enableAvgBIN, false), diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java index e3a2ef04..cb8efb0c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip; import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver; import de.hysky.skyblocker.skyblock.item.tooltip.adders.*; +import de.hysky.skyblocker.skyblock.item.tooltip.adders.CraftPriceTooltip; import de.hysky.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; @@ -27,12 +28,13 @@ public class TooltipManager { new BazaarPriceTooltip(2), new LBinTooltip(3), new AvgBinTooltip(4), - new DungeonQualityTooltip(5), - new MotesTooltip(6), - new ObtainedDateTooltip(7), - new MuseumTooltip(8), - new ColorTooltip(9), - new AccessoryTooltip(10), + new CraftPriceTooltip(5), + new DungeonQualityTooltip(6), + new MotesTooltip(7), + new ObtainedDateTooltip(8), + new MuseumTooltip(9), + new ColorTooltip(10), + new AccessoryTooltip(11), }; private static final ArrayList currentScreenAdders = new ArrayList<>(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java new file mode 100644 index 00000000..849505a8 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java @@ -0,0 +1,70 @@ +package de.hysky.skyblocker.skyblock.item.tooltip.adders; + +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; +import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; +import de.hysky.skyblocker.utils.NEURepoManager; +import io.github.moulberry.repo.data.NEUIngredient; +import io.github.moulberry.repo.data.NEUItem; +import io.github.moulberry.repo.data.NEURecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.Map; + +public class CraftPriceTooltip extends TooltipAdder { + public CraftPriceTooltip(int priority) { + super(priority); + } + + @Override + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { + if (!SkyblockerConfigManager.get().general.itemTooltip.enableCraftingCost) return; + + String neuName = stack.getNeuName(); + String internalID = stack.getSkyblockId(); + if (neuName == null || internalID == null) return; + + if (TooltipInfoType.ONE_DAY_AVERAGE.getData() == null || TooltipInfoType.BAZAAR.getData() == null) { + ItemTooltip.nullWarning(); + return; + } + + NEUItem neuItem = NEURepoManager.NEU_REPO.getItems().getItemBySkyblockId(internalID); + if (neuItem == null) return; + + List neuRecipes = neuItem.getRecipes(); + if (neuRecipes.isEmpty()) return; + + double totalCraftCost = 0.0; + + for (NEUIngredient input : neuRecipes.getFirst().getAllInputs()) { + String inputItemName = input.getItemId(); + double inputItemCount = input.getAmount(); + + double inputItemCost = getItemCost(inputItemName); + totalCraftCost += inputItemCost * inputItemCount; + } + + if (totalCraftCost == 0) return; + + lines.add(Text.literal(String.format("%-18s", "Crafting Cost:")) + .formatted(Formatting.GOLD) + .append(ItemTooltip.getCoinsMessage(totalCraftCost, 1))); + } + + private double getItemCost(String itemName) { + if (TooltipInfoType.BAZAAR.getData().has(itemName)) { + return TooltipInfoType.BAZAAR.getData().getAsJsonObject(itemName).get("sellPrice").getAsDouble(); + } else if (TooltipInfoType.LOWEST_BINS.getData().has(itemName)) { + return TooltipInfoType.LOWEST_BINS.getData().get(itemName).getAsDouble(); + } else { + return 0.0; // No data available + } + } +} -- cgit From 3187223676066b0a3b42b662ae10f2dc601a099f Mon Sep 17 00:00:00 2001 From: nmccullagh Date: Mon, 17 Jun 2024 21:28:54 +0100 Subject: recursion hurts my head --- .../item/tooltip/adders/CraftPriceTooltip.java | 61 +++++++++++++++------- 1 file changed, 43 insertions(+), 18 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java index 849505a8..8b06229c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java @@ -16,8 +16,12 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; +import java.util.HashMap; public class CraftPriceTooltip extends TooltipAdder { + private final Map cachedCraftCosts = new HashMap<>(); + private static final int MAX_RECURSION_DEPTH = 10; + public CraftPriceTooltip(int priority) { super(priority); } @@ -30,7 +34,7 @@ public class CraftPriceTooltip extends TooltipAdder { String internalID = stack.getSkyblockId(); if (neuName == null || internalID == null) return; - if (TooltipInfoType.ONE_DAY_AVERAGE.getData() == null || TooltipInfoType.BAZAAR.getData() == null) { + if (TooltipInfoType.LOWEST_BINS.getData() == null || TooltipInfoType.BAZAAR.getData() == null) { ItemTooltip.nullWarning(); return; } @@ -41,30 +45,51 @@ public class CraftPriceTooltip extends TooltipAdder { List neuRecipes = neuItem.getRecipes(); if (neuRecipes.isEmpty()) return; - double totalCraftCost = 0.0; - - for (NEUIngredient input : neuRecipes.getFirst().getAllInputs()) { - String inputItemName = input.getItemId(); - double inputItemCount = input.getAmount(); - - double inputItemCost = getItemCost(inputItemName); - totalCraftCost += inputItemCost * inputItemCount; - } + double totalCraftCost = getItemCost(neuRecipes.getFirst(), 0); if (totalCraftCost == 0) return; lines.add(Text.literal(String.format("%-18s", "Crafting Cost:")) .formatted(Formatting.GOLD) - .append(ItemTooltip.getCoinsMessage(totalCraftCost, 1))); + .append(ItemTooltip.getCoinsMessage(totalCraftCost, stack.getCount()))); } - private double getItemCost(String itemName) { - if (TooltipInfoType.BAZAAR.getData().has(itemName)) { - return TooltipInfoType.BAZAAR.getData().getAsJsonObject(itemName).get("sellPrice").getAsDouble(); - } else if (TooltipInfoType.LOWEST_BINS.getData().has(itemName)) { - return TooltipInfoType.LOWEST_BINS.getData().get(itemName).getAsDouble(); - } else { - return 0.0; // No data available + private double getItemCost(NEURecipe recipe, int depth) { + if (depth >= MAX_RECURSION_DEPTH) return -1; + + double totalCraftCost = 0; + for (NEUIngredient input : recipe.getAllInputs()) { + String inputItemName = input.getItemId(); + double inputItemCount = input.getAmount(); + if (cachedCraftCosts.containsKey(inputItemName)) { + totalCraftCost += cachedCraftCosts.get(inputItemName) * inputItemCount; + continue; + } + + double itemCost = 0; + + if (TooltipInfoType.BAZAAR.getData().has(inputItemName)) { + itemCost = TooltipInfoType.BAZAAR.getData().getAsJsonObject(inputItemName).get("sellPrice").getAsDouble(); + } else if (TooltipInfoType.LOWEST_BINS.getData().has(inputItemName)) { + itemCost = TooltipInfoType.LOWEST_BINS.getData().get(inputItemName).getAsDouble(); + } + + if (itemCost > 0) { + cachedCraftCosts.put(inputItemName, itemCost); + } + + NEUItem neuItem = NEURepoManager.NEU_REPO.getItems().getItemBySkyblockId(inputItemName); + if (neuItem != null) { + List neuRecipes = neuItem.getRecipes(); + if (!neuRecipes.isEmpty()) { + double craftCost = getItemCost(neuRecipes.getFirst(), depth + 1); + if (craftCost != -1) itemCost = Math.min(itemCost, craftCost); + cachedCraftCosts.put(inputItemName, itemCost); + } + } + + totalCraftCost += itemCost * inputItemCount; } + return totalCraftCost; } } -- cgit From 77fbbf665c93c1c5be2aed9b195e335d1eade6d9 Mon Sep 17 00:00:00 2001 From: nmccullagh Date: Wed, 26 Jun 2024 06:23:31 +0100 Subject: add max recursion. Probs shoulda done this anyway. Also stops NEU Recipes that arent recipes from blowing up the game --- .../skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java index 8b06229c..32279aa7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java @@ -20,7 +20,7 @@ import java.util.HashMap; public class CraftPriceTooltip extends TooltipAdder { private final Map cachedCraftCosts = new HashMap<>(); - private static final int MAX_RECURSION_DEPTH = 10; + private static final int MAX_RECURSION_DEPTH = 15; public CraftPriceTooltip(int priority) { super(priority); -- cgit From 8f11e44052ff41df1477d8c10de3bc1129252ec1 Mon Sep 17 00:00:00 2001 From: nmccullagh Date: Mon, 1 Jul 2024 01:18:34 +0100 Subject: lets not assume 1 output --- .../skyblock/item/tooltip/TooltipInfoType.java | 2 +- .../item/tooltip/adders/CraftPriceTooltip.java | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java index 1e3b5a7f..dfb97bee 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java @@ -22,7 +22,7 @@ import org.jetbrains.annotations.Nullable; public enum TooltipInfoType implements Runnable { NPC("https://hysky.de/api/npcprice", itemTooltip -> itemTooltip.enableNPCPrice, true), - BAZAAR("https://hysky.de/api/bazaar", itemTooltip -> itemTooltip.enableBazaarPrice || itemTooltip.enableCraftingCost || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableBazaarPrice, false), + BAZAAR("https://hysky.de/api/bazaar", itemTooltip -> itemTooltip.enableBazaarPrice || itemTooltip.enableCraftingCost.getOrder() != null || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableBazaarPrice, false), LOWEST_BINS("https://hysky.de/api/auctions/lowestbins", itemTooltip -> itemTooltip.enableLowestBIN || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableLowestBIN, false), ONE_DAY_AVERAGE("https://hysky.de/api/auctions/lowestbins/average/1day.json", itemTooltip -> itemTooltip.enableAvgBIN, false), THREE_DAY_AVERAGE("https://hysky.de/api/auctions/lowestbins/average/3day.json", itemTooltip -> itemTooltip.enableAvgBIN || SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.enableAuctionHouse, itemTooltip -> itemTooltip.enableAvgBIN, false), diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java index 32279aa7..35c717ff 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; @@ -14,9 +15,9 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.jetbrains.annotations.Nullable; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.HashMap; public class CraftPriceTooltip extends TooltipAdder { private final Map cachedCraftCosts = new HashMap<>(); @@ -28,11 +29,10 @@ public class CraftPriceTooltip extends TooltipAdder { @Override public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { - if (!SkyblockerConfigManager.get().general.itemTooltip.enableCraftingCost) return; + if (SkyblockerConfigManager.get().general.itemTooltip.enableCraftingCost == GeneralConfig.Craft.OFF) return; - String neuName = stack.getNeuName(); String internalID = stack.getSkyblockId(); - if (neuName == null || internalID == null) return; + if (stack.getNeuName() == null || internalID == null) return; if (TooltipInfoType.LOWEST_BINS.getData() == null || TooltipInfoType.BAZAAR.getData() == null) { ItemTooltip.nullWarning(); @@ -43,15 +43,16 @@ public class CraftPriceTooltip extends TooltipAdder { if (neuItem == null) return; List neuRecipes = neuItem.getRecipes(); - if (neuRecipes.isEmpty()) return; + if (neuRecipes.isEmpty() || neuRecipes.getFirst().getClass().equals(io.github.moulberry.repo.data.NEUKatUpgradeRecipe.class)) return; double totalCraftCost = getItemCost(neuRecipes.getFirst(), 0); + cachedCraftCosts.clear(); if (totalCraftCost == 0) return; - lines.add(Text.literal(String.format("%-18s", "Crafting Cost:")) - .formatted(Formatting.GOLD) - .append(ItemTooltip.getCoinsMessage(totalCraftCost, stack.getCount()))); + neuRecipes.getFirst().getAllOutputs().stream().findFirst().ifPresent(neuIngredient -> + lines.add(Text.literal(String.format("%-20s", "Crafting Price:")).formatted(Formatting.GOLD) + .append(ItemTooltip.getCoinsMessage(totalCraftCost / neuIngredient.getAmount(), stack.getCount())))); } private double getItemCost(NEURecipe recipe, int depth) { @@ -69,7 +70,7 @@ public class CraftPriceTooltip extends TooltipAdder { double itemCost = 0; if (TooltipInfoType.BAZAAR.getData().has(inputItemName)) { - itemCost = TooltipInfoType.BAZAAR.getData().getAsJsonObject(inputItemName).get("sellPrice").getAsDouble(); + itemCost = TooltipInfoType.BAZAAR.getData().getAsJsonObject(inputItemName).get(SkyblockerConfigManager.get().general.itemTooltip.enableCraftingCost.getOrder()).getAsDouble(); } else if (TooltipInfoType.LOWEST_BINS.getData().has(inputItemName)) { itemCost = TooltipInfoType.LOWEST_BINS.getData().get(inputItemName).getAsDouble(); } -- cgit From 69b7c0a00a6d236953604415556d7d4a729b7228 Mon Sep 17 00:00:00 2001 From: nmccullagh Date: Fri, 5 Jul 2024 13:07:33 +0100 Subject: add a 30s persistent cache --- .../skyblock/item/tooltip/adders/CraftPriceTooltip.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java index 35c717ff..c19c2f53 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java @@ -18,9 +18,10 @@ import org.jetbrains.annotations.Nullable; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public class CraftPriceTooltip extends TooltipAdder { - private final Map cachedCraftCosts = new HashMap<>(); + private final static Map cachedCraftCosts = new ConcurrentHashMap<>(); private static final int MAX_RECURSION_DEPTH = 15; public CraftPriceTooltip(int priority) { @@ -28,7 +29,7 @@ public class CraftPriceTooltip extends TooltipAdder { } @Override - public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List lines) { + public void addToTooltip(@Nullable Slot focusedSloFt, ItemStack stack, List lines) { if (SkyblockerConfigManager.get().general.itemTooltip.enableCraftingCost == GeneralConfig.Craft.OFF) return; String internalID = stack.getSkyblockId(); @@ -46,7 +47,6 @@ public class CraftPriceTooltip extends TooltipAdder { if (neuRecipes.isEmpty() || neuRecipes.getFirst().getClass().equals(io.github.moulberry.repo.data.NEUKatUpgradeRecipe.class)) return; double totalCraftCost = getItemCost(neuRecipes.getFirst(), 0); - cachedCraftCosts.clear(); if (totalCraftCost == 0) return; @@ -93,4 +93,8 @@ public class CraftPriceTooltip extends TooltipAdder { } return totalCraftCost; } + + public static void clearCache() { + cachedCraftCosts.clear(); + } } -- cgit From bcfe90d6d22d7dac119e28d77c8e5b27fc1c7a1a Mon Sep 17 00:00:00 2001 From: nmccullagh Date: Fri, 5 Jul 2024 13:48:27 +0100 Subject: schedule cache invalidation with price updates, and with config changes --- .../de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java | 3 +++ .../skyblocker/skyblock/item/tooltip/TooltipInfoType.java | 10 ++-------- 2 files changed, 5 insertions(+), 8 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java index cc3d2099..97a73a80 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.config.configs.GeneralConfig; +import de.hysky.skyblocker.skyblock.item.tooltip.adders.CraftPriceTooltip; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.scheduler.Scheduler; @@ -128,6 +129,8 @@ public class ItemTooltip { LOGGER.error("Encountered unknown error while downloading tooltip data", e); return null; }); + + CraftPriceTooltip.clearCache(); }, 1200, true); } } \ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java index dfb97bee..92adf49d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java @@ -1,29 +1,23 @@ package de.hysky.skyblocker.skyblock.item.tooltip; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.google.gson.stream.JsonReader; import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.utils.Http; import de.hysky.skyblocker.utils.Utils; +import org.jetbrains.annotations.Nullable; -import java.io.StringReader; import java.net.http.HttpHeaders; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import java.util.function.Predicate; -import org.jetbrains.annotations.Nullable; - public enum TooltipInfoType implements Runnable { NPC("https://hysky.de/api/npcprice", itemTooltip -> itemTooltip.enableNPCPrice, true), BAZAAR("https://hysky.de/api/bazaar", itemTooltip -> itemTooltip.enableBazaarPrice || itemTooltip.enableCraftingCost.getOrder() != null || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableBazaarPrice, false), - LOWEST_BINS("https://hysky.de/api/auctions/lowestbins", itemTooltip -> itemTooltip.enableLowestBIN || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableLowestBIN, false), + LOWEST_BINS("https://hysky.de/api/auctions/lowestbins", itemTooltip -> itemTooltip.enableLowestBIN || itemTooltip.enableCraftingCost.getOrder() != null || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableLowestBIN, false), ONE_DAY_AVERAGE("https://hysky.de/api/auctions/lowestbins/average/1day.json", itemTooltip -> itemTooltip.enableAvgBIN, false), THREE_DAY_AVERAGE("https://hysky.de/api/auctions/lowestbins/average/3day.json", itemTooltip -> itemTooltip.enableAvgBIN || SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.enableAuctionHouse, itemTooltip -> itemTooltip.enableAvgBIN, false), MOTES("https://hysky.de/api/motesprice", itemTooltip -> itemTooltip.enableMotesPrice, itemTooltip -> itemTooltip.enableMotesPrice && Utils.isInTheRift(), true), -- cgit From b22cf286d971af6e2c27f4dfcbe6e1829935a5b7 Mon Sep 17 00:00:00 2001 From: nmccullagh Date: Fri, 5 Jul 2024 14:41:37 +0100 Subject: add exception handling for null cases --- .../item/tooltip/adders/CraftPriceTooltip.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java index c19c2f53..f36254f3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java @@ -14,6 +14,8 @@ import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.List; @@ -21,6 +23,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class CraftPriceTooltip extends TooltipAdder { + protected static final Logger LOGGER = LoggerFactory.getLogger(CraftPriceTooltip.class.getName()); private final static Map cachedCraftCosts = new ConcurrentHashMap<>(); private static final int MAX_RECURSION_DEPTH = 15; @@ -46,13 +49,18 @@ public class CraftPriceTooltip extends TooltipAdder { List neuRecipes = neuItem.getRecipes(); if (neuRecipes.isEmpty() || neuRecipes.getFirst().getClass().equals(io.github.moulberry.repo.data.NEUKatUpgradeRecipe.class)) return; - double totalCraftCost = getItemCost(neuRecipes.getFirst(), 0); + try { + double totalCraftCost = getItemCost(neuRecipes.getFirst(), 0); - if (totalCraftCost == 0) return; + if (totalCraftCost == 0) return; - neuRecipes.getFirst().getAllOutputs().stream().findFirst().ifPresent(neuIngredient -> - lines.add(Text.literal(String.format("%-20s", "Crafting Price:")).formatted(Formatting.GOLD) - .append(ItemTooltip.getCoinsMessage(totalCraftCost / neuIngredient.getAmount(), stack.getCount())))); + neuRecipes.getFirst().getAllOutputs().stream().findFirst().ifPresent(neuIngredient -> + lines.add(Text.literal(String.format("%-20s", "Crafting Price:")).formatted(Formatting.GOLD) + .append(ItemTooltip.getCoinsMessage(totalCraftCost / neuIngredient.getAmount(), stack.getCount())))); + + } catch (Exception e) { + LOGGER.error("[Skyblocker Craft Price] Error calculating craftprice tooltip for: " + internalID, e); + } } private double getItemCost(NEURecipe recipe, int depth) { -- cgit From fb16a9bebc82698c5149a11426cace87edd5a627 Mon Sep 17 00:00:00 2001 From: nmccullagh Date: Sat, 6 Jul 2024 11:34:36 +0100 Subject: feedback2 --- .../skyblock/item/tooltip/adders/CraftPriceTooltip.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java index f36254f3..32c36c9a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java @@ -24,7 +24,7 @@ import java.util.concurrent.ConcurrentHashMap; public class CraftPriceTooltip extends TooltipAdder { protected static final Logger LOGGER = LoggerFactory.getLogger(CraftPriceTooltip.class.getName()); - private final static Map cachedCraftCosts = new ConcurrentHashMap<>(); + private static final Map cachedCraftCosts = new ConcurrentHashMap<>(); private static final int MAX_RECURSION_DEPTH = 15; public CraftPriceTooltip(int priority) { @@ -47,16 +47,16 @@ public class CraftPriceTooltip extends TooltipAdder { if (neuItem == null) return; List neuRecipes = neuItem.getRecipes(); - if (neuRecipes.isEmpty() || neuRecipes.getFirst().getClass().equals(io.github.moulberry.repo.data.NEUKatUpgradeRecipe.class)) return; + if (neuRecipes.isEmpty() || neuRecipes.getFirst() instanceof io.github.moulberry.repo.data.NEUKatUpgradeRecipe) return; try { double totalCraftCost = getItemCost(neuRecipes.getFirst(), 0); if (totalCraftCost == 0) return; - neuRecipes.getFirst().getAllOutputs().stream().findFirst().ifPresent(neuIngredient -> + neuRecipes.getFirst().getAllOutputs().stream().findFirst().ifPresent(outputIngredient -> lines.add(Text.literal(String.format("%-20s", "Crafting Price:")).formatted(Formatting.GOLD) - .append(ItemTooltip.getCoinsMessage(totalCraftCost / neuIngredient.getAmount(), stack.getCount())))); + .append(ItemTooltip.getCoinsMessage(totalCraftCost / outputIngredient.getAmount(), stack.getCount())))); } catch (Exception e) { LOGGER.error("[Skyblocker Craft Price] Error calculating craftprice tooltip for: " + internalID, e); -- cgit From a8de449aad9cb82e2fd936d9e2a60858947db99c Mon Sep 17 00:00:00 2001 From: nmccullagh Date: Sat, 6 Jul 2024 12:46:28 +0100 Subject: Better sack support ig --- .../skyblock/item/tooltip/adders/CraftPriceTooltip.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java index 32c36c9a..f7af446e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java @@ -13,6 +13,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.apache.commons.lang3.math.NumberUtils; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,9 +55,15 @@ public class CraftPriceTooltip extends TooltipAdder { if (totalCraftCost == 0) return; + int amountInStack; + if (lines.get(1).getString().endsWith("Sack")) { + String line = lines.get(3).getSiblings().get(1).getString().replace(",", ""); + amountInStack = NumberUtils.isParsable(line) && !line.equals("0") ? Integer.parseInt(line) : stack.getCount(); + } else amountInStack = stack.getCount(); + neuRecipes.getFirst().getAllOutputs().stream().findFirst().ifPresent(outputIngredient -> lines.add(Text.literal(String.format("%-20s", "Crafting Price:")).formatted(Formatting.GOLD) - .append(ItemTooltip.getCoinsMessage(totalCraftCost / outputIngredient.getAmount(), stack.getCount())))); + .append(ItemTooltip.getCoinsMessage(totalCraftCost / outputIngredient.getAmount(), amountInStack)))); } catch (Exception e) { LOGGER.error("[Skyblocker Craft Price] Error calculating craftprice tooltip for: " + internalID, e); -- cgit