aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-08-08 14:02:31 -0400
committerAaron <51387595+AzureAaron@users.noreply.github.com>2024-08-08 14:02:31 -0400
commit1081f8305337dba75b53c4ef684e2002472db668 (patch)
tree2d9a4a4a1433bbae08960f1fad219cba21804099 /src/main/java/de
parenta7e992c1207b9abb19c20fb4c490abd463c1e2ae (diff)
downloadSkyblocker-1081f8305337dba75b53c4ef684e2002472db668.tar.gz
Skyblocker-1081f8305337dba75b53c4ef684e2002472db668.tar.bz2
Skyblocker-1081f8305337dba75b53c4ef684e2002472db668.zip
Networth item handling rewrite
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/debug/Debug.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EstimatedItemValueTooltip.java19
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/CodecUtils.java22
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ItemUtils.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/networth/NetworthCalculator.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/networth/NetworthDataSuppliers.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadata.java85
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadataRetriever.java42
8 files changed, 68 insertions, 121 deletions
diff --git a/src/main/java/de/hysky/skyblocker/debug/Debug.java b/src/main/java/de/hysky/skyblocker/debug/Debug.java
index d35c58fa..38f50a89 100644
--- a/src/main/java/de/hysky/skyblocker/debug/Debug.java
+++ b/src/main/java/de/hysky/skyblocker/debug/Debug.java
@@ -9,6 +9,7 @@ import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.datafixer.ItemStackComponentizationFixer;
import de.hysky.skyblocker.utils.networth.NetworthCalculator;
+import net.azureaaron.networth.Calculation;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EstimatedItemValueTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EstimatedItemValueTooltip.java
index 83282f7a..cd2c587a 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EstimatedItemValueTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EstimatedItemValueTooltip.java
@@ -22,14 +22,17 @@ public class EstimatedItemValueTooltip extends SimpleTooltipAdder {
@Override
public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) {
- if (TooltipInfoType.ESTIMATED_ITEM_VALUE.isTooltipEnabled()) {
- NetworthResult result = NetworthCalculator.getItemNetworth(stack);
-
- if (result.price() > 0) {
- lines.add(Text.literal(String.format("%-20s", "Est. Item Value:"))
- .formatted(Formatting.GOLD)
- .append(ItemTooltip.getCoinsMessage(result.price(), stack.getCount(), true)));
- }
+ NetworthResult result = NetworthCalculator.getItemNetworth(stack);
+
+ if (result.price() > 0) {
+ lines.add(Text.literal(String.format("%-20s", "Est. Item Value:"))
+ .formatted(Formatting.GOLD)
+ .append(ItemTooltip.getCoinsMessage(result.price(), stack.getCount(), true)));
}
}
+
+ @Override
+ public boolean isEnabled() {
+ return TooltipInfoType.ESTIMATED_ITEM_VALUE.isTooltipEnabled();
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/CodecUtils.java b/src/main/java/de/hysky/skyblocker/utils/CodecUtils.java
deleted file mode 100644
index d40559a3..00000000
--- a/src/main/java/de/hysky/skyblocker/utils/CodecUtils.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package de.hysky.skyblocker.utils;
-
-import com.mojang.serialization.Codec;
-import com.mojang.serialization.DataResult;
-
-import it.unimi.dsi.fastutil.objects.Object2IntMap;
-import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
-import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
-import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
-
-public class CodecUtils {
-
- public static <K> Codec<Object2IntMap<K>> createObject2IntMapCodec(Codec<K> keyCodec) {
- return Codec.unboundedMap(keyCodec, Codec.INT)
- .flatComapMap(Object2IntOpenHashMap::new, map -> DataResult.success(new Object2IntOpenHashMap<>(map)));
- }
-
- public static <K, V> Codec<Object2ObjectMap<K, V>> createObject2ObjectMapCodec(Codec<K> keyCodec, Codec<V> valueCodec) {
- return Codec.unboundedMap(keyCodec, valueCodec)
- .flatComapMap(Object2ObjectOpenHashMap::new, map -> DataResult.success(new Object2ObjectOpenHashMap<>(map)));
- }
-}
diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
index 1e7753cb..26ebac2a 100644
--- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
+++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
@@ -20,6 +20,7 @@ import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
import it.unimi.dsi.fastutil.doubles.DoubleBooleanPair;
import it.unimi.dsi.fastutil.ints.IntIntPair;
import it.unimi.dsi.fastutil.longs.LongBooleanPair;
+import net.azureaaron.networth.Calculation;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
import net.minecraft.component.ComponentChanges;
import net.minecraft.component.ComponentHolder;
diff --git a/src/main/java/de/hysky/skyblocker/utils/networth/NetworthCalculator.java b/src/main/java/de/hysky/skyblocker/utils/networth/NetworthCalculator.java
index 0baa5ad7..2b4094e0 100644
--- a/src/main/java/de/hysky/skyblocker/utils/networth/NetworthCalculator.java
+++ b/src/main/java/de/hysky/skyblocker/utils/networth/NetworthCalculator.java
@@ -1,5 +1,7 @@
package de.hysky.skyblocker.utils.networth;
+import com.mojang.serialization.Dynamic;
+
import de.hysky.skyblocker.utils.ItemUtils;
import net.azureaaron.networth.ItemCalculator;
import net.azureaaron.networth.NetworthResult;
@@ -7,12 +9,17 @@ import net.azureaaron.networth.item.SkyblockItemStack;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.NbtComponent;
import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NbtCompound;
+import net.minecraft.nbt.NbtElement;
+import net.minecraft.nbt.NbtOps;
public class NetworthCalculator {
public static NetworthResult getItemNetworth(ItemStack stack) {
String itemId = ItemUtils.getItemId(stack);
- SkyblockItemStack skyblockItemStack = SkyblockItemStack.of(itemId, stack.getCount(), SkyblockItemMetadata.of(stack.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT).copyNbt(), itemId));
+ NbtCompound customData = stack.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT).copyNbt();
+ Dynamic<NbtElement> customDataDynamic = new Dynamic<>(NbtOps.INSTANCE, customData);
+ SkyblockItemStack skyblockItemStack = SkyblockItemStack.of(itemId, stack.getCount(), customDataDynamic, SkyblockItemMetadataRetriever.of(customData, itemId));
return ItemCalculator.calculate(skyblockItemStack, NetworthDataSuppliers::getPrice, NetworthDataSuppliers.getSkyblockItemData());
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/networth/NetworthDataSuppliers.java b/src/main/java/de/hysky/skyblocker/utils/networth/NetworthDataSuppliers.java
index 86e9ed9f..eadca8bb 100644
--- a/src/main/java/de/hysky/skyblocker/utils/networth/NetworthDataSuppliers.java
+++ b/src/main/java/de/hysky/skyblocker/utils/networth/NetworthDataSuppliers.java
@@ -1,7 +1,5 @@
package de.hysky.skyblocker.utils.networth;
-import java.util.List;
-
import org.slf4j.Logger;
import com.google.gson.JsonArray;
@@ -9,21 +7,23 @@ import com.mojang.logging.LogUtils;
import com.mojang.serialization.JsonOps;
import de.hysky.skyblocker.utils.ItemUtils;
+import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
+import it.unimi.dsi.fastutil.objects.Object2ObjectMaps;
import net.azureaaron.networth.data.SkyblockItemData;
public class NetworthDataSuppliers {
private static final Logger LOGGER = LogUtils.getLogger();
- private static List<SkyblockItemData> itemData = List.of();
+ private static Object2ObjectMap<String, SkyblockItemData> itemData = Object2ObjectMaps.emptyMap();
public static void updateSkyblockItemData(JsonArray items) {
try {
- itemData = SkyblockItemData.LIST_CODEC.parse(JsonOps.INSTANCE, items).getOrThrow();
+ itemData = SkyblockItemData.MAP_CODEC.parse(JsonOps.INSTANCE, items).getOrThrow();
} catch (Exception e) {
LOGGER.error("[Skyblocker Networth Data Supplier] Failed to parse items data!", e);
}
}
- static List<SkyblockItemData> getSkyblockItemData() {
+ static Object2ObjectMap<String, SkyblockItemData> getSkyblockItemData() {
return itemData;
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadata.java b/src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadata.java
deleted file mode 100644
index f177a0e1..00000000
--- a/src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadata.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package de.hysky.skyblocker.utils.networth;
-
-import java.io.ByteArrayInputStream;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-import com.google.gson.JsonParser;
-import com.mojang.datafixers.util.Either;
-import com.mojang.serialization.Codec;
-import com.mojang.serialization.JsonOps;
-
-import de.hysky.skyblocker.utils.CodecUtils;
-import it.unimi.dsi.fastutil.ints.IntArrayList;
-import it.unimi.dsi.fastutil.ints.IntList;
-import it.unimi.dsi.fastutil.objects.Object2IntMap;
-import net.azureaaron.networth.item.AccessoryUpgrades;
-import net.azureaaron.networth.item.AuctionBidInfo;
-import net.azureaaron.networth.item.Cosmetics;
-import net.azureaaron.networth.item.DrillInfo;
-import net.azureaaron.networth.item.DungeonUpgrades;
-import net.azureaaron.networth.item.GearUpgrades;
-import net.azureaaron.networth.item.Gemstone;
-import net.azureaaron.networth.item.ItemMetadata;
-import net.azureaaron.networth.item.LimitedEditionInfo;
-import net.azureaaron.networth.item.MiscModifiers;
-import net.azureaaron.networth.item.PetInfo;
-import net.minecraft.nbt.NbtCompound;
-import net.minecraft.nbt.NbtElement;
-import net.minecraft.nbt.NbtIo;
-import net.minecraft.nbt.NbtList;
-import net.minecraft.nbt.NbtOps;
-import net.minecraft.nbt.NbtSizeTracker;
-import net.minecraft.util.Util;
-
-public record SkyblockItemMetadata(Object2IntMap<String> enchantments, int rarityUpgrades, Optional<String> reforge, int upgradeLevel, DungeonUpgrades dungeonUpgrades,
- GearUpgrades gearUpgrades, List<String> gemstoneSlots, Map<String, Either<String, Gemstone>> gemstones, DrillInfo drillInfo, Object2IntMap<String> attributes,
- AuctionBidInfo auctionBidInfo, MiscModifiers miscModifiers, AccessoryUpgrades accessoryUpgrades, Cosmetics cosmetics, PetInfo petInfo,
- LimitedEditionInfo limitedEditionInfo, IntList cakeBagCakeYears) implements ItemMetadata {
- private static final Codec<Object2IntMap<String>> OBJECT_2_INT_MAP_CODEC = CodecUtils.createObject2IntMapCodec(Codec.STRING);
-
- static SkyblockItemMetadata of(NbtCompound customData, String itemId) {
- return new SkyblockItemMetadata(
- OBJECT_2_INT_MAP_CODEC.parse(NbtOps.INSTANCE, customData.getCompound("enchantments")).getOrThrow(),
- customData.getInt("rarity_upgrades"),
- customData.contains("modifier") ? Optional.of(customData.getString("modifier")) : Optional.empty(),
- customData.getInt("upgrade_level"),
- DungeonUpgrades.CODEC.parse(NbtOps.INSTANCE, customData).getOrThrow(),
- GearUpgrades.CODEC.parse(NbtOps.INSTANCE, customData).getOrThrow(),
- customData.getCompound("gems").getList("unlocked_slots", NbtElement.STRING_TYPE).stream().map(NbtElement::asString).toList(),
- Util.make(() -> Gemstone.MAP_EITHER_CODEC.parse(NbtOps.INSTANCE, Util.make(customData.getCompound("gems").copy(), gemsCopy -> gemsCopy.remove("unlocked_slots"))).getOrThrow()),
- DrillInfo.CODEC.parse(NbtOps.INSTANCE, customData).getOrThrow(),
- OBJECT_2_INT_MAP_CODEC.parse(NbtOps.INSTANCE, customData.getCompound("attributes")).getOrThrow(),
- AuctionBidInfo.CODEC.parse(NbtOps.INSTANCE, customData).getOrThrow(),
- MiscModifiers.CODEC.parse(NbtOps.INSTANCE, customData).getOrThrow(),
- AccessoryUpgrades.CODEC.parse(NbtOps.INSTANCE, customData).getOrThrow(),
- Cosmetics.CODEC.parse(NbtOps.INSTANCE, customData).getOrThrow(),
- customData.contains("petInfo") ? PetInfo.CODEC.parse(JsonOps.INSTANCE, JsonParser.parseString(customData.getString("petInfo"))).getOrThrow() : null,
- LimitedEditionInfo.CODEC.parse(NbtOps.INSTANCE, customData).getOrThrow(),
- getCakeBagCakeYears(customData, itemId));
- }
-
- private static IntList getCakeBagCakeYears(NbtCompound customData, String itemId) {
- if (itemId.equals("NEW_YEAR_CAKE_BAG") && customData.contains("new_year_cake_bag_data")) {
- try {
- NbtCompound uncompressed = NbtIo.readCompressed(new ByteArrayInputStream(customData.getByteArray("new_year_cake_bag_data")), NbtSizeTracker.ofUnlimitedBytes());
- NbtList items = uncompressed.getList("i", NbtElement.COMPOUND_TYPE);
- IntList cakeYears = new IntArrayList();
-
- for (NbtElement element : items) {
- if (element instanceof NbtCompound compound && compound.getCompound("tag").contains("ExtraAttributes")) {
- NbtCompound extraAttributes = compound.getCompound("tag").getCompound("ExtraAttributes");
- int cakeYear = extraAttributes.getInt("new_years_cake"); //You can only put new year cakes in the bag so we don't need to check for it being one
-
- cakeYears.add(cakeYear);
- }
- }
-
- return cakeYears;
- } catch (Exception ignored) {}
- }
-
- return new IntArrayList();
- }
-}
diff --git a/src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadataRetriever.java b/src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadataRetriever.java
new file mode 100644
index 00000000..29c2f815
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadataRetriever.java
@@ -0,0 +1,42 @@
+package de.hysky.skyblocker.utils.networth;
+
+import java.io.ByteArrayInputStream;
+
+import it.unimi.dsi.fastutil.ints.IntArrayList;
+import it.unimi.dsi.fastutil.ints.IntList;
+import net.azureaaron.networth.item.ItemMetadataRetriever;
+import net.minecraft.nbt.NbtCompound;
+import net.minecraft.nbt.NbtElement;
+import net.minecraft.nbt.NbtIo;
+import net.minecraft.nbt.NbtList;
+import net.minecraft.nbt.NbtSizeTracker;
+
+record SkyblockItemMetadataRetriever(IntList cakeBagCakeYears) implements ItemMetadataRetriever {
+
+ static SkyblockItemMetadataRetriever of(NbtCompound customData, String itemId) {
+ return new SkyblockItemMetadataRetriever(getCakeBagCakeYears(customData, itemId));
+ }
+
+ private static IntList getCakeBagCakeYears(NbtCompound customData, String itemId) {
+ if (itemId.equals("NEW_YEAR_CAKE_BAG") && customData.contains("new_year_cake_bag_data")) {
+ try {
+ NbtCompound uncompressed = NbtIo.readCompressed(new ByteArrayInputStream(customData.getByteArray("new_year_cake_bag_data")), NbtSizeTracker.ofUnlimitedBytes());
+ NbtList items = uncompressed.getList("i", NbtElement.COMPOUND_TYPE);
+ IntList cakeYears = new IntArrayList();
+
+ for (NbtElement element : items) {
+ if (element instanceof NbtCompound compound && compound.getCompound("tag").contains("ExtraAttributes")) {
+ NbtCompound extraAttributes = compound.getCompound("tag").getCompound("ExtraAttributes");
+ int cakeYear = extraAttributes.getInt("new_years_cake"); //You can only put new year cakes in the bag so we don't need to check for it being one
+
+ cakeYears.add(cakeYear);
+ }
+ }
+
+ return cakeYears;
+ } catch (Exception ignored) {}
+ }
+
+ return new IntArrayList();
+ }
+}