From 5d18b424d7fdc3af034a7e803035155136384920 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sat, 4 Dec 2021 15:37:29 +0000 Subject: [PATCH] Added ColorArgParser --- .../eco/core/items/args/ColorArgParser.java | 65 +++++++++++++++++++ .../eco/internal/spigot/EcoSpigotPlugin.kt | 2 + 2 files changed, 67 insertions(+) create mode 100644 eco-api/src/main/java/com/willfp/eco/core/items/args/ColorArgParser.java diff --git a/eco-api/src/main/java/com/willfp/eco/core/items/args/ColorArgParser.java b/eco-api/src/main/java/com/willfp/eco/core/items/args/ColorArgParser.java new file mode 100644 index 00000000..0976c780 --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/items/args/ColorArgParser.java @@ -0,0 +1,65 @@ +package com.willfp.eco.core.items.args; + +import org.bukkit.Color; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Predicate; + +/** + * Parse leather armor colors. + */ +public class ColorArgParser implements LookupArgParser { + @Override + public @Nullable Predicate parseArguments(@NotNull final String[] args, + @NotNull final ItemMeta meta) { + if (!(meta instanceof LeatherArmorMeta armorMeta)) { + return null; + } + + String color = null; + + for (String arg : args) { + String[] argSplit = arg.split(":"); + if (!argSplit[0].equalsIgnoreCase("color")) { + continue; + } + + if (argSplit.length < 2) { + continue; + } + + color = argSplit[1]; + } + + if (color == null) { + return null; + } + + armorMeta.setColor(Color.fromRGB(Integer.parseInt(color, 16))); + + String finalColor = color; + return test -> { + if (!test.hasItemMeta()) { + return false; + } + + ItemMeta testMeta = test.getItemMeta(); + + assert testMeta != null; + + if (testMeta instanceof LeatherArmorMeta cast) { + return finalColor.equalsIgnoreCase( + Integer.toHexString(cast.getColor().getRed()) + + Integer.toHexString(cast.getColor().getGreen()) + + Integer.toHexString(cast.getColor().getBlue()) + ); + } + + return true; + }; + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt index c27c35d1..68deb653 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt @@ -15,6 +15,7 @@ import com.willfp.eco.core.integrations.hologram.HologramManager import com.willfp.eco.core.integrations.mcmmo.McmmoManager import com.willfp.eco.core.integrations.shop.ShopManager import com.willfp.eco.core.items.Items +import com.willfp.eco.core.items.args.ColorArgParser import com.willfp.eco.core.items.args.CustomModelDataArgParser import com.willfp.eco.core.items.args.EnchantmentArgParser import com.willfp.eco.core.items.args.TextureArgParser @@ -94,6 +95,7 @@ abstract class EcoSpigotPlugin : EcoPlugin( Items.registerArgParser(EnchantmentArgParser()) Items.registerArgParser(TextureArgParser()) Items.registerArgParser(CustomModelDataArgParser()) + Items.registerArgParser(ColorArgParser()) val skullProxy = getProxy(SkullProxy::class.java) SkullUtils.initialize(