aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/item
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-03-02 15:16:27 -0500
committerAaron <51387595+AzureAaron@users.noreply.github.com>2024-04-26 16:23:20 -0400
commit4e2924407645b04c30d4a2823a1d9d0983c2c790 (patch)
treeee6d4ba29f50d3cdd76216fee0193dad07752627 /src/main/java/de/hysky/skyblocker/skyblock/item
parentcc00542e78fd87e0b554ab2a74d1cb193feabbb2 (diff)
downloadSkyblocker-4e2924407645b04c30d4a2823a1d9d0983c2c790.tar.gz
Skyblocker-4e2924407645b04c30d4a2823a1d9d0983c2c790.tar.bz2
Skyblocker-4e2924407645b04c30d4a2823a1d9d0983c2c790.zip
24w09a
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/item')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java69
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java14
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, "");
}
}
}