From d22fef3c52701192afd1dd4166fcdb1b9918dfdc Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Tue, 25 Jun 2024 13:49:34 -0400 Subject: Implement new year cake bag cake years --- .../utils/networth/SkyblockItemMetadata.java | 30 +++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadata.java b/src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadata.java index 0eea3971..f177a0e1 100644 --- a/src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadata.java +++ b/src/main/java/de/hysky/skyblocker/utils/networth/SkyblockItemMetadata.java @@ -1,5 +1,6 @@ package de.hysky.skyblocker.utils.networth; +import java.io.ByteArrayInputStream; import java.util.List; import java.util.Map; import java.util.Optional; @@ -10,6 +11,7 @@ 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; @@ -25,7 +27,10 @@ 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 enchantments, int rarityUpgrades, Optional reforge, int upgradeLevel, DungeonUpgrades dungeonUpgrades, @@ -52,6 +57,29 @@ public record SkyblockItemMetadata(Object2IntMap enchantments, int rarit 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(), - itemId.equals("NEW_YEAR_CAKE_BAG") ? IntList.of() : IntList.of()); + 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(); } } -- cgit