diff options
author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-03-02 15:16:27 -0500 |
---|---|---|
committer | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-04-26 16:23:20 -0400 |
commit | 4e2924407645b04c30d4a2823a1d9d0983c2c790 (patch) | |
tree | ee6d4ba29f50d3cdd76216fee0193dad07752627 /src/main/java/de/hysky/skyblocker/skyblock/item | |
parent | cc00542e78fd87e0b554ab2a74d1cb193feabbb2 (diff) | |
download | Skyblocker-4e2924407645b04c30d4a2823a1d9d0983c2c790.tar.gz Skyblocker-4e2924407645b04c30d4a2823a1d9d0983c2c790.tar.bz2 Skyblocker-4e2924407645b04c30d4a2823a1d9d0983c2c790.zip |
24w09a
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/item')
4 files changed, 53 insertions, 40 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java index 639e98ed..97311220 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java @@ -12,8 +12,8 @@ import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.command.CommandRegistryAccess; -import net.minecraft.item.DyeableItem; import net.minecraft.item.ItemStack; +import net.minecraft.registry.tag.ItemTags; import net.minecraft.text.Text; public class CustomArmorDyeColors { @@ -40,7 +40,7 @@ public class CustomArmorDyeColors { } if (Utils.isOnSkyblock() && heldItem != null) { - if (heldItem.getItem() instanceof DyeableItem) { + if (heldItem.isIn(ItemTags.DYEABLE)) { String itemUuid = ItemUtils.getItemUuid(heldItem); if (!itemUuid.isEmpty()) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java index 3434f026..270622ff 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java @@ -34,11 +34,9 @@ import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Optional; - public class CustomArmorTrims { private static final Logger LOGGER = LoggerFactory.getLogger(CustomArmorTrims.class); - public static final Object2ObjectOpenHashMap<ArmorTrimId, Optional<ArmorTrim>> TRIMS_CACHE = new Object2ObjectOpenHashMap<>(); + public static final Object2ObjectOpenHashMap<ArmorTrimId, ArmorTrim> TRIMS_CACHE = new Object2ObjectOpenHashMap<>(); private static boolean trimsInitialized = false; public static void init() { @@ -65,7 +63,7 @@ public class CustomArmorTrims { // Something went terribly wrong if (trim == null) throw new IllegalStateException("Trim shouldn't be null! [" + "\"" + material + "\",\"" + pattern + "\"]"); - TRIMS_CACHE.put(new ArmorTrimId(material, pattern), Optional.of(trim)); + TRIMS_CACHE.put(new ArmorTrimId(material, pattern), trim); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java index 37de58e6..77cbc953 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java @@ -1,6 +1,11 @@ package de.hysky.skyblocker.skyblock.item.tooltip; +import com.google.gson.JsonParser; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.serialization.Codec; +import com.mojang.serialization.JsonOps; +import com.mojang.serialization.codecs.RecordCodecBuilder; + import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds; @@ -15,18 +20,16 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.inventory.Inventory; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtInt; -import net.minecraft.nbt.NbtIo; -import net.minecraft.nbt.NbtList; import net.minecraft.util.Identifier; -import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.BufferedReader; +import java.io.BufferedWriter; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Objects; +import java.util.ArrayList; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -61,8 +64,13 @@ public class BackpackPreview { String id = MinecraftClient.getInstance().getSession().getUuidOrNull().toString().replaceAll("-", "") + "/" + Utils.getProfileId(); if (!id.equals(loaded)) { saveDir = SkyblockerMod.CONFIG_DIR.resolve("backpack-preview/" + id); - //noinspection ResultOfMethodCallIgnored - saveDir.toFile().mkdirs(); + + try { + Files.createDirectories(saveDir); + } catch (Exception e) { + LOGGER.error("[Skyblocker] Failed to create the backpack preview save directory! Path: {}", saveDir, e); + } + // load storage again because profile id changed loaded = id; loadStorages(); @@ -73,10 +81,10 @@ public class BackpackPreview { private static void loadStorages() { for (int index = 0; index < STORAGE_SIZE; ++index) { storages[index] = null; - Path storageFile = saveDir.resolve(index + ".nbt"); + Path storageFile = saveDir.resolve(index + ".json"); if (Files.isRegularFile(storageFile)) { - try { - storages[index] = Storage.fromNbt(Objects.requireNonNull(NbtIo.read(storageFile))); + try (BufferedReader reader = Files.newBufferedReader(storageFile)) { + storages[index] = Storage.CODEC.parse(JsonOps.INSTANCE, JsonParser.parseReader(reader)).result().orElseThrow(); } catch (Exception e) { LOGGER.error("Failed to load backpack preview file: " + storageFile.getFileName().toString(), e); } @@ -93,11 +101,12 @@ public class BackpackPreview { } private static void saveStorage(int index) { - try { - NbtIo.write(storages[index].toNbt(), saveDir.resolve(index + ".nbt")); + Path storageFile = saveDir.resolve(index + ".json"); + try (BufferedWriter writer = Files.newBufferedWriter(storageFile)) { + SkyblockerMod.GSON.toJson(Storage.CODEC.encodeStart(JsonOps.INSTANCE, storages[index]).result().orElseThrow(), writer); storages[index].markClean(); } catch (Exception e) { - LOGGER.error("Failed to save backpack preview file: " + index + ".nbt", e); + LOGGER.error("Failed to save backpack preview file: " + index + ".json", e); } } @@ -129,7 +138,7 @@ public class BackpackPreview { context.drawTexture(TEXTURE, x, y + rows * 18 + 17, 0, 215, 176, 7); TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - context.drawText(textRenderer, storages[index].name, x + 8, y + 6, 0x404040, false); + context.drawText(textRenderer, storages[index].name(), x + 8, y + 6, 0x404040, false); matrices.translate(0f, 0f, 200f); for (int i = 9; i < storages[index].size(); ++i) { @@ -159,6 +168,10 @@ public class BackpackPreview { } static class Storage { + private static final Codec<Storage> CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.STRING.fieldOf("name").forGetter(Storage::name), + ItemStack.CODEC.listOf().fieldOf("items").forGetter(Storage::getItemList)) + .apply(instance, (name, items) -> Storage.create(name, items))); private final Inventory inventory; private final String name; private boolean dirty; @@ -168,6 +181,10 @@ public class BackpackPreview { this.name = name; this.dirty = dirty; } + + private String name() { + return name; + } private int size() { return inventory.size(); @@ -181,23 +198,19 @@ public class BackpackPreview { dirty = false; } - @NotNull - private static Storage fromNbt(NbtCompound root) { - SimpleInventory inventory = new SimpleInventory(root.getList("list", NbtCompound.COMPOUND_TYPE).stream().map(NbtCompound.class::cast).map(ItemStack::fromNbt).toArray(ItemStack[]::new)); - return new Storage(inventory, root.getString("name"), false); + private static Storage create(String name, List<ItemStack> items) { + SimpleInventory inventory = new SimpleInventory(items.toArray(ItemStack[]::new)); + return new Storage(inventory, name, false); } - @NotNull - private NbtCompound toNbt() { - NbtCompound root = new NbtCompound(); - NbtList list = new NbtList(); + private List<ItemStack> getItemList() { + List<ItemStack> items = new ArrayList<>(); + for (int i = 0; i < size(); ++i) { - list.add(getStack(i).writeNbt(new NbtCompound())); + items.add(getStack(i)); } - root.put("list", list); - root.put("size", NbtInt.of(size())); - root.putString("name", name); - return root; + + return items; } } } 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 562c244c..855a4760 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 @@ -13,13 +13,14 @@ import de.hysky.skyblocker.utils.scheduler.Scheduler; import it.unimi.dsi.fastutil.Pair; import net.minecraft.client.MinecraftClient; import net.minecraft.client.item.TooltipContext; -import net.minecraft.item.DyeableItem; +import net.minecraft.component.type.DyedColorComponent; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; + import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -198,12 +199,13 @@ public class ItemTooltip { } } - if (TooltipInfoType.COLOR.isTooltipEnabledAndHasOrNullWarning(internalID) && stack.getNbt() != null) { + if (TooltipInfoType.COLOR.isTooltipEnabledAndHasOrNullWarning(internalID)) { String uuid = ItemUtils.getItemUuid(stack); boolean hasCustomDye = SkyblockerConfigManager.get().general.customDyeColors.containsKey(uuid) || SkyblockerConfigManager.get().general.customAnimatedDyes.containsKey(uuid); + int dyeColor = DyedColorComponent.getColor(stack, -1); - if (!hasCustomDye && DyeableItem.hasColor(stack)) { - String colorHex = String.format("%06X", DyeableItem.getColor(stack)); + if (!hasCustomDye && dyeColor != -1) { + String colorHex = String.format("%06X", dyeColor); String expectedHex = ExoticTooltip.getExpectedHex(internalID); boolean correctLine = false; @@ -212,13 +214,13 @@ public class ItemTooltip { if (existingTooltip.startsWith("Color: ")) { correctLine = true; - addExoticTooltip(lines, internalID, stack.getNbt(), colorHex, expectedHex, existingTooltip); + addExoticTooltip(lines, internalID, ItemUtils.getCustomData(stack).copyNbt(), colorHex, expectedHex, existingTooltip); break; } } if (!correctLine) { - addExoticTooltip(lines, internalID, stack.getNbt(), colorHex, expectedHex, ""); + addExoticTooltip(lines, internalID, ItemUtils.getCustomData(stack).copyNbt(), colorHex, expectedHex, ""); } } } |