From 16c6debb1cc90be5815cd188264b16ddf8b76f16 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:55:45 +0800 Subject: Refactor CustomArmorDyeColors and CustomItemNames --- .../skyblocker/config/SkyblockerConfig.java | 2 +- .../skyblocker/mixin/DyeableItemMixin.java | 18 +++--- .../xmrvizzy/skyblocker/mixin/ItemStackMixin.java | 10 +-- .../skyblock/item/CustomArmorDyeColors.java | 72 ++++++++++------------ .../skyblocker/skyblock/item/CustomItemNames.java | 21 +++---- 5 files changed, 55 insertions(+), 68 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 7d44fecb..75e6fdc5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -551,7 +551,7 @@ public class SkyblockerConfig implements ConfigData { .registerTypeHierarchyAdapter(Style.class, new Style.Serializer()) .create(); - ConfigSerializer.Factory serializer = (cfg, cfgClass) -> new GsonConfigSerializer(cfg, cfgClass, gson); + ConfigSerializer.Factory serializer = (cfg, cfgClass) -> new GsonConfigSerializer<>(cfg, cfgClass, gson); AutoConfig.register(SkyblockerConfig.class, serializer); ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(optionsLiteral("config")).then(optionsLiteral("options"))))); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DyeableItemMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DyeableItemMixin.java index 4d0b6bae..f04c4cdd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DyeableItemMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DyeableItemMixin.java @@ -1,31 +1,27 @@ package me.xmrvizzy.skyblocker.mixin; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import com.llamalad7.mixinextras.sugar.Local; - import me.xmrvizzy.skyblocker.config.SkyblockerConfig; 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; @Mixin(DyeableItem.class) public interface DyeableItemMixin { - @ModifyReturnValue(method = "getColor", at = @At("RETURN")) - default public int skyblocker$customDyeColor(int originalColor, @Local ItemStack stack) { + 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; - + String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; + return SkyblockerConfig.get().general.customDyeColors.getOrDefault(itemUuid, originalColor); } - + return originalColor; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java index 640bce9b..63dc6624 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java @@ -14,20 +14,20 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.text.Text; @Mixin(ItemStack.class) -public class ItemStackMixin { +public abstract class ItemStackMixin { @Shadow @Nullable private NbtCompound nbt; @ModifyReturnValue(method = "getName", at = @At("RETURN")) - public Text skyblocker$customItemNames(Text original) { + 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; - + String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; + return SkyblockerConfig.get().general.customItemNames.getOrDefault(itemUuid, original); } - + return original; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java index dd5614d1..9385b4a1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java @@ -3,14 +3,12 @@ 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.SkyblockerConfig; 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.command.CommandRegistryAccess; import net.minecraft.item.DyeableArmorItem; import net.minecraft.item.ItemStack; @@ -18,11 +16,10 @@ 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 dispatcher, CommandRegistryAccess registryAccess) { dispatcher.register(ClientCommandManager.literal("skyblocker") .then(ClientCommandManager.literal("dyeColor") @@ -30,58 +27,55 @@ public class CustomArmorDyeColors { .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) { - MinecraftClient client = source.getClient(); - ItemStack heldItem = client.player.getMainHandStack(); + 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 && heldItem.getItem() instanceof DyeableArmorItem) { - if (nbt != null && nbt.contains("ExtraAttributes")) { - NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); - String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; - - if (itemUuid != null) { - Object2IntOpenHashMap customDyeColors = SkyblockerConfig.get().general.customDyeColors; - - if (hex == null) { - if (customDyeColors.containsKey(itemUuid)) { - customDyeColors.removeInt(itemUuid); - SkyblockerConfig.save(); - source.sendFeedback(Text.translatable("skyblocker.customDyeColors.removed")); + + if (Utils.isOnSkyblock() && heldItem != null) { + if (heldItem.getItem() instanceof DyeableArmorItem) { + if (nbt != null && nbt.contains("ExtraAttributes")) { + NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); + String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; + + if (itemUuid != null) { + Object2IntOpenHashMap customDyeColors = SkyblockerConfig.get().general.customDyeColors; + + if (hex == null) { + if (customDyeColors.containsKey(itemUuid)) { + customDyeColors.removeInt(itemUuid); + SkyblockerConfig.save(); + source.sendFeedback(Text.translatable("skyblocker.customDyeColors.removed")); + } else { + source.sendFeedback(Text.translatable("skyblocker.customDyeColors.neverHad")); + } } else { - source.sendFeedback(Text.translatable("skyblocker.customDyeColors.neverHad")); + customDyeColors.put(itemUuid, Integer.decode("0x" + hex.replace("#", "")).intValue()); + SkyblockerConfig.save(); + source.sendFeedback(Text.translatable("skyblocker.customDyeColors.added")); } } else { - customDyeColors.put(itemUuid, Integer.decode("0x" + hex.replace("#", "")).intValue()); - SkyblockerConfig.save(); - source.sendFeedback(Text.translatable("skyblocker.customDyeColors.added")); + source.sendError(Text.translatable("skyblocker.customDyeColors.noItemUuid")); } - } else { - source.sendError(Text.translatable("skyblocker.customDyeColors.noItemUuid")); } - } - } else { - if (!(heldItem.getItem() instanceof DyeableArmorItem)) { + } else { source.sendError(Text.translatable("skyblocker.customDyeColors.notDyeable")); return Command.SINGLE_SUCCESS; - } else { - source.sendError(Text.translatable("skyblocker.customDyeColors.unableToSetColor")); } + } else { + source.sendError(Text.translatable("skyblocker.customDyeColors.unableToSetColor")); } - + return Command.SINGLE_SUCCESS; } - + private static boolean isHexadecimalColor(String s) { - s = s.replace("#", ""); - - return s.chars() - .allMatch(c -> "0123456789ABCDEFabcdef".indexOf(c) >= 0) && s.length() == 6; + 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/CustomItemNames.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java index 4ecff508..5d410947 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java @@ -2,14 +2,12 @@ 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.SkyblockerConfig; 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.command.CommandRegistryAccess; import net.minecraft.command.argument.TextArgumentType; import net.minecraft.item.ItemStack; @@ -17,11 +15,10 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.text.Text; public class CustomItemNames { - public static void init() { ClientCommandRegistrationCallback.EVENT.register(CustomItemNames::registerCommands); } - + private static void registerCommands(CommandDispatcher dispatcher, CommandRegistryAccess registryAccess) { dispatcher.register(ClientCommandManager.literal("skyblocker") .then(ClientCommandManager.literal("renameItem") @@ -29,19 +26,19 @@ public class CustomItemNames { .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) { - MinecraftClient client = source.getClient(); - ItemStack heldItem = client.player.getMainHandStack(); + 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; - + String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null; + if (itemUuid != null) { Object2ObjectOpenHashMap customItemNames = SkyblockerConfig.get().general.customItemNames; - + if (text == null) { if (customItemNames.containsKey(itemUuid)) { //Remove custom item name when the text argument isn't passed @@ -63,7 +60,7 @@ public class CustomItemNames { } else { source.sendError(Text.translatable("skyblocker.customItemNames.unableToSetName")); } - + return Command.SINGLE_SUCCESS; } } -- cgit