aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-10-09 21:10:55 -0400
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-10-11 16:16:33 -0400
commit80bdbf4299966243ae3141b10178a2cd6f061f93 (patch)
tree1b7b54e6455de84119de3b29422504c8baabb9e4 /src/main/java/de/hysky
parent0eb2976ff87fe7b933ce51cdc0464ca968c234d5 (diff)
downloadSkyblocker-80bdbf4299966243ae3141b10178a2cd6f061f93.tar.gz
Skyblocker-80bdbf4299966243ae3141b10178a2cd6f061f93.tar.bz2
Skyblocker-80bdbf4299966243ae3141b10178a2cd6f061f93.zip
Refactor nbt parsing
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r--src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java19
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java17
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java15
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java34
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java27
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/CompactorDeletorPreview.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java52
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java57
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java21
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/ItemCooldowns.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java49
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/ItemRarityBackgrounds.java28
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/PriceInfoTooltip.java79
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/WikiLookup.java15
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRegistry.java30
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ItemUtils.java82
20 files changed, 272 insertions, 306 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..636a5d98 100644
--- a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java
+++ b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java
@@ -1,13 +1,13 @@
-package de.hysky.skyblocker.compatibility.emi;
+package me.xmrvizzy.skyblocker.compatibility.emi;
-import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry;
-import de.hysky.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe;
import dev.emi.emi.api.recipe.EmiCraftingRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.stack.Comparison;
import dev.emi.emi.api.stack.EmiIngredient;
import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.api.widget.WidgetHolder;
+import me.xmrvizzy.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
@@ -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..236ab326 100644
--- a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java
+++ b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java
@@ -1,11 +1,12 @@
-package de.hysky.skyblocker.compatibility.rei;
+package me.xmrvizzy.skyblocker.compatibility.rei;
-import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry;
-import de.hysky.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe;
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;
import me.shedaniel.rei.api.common.util.EntryStacks;
+import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry;
+import me.xmrvizzy.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
@@ -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..aeeccc11 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/ArmorTrimMixin.java
@@ -1,14 +1,14 @@
-package de.hysky.skyblocker.mixin;
+package me.xmrvizzy.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.Utils;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
+import me.xmrvizzy.skyblocker.skyblock.item.CustomArmorTrims;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.Utils;
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..09ce813f 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/DrawContextMixin.java
@@ -34,12 +34,10 @@ public abstract class DrawContextMixin {
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 (Utils.isOnSkyblock()) {
+ NbtCompound extraAttributes = ItemUtils.getExtraAttributes(stack);
- if (Utils.isOnSkyblock() && nbt != null && nbt.contains("ExtraAttributes")) {
- NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes");
-
- if (extraAttributes.getString("id").equals("ATTRIBUTE_SHARD")) {
+ if (extraAttributes != null && extraAttributes.getString("id").equals("ATTRIBUTE_SHARD")) {
NbtCompound attributesTag = extraAttributes.getCompound("attributes");
String[] attributes = attributesTag.getKeys().toArray(String[]::new);
diff --git a/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java b/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java
index 51ab3852..187b025b 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/DyeableItemMixin.java
@@ -1,11 +1,11 @@
-package de.hysky.skyblocker.mixin;
+package me.xmrvizzy.skyblocker.mixin;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
-import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.utils.Utils;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.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..9a06100d 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
@@ -1,19 +1,19 @@
-package de.hysky.skyblocker.mixin;
-
-import de.hysky.skyblocker.SkyblockerMod;
-import de.hysky.skyblocker.config.SkyblockerConfigManager;
-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.utils.Utils;
-import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
+package me.xmrvizzy.skyblocker.mixin;
+
+import me.xmrvizzy.skyblocker.SkyblockerMod;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
+import me.xmrvizzy.skyblocker.skyblock.experiment.ChronomatronSolver;
+import me.xmrvizzy.skyblocker.skyblock.experiment.ExperimentSolver;
+import me.xmrvizzy.skyblocker.skyblock.experiment.SuperpairsSolver;
+import me.xmrvizzy.skyblocker.skyblock.experiment.UltrasequencerSolver;
+import me.xmrvizzy.skyblocker.skyblock.item.BackpackPreview;
+import me.xmrvizzy.skyblocker.skyblock.item.CompactorDeletorPreview;
+import me.xmrvizzy.skyblocker.skyblock.item.ItemProtection;
+import me.xmrvizzy.skyblocker.skyblock.item.ItemRarityBackgrounds;
+import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.Utils;
+import me.xmrvizzy.skyblocker.utils.render.gui.ContainerSolver;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
@@ -89,7 +89,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..fdcbc162 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java
@@ -1,9 +1,7 @@
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;
@@ -13,22 +11,14 @@ 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;
@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..2dfc52b4 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java
@@ -1,10 +1,11 @@
-package de.hysky.skyblocker.skyblock;
+package me.xmrvizzy.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.render.RenderHelper;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
+import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.Utils;
+import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.minecraft.block.BlockState;
@@ -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..daa5a27c 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;
+package me.xmrvizzy.skyblocker.skyblock.item;
-import de.hysky.skyblocker.mixin.accessor.DrawContextInvoker;
import it.unimi.dsi.fastutil.ints.IntIntPair;
import it.unimi.dsi.fastutil.ints.IntObjectPair;
-import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry;
+import me.xmrvizzy.skyblocker.mixin.accessor.DrawContextInvoker;
+import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
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..f541e2b1 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorDyeColors.java
@@ -1,18 +1,18 @@
-package de.hysky.skyblocker.skyblock.item;
+package me.xmrvizzy.skyblocker.skyblock.item;
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.Utils;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.Utils;
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.nbt.NbtCompound;
import net.minecraft.text.Text;
public class CustomArmorDyeColors {
@@ -32,39 +32,35 @@ 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());
- SkyblockerConfigManager.save();
- source.sendFeedback(Text.translatable("skyblocker.customDyeColors.added"));
- }
- } else {
- source.sendError(Text.translatable("skyblocker.customDyeColors.noItemUuid"));
- }
- }
+ 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());
+ 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"));
return Command.SINGLE_SUCCESS;
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..9d12bd9e 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java
@@ -1,15 +1,16 @@
-package de.hysky.skyblocker.skyblock.item;
+package me.xmrvizzy.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.Utils;
import dev.isxander.yacl3.config.v2.api.SerialEntry;
import it.unimi.dsi.fastutil.Pair;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
+import me.xmrvizzy.skyblocker.events.SkyblockEvents;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.Utils;
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;
@@ -93,41 +94,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..81d42bcd 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomItemNames.java
@@ -1,17 +1,16 @@
-package de.hysky.skyblocker.skyblock.item;
+package me.xmrvizzy.skyblocker.skyblock.item;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
-import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.utils.Utils;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.Utils;
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.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()));
customItemNames.put(itemUuid, text);
SkyblockerConfigManager.save();
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemCooldowns.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemCooldowns.java
index 9c1fa6ad..f1c9239c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemCooldowns.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemCooldowns.java
@@ -34,7 +34,7 @@ public class ItemCooldowns {
if (!SkyblockerConfigManager.get().general.itemCooldown.enableItemCooldowns) return;
String usedItemId = ItemUtils.getItemId(player.getMainHandStack());
- if (usedItemId == null) return;
+ if (usedItemId.isEmpty()) return;
if (state.isIn(BlockTags.LOGS)) {
if (usedItemId.equals(JUNGLE_AXE_ID)) {
@@ -53,7 +53,7 @@ public class ItemCooldowns {
if (!SkyblockerConfigManager.get().general.itemCooldown.enableItemCooldowns) return TypedActionResult.pass(ItemStack.EMPTY);
String usedItemId = ItemUtils.getItemId(player.getMainHandStack());
- if (usedItemId != null && usedItemId.equals(GRAPPLING_HOOK_ID) && player.fishHook != null) {
+ if (usedItemId.equals(GRAPPLING_HOOK_ID) && player.fishHook != null) {
if (!isOnCooldown(GRAPPLING_HOOK_ID) && !isWearingBatArmor(player)) {
ITEM_COOLDOWNS.put(GRAPPLING_HOOK_ID, new CooldownEntry(2000));
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java
index d73e1545..b9d00ea0 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java
@@ -1,66 +1,55 @@
-package de.hysky.skyblocker.skyblock.item;
+package me.xmrvizzy.skyblocker.skyblock.item;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
-import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.utils.Utils;
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.Utils;
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.ItemStack;
-import net.minecraft.nbt.NbtCompound;
import net.minecraft.text.Text;
public class ItemProtection {
-
+
public static void init() {
ClientCommandRegistrationCallback.EVENT.register(ItemProtection::registerCommand);
}
public static boolean isItemProtected(ItemStack stack) {
- if (stack == null || stack.isEmpty()) return false;
-
- NbtCompound nbt = stack.getNbt();
-
- if (nbt != null && nbt.contains("ExtraAttributes")) {
- NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes");
- String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : "";
-
- return SkyblockerConfigManager.get().general.protectedItems.contains(itemUuid);
- }
-
- return false;
+ if (stack == null) return false;
+ String itemUuid = ItemUtils.getItemUuid(stack);
+ return SkyblockerConfigManager.get().general.protectedItems.contains(itemUuid);
}
-
+
private static void registerCommand(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess registryAccess) {
dispatcher.register(ClientCommandManager.literal("skyblocker")
.then(ClientCommandManager.literal("protectItem")
.executes(context -> protectMyItem(context.getSource()))));
}
-
+
private static int protectMyItem(FabricClientCommandSource source) {
ItemStack heldItem = source.getPlayer().getMainHandStack();
- NbtCompound nbt = (heldItem != null) ? heldItem.getNbt() : null;
-
- 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 (Utils.isOnSkyblock()) {
+ String itemUuid = ItemUtils.getItemUuid(heldItem);
+
+ if (!itemUuid.isEmpty()) {
ObjectOpenHashSet<String> protectedItems = SkyblockerConfigManager.get().general.protectedItems;
-
+
if (!protectedItems.contains(itemUuid)) {
protectedItems.add(itemUuid);
SkyblockerConfigManager.save();
-
+
source.sendFeedback(Text.translatable("skyblocker.itemProtection.added", heldItem.getName()));
} else {
protectedItems.remove(itemUuid);
SkyblockerConfigManager.save();
-
+
source.sendFeedback(Text.translatable("skyblocker.itemProtection.removed", heldItem.getName()));
}
} else {
@@ -69,7 +58,7 @@ public class ItemProtection {
} else {
source.sendFeedback(Text.translatable("skyblocker.itemProtection.unableToProtect"));
}
-
+
return Command.SINGLE_SUCCESS;
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemRarityBackgrounds.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemRarityBackgrounds.java
index 0af64bd9..18aa2b14 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemRarityBackgrounds.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemRarityBackgrounds.java
@@ -1,4 +1,4 @@
-package de.hysky.skyblocker.skyblock.item;
+package me.xmrvizzy.skyblocker.skyblock.item;
import java.util.Arrays;
import java.util.List;
@@ -8,11 +8,12 @@ import java.util.function.Supplier;
import com.google.common.collect.ImmutableMap;
import com.mojang.blaze3d.systems.RenderSystem;
-import de.hysky.skyblocker.SkyblockerMod;
-import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.utils.Utils;
-import de.hysky.skyblocker.utils.scheduler.Scheduler;
import it.unimi.dsi.fastutil.ints.Int2ReferenceOpenHashMap;
+import me.xmrvizzy.skyblocker.SkyblockerMod;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.Utils;
+import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
@@ -20,7 +21,6 @@ import net.minecraft.client.item.TooltipContext;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.texture.Sprite;
import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NbtCompound;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
@@ -67,17 +67,11 @@ public class ItemRarityBackgrounds {
private static SkyblockItemRarity getItemRarity(ItemStack stack, ClientPlayerEntity player) {
if (stack == null || stack.isEmpty()) return null;
-
- int hashCode = 0;
- NbtCompound nbt = stack.getNbt();
-
- if (nbt != null && nbt.contains("ExtraAttributes")) {
- NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes");
- String itemUuid = extraAttributes.getString("uuid");
-
- //If the item has an uuid, then use the hash code of the uuid otherwise use the identity hash code of the stack
- hashCode = itemUuid.isEmpty() ? System.identityHashCode(stack) : itemUuid.hashCode();
- }
+
+ String itemUuid = ItemUtils.getItemUuid(stack);
+
+ //If the item has an uuid, then use the hash code of the uuid otherwise use the identity hash code of the stack
+ int hashCode = itemUuid.isEmpty() ? System.identityHashCode(stack) : itemUuid.hashCode();
if (CACHE.containsKey(hashCode)) return CACHE.get(hashCode);
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/PriceInfoTooltip.java
index 05767558..d078de16 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/PriceInfoTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/PriceInfoTooltip.java
@@ -1,13 +1,13 @@
-package de.hysky.skyblocker.skyblock.item;
+package me.xmrvizzy.skyblocker.skyblock.item;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
-
-import de.hysky.skyblocker.config.SkyblockerConfig;
-import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.utils.Http;
-import de.hysky.skyblocker.utils.Utils;
-import de.hysky.skyblocker.utils.scheduler.Scheduler;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
+import me.xmrvizzy.skyblocker.utils.Http;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.Utils;
+import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.item.ItemStack;
@@ -21,13 +21,7 @@ import org.slf4j.LoggerFactory;
import java.net.http.HttpHeaders;
import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
import java.util.concurrent.CompletableFuture;
public class PriceInfoTooltip {
@@ -55,7 +49,7 @@ public class PriceInfoTooltip {
String neuName = name;
if (name == null || internalID == null) return;
- if(name.startsWith("ISSHINY_")){
+ if (name.startsWith("ISSHINY_")) {
name = "SHINY_" + internalID;
neuName = internalID;
}
@@ -207,11 +201,6 @@ public class PriceInfoTooltip {
}
}
- public static NbtCompound getItemNBT(ItemStack stack) {
- if (stack == null) return null;
- return stack.getNbt();
- }
-
/**
* this method converts the "timestamp" variable into the same date format as Hypixel represents it in the museum.
* Currently, there are two types of timestamps the legacy which is built like this
@@ -227,21 +216,17 @@ public class PriceInfoTooltip {
* @return if the item have a "Timestamp" it will be shown formated on the tooltip
*/
public static String getTimestamp(ItemStack stack) {
- NbtCompound tag = getItemNBT(stack);
-
- if (tag != null && tag.contains("ExtraAttributes", 10)) {
- NbtCompound ea = tag.getCompound("ExtraAttributes");
+ NbtCompound ea = ItemUtils.getExtraAttributes(stack);
- if (ea.contains("timestamp", 8)) {
- SimpleDateFormat nbtFormat = new SimpleDateFormat("MM/dd/yy");
+ if (ea != null && ea.contains("timestamp", 8)) {
+ SimpleDateFormat nbtFormat = new SimpleDateFormat("MM/dd/yy");
- try {
- Date date = nbtFormat.parse(ea.getString("timestamp"));
- SimpleDateFormat skyblockerFormat = new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH);
- return skyblockerFormat.format(date);
- } catch (ParseException e) {
- LOGGER.warn("[Skyblocker-tooltip] getTimestamp", e);
- }
+ try {
+ Date date = nbtFormat.parse(ea.getString("timestamp"));
+ SimpleDateFormat skyblockerFormat = new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH);
+ return skyblockerFormat.format(date);
+ } catch (ParseException e) {
+ LOGGER.warn("[Skyblocker-tooltip] getTimestamp", e);
}
}
@@ -249,13 +234,9 @@ public class PriceInfoTooltip {
}
public static String getInternalNameFromNBT(ItemStack stack, boolean internalIDOnly) {
- NbtCompound tag = getItemNBT(stack);
- if (tag == null || !tag.contains("ExtraAttributes", 10)) {
- return null;
- }
- NbtCompound ea = tag.getCompound("ExtraAttributes");
+ NbtCompound ea = ItemUtils.getExtraAttributes(stack);
- if (!ea.contains("id", 8)) {
+ if (ea == null || !ea.contains("id", 8)) {
return null;
}
String internalName = ea.getString("id");
@@ -265,7 +246,7 @@ public class PriceInfoTooltip {
}
// Transformation to API format.
- if (ea.contains("is_shiny")){
+ if (ea.contains("is_shiny")) {
return "ISSHINY_" + internalName;
}
@@ -364,7 +345,7 @@ public class PriceInfoTooltip {
List<CompletableFuture<Void>> futureList = new ArrayList<>();
if (SkyblockerConfigManager.get().general.itemTooltip.enableAvgBIN) {
- SkyblockerConfig.Average type = SkyblockerConfigManager.get().general.itemTooltip.avg;
+ SkyblockerConfig.Average type = SkyblockerConfigManager.get().general.itemTooltip.avg;
if (type == SkyblockerConfig.Average.BOTH || oneDayAvgPricesJson == null || threeDayAvgPricesJson == null || minute % 5 == 0) {
futureList.add(CompletableFuture.runAsync(() -> {
@@ -401,33 +382,33 @@ public class PriceInfoTooltip {
private static JsonObject downloadPrices(String type) {
try {
String url = apiAddresses.get(type);
-
+
if (type.equals("npc") || type.equals("museum") || type.equals("motes")) {
HttpHeaders headers = Http.sendHeadRequest(url);
long combinedHash = Http.getEtag(headers).hashCode() + Http.getLastModified(headers).hashCode();
-
+
switch (type) {
case "npc": if (npcHash == combinedHash) return npcPricesJson; else npcHash = combinedHash;
case "museum": if (museumHash == combinedHash) return isMuseumJson; else museumHash = combinedHash;
case "motes": if (motesHash == combinedHash) return motesPricesJson; else motesHash = combinedHash;
}
}
-
+
String apiResponse = Http.sendGetRequest(url);
-
+
return new Gson().fromJson(apiResponse, JsonObject.class);
} catch (Exception e) {
LOGGER.warn("[Skyblocker] Failed to download " + type + " prices!", e);
return null;
}
}
-
+
public static JsonObject getBazaarPrices() {
- return bazaarPricesJson;
+ return bazaarPricesJson;
}
-
+
public static JsonObject getLBINPrices() {
- return lowestPricesJson;
+ return lowestPricesJson;
}
static {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/WikiLookup.java b/src/main/java/de/hysky/skyblocker/skyblock/item/WikiLookup.java
index 3ab478d0..06b3f613 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/WikiLookup.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/WikiLookup.java
@@ -1,13 +1,12 @@
-package de.hysky.skyblocker.skyblock.item;
+package me.xmrvizzy.skyblocker.skyblock.item;
-import de.hysky.skyblocker.utils.Utils;
-import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry;
+import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NbtCompound;
import net.minecraft.screen.slot.Slot;
import net.minecraft.text.Text;
import net.minecraft.util.Util;
@@ -31,11 +30,7 @@ public class WikiLookup {
public static String getSkyblockId(Slot slot) {
//Grabbing the skyblock NBT data
- ItemStack selectedStack = slot.getStack();
- NbtCompound nbt = selectedStack.getSubNbt("ExtraAttributes");
- if (nbt != null) {
- id = nbt.getString("id");
- }
+ ItemUtils.getItemIdOptional(slot.getStack()).ifPresent(newId -> id = newId);
return id;
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRegistry.java
index edfeccc0..737d5d4a 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRegistry.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRegistry.java
@@ -1,8 +1,9 @@
-package de.hysky.skyblocker.skyblock.itemlist;
+package me.xmrvizzy.skyblocker.skyblock.itemlist;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
-import de.hysky.skyblocker.utils.NEURepo;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
+import me.xmrvizzy.skyblocker.utils.NEURepo;
import net.minecraft.client.MinecraftClient;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
@@ -65,9 +66,9 @@ public class ItemRegistry {
}
items.sort((lhs, rhs) -> {
- String lhsInternalName = getInternalName(lhs);
+ String lhsInternalName = ItemUtils.getItemId(lhs);
String lhsFamilyName = lhsInternalName.replaceAll(".\\d+$", "");
- String rhsInternalName = getInternalName(rhs);
+ String rhsInternalName = ItemUtils.getItemId(rhs);
String rhsFamilyName = rhsInternalName.replaceAll(".\\d+$", "");
if (lhsFamilyName.equals(rhsFamilyName)) {
if (lhsInternalName.length() != rhsInternalName.length())
@@ -100,14 +101,16 @@ public class ItemRegistry {
public static List<SkyblockCraftingRecipe> getRecipes(String internalName) {
List<SkyblockCraftingRecipe> result = new ArrayList<>();
+ for (SkyblockCraftingRecipe recipe : recipes) {
+ if (ItemUtils.getItemId(recipe.result).equals(internalName)) result.add(recipe);
+ }
for (SkyblockCraftingRecipe recipe : recipes)
- if (getInternalName(recipe.result).equals(internalName)) result.add(recipe);
- for (SkyblockCraftingRecipe recipe : recipes)
- for (ItemStack ingredient : recipe.grid)
- if (!ingredient.getItem().equals(Items.AIR) && getInternalName(ingredient).equals(internalName)) {
+ for (ItemStack ingredient : recipe.grid) {
+ if (!ingredient.getItem().equals(Items.AIR) && ItemUtils.getItemId(ingredient).equals(internalName)) {
result.add(recipe);
break;
}
+ }
return result;
}
@@ -119,17 +122,6 @@ public class ItemRegistry {
return items.stream();
}
- /**
- * Get Internal name of an ItemStack
- *
- * @param itemStack ItemStack to get internal name from
- * @return internal name of the given ItemStack
- */
- public static String getInternalName(ItemStack itemStack) {
- if (itemStack.getNbt() == null) return "";
- return itemStack.getNbt().getCompound("ExtraAttributes").getString("id");
- }
-
public static ItemStack getItemStack(String internalName) {
return itemsMap.get(internalName);
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java
index eedf695e..96bb42e1 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java
@@ -1,6 +1,7 @@
package de.hysky.skyblocker.skyblock.itemlist;
import com.mojang.blaze3d.systems.RenderSystem;
+import me.xmrvizzy.skyblocker.utils.ItemUtils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
@@ -198,10 +199,10 @@ public class SearchResultsWidget implements Drawable {
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
for (ResultButtonWidget button : resultButtons)
if (button.mouseClicked(mouseX, mouseY, mouseButton)) {
- if (button.itemStack.getNbt() == null) {
+ String internalName = ItemUtils.getItemId(button.itemStack);
+ if (internalName.isEmpty()) {
continue;
}
- String internalName = button.itemStack.getNbt().getCompound("ExtraAttributes").getString("id");
List<SkyblockCraftingRecipe> recipes = ItemRegistry.getRecipes(internalName);
if (!recipes.isEmpty()) {
this.recipeResults = recipes;
diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
index 6ae1b4d0..c7718cc9 100644
--- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
+++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
@@ -9,15 +9,18 @@ import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.StringNbtReader;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Optional;
import java.util.regex.Pattern;
public class ItemUtils {
private final static Pattern WHITESPACES = Pattern.compile("^\\s*$");
+ public static final String EXTRA_ATTRIBUTES = "ExtraAttributes";
public static List<Text> getTooltip(ItemStack item) {
MinecraftClient client = MinecraftClient.getInstance();
@@ -37,19 +40,68 @@ public class ItemUtils {
return list;
}
+ /**
+ * Gets the {@code ExtraAttributes} NBT tag from the item stack.
+ * @param stack the item stack to get the {@code ExtraAttributes} NBT tag from
+ * @return an optional containing the {@code ExtraAttributes} NBT tag of the item stack
+ */
+ public static Optional<NbtCompound> getExtraAttributesOptional(@NotNull ItemStack stack) {
+ return Optional.ofNullable(stack.getSubNbt(EXTRA_ATTRIBUTES));
+ }
+
+ /**
+ * Gets the {@code ExtraAttributes} NBT tag from the item stack.
+ * @param stack the item stack to get the {@code ExtraAttributes} NBT tag from
+ * @return the {@code ExtraAttributes} NBT tag of the item stack, or null if the item stack is null or does not have an {@code ExtraAttributes} NBT tag
+ */
@Nullable
- public static Durability getDurability(ItemStack stack) {
- if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().locations.dwarvenMines.enableDrillFuel || stack.isEmpty()) {
- return null;
- }
+ public static NbtCompound getExtraAttributes(@NotNull ItemStack stack) {
+ return getExtraAttributesOptional(stack).orElse(null);
+ }
+
+ /**
+ * Gets the internal name of the item stack from the {@code ExtraAttributes} NBT tag.
+ * @param stack the item stack to get the internal name from
+ * @return an optional containing the internal name of the item stack
+ */
+ public static Optional<String> getItemIdOptional(@NotNull ItemStack stack) {
+ return getExtraAttributesOptional(stack).map(extraAttributes -> extraAttributes.getString("id"));
+ }
+
+ /**
+ * Gets the internal name of the item stack from the {@code ExtraAttributes} NBT tag.
+ * @param stack the item stack to get the internal name from
+ * @return the internal name of the item stack, or an empty string if the item stack is null or does not have an internal name
+ */
+ public static String getItemId(@NotNull ItemStack stack) {
+ return getItemIdOptional(stack).orElse("");
+ }
+
+ /**
+ * Gets the UUID of the item stack from the {@code ExtraAttributes} NBT tag.
+ * @param stack the item stack to get the UUID from
+ * @return an optional containing the UUID of the item stack
+ */
+ public static Optional<String> getItemUuidOptional(@NotNull ItemStack stack) {
+ return getExtraAttributesOptional(stack).map(extraAttributes -> extraAttributes.getString("uuid"));
+ }
+
+ /**
+ * Gets the UUID of the item stack from the {@code ExtraAttributes} NBT tag.
+ * @param stack the item stack to get the UUID from
+ * @return the UUID of the item stack, or null if the item stack is null or does not have a UUID
+ */
+ public static String getItemUuid(@NotNull ItemStack stack) {
+ return getItemUuidOptional(stack).orElse("");
+ }
- NbtCompound tag = stack.getNbt();
- if (tag == null || !tag.contains("ExtraAttributes")) {
+ @Nullable
+ public static Durability getDurability(@NotNull ItemStack stack) {
+ if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().locations.dwarvenMines.enableDrillFuel || stack.isEmpty()) {
return null;
}
- NbtCompound extraAttributes = tag.getCompound("ExtraAttributes");
- if (!extraAttributes.contains("drill_fuel") && !extraAttributes.getString("id").equals("PICKONIMBUS")) {
+ if (getExtraAttributesOptional(stack).filter(extraAttributes -> extraAttributes.contains("drill_fuel") || extraAttributes.getString("id").equals("PICKONIMBUS")).isEmpty()) {
return null;
}
@@ -92,20 +144,6 @@ public class ItemUtils {
}
}
- public static String getItemId(ItemStack itemStack) {
- if (itemStack == null) return null;
-
- NbtCompound nbt = itemStack.getNbt();
- if (nbt != null && nbt.contains("ExtraAttributes")) {
- NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes");
- if (extraAttributes.contains("id")) {
- return extraAttributes.getString("id");
- }
- }
-
- return null;
- }
-
public record Durability(int current, int max) {
}
}