aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-08-24 04:23:24 -0400
committerAaron <51387595+AzureAaron@users.noreply.github.com>2024-08-24 04:23:24 -0400
commit99d2249714207ce99019db30a6c0251b59cfc326 (patch)
tree3f18dbb9648c24e2bc7d5d83e3c71d42e78bfd05 /src/main/java
parent7a9fbebc41d55fa0bb3275c79eaba2ba3604b916 (diff)
downloadSkyblocker-99d2249714207ce99019db30a6c0251b59cfc326.tar.gz
Skyblocker-99d2249714207ce99019db30a6c0251b59cfc326.tar.bz2
Skyblocker-99d2249714207ce99019db30a6c0251b59cfc326.zip
Tooltip Info Rework + Performance improvements
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/AccessoriesHelper.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java165
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CraftPriceTooltip.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java21
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EstimatedItemValueTooltip.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/info/DataTooltipInfo.java97
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/info/DataTooltipInfoType.java54
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/info/SimpleTooltipInfo.java19
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/info/TooltipInfoType.java59
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java77
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/BazaarProduct.java19
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/CodecUtils.java18
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ItemUtils.java24
26 files changed, 376 insertions, 278 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java
index ecffab3e..eb0fa9b1 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java
@@ -7,7 +7,7 @@ import de.hysky.skyblocker.skyblock.auction.widgets.AuctionTypeWidget;
import de.hysky.skyblocker.skyblock.auction.widgets.CategoryTabWidget;
import de.hysky.skyblocker.skyblock.auction.widgets.RarityWidget;
import de.hysky.skyblocker.skyblock.auction.widgets.SortWidget;
-import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.render.gui.AbstractCustomHypixelGUI;
import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap;
@@ -294,11 +294,8 @@ public class AuctionBrowserScreen extends AbstractCustomHypixelGUI<AuctionHouseS
String coins = split[1].replace(",", "").replace("coins", "").trim();
try {
long parsed = Long.parseLong(coins);
- JsonElement jsonElement = TooltipInfoType.THREE_DAY_AVERAGE.getData().get(stack.getNeuName());
- if (jsonElement == null) break;
- else {
- isSlotHighlighted.put(slotId, jsonElement.getAsDouble() > parsed);
- }
+ double price = TooltipInfoType.THREE_DAY_AVERAGE.getData().getDouble(stack.getNeuName());
+ isSlotHighlighted.put(slotId, price > parsed);
} catch (Exception e) {
LOGGER.error("[Skyblocker Fancy Auction House] Failed to parse BIN price", e);
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java
index 842bbff9..9b8c5a2c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java
@@ -4,7 +4,7 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder;
import de.hysky.skyblocker.skyblock.item.slottext.SlotText;
import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip;
-import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
import de.hysky.skyblocker.skyblock.itemlist.ItemRepository;
import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.ItemUtils;
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java
index 51b52d6b..954c9f27 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java
@@ -1,7 +1,7 @@
package de.hysky.skyblocker.skyblock.garden;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
import de.hysky.skyblocker.skyblock.itemlist.ItemRepository;
import de.hysky.skyblocker.skyblock.tabhud.util.Ico;
import de.hysky.skyblocker.skyblock.tabhud.widget.Widget;
@@ -93,7 +93,7 @@ public class FarmingHudWidget extends Widget {
*/
private String getPriceText(String cropItemId, float cropsPerMinute) {
DoubleBooleanPair itemBazaarPrice = ItemUtils.getItemPrice(cropItemId); // Gets the bazaar sell price of the crop.
- double itemNpcPrice = TooltipInfoType.NPC.hasOrNullWarning(cropItemId) ? TooltipInfoType.NPC.getData().get(cropItemId).getAsDouble() : Double.MIN_VALUE; // Gets the npc sell price of the crop or set to the min double value if it doesn't exist.
+ double itemNpcPrice = TooltipInfoType.NPC.hasOrNullWarning(cropItemId) ? TooltipInfoType.NPC.getData().getDouble(cropItemId) : Double.MIN_VALUE; // Gets the npc sell price of the crop or set to the min double value if it doesn't exist.
boolean shouldUseNpcPrice = itemNpcPrice > itemBazaarPrice.leftDouble(); // Use the npc price if it's more than the bazaar sell price.
double price = shouldUseNpcPrice ? itemNpcPrice : itemBazaarPrice.leftDouble(); // same as above
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/AccessoriesHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/AccessoriesHelper.java
index 992206ad..8c9190ca 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/AccessoriesHelper.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/AccessoriesHelper.java
@@ -1,6 +1,5 @@
package de.hysky.skyblocker.skyblock.item.tooltip;
-import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.mojang.logging.LogUtils;
import com.mojang.serialization.Codec;
@@ -8,6 +7,7 @@ import com.mojang.serialization.JsonOps;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.mojang.util.UndashedUuid;
import de.hysky.skyblocker.SkyblockerMod;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.Utils;
import it.unimi.dsi.fastutil.Pair;
@@ -165,12 +165,8 @@ public class AccessoriesHelper {
return Pair.of(AccessoryReport.MISSING, String.format("(%d/%d)", accessory.tier(), highestTierInFamily));
}
- static void refreshData(JsonObject data) {
- try {
- ACCESSORY_DATA = Accessory.MAP_CODEC.parse(JsonOps.INSTANCE, data).getOrThrow();
- } catch (Exception e) {
- LOGGER.error("[Skyblocker Accessory Helper] Failed to parse data!", e);
- }
+ public static void refreshData(Map<String, Accessory> data) {
+ ACCESSORY_DATA = data;
}
private record ProfileAccessoryData(Int2ObjectOpenHashMap<ObjectOpenHashSet<String>> pages) {
@@ -191,13 +187,13 @@ public class AccessoriesHelper {
* @author AzureAaron
* @implSpec <a href="https://github.com/AzureAaron/aaron-mod/blob/1.20/src/main/java/net/azureaaron/mod/commands/MagicalPowerCommand.java#L475">Aaron's Mod</a>
*/
- private record Accessory(String id, Optional<String> family, int tier) {
+ public record Accessory(String id, Optional<String> family, int tier) {
private static final Codec<Accessory> CODEC = RecordCodecBuilder.create(instance -> instance.group(
Codec.STRING.fieldOf("id").forGetter(Accessory::id),
Codec.STRING.optionalFieldOf("family").forGetter(Accessory::family),
Codec.INT.optionalFieldOf("tier", 0).forGetter(Accessory::tier)
).apply(instance, Accessory::new));
- private static final Codec<Map<String, Accessory>> MAP_CODEC = Codec.unboundedMap(Codec.STRING, CODEC);
+ public static final Codec<Map<String, Accessory>> MAP_CODEC = Codec.unboundedMap(Codec.STRING, CODEC);
private boolean hasFamily() {
return family.isPresent();
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 60a03118..5728bdae 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
@@ -3,6 +3,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.skyblock.item.tooltip.info.TooltipInfoType;
import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.Utils;
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
deleted file mode 100644
index 04d0d81c..00000000
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package de.hysky.skyblocker.skyblock.item.tooltip;
-
-import com.google.gson.JsonObject;
-import de.hysky.skyblocker.SkyblockerMod;
-import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.config.configs.GeneralConfig;
-import de.hysky.skyblocker.skyblock.item.tooltip.adders.EssenceShopPrice;
-import de.hysky.skyblocker.utils.Http;
-import de.hysky.skyblocker.utils.Utils;
-import org.jetbrains.annotations.Nullable;
-
-import java.net.http.HttpHeaders;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.function.Consumer;
-import java.util.function.Predicate;
-
-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 || itemTooltip.enableEstimatedItemValue || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue || itemTooltip.showEssenceCost, itemTooltip -> itemTooltip.enableBazaarPrice, false, EssenceShopPrice::refreshEssencePrices),
- LOWEST_BINS("https://hysky.de/api/auctions/lowestbins", itemTooltip -> itemTooltip.enableLowestBIN || itemTooltip.enableCraftingCost.getOrder() != null || itemTooltip.enableEstimatedItemValue || 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),
- OBTAINED(itemTooltip -> itemTooltip.enableObtainedDate),
- MUSEUM("https://hysky.de/api/museum", itemTooltip -> itemTooltip.enableMuseumInfo, true),
- COLOR("https://hysky.de/api/color", itemTooltip -> itemTooltip.enableExoticTooltip, true),
- ACCESSORIES("https://hysky.de/api/accessories", itemTooltip -> itemTooltip.enableAccessoriesHelper, true, AccessoriesHelper::refreshData),
- ESTIMATED_ITEM_VALUE(itemTooltip -> itemTooltip.enableEstimatedItemValue);
-
- private final String address;
- private final Predicate<GeneralConfig.ItemTooltip> dataEnabled;
- private final Predicate<GeneralConfig.ItemTooltip> tooltipEnabled;
- private @Nullable JsonObject data;
- private final boolean cacheable;
- private long hash;
- private final @Nullable Consumer<JsonObject> callback;
-
- /**
- * Use this for when you're adding tooltip info that has no data associated with it
- */
- TooltipInfoType(Predicate<GeneralConfig.ItemTooltip> enabled) {
- this(null, itemTooltip -> false, enabled, false, null);
- }
-
- /**
- * @param address the address to download the data from
- * @param enabled the predicate to check if the data should be downloaded and the tooltip should be shown
- * @param cacheable whether the data should be cached
- */
- TooltipInfoType(String address, Predicate<GeneralConfig.ItemTooltip> enabled, boolean cacheable) {
- this(address, enabled, enabled, cacheable, null);
- }
-
- /**
- * @param address the address to download the data from
- * @param enabled the predicate to check if the data should be downloaded and the tooltip should be shown
- * @param cacheable whether the data should be cached
- * @param callback called when the {@code data} is refreshed
- */
- TooltipInfoType(String address, Predicate<GeneralConfig.ItemTooltip> enabled, boolean cacheable, Consumer<JsonObject> callback) {
- this(address, enabled, enabled, cacheable, callback);
- }
-
- /**
- * @param address the address to download the data from
- * @param dataEnabled the predicate to check if data should be downloaded
- * @param tooltipEnabled the predicate to check if the tooltip should be shown
- * @param cacheable whether the data should be cached
- */
- TooltipInfoType(String address, Predicate<GeneralConfig.ItemTooltip> dataEnabled, Predicate<GeneralConfig.ItemTooltip> tooltipEnabled, boolean cacheable) {
- this(address, dataEnabled, tooltipEnabled, cacheable, null);
- }
-
- /**
- * @param address the address to download the data from
- * @param dataEnabled the predicate to check if data should be downloaded
- * @param tooltipEnabled the predicate to check if the tooltip should be shown
- * @param cacheable whether the data should be cached
- */
- TooltipInfoType(String address, Predicate<GeneralConfig.ItemTooltip> dataEnabled, Predicate<GeneralConfig.ItemTooltip> tooltipEnabled, boolean cacheable, @Nullable Consumer<JsonObject> callback) {
- this.address = address;
- this.dataEnabled = dataEnabled;
- this.tooltipEnabled = tooltipEnabled;
- this.data = null;
- this.cacheable = cacheable;
- this.callback = callback;
- }
-
- /**
- * @return whether the data should be downloaded
- */
- private boolean isDataEnabled() {
- return dataEnabled.test(ItemTooltip.config);
- }
-
- /**
- * @return whether the tooltip should be shown
- */
- public boolean isTooltipEnabled() {
- return tooltipEnabled.test(ItemTooltip.config);
- }
-
- public @Nullable JsonObject getData() {
- return data;
- }
-
- /**
- * Checks if the data has the given member name and sends a warning message if data is null.
- *
- * @param memberName the member name to check
- * @return whether the data has the given member name or not
- */
- public boolean hasOrNullWarning(String memberName) {
- if (data == null) {
- ItemTooltip.nullWarning();
- return false;
- } else return data.has(memberName);
- }
-
- /**
- * Downloads the data if it is enabled.
- *
- * @param futureList the list to add the future to
- */
- public void downloadIfEnabled(List<CompletableFuture<Void>> futureList) {
- if (isDataEnabled()) {
- download(futureList);
- }
- }
-
- /**
- * Downloads the data.
- *
- * @param futureList the list to add the future to
- */
- public void download(List<CompletableFuture<Void>> futureList) {
- futureList.add(CompletableFuture.runAsync(this));
- }
-
- /**
- * Downloads the data.
- */
- @Override
- public void run() {
- try {
- if (cacheable) {
- HttpHeaders headers = Http.sendHeadRequest(address);
- long hash = Http.getEtag(headers).hashCode() + Http.getLastModified(headers).hashCode();
- if (this.hash == hash) return;
- else this.hash = hash;
- }
- String response = Http.sendGetRequest(address);
- if (response.trim().startsWith("<!DOCTYPE") || response.trim().startsWith("<html")) {
- ItemTooltip.LOGGER.warn("[Skyblocker] Received HTML content for {}. Expected JSON.", this);
- return;
- }
- data = SkyblockerMod.GSON.fromJson(response, JsonObject.class);
-
- if (callback != null) callback.accept(data);
- } catch (Exception e) {
- ItemTooltip.LOGGER.warn("[Skyblocker] Failed to download {} prices!", this, e);
- }
- }
-}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java
index a5e13501..7c540a68 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java
@@ -2,7 +2,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders;
import de.hysky.skyblocker.skyblock.item.tooltip.AccessoriesHelper;
import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder;
-import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
import it.unimi.dsi.fastutil.Pair;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java
index 53a1793e..4d0e32a4 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java
@@ -3,7 +3,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders;
import de.hysky.skyblocker.config.configs.GeneralConfig;
import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip;
import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder;
-import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
import net.minecraft.text.Text;
@@ -36,9 +36,9 @@ public class AvgBinTooltip extends SimpleTooltipAdder {
lines.add(
Text.literal(String.format("%-19s", "1 Day Avg. Price:"))
.formatted(Formatting.GOLD)
- .append(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName) == null
+ .append(!TooltipInfoType.ONE_DAY_AVERAGE.getData().containsKey(neuName)
? Text.literal("No data").formatted(Formatting.RED)
- : ItemTooltip.getCoinsMessage(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), stack.getCount())
+ : ItemTooltip.getCoinsMessage(TooltipInfoType.ONE_DAY_AVERAGE.getData().getDouble(neuName), stack.getCount())
)
);
}
@@ -46,9 +46,9 @@ public class AvgBinTooltip extends SimpleTooltipAdder {
lines.add(
Text.literal(String.format("%-19s", "3 Day Avg. Price:"))
.formatted(Formatting.GOLD)
- .append(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName) == null
+ .append(!TooltipInfoType.THREE_DAY_AVERAGE.getData().containsKey(neuName)
? Text.literal("No data").formatted(Formatting.RED)
- : ItemTooltip.getCoinsMessage(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), stack.getCount())
+ : ItemTooltip.getCoinsMessage(TooltipInfoType.THREE_DAY_AVERAGE.getData().getDouble(neuName), stack.getCount())
)
);
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java
index 03261e88..7c8c60cd 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java
@@ -1,9 +1,9 @@
package de.hysky.skyblocker.skyblock.item.tooltip.adders;
-import com.google.gson.JsonObject;
import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip;
import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder;
-import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
+import de.hysky.skyblocker.utils.BazaarProduct;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
import net.minecraft.text.Text;
@@ -35,17 +35,17 @@ public class BazaarPriceTooltip extends SimpleTooltipAdder {
} else {
amount = stack.getCount();
}
- JsonObject getItem = TooltipInfoType.BAZAAR.getData().getAsJsonObject(skyblockApiId);
+ BazaarProduct product = TooltipInfoType.BAZAAR.getData().get(skyblockApiId);
lines.add(Text.literal(String.format("%-18s", "Bazaar buy Price:"))
.formatted(Formatting.GOLD)
- .append(getItem.get("buyPrice").isJsonNull()
+ .append(product.buyPrice().isEmpty()
? Text.literal("No data").formatted(Formatting.RED)
- : ItemTooltip.getCoinsMessage(getItem.get("buyPrice").getAsDouble(), amount)));
+ : ItemTooltip.getCoinsMessage(product.buyPrice().getAsDouble(), amount)));
lines.add(Text.literal(String.format("%-19s", "Bazaar sell Price:"))
.formatted(Formatting.GOLD)
- .append(getItem.get("sellPrice").isJsonNull()
+ .append(product.sellPrice().isEmpty()
? Text.literal("No data").formatted(Formatting.RED)
- : ItemTooltip.getCoinsMessage(getItem.get("sellPrice").getAsDouble(), amount)));
+ : ItemTooltip.getCoinsMessage(product.sellPrice().getAsDouble(), amount)));
bazaarExist = true;
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java
index 5b78e2cb..e51ed145 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java
@@ -1,7 +1,7 @@
package de.hysky.skyblocker.skyblock.item.tooltip.adders;
import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder;
-import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.ItemUtils;
import net.minecraft.component.DataComponentTypes;
@@ -13,13 +13,9 @@ import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.StringIdentifiable;
import org.jetbrains.annotations.Nullable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.util.List;
public class ColorTooltip extends SimpleTooltipAdder {
- private static final Logger LOGGER = LoggerFactory.getLogger(ColorTooltip.class);
private static final long WITHER_GLITCHED_AFTER_DATE = 1605830400000L;
public ColorTooltip(int priority) {
@@ -69,12 +65,11 @@ public class ColorTooltip extends SimpleTooltipAdder {
}
private static String getExpectedHex(String id) {
- String color = TooltipInfoType.COLOR.getData().get(id).getAsString();
+ String color = TooltipInfoType.COLOR.getData().get(id);
if (color != null) {
String[] RGBValues = color.split(",");
return String.format("%02X%02X%02X", Integer.parseInt(RGBValues[0]), Integer.parseInt(RGBValues[1]), Integer.parseInt(RGBValues[2]));
} else {
- LOGGER.warn("[Skyblocker Exotics] No expected color data found for id {}", id);
return null;
}
}
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 cff36778..943e855d 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
@@ -2,12 +2,15 @@ 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.config.configs.GeneralConfig.Craft;
import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip;
import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder;
-import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
+import de.hysky.skyblocker.utils.BazaarProduct;
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.NEUKatUpgradeRecipe;
import io.github.moulberry.repo.data.NEURecipe;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
@@ -42,7 +45,7 @@ public class CraftPriceTooltip extends SimpleTooltipAdder {
if (neuItem == null) return;
List<NEURecipe> neuRecipes = neuItem.getRecipes();
- if (neuRecipes.isEmpty() || neuRecipes.getFirst() instanceof io.github.moulberry.repo.data.NEUKatUpgradeRecipe) return;
+ if (neuRecipes.isEmpty() || neuRecipes.getFirst() instanceof NEUKatUpgradeRecipe) return;
try {
double totalCraftCost = getItemCost(neuRecipes.getFirst(), 0);
@@ -78,10 +81,11 @@ public class CraftPriceTooltip extends SimpleTooltipAdder {
double itemCost = 0;
- if (TooltipInfoType.BAZAAR.getData().has(inputItemName)) {
- 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();
+ if (TooltipInfoType.BAZAAR.getData().containsKey(inputItemName)) {
+ BazaarProduct product = TooltipInfoType.BAZAAR.getData().get(inputItemName);
+ itemCost = SkyblockerConfigManager.get().general.itemTooltip.enableCraftingCost == Craft.BUY_ORDER ? product.buyPrice().orElse(0d) : product.sellPrice().orElse(0d);
+ } else if (TooltipInfoType.LOWEST_BINS.getData().containsKey(inputItemName)) {
+ itemCost = TooltipInfoType.LOWEST_BINS.getData().getDouble(inputItemName);
}
if (itemCost > 0) {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java
index bc478d50..240a30ed 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java
@@ -1,12 +1,12 @@
package de.hysky.skyblocker.skyblock.item.tooltip.adders;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder;
+import de.hysky.skyblocker.utils.BazaarProduct;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.RegexUtils;
import it.unimi.dsi.fastutil.objects.Object2LongArrayMap;
+import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
import net.minecraft.text.Text;
@@ -16,6 +16,7 @@ import org.jetbrains.annotations.Nullable;
import java.text.NumberFormat;
import java.util.List;
import java.util.Locale;
+import java.util.OptionalDouble;
import java.util.OptionalLong;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -30,14 +31,16 @@ public class EssenceShopPrice extends SimpleTooltipAdder {
super("\\S+ Essence Shop", priority);
}
- public static void refreshEssencePrices(JsonObject data) {
+ public static void refreshEssencePrices(Object2ObjectMap<String, BazaarProduct> data) {
for (String essenceType : ESSENCE_TYPES) {
- JsonElement price = data.get("ESSENCE_" + essenceType);
- if (price == null || !price.isJsonObject()) continue;
- JsonElement sellPrice = price.getAsJsonObject().get("sellPrice");
<