diff options
| author | Yasin <a.piri@hotmail.de> | 2023-10-09 12:58:02 +0200 |
|---|---|---|
| committer | Yasin <a.piri@hotmail.de> | 2023-10-09 12:58:02 +0200 |
| commit | bd3f0329d0e391bd84b5f9e3ff207d9dd9815853 (patch) | |
| tree | 2fd1d1ef625f57acc2e4916c967d8d2393844798 /src/main/java/me/xmrvizzy/skyblocker/skyblock/item | |
| parent | 2315b90da8117f28f66348927afdb621ee4fc815 (diff) | |
| download | Skyblocker-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')
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. |
