diff options
| author | Kevin <92656833+kevinthegreat1@users.noreply.github.com> | 2023-10-14 17:03:49 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-14 17:03:49 -0400 |
| commit | a41b069db0216c571bce269a0ea9866c1d701b87 (patch) | |
| tree | 390fa5d88f79b9f126c46ce5b803aa310f7be0f5 /src/main | |
| parent | ab3f55fc2e81f5594009ecea708a931468ec7ccf (diff) | |
| parent | 4fbcf1b2a4790f3033e97c55cab344abdfaea8d2 (diff) | |
| download | Skyblocker-a41b069db0216c571bce269a0ea9866c1d701b87.tar.gz Skyblocker-a41b069db0216c571bce269a0ea9866c1d701b87.tar.bz2 Skyblocker-a41b069db0216c571bce269a0ea9866c1d701b87.zip | |
Merge pull request #350 from kevinthegreat1/nbt-utils
Refactor NBT Parsing
Diffstat (limited to 'src/main')
21 files changed, 251 insertions, 283 deletions
diff --git a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java index 5875327d..191da283 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.compatibility.emi; -import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; import de.hysky.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe; +import de.hysky.skyblocker.utils.ItemUtils; import dev.emi.emi.api.recipe.EmiCraftingRecipe; import dev.emi.emi.api.recipe.EmiRecipeCategory; import dev.emi.emi.api.stack.Comparison; @@ -16,7 +16,7 @@ public class SkyblockEmiRecipe extends EmiCraftingRecipe { private final String craftText; public SkyblockEmiRecipe(SkyblockCraftingRecipe recipe) { - super(recipe.getGrid().stream().map(EmiStack::of).map(EmiIngredient.class::cast).toList(), EmiStack.of(recipe.getResult()).comparison(Comparison.compareNbt()), Identifier.of("skyblock", ItemRegistry.getInternalName(recipe.getResult()).toLowerCase().replace(';', '_'))); + super(recipe.getGrid().stream().map(EmiStack::of).map(EmiIngredient.class::cast).toList(), EmiStack.of(recipe.getResult()).comparison(Comparison.compareNbt()), Identifier.of("skyblock", ItemUtils.getItemId(recipe.getResult()).toLowerCase().replace(';', '_'))); this.craftText = recipe.getCraftText(); } diff --git a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java index 8db617dc..60e39b79 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.compatibility.rei; import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; import de.hysky.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe; +import de.hysky.skyblocker.utils.ItemUtils; import me.shedaniel.rei.api.client.registry.display.DynamicDisplayGenerator; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; @@ -19,7 +20,11 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); EntryStack<ItemStack> inputItem = EntryStacks.of((ItemStack) entry.getValue()); List<SkyblockCraftingRecipe> filteredRecipes = ItemRegistry.getRecipesStream() - .filter(recipe -> ItemRegistry.getInternalName(recipe.getResult()).equals(ItemRegistry.getInternalName(inputItem.getValue()))) + .filter(recipe -> { + ItemStack itemStack = inputItem.getValue(); + ItemStack itemStack1 = recipe.getResult(); + return ItemUtils.getItemId(itemStack1).equals(ItemUtils.getItemId(itemStack)); + }) .toList(); return Optional.of(generateDisplays(filteredRecipes)); @@ -32,8 +37,10 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator List<SkyblockCraftingRecipe> filteredRecipes = ItemRegistry.getRecipesStream() .filter(recipe -> { for (ItemStack item : recipe.getGrid()) { - if(!ItemRegistry.getInternalName(item).isEmpty() && ItemRegistry.getInternalName(item).equals(ItemRegistry.getInternalName(inputItem.getValue()))) - return true; + if(!ItemUtils.getItemId(item).isEmpty()) { + ItemStack itemStack = inputItem.getValue(); + if (ItemUtils.getItemId(item).equals(ItemUtils.getItemId(itemStack))) return true; + } } return false; }) diff --git a/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java index 02d75409..b9bdb523 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java @@ -2,13 +2,13 @@ package de.hysky.skyblocker.mixin; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.sugar.Local; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.CustomArmorTrims; +import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.minecraft.item.ItemStack; import net.minecraft.item.trim.ArmorTrim; -import net.minecraft.nbt.NbtCompound; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -19,12 +19,9 @@ public class ArmorTrimMixin { @ModifyReturnValue(method = "getTrim", at = @At("RETURN")) private static Optional<ArmorTrim> skyblocker$customArmorTrims(@SuppressWarnings("OptionalUsedAsFieldOrParameterType") Optional<ArmorTrim> original, @Local ItemStack stack) { - NbtCompound nbt = stack.getNbt(); - - if (Utils.isOnSkyblock() && nbt != null && nbt.contains("ExtraAttributes")) { + if (Utils.isOnSkyblock()) { Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customTrims = SkyblockerConfigManager.get().general.customArmorTrims; - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); - String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; + String itemUuid = ItemUtils.getItemUuid(stack); if (customTrims.containsKey(itemUuid)) { CustomArmorTrims.ArmorTrimId trimKey = customTrims.get(itemUuid); diff --git a/src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java b/src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java index 41b8e985..10666874 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java @@ -3,12 +3,13 @@ package de.hysky.skyblocker.mixin; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.sugar.ref.LocalRef; -import dev.cbyrne.betterinject.annotations.Arg; -import dev.cbyrne.betterinject.annotations.Inject; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.AttributeShards; import de.hysky.skyblocker.skyblock.item.ItemCooldowns; +import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; +import dev.cbyrne.betterinject.annotations.Arg; +import dev.cbyrne.betterinject.annotations.Inject; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; @@ -32,40 +33,38 @@ public abstract class DrawContextMixin { @Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) private void skyblocker$renderAttributeShardDisplay(@Arg TextRenderer textRenderer, @Arg ItemStack stack, @Arg(ordinal = 0) int x, @Arg(ordinal = 1) int y, @Local(argsOnly = true) LocalRef<String> countOverride) { - if (!SkyblockerConfigManager.get().general.itemInfoDisplay.attributeShardInfo) return; - - NbtCompound nbt = stack.getNbt(); + if (!SkyblockerConfigManager.get().general.itemInfoDisplay.attributeShardInfo) return; - if (Utils.isOnSkyblock() && nbt != null && nbt.contains("ExtraAttributes")) { - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); + if (Utils.isOnSkyblock()) { + NbtCompound extraAttributes = ItemUtils.getExtraAttributes(stack); - if (extraAttributes.getString("id").equals("ATTRIBUTE_SHARD")) { - NbtCompound attributesTag = extraAttributes.getCompound("attributes"); - String[] attributes = attributesTag.getKeys().toArray(String[]::new); + if (extraAttributes != null && extraAttributes.getString(ItemUtils.ID).equals("ATTRIBUTE_SHARD")) { + NbtCompound attributesTag = extraAttributes.getCompound("attributes"); + String[] attributes = attributesTag.getKeys().toArray(String[]::new); - if (attributes.length != 0) { - String attributeId = attributes[0]; - int attributeLevel = attributesTag.getInt(attributeId); + if (attributes.length != 0) { + String attributeId = attributes[0]; + int attributeLevel = attributesTag.getInt(attributeId); - //Set item count - countOverride.set(Integer.toString(attributeLevel)); + //Set item count + countOverride.set(Integer.toString(attributeLevel)); - //Draw the attribute name - this.matrices.push(); - this.matrices.translate(0f, 0f, 200f); + //Draw the attribute name + this.matrices.push(); + this.matrices.translate(0f, 0f, 200f); - String attributeInitials = AttributeShards.getShortName(attributeId); + String attributeInitials = AttributeShards.getShortName(attributeId); - this.drawText(textRenderer, attributeInitials, x, y, Formatting.AQUA.getColorValue(), true); + this.drawText(textRenderer, attributeInitials, x, y, Formatting.AQUA.getColorValue(), true); - this.matrices.pop(); - } - } - } + this.matrices.pop(); + } + } + } } @ModifyExpressionValue(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", - at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/ItemCooldownManager;getCooldownProgress(Lnet/minecraft/item/Item;F)F")) + at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/ItemCooldownManager;getCooldownProgress(Lnet/minecraft/item/Item;F)F")) private float skyblocker$modifyItemCooldown(float cooldownProgress, @Local ItemStack stack) { return Utils.isOnSkyblock() && ItemCooldowns.isOnCooldown(stack) ? ItemCooldowns.getItemCooldownEntry(stack).getRemainingCooldownPercent() : cooldownProgress; } diff --git a/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java b/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java index 51ab3852..e5697085 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java @@ -2,10 +2,10 @@ package de.hysky.skyblocker.mixin; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; import net.minecraft.item.DyeableItem; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -13,11 +13,8 @@ import org.spongepowered.asm.mixin.injection.At; public interface DyeableItemMixin { @ModifyReturnValue(method = "getColor", at = @At("RETURN")) private int skyblocker$customDyeColor(int originalColor, ItemStack stack) { - NbtCompound nbt = stack.getNbt(); - - if (Utils.isOnSkyblock() && nbt != null && nbt.contains("ExtraAttributes")) { - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); - String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; + if (Utils.isOnSkyblock()) { + String itemUuid = ItemUtils.getItemUuid(stack); return SkyblockerConfigManager.get().general.customDyeColors.getOrDefault(itemUuid, originalColor); } diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java index 689974c8..b037d45a 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java @@ -6,12 +6,8 @@ import de.hysky.skyblocker.skyblock.experiment.ChronomatronSolver; import de.hysky.skyblocker.skyblock.experiment.ExperimentSolver; import de.hysky.skyblocker.skyblock.experiment.SuperpairsSolver; import de.hysky.skyblocker.skyblock.experiment.UltrasequencerSolver; -import de.hysky.skyblocker.skyblock.item.BackpackPreview; -import de.hysky.skyblocker.skyblock.item.CompactorDeletorPreview; -import de.hysky.skyblocker.skyblock.item.ItemProtection; -import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds; -import de.hysky.skyblocker.skyblock.item.WikiLookup; -import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; +import de.hysky.skyblocker.skyblock.item.*; +import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.gui.ContainerSolver; import net.minecraft.client.MinecraftClient; @@ -89,7 +85,7 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen // Compactor Preview if (SkyblockerConfigManager.get().general.compactorDeletorPreview) { ItemStack stack = focusedSlot.getStack(); - Matcher matcher = CompactorDeletorPreview.NAME.matcher(ItemRegistry.getInternalName(stack)); + Matcher matcher = CompactorDeletorPreview.NAME.matcher(ItemUtils.getItemId(stack)); if (matcher.matches() && CompactorDeletorPreview.drawPreview(context, stack, matcher.group("type"), matcher.group("size"), x, y)) { ci.cancel(); } diff --git a/src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java index 76073a2c..79a37d68 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java @@ -1,34 +1,22 @@ package de.hysky.skyblocker.mixin; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; - import com.llamalad7.mixinextras.injector.ModifyReturnValue; - import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.ItemUtils.Durability; import de.hysky.skyblocker.utils.Utils; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; @Mixin(ItemStack.class) public abstract class ItemStackMixin { - @Shadow - @Nullable - private NbtCompound nbt; - @ModifyReturnValue(method = "getName", at = @At("RETURN")) private Text skyblocker$customItemNames(Text original) { - if (Utils.isOnSkyblock() && nbt != null && nbt.contains("ExtraAttributes")) { - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); - String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; - - return SkyblockerConfigManager.get().general.customItemNames.getOrDefault(itemUuid, original); + if (Utils.isOnSkyblock()) { + return SkyblockerConfigManager.get().general.customItemNames.getOrDefault(ItemUtils.getItemUuid((ItemStack) (Object) this), original); } return original; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java index e878d108..5ea5513e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java @@ -2,8 +2,9 @@ package de.hysky.skyblocker.skyblock; import com.mojang.blaze3d.systems.RenderSystem; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.skyblock.item.PriceInfoTooltip; +import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; @@ -27,7 +28,7 @@ public class TeleportOverlay { if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.teleportOverlay.enableTeleportOverlays && client.player != null && client.world != null) { ItemStack heldItem = client.player.getMainHandStack(); String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem, true); - NbtCompound nbt = heldItem.getNbt(); + NbtCompound extraAttributes = ItemUtils.getExtraAttributes(heldItem); if (itemId != null) { switch (itemId) { @@ -42,20 +43,20 @@ public class TeleportOverlay { } } case "ASPECT_OF_THE_END", "ASPECT_OF_THE_VOID" -> { - if (SkyblockerConfigManager.get().general.teleportOverlay.enableEtherTransmission && client.options.sneakKey.isPressed() && nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) { - render(wrc, nbt, 57); + if (SkyblockerConfigManager.get().general.teleportOverlay.enableEtherTransmission && client.options.sneakKey.isPressed() && extraAttributes != null && extraAttributes.getInt("ethermerge") == 1) { + render(wrc, extraAttributes, 57); } else if (SkyblockerConfigManager.get().general.teleportOverlay.enableInstantTransmission) { - render(wrc, nbt, 8); + render(wrc, extraAttributes, 8); } } case "ETHERWARP_CONDUIT" -> { if (SkyblockerConfigManager.get().general.teleportOverlay.enableEtherTransmission) { - render(wrc, nbt, 57); + render(wrc, extraAttributes, 57); } } case "SINSEEKER_SCYTHE" -> { if (SkyblockerConfigManager.get().general.teleportOverlay.enableSinrecallTransmission) { - render(wrc, nbt, 4); + render(wrc, extraAttributes, 4); } } case "NECRON_BLADE", "ASTRAEA", "HYPERION", "SCYLLA", "VALKYRIE" -> { @@ -71,8 +72,8 @@ public class TeleportOverlay { /** * Renders the teleport overlay with a given base range and the tuned transmission stat. */ - private static void render(WorldRenderContext wrc, NbtCompound nbt, int baseRange) { - render(wrc, nbt != null && nbt.getCompound("ExtraAttributes").contains("tuned_transmission") ? baseRange + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : baseRange); + private static void render(WorldRenderContext wrc, NbtCompound extraAttributes, int baseRange) { + render(wrc, extraAttributes != null && extraAttributes.contains("tuned_transmission") ? baseRange + extraAttributes.getInt("tuned_transmission") : baseRange); } /** diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/CompactorDeletorPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/CompactorDeletorPreview.java index 2a6551c7..7f5b96b9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/CompactorDeletorPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CompactorDeletorPreview.java @@ -1,9 +1,10 @@ package de.hysky.skyblocker.skyblock.item; import de.hysky.skyblocker.mixin.accessor.DrawContextInvoker; +import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; +import de.hysky.skyblocker.utils.ItemUtils; import it.unimi.dsi.fastutil.ints.IntIntPair; import it.unimi.dsi.fastutil.ints.IntObjectPair; -import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; @@ -39,11 +40,8 @@ public class CompactorDeletorPreview { if (targetIndex == -1) return false; // Get items in compactor or deletor - NbtCompound nbt = stack.getNbt(); - if (nbt == null || !nbt.contains("ExtraAttributes", 10)) { - return false; - } - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); + NbtCompound extraAttributes = ItemUtils.getExtraAttributes(stack); + if (extraAttributes == null) return false; // Get the slots and their items from the nbt, which is in the format personal_compact_<slot_number> or personal_deletor_<slot_number> List<IntObjectPair<ItemStack>> slots = extraAttributes.getKeys().stream().filter(slot -> slot.contains(type.toLowerCase().substring(0, 7))).map(slot -> IntObjectPair.of(Integer.parseInt(slot.substring(17)), ItemRegistry.getItemStack(extraAttributes.getString(slot)))).toList(); 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 76042a81..1496c90f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java @@ -4,6 +4,7 @@ import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.StringArgumentType; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; @@ -12,7 +13,6 @@ 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.nbt.NbtCompound; import net.minecraft.text.Text; public class CustomArmorDyeColors { @@ -32,38 +32,34 @@ public class CustomArmorDyeColors { @SuppressWarnings("SameReturnValue") private static int customizeDyeColor(FabricClientCommandSource source, String hex) { ItemStack heldItem = source.getPlayer().getMainHandStack(); - NbtCompound nbt = (heldItem != null) ? heldItem.getNbt() : null; if (hex != null && !isHexadecimalColor(hex)) { source.sendError(Text.translatable("skyblocker.customDyeColors.invalidHex")); return Command.SINGLE_SUCCESS; } - if (Utils.isOnSkyblock() && heldItem != null) { + if (Utils.isOnSkyblock() && heldItem != null) { if (heldItem.getItem() instanceof DyeableItem) { - if (nbt != null && nbt.contains("ExtraAttributes")) { - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); - String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; + String itemUuid = ItemUtils.getItemUuid(heldItem); - if (itemUuid != null) { - Object2IntOpenHashMap<String> customDyeColors = SkyblockerConfigManager.get().general.customDyeColors; + if (!itemUuid.isEmpty()) { + Object2IntOpenHashMap<String> customDyeColors = SkyblockerConfigManager.get().general.customDyeColors; - if (hex == null) { - if (customDyeColors.containsKey(itemUuid)) { - customDyeColors.removeInt(itemUuid); - SkyblockerConfigManager.save(); - source.sendFeedback(Text.translatable("skyblocker.customDyeColors.removed")); - } else { - source.sendFeedback(Text.translatable("skyblocker.customDyeColors.neverHad")); - } - } else { - customDyeColors.put(itemUuid, Integer.decode("0x" + hex.replace("#", "")).intValue()); + if (hex == null) { + if (customDyeColors.containsKey(itemUuid)) { + customDyeColors.removeInt(itemUuid); SkyblockerConfigManager.save(); - source.sendFeedback(Text.translatable("skyblocker.customDyeColors.added")); + source.sendFeedback(Text.translatable("skyblocker.customDyeColors.removed")); + } else { + source.sendFeedback(Text.translatable("skyblocker.customDyeColors.neverHad")); } } else { - source.sendError(Text.translatable("skyblocker.customDyeColors.noItemUuid")); + customDyeColors.put(itemUuid, Integer.decode("0x" + hex.replace("#", "")).intValue()); + SkyblockerConfigManager.save(); + source.sendFeedback(Text.translatable("skyblocker.customDyeColors.added")); } + } else { + source.sendError(Text.translatable("skyblocker.customDyeColors.noItemUuid")); } } else { source.sendError(Text.translatable("skyblocker.customDyeColors.notDyeable")); 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 b8fa0797..9242d47b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java @@ -3,9 +3,9 @@ package de.hysky.skyblocker.skyblock.item; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.suggestion.SuggestionProvider; - import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.events.SkyblockEvents; +import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; import dev.isxander.yacl3.config.v2.api.SerialEntry; import it.unimi.dsi.fastutil.Pair; @@ -93,41 +93,37 @@ public class CustomArmorTrims { @SuppressWarnings("SameReturnValue") private static int customizeTrim(FabricClientCommandSource source, Identifier material, Identifier pattern) { ItemStack heldItem = source.getPlayer().getMainHandStack(); - NbtCompound nbt = (heldItem != null) ? heldItem.getNbt() : null; if (Utils.isOnSkyblock() && heldItem != null) { if (heldItem.getItem() instanceof ArmorItem) { - if (nbt != null && nbt.contains("ExtraAttributes")) { - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); - String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; - - if (itemUuid != null) { - Object2ObjectOpenHashMap<String, ArmorTrimId> customArmorTrims = SkyblockerConfigManager.get().general.customArmorTrims; - - if (material == null && pattern == null) { - if (customArmorTrims.containsKey(itemUuid)) { - customArmorTrims.remove(itemUuid); - SkyblockerConfigManager.save(); - source.sendFeedback(Text.translatable("skyblocker.customArmorTrims.removed")); - } else { - source.sendFeedback(Text.translatable("skyblocker.customArmorTrims.neverHad")); - } - } else { - // Ensure that the material & trim are valid - ArmorTrimId trimId = new ArmorTrimId(material, pattern); - if (TRIMS_CACHE.get(trimId) == null) { - source.sendError(Text.translatable("skyblocker.customArmorTrims.invalidMaterialOrPattern")); + String itemUuid = ItemUtils.getItemUuid(heldItem); - return Command.SINGLE_SUCCESS; - } + if (!itemUuid.isEmpty()) { + Object2ObjectOpenHashMap<String, ArmorTrimId> customArmorTrims = SkyblockerConfigManager.get().general.customArmorTrims; - customArmorTrims.put(itemUuid, trimId); + if (material == null && pattern == null) { + if (customArmorTrims.containsKey(itemUuid)) { + customArmorTrims.remove(itemUuid); SkyblockerConfigManager.save(); - source.sendFeedback(Text.translatable("skyblocker.customArmorTrims.added")); + source.sendFeedback(Text.translatable("skyblocker.customArmorTrims.removed")); + } else { + source.sendFeedback(Text.translatable("skyblocker.customArmorTrims.neverHad")); } } else { - source.sendError(Text.translatable("skyblocker.customArmorTrims.noItemUuid")); + // Ensure that the material & trim are valid + ArmorTrimId trimId = new ArmorTrimId(material, pattern); + if (TRIMS_CACHE.get(trimId) == null) { + source.sendError(Text.translatable("skyblocker.customArmorTrims.invalidMaterialOrPattern")); + + return Command.SINGLE_SUCCESS; + } + + customArmorTrims.put(itemUuid, trimId); + SkyblockerConfigManager.save(); + source.sendFeedback(Text.translatable("skyblocker.customArmorTrims.added")); } + } else { + source.sendError(Text.translatable("skyblocker.customArmorTrims.noItemUuid")); } } else { source.sendError(Text.translatable("skyblocker.customArmorTrims.notAnArmorPiece")); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java index 5fbff253..b6213eb6 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.item; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; @@ -10,8 +11,6 @@ import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallba import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.command.CommandRegistryAccess; import net.minecraft.command.argument.TextArgumentType; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; import net.minecraft.text.MutableText; import net.minecraft.text.Style; import net.minecraft.text.Text; @@ -32,14 +31,10 @@ public class CustomItemNames { @SuppressWarnings("SameReturnValue") private static int renameItem(FabricClientCommandSource source, Text text) { - ItemStack heldItem = source.getPlayer().getMainHandStack(); - NbtCompound nbt = (heldItem != null) ? heldItem.getNbt() : null; + if (Utils.isOnSkyblock()) { + String itemUuid = ItemUtils.getItemUuid(source.getPlayer().getMainHandStack()); - if (Utils.isOnSkyblock() && nbt != null && nbt.contains("ExtraAttributes")) { - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); - String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; - - if (itemUuid != null) { + if (!itemUuid.isEmpty()) { Object2ObjectOpenHashMap<String, Text> customItemNames = SkyblockerConfigManager.get().general.customItemNames; if (text == null) { @@ -56,7 +51,7 @@ public class CustomItemNames { //Set italic to false if it hasn't been changed (or was already false) Style currentStyle = text.getStyle(); - ((MutableText) text).setStyle(currentStyle.withItalic((currentStyle.isItalic() ? true : false))); + ((MutableText) text).setStyle(currentStyle.withItalic(currentStyle.isItalic())); |
