diff options
| author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-08-08 14:02:31 -0400 |
|---|---|---|
| committer | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-08-08 14:02:31 -0400 |
| commit | 1081f8305337dba75b53c4ef684e2002472db668 (patch) | |
| tree | 2d9a4a4a1433bbae08960f1fad219cba21804099 /src/main/java | |
| parent | a7e992c1207b9abb19c20fb4c490abd463c1e2ae (diff) | |
| download | Skyblocker-1081f8305337dba75b53c4ef684e2002472db668.tar.gz Skyblocker-1081f8305337dba75b53c4ef684e2002472db668.tar.bz2 Skyblocker-1081f8305337dba75b53c4ef684e2002472db668.zip | |
Networth item handling rewrite
Diffstat (limited to 'src/main/java')
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(); + } +} |
