aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/skyblock/item
diff options
context:
space:
mode:
authorYasin <a.piri@hotmail.de>2023-10-09 12:58:02 +0200
committerYasin <a.piri@hotmail.de>2023-10-09 12:58:02 +0200
commitbd3f0329d0e391bd84b5f9e3ff207d9dd9815853 (patch)
tree2fd1d1ef625f57acc2e4916c967d8d2393844798 /src/main/java/me/xmrvizzy/skyblocker/skyblock/item
parent2315b90da8117f28f66348927afdb621ee4fc815 (diff)
downloadSkyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.tar.gz
Skyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.tar.bz2
Skyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.zip
new pr because fixing merge conflict would take too long
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/item')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/AttributeShards.java59
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/BackpackPreview.java235
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorDeletorPreview.java92
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorPreviewTooltipComponent.java54
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java82
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java154
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java74
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemCooldowns.java115
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemProtection.java75
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/ItemRarityBackgrounds.java109
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java443
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/SkyblockItemRarity.java29
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/WikiLookup.java56
13 files changed, 0 insertions, 1577 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/AttributeShards.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/AttributeShards.java
deleted file mode 100644
index 8f71e7b9..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/AttributeShards.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.item;
-
-import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
-
-public class AttributeShards {
- private static final Object2ObjectOpenHashMap<String, String> ID_2_SHORT_NAME = new Object2ObjectOpenHashMap<>();
-
- static {
- //Weapons
- ID_2_SHORT_NAME.put("arachno", "A");
- ID_2_SHORT_NAME.put("attack_speed", "AS");
- ID_2_SHORT_NAME.put("blazing", "BL");
- ID_2_SHORT_NAME.put("combo", "C");
- ID_2_SHORT_NAME.put("elite", "E");
- ID_2_SHORT_NAME.put("ender", "EN");
- ID_2_SHORT_NAME.put("ignition", "I");
- ID_2_SHORT_NAME.put("life_recovery", "LR");
- ID_2_SHORT_NAME.put("mana_steal", "MS");
- ID_2_SHORT_NAME.put("midas_touch", "MT");
- ID_2_SHORT_NAME.put("undead", "U");
-
- //Swords & Bows
- ID_2_SHORT_NAME.put("warrior", "W");
- ID_2_SHORT_NAME.put("deadeye", "DE");
-
- //Armor or Equipment
- ID_2_SHORT_NAME.put("arachno_resistance", "AR");
- ID_2_SHORT_NAME.put("blazing_resistance", "BR");
- ID_2_SHORT_NAME.put("breeze", "B");
- ID_2_SHORT_NAME.put("dominance", "D");
- ID_2_SHORT_NAME.put("ender_resistance", "ER");
- ID_2_SHORT_NAME.put("experience", "XP");
- ID_2_SHORT_NAME.put("fortitude", "F");
- ID_2_SHORT_NAME.put("life_regeneration", "HR"); //Health regeneration
- ID_2_SHORT_NAME.put("lifeline", "L");
- ID_2_SHORT_NAME.put("magic_find", "MF");
- ID_2_SHORT_NAME.put("mana_pool", "MP");
- ID_2_SHORT_NAME.put("mana_regeneration", "MR");
- ID_2_SHORT_NAME.put("mending", "V"); //Vitality
- ID_2_SHORT_NAME.put("speed", "S");
- ID_2_SHORT_NAME.put("undead_resistance", "UR");
- ID_2_SHORT_NAME.put("veteran", "V");
-
- //Fishing Gear
- ID_2_SHORT_NAME.put("blazing_fortune", "BF");
- ID_2_SHORT_NAME.put("fishing_experience", "FE");
- ID_2_SHORT_NAME.put("infection", "IF");
- ID_2_SHORT_NAME.put("double_hook", "DH");
- ID_2_SHORT_NAME.put("fisherman", "FM");
- ID_2_SHORT_NAME.put("fishing_speed", "FS");
- ID_2_SHORT_NAME.put("hunter", "H");
- ID_2_SHORT_NAME.put("trophy_hunter", "TH");
-
- }
-
- public static String getShortName(String id) {
- return ID_2_SHORT_NAME.getOrDefault(id, "");
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/BackpackPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/BackpackPreview.java
deleted file mode 100644
index f8af5d33..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/BackpackPreview.java
+++ /dev/null
@@ -1,235 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.item;
-
-import com.mojang.blaze3d.systems.RenderSystem;
-import me.xmrvizzy.skyblocker.SkyblockerMod;
-import me.xmrvizzy.skyblocker.utils.Utils;
-import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
-import net.fabricmc.loader.api.FabricLoader;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.font.TextRenderer;
-import net.minecraft.client.gui.DrawContext;
-import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.screen.ingame.HandledScreen;
-import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.entity.player.PlayerEntity;
-import net.minecraft.inventory.Inventory;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.*;
-import net.minecraft.util.Identifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class BackpackPreview {
- private static final Logger LOGGER = LoggerFactory.getLogger(BackpackPreview.class);
- private static final Identifier TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/inventory_background.png");
- private static final Pattern ECHEST_PATTERN = Pattern.compile("Ender Chest.*\\((\\d+)/\\d+\\)");
- private static final Pattern BACKPACK_PATTERN = Pattern.compile("Backpack.*\\(Slot #(\\d+)\\)");
- private static final int STORAGE_SIZE = 27;
-
- private static final Inventory[] storage = new Inventory[STORAGE_SIZE];
- private static final boolean[] dirty = new boolean[STORAGE_SIZE];
-
- private static String loaded = ""; // uuid + sb profile currently loaded
- private static Path save_dir = null;
-
- public static void init() {
- ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
- if (screen instanceof HandledScreen<?> handledScreen) {
- updateStorage(handledScreen);
- }
- });
- }
-
- public static void tick() {
- Utils.update(); // force update isOnSkyblock to prevent crash on disconnect
- if (Utils.isOnSkyblock()) {
- // save all dirty storages
- saveStorage();
- // update save dir based on uuid and sb profile
- String uuid = MinecraftClient.getInstance().getSession().getUuidOrNull().toString().replaceAll("-", "");
- String profile = Utils.getProfile();
- if (profile != null && !profile.isEmpty()) {
- save_dir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + uuid + "/" + profile);
- save_dir.toFile().mkdirs();
- if (loaded.equals(uuid + "/" + profile)) {
- // mark currently opened storage as dirty
- if (MinecraftClient.getInstance().currentScreen != null) {
- String title = MinecraftClient.getInstance().currentScreen.getTitle().getString();
- int index = getStorageIndexFromTitle(title);
- if (index != -1) dirty[index] = true;
- }
- } else {
- // load storage again because uuid/profile changed
- loaded = uuid + "/" + profile;
- loadStorage();
- }
- }
- }
- }
-
- public static void loadStorage() {
- assert (save_dir != null);
- for (int index = 0; index < STORAGE_SIZE; ++index) {
- storage[index] = null;
- dirty[index] = false;
- File file = save_dir.resolve(index + ".nbt").toFile();
- if (file.isFile()) {
- try {
- NbtCompound root = NbtIo.read(file);
- storage[index] = new DummyInventory(root);
- } catch (Exception e) {
- LOGGER.error("Failed to load backpack preview file: " + file.getName(), e);
- }
- }
- }
- }
-
- private static void saveStorage() {
- assert (save_dir != null);
- for (int index = 0; index < STORAGE_SIZE; ++index) {
- if (dirty[index]) {
- if (storage[index] != null) {
- try {
- NbtCompound root = new NbtCompound();
- NbtList list = new NbtList();
- for (int i = 9; i < storage[index].size(); ++i) {
- ItemStack stack = storage[index].getStack(i);
- NbtCompound item = new NbtCompound();
- if (stack.isEmpty()) {
- item.put("id", NbtString.of("minecraft:air"));
- item.put("Count", NbtInt.of(1));
- } else {
- item.put("id", NbtString.of(stack.getItem().toString()));
- item.put("Count", NbtInt.of(stack.getCount()));
- item.put("tag", stack.getNbt());
- }
- list.add(item);
- }
- root.put("list", list);
- root.put("size", NbtInt.of(storage[index].size() - 9));
- NbtIo.write(root, save_dir.resolve(index + ".nbt").toFile());
- dirty[index] = false;
- } catch (Exception e) {
- LOGGER.error("Failed to save backpack preview file: " + index + ".nbt", e);
- }
- }
- }
- }
- }
-
- public static void updateStorage(HandledScreen<?> screen) {
- String title = screen.getTitle().getString();
- int index = getStorageIndexFromTitle(title);
- if (index != -1) {
- storage[index] = screen.getScreenHandler().slots.get(0).inventory;
- dirty[index] = true;
- }
- }
-
- public static boolean renderPreview(DrawContext context, int index, int mouseX, int mouseY) {
- if (index >= 9 && index < 18) index -= 9;
- else if (index >= 27 && index < 45) index -= 18;
- else return false;
-
- if (storage[index] == null) return false;
- int rows = (storage[index].size() - 9) / 9;
-
- Screen screen = MinecraftClient.getInstance().currentScreen;
- if (screen == null) return false;
- int x = mouseX + 184 >= screen.width ? mouseX - 188 : mouseX + 8;
- int y = Math.max(0, mouseY - 16);
-
- RenderSystem.disableDepthTest();
- RenderSystem.setShaderTexture(0, TEXTURE);
- context.drawTexture(TEXTURE, x, y, 0, 0, 176, 7);
- for (int i = 0; i < rows; ++i) {
- context.drawTexture(TEXTURE, x, y + i * 18 + 7, 0, 7, 176, 18);
- }
- context.drawTexture(TEXTURE, x, y + rows * 18 + 7, 0, 25, 176, 7);
- RenderSystem.enableDepthTest();
-
- MatrixStack matrices = context.getMatrices();
- TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
- for (int i = 9; i < storage[index].size(); ++i) {
- int itemX = x + (i - 9) % 9 * 18 + 8;
- int itemY = y + (i - 9) / 9 * 18 + 8;
- matrices.push();
- matrices.translate(0, 0, 200);
- context.drawItem(storage[index].getStack(i), itemX, itemY);
- context.drawItemInSlot(textRenderer, storage[index].getStack(i), itemX, itemY);
- matrices.pop();
- }
-
- return true;
- }
-
- private static int getStorageIndexFromTitle(String title) {
- Matcher echest = ECHEST_PATTERN.matcher(title);
- if (echest.find()) return Integer.parseInt(echest.group(1)) - 1;
- Matcher backpack = BACKPACK_PATTERN.matcher(title);
- if (backpack.find()) return Integer.parseInt(backpack.group(1)) + 8;
- return -1;
- }
-}
-
-class DummyInventory implements Inventory {
- private final List<ItemStack> stacks;
-
- public DummyInventory(NbtCompound root) {
- stacks = new ArrayList<>(root.getInt("size") + 9);
- for (int i = 0; i < 9; ++i) stacks.add(ItemStack.EMPTY);
- root.getList("list", NbtCompound.COMPOUND_TYPE).forEach(item ->
- stacks.add(ItemStack.fromNbt((NbtCompound) item))
- );
- }
-
- @Override
- public int size() {
- return stacks.size();
- }
-
- @Override
- public boolean isEmpty() {
- return false;
- }
-
- @Override
- public ItemStack getStack(int slot) {
- return stacks.get(slot);
- }
-
- @Override
- public ItemStack removeStack(int slot, int amount) {
- return null;
- }
-
- @Override
- public ItemStack removeStack(int slot) {
- return null;
- }
-
- @Override
- public void setStack(int slot, ItemStack stack) {
- stacks.set(slot, stack);
- }
-
- @Override
- public void markDirty() {
- }
-
- @Override
- public boolean canPlayerUse(PlayerEntity player) {
- return false;
- }
-
- @Override
- public void clear() {
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorDeletorPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorDeletorPreview.java
deleted file mode 100644
index 7b93fe1e..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorDeletorPreview.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.item;
-
-import it.unimi.dsi.fastutil.ints.IntIntPair;
-import it.unimi.dsi.fastutil.ints.IntObjectPair;
-import me.xmrvizzy.skyblocker.mixin.accessor.DrawContextInvoker;
-import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.DrawContext;
-import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.tooltip.HoveredTooltipPositioner;
-import net.minecraft.client.gui.tooltip.TooltipComponent;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NbtCompound;
-import net.minecraft.text.Text;
-import net.minecraft.util.Formatting;
-
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-public class CompactorDeletorPreview {
- /**
- * The width and height in slots of the compactor/deletor
- */
- private static final Map<String, IntIntPair> DIMENSIONS = Map.of(
- "4000", IntIntPair.of(1, 1),
- "5000", IntIntPair.of(1, 3),
- "6000", IntIntPair.of(1, 7),
- "7000", IntIntPair.of(2, 6)
- );
- private static final IntIntPair DEFAULT_DIMENSION = IntIntPair.of(1, 6);
- public static final Pattern NAME = Pattern.compile("PERSONAL_(?<type>COMPACTOR|DELETOR)_(?<size>\\d+)");
- private static final MinecraftClient client = MinecraftClient.getInstance();
-
- public static boolean drawPreview(DrawContext context, ItemStack stack, String type, String size, int x, int y) {
- List<Text> tooltips = Screen.getTooltipFromItem(client, stack);
- int targetIndex = getTargetIndex(tooltips);
- 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");
- // 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();
-
- List<TooltipComponent> components = tooltips.stream().map(Text::asOrderedText).map(TooltipComponent::of).collect(Collectors.toList());
- IntIntPair dimensions = DIMENSIONS.getOrDefault(size, DEFAULT_DIMENSION);
-
- // If there are no items in compactor or deletor
- if (slots.isEmpty()) {
- int slotsCount = dimensions.leftInt() * dimensions.rightInt();
- components.add(targetIndex, TooltipComponent.of(Text.literal(slotsCount + (slotsCount == 1 ? " slot" : " slots")).formatted(Formatting.GRAY).asOrderedText()));
-
- ((DrawContextInvoker) context).invokeDrawTooltip(client.textRenderer, components, x, y, HoveredTooltipPositioner.INSTANCE);
- return true;
- }
-
- // Add the preview tooltip component
- components.add(targetIndex, new CompactorPreviewTooltipComponent(slots, dimensions));
-
- // Render accompanying text
- components.add(targetIndex, TooltipComponent.of(Text.literal("Contents:").asOrderedText()));
- if (extraAttributes.contains("PERSONAL_DELETOR_ACTIVE")) {
- components.add(targetIndex, TooltipComponent.of(Text.literal("Active: ")
- .append(extraAttributes.getBoolean("PERSONAL_DELETOR_ACTIVE") ? Text.literal("YES").formatted(Formatting.BOLD).formatted(Formatting.GREEN) : Text.literal("NO").formatted(Formatting.BOLD).formatted(Formatting.RED)).asOrderedText()));
- }
- ((DrawContextInvoker) context).invokeDrawTooltip(client.textRenderer, components, x, y, HoveredTooltipPositioner.INSTANCE);
- return true;
- }
-
- /**
- * Finds the target index to insert the preview component, which is the second empty line
- */
- private static int getTargetIndex(List<Text> tooltips) {
- int targetIndex = -1;
- int lineCount = 0;
- for (int i = 0; i < tooltips.size(); i++) {
- if (tooltips.get(i).getString().isEmpty()) {
- lineCount += 1;
- }
- if (lineCount == 2) {
- targetIndex = i;
- break;
- }
- }
- return targetIndex;
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorPreviewTooltipComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorPreviewTooltipComponent.java
deleted file mode 100644
index 45e3c635..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorPreviewTooltipComponent.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.item;
-
-import it.unimi.dsi.fastutil.ints.IntIntPair;
-import it.unimi.dsi.fastutil.ints.IntObjectPair;
-import me.xmrvizzy.skyblocker.SkyblockerMod;
-import net.minecraft.client.font.TextRenderer;
-import net.minecraft.client.gui.DrawContext;
-import net.minecraft.client.gui.tooltip.TooltipComponent;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.Identifier;
-
-public class CompactorPreviewTooltipComponent implements TooltipComponent {
- private static final Identifier INVENTORY_TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/inventory_background.png");
- private final Iterable<IntObjectPair<ItemStack>> items;
- private final IntIntPair dimensions;
-
- public CompactorPreviewTooltipComponent(Iterable<IntObjectPair<ItemStack>> items, IntIntPair dimensions) {
- this.items = items;
- this.dimensions = dimensions;
- }
-
- @Override
- public int getHeight() {
- return dimensions.leftInt() * 18 + 14;
- }
-
- @Override
- public int getWidth(TextRenderer textRenderer) {
- return dimensions.rightInt() * 18 + 14;
- }
-
- @Override
- public void drawItems(TextRenderer textRenderer, int x, int y, DrawContext context) {
- context.drawTexture(INVENTORY_TEXTURE, x, y, 0, 0, 7 + dimensions.rightInt() * 18, 7);
- context.drawTexture(INVENTORY_TEXTURE, x + 7 + dimensions.rightInt() * 18, y, 169, 0, 7, 7);
-
- for (int i = 0; i < dimensions.leftInt(); i++) {
- context.drawTexture(INVENTORY_TEXTURE, x, y + 7 + i * 18, 0, 7, 7, 18);
- for (int j = 0; j < dimensions.rightInt(); j++) {
- context.drawTexture(INVENTORY_TEXTURE, x + 7 + j * 18, y + 7 + i * 18, 7, 7, 18, 18);
- }
- context.drawTexture(INVENTORY_TEXTURE, x + 7 + dimensions.rightInt() * 18, y + 7 + i * 18, 169, 7, 7, 18);
- }
- context.drawTexture(INVENTORY_TEXTURE, x, y + 7 + dimensions.leftInt() * 18, 0, 25, 7 + dimensions.rightInt() * 18, 7);
- context.drawTexture(INVENTORY_TEXTURE, x + 7 + dimensions.rightInt() * 18, y + 7 + dimensions.leftInt() * 18, 169, 25, 7, 7);
-
- for (IntObjectPair<ItemStack> entry : items) {
- int itemX = x + entry.leftInt() % dimensions.rightInt() * 18 + 8;
- int itemY = y + entry.leftInt() / dimensions.rightInt() * 18 + 8;
- context.drawItem(entry.right(), itemX, itemY);
- context.drawItemInSlot(textRenderer, entry.right(), itemX, itemY);
- }
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java
deleted file mode 100644
index 88df1b40..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.item;
-
-import com.mojang.brigadier.Command;
-import com.mojang.brigadier.CommandDispatcher;
-import com.mojang.brigadier.arguments.StringArgumentType;
-import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
-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 {
- public static void init() {
- ClientCommandRegistrationCallback.EVENT.register(CustomArmorDyeColors::registerCommands);
- }
-
- private static void registerCommands(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess registryAccess) {
- dispatcher.register(ClientCommandManager.literal("skyblocker")
- .then(ClientCommandManager.literal("custom")
- .then(ClientCommandManager.literal("dyeColor")
- .executes(context -> customizeDyeColor(context.getSource(), null))
- .then(ClientCommandManager.argument("hexCode", StringArgumentType.string())
- .executes(context -> customizeDyeColor(context.getSource(), StringArgumentType.getString(context, "hexCode")))))));
- }
-
- @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 (heldItem.getItem() instanceof DyeableItem) {
- if (nbt != null && nbt.contains("ExtraAttributes")) {
- NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes");
- String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null;
-
- if (itemUuid != null) {
- 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"));
- }
- }
- } else {
- source.sendError(Text.translatable("skyblocker.customDyeColors.notDyeable"));
- return Command.SINGLE_SUCCESS;
- }
- } else {
- source.sendError(Text.translatable("skyblocker.customDyeColors.unableToSetColor"));
- }
-
- return Command.SINGLE_SUCCESS;
- }
-
- private static boolean isHexadecimalColor(String s) {
- return s.replace("#", "").chars().allMatch(c -> "0123456789ABCDEFabcdef".indexOf(c) >= 0) && s.replace("#", "").length() == 6;
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java
deleted file mode 100644
index 6eb0623c..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.item;
-
-import com.mojang.brigadier.Command;
-import com.mojang.brigadier.CommandDispatcher;
-import com.mojang.brigadier.suggestion.SuggestionProvider;
-
-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.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.client.MinecraftClient;
-import net.minecraft.client.network.ClientPlayerEntity;
-import net.minecraft.command.CommandRegistryAccess;
-import net.minecraft.command.CommandSource;
-import net.minecraft.command.argument.IdentifierArgumentType;
-import net.minecraft.item.ArmorItem;
-import net.minecraft.item.ItemStack;
-import net.minecraft.item.trim.ArmorTrim;
-import net.minecraft.nbt.NbtCompound;
-import net.minecraft.nbt.NbtOps;
-import net.minecraft.registry.*;
-import net.minecraft.text.Text;
-import net.minecraft.util.Identifier;
-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<>();
- private static boolean trimsInitialized = false;
-
- public static void init() {
- SkyblockEvents.JOIN.register(CustomArmorTrims::initializeTrimCache);
- ClientCommandRegistrationCallback.EVENT.register(CustomArmorTrims::registerCommand);
- }
-
- private static void initializeTrimCache() {
- ClientPlayerEntity player = MinecraftClient.getInstance().player;
- if (trimsInitialized || player == null) {
- return;
- }
- try {
- TRIMS_CACHE.clear();
- DynamicRegistryManager registryManager = player.networkHandler.getRegistryManager();
- for (Identifier material : registryManager.get(RegistryKeys.TRIM_MATERIAL).getIds()) {
- for (Identifier pattern : registryManager.get(RegistryKeys.TRIM_PATTERN).getIds()) {
- NbtCompound compound = new NbtCompound();
- compound.putString("material", material.toString());
- compound.putString("pattern", pattern.toString());
-
- ArmorTrim trim = ArmorTrim.CODEC.parse(RegistryOps.of(NbtOps.INSTANCE, registryManager), compound).resultOrPartial(LOGGER::error).orElse(null);
-
- // 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));
- }
- }
-
- LOGGER.info("[Skyblocker] Successfully cached all armor trims!");
- trimsInitialized = true;
- } catch (Exception e) {
- LOGGER.error("[Skyblocker] Encountered an exception while caching armor trims", e);
- }
- }
-
- private static void registerCommand(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess registryAccess) {
- dispatcher.register(ClientCommandManager.literal("skyblocker")
- .then(ClientCommandManager.literal("custom")
- .then(ClientCommandManager.literal("armorTrim")
- .executes(context -> customizeTrim(context.getSource(), null, null))
- .then(ClientCommandManager.argument("material", IdentifierArgumentType.identifier())
- .suggests(getIdSuggestionProvider(RegistryKeys.TRIM_MATERIAL))
- .executes(context -> customizeTrim(context.getSource(), context.getArgument("material", Identifier.class), null))
- .then(ClientCommandManager.argument("pattern", IdentifierArgumentType.identifier())
- .suggests(getIdSuggestionProvider(RegistryKeys.TRIM_PATTERN))
- .executes(context -> customizeTrim(context.getSource(), context.getArgument("material", Identifier.class), context.getArgument("pattern", Identifier.class))))))));
- }
-
- @NotNull
- private static SuggestionProvider<FabricClientCommandSource> getIdSuggestionProvider(RegistryKey<? extends Registry<?>> registryKey) {
- return (context, builder) -> context.getSource().listIdSuggestions(registryKey, CommandSource.SuggestedIdType.ELEMENTS, builder, context);
- }
-
- @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"));
-
- 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"));
- return Command.SINGLE_SUCCESS;
- }
- } else {
- source.sendError(Text.translatable("skyblocker.customArmorTrims.unableToSetTrim"));
- }
-
- return Command.SINGLE_SUCCESS;
- }
-
- public record ArmorTrimId(@SerialEntry Identifier material, @SerialEntry Identifier pattern) implements Pair<Identifier, Identifier> {
- @Override
- public Identifier left() {
- return material();
- }
-
- @Override
- public Identifier right() {
- return pattern();
- }
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java
deleted file mode 100644
index 76312461..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.item;
-
-import com.mojang.brigadier.Command;
-import com.mojang.brigadier.CommandDispatcher;
-import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
-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;
-
-public class CustomItemNames {
- public static void init() {
- ClientCommandRegistrationCallback.EVENT.register(CustomItemNames::registerCommands);
- }
-
- private static void registerCommands(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess registryAccess) {
- dispatcher.register(ClientCommandManager.literal("skyblocker")
- .then(ClientCommandManager.literal("custom")
- .then(ClientCommandManager.literal("renameItem")
- .executes(context -> renameItem(context.getSource(), null))
- .then(ClientCommandManager.argument("textComponent", TextArgumentType.text())
- .executes(context -> renameItem(context.getSource(), context.getArgument("textComponent", Text.class)))))));
- }
-
- @SuppressWarnings("SameReturnValue")
- private static int renameItem(FabricClientCommandSource source, Text text) {
- ItemStack heldItem = source.