From 03ae9e89b3da73dc23e30688cedba5573710666d Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Thu, 2 Dec 2021 23:26:38 +0300 Subject: [PATCH] Added color:#FFFFFF, color:FFFFFF or color:red,green,blue parser for leather armor color --- .../args/LeatherArmorColorArgParser.java | 73 +++++++++++++++++++ .../eco/internal/spigot/EcoSpigotPlugin.kt | 2 + 2 files changed, 75 insertions(+) create mode 100644 eco-api/src/main/java/com/willfp/eco/core/items/args/LeatherArmorColorArgParser.java diff --git a/eco-api/src/main/java/com/willfp/eco/core/items/args/LeatherArmorColorArgParser.java b/eco-api/src/main/java/com/willfp/eco/core/items/args/LeatherArmorColorArgParser.java new file mode 100644 index 00000000..9f1342dc --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/items/args/LeatherArmorColorArgParser.java @@ -0,0 +1,73 @@ +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; + +public class LeatherArmorColorArgParser implements LookupArgParser { + @Override + public @Nullable Predicate parseArguments(@NotNull String[] args, @NotNull ItemMeta meta) { + + if (!(meta instanceof LeatherArmorMeta)) return pred -> false; + + for (String arg : args) { + String[] argSplit = arg.split(":"); + if (!argSplit[0].equalsIgnoreCase("color")) { + continue; + } + if (argSplit.length < 2) { + continue; + } + String asString = argSplit[1]; + + LeatherArmorMeta lMeta = (LeatherArmorMeta) meta; + + lMeta.setColor(fromString(asString)); + + return pred -> true; + } + + return pred -> false; + + } + + private Color fromString(String color) { + + if (color.contains(",")) { + + String[] split = color.split(","); + + int red = 0; + int green = 0; + int blue = 0; + + if (split.length > 0) { + red = Integer.parseInt(split[0]); + } + if (split.length > 1) { + green = Integer.parseInt(split[1]); + } + if (split.length > 2) { + blue = Integer.parseInt(split[2]); + } + + return Color.fromRGB(red, green, blue); + + } else if (color.startsWith("#")) { + + java.awt.Color from = java.awt.Color.decode(color); + + return Color.fromRGB(from.getRed(), from.getGreen(), from.getBlue()); + + } else { + return fromString("#"+color); + } + + } + +} 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 6662998a..b8439f9e 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 @@ -17,6 +17,7 @@ import com.willfp.eco.core.integrations.shop.ShopManager import com.willfp.eco.core.items.Items import com.willfp.eco.core.items.args.CustomModelDataArgParser import com.willfp.eco.core.items.args.EnchantmentArgParser +import com.willfp.eco.core.items.args.LeatherArmorColorArgParser import com.willfp.eco.core.items.args.TextureArgParser import com.willfp.eco.internal.display.EcoDisplayHandler import com.willfp.eco.internal.drops.DropManager @@ -94,6 +95,7 @@ abstract class EcoSpigotPlugin : EcoPlugin( Items.registerArgParser(EnchantmentArgParser()) Items.registerArgParser(TextureArgParser()) Items.registerArgParser(CustomModelDataArgParser()) + Items.registerArgParser(LeatherArmorColorArgParser()) val skullProxy = getProxy(SkullProxy::class.java) SkullUtils.initialize(