diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/items/ArgParserTrim.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/items/ArgParserTrim.kt new file mode 100644 index 00000000..3de5e82b --- /dev/null +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/items/ArgParserTrim.kt @@ -0,0 +1,50 @@ +package com.willfp.eco.internal.items + +import com.willfp.eco.core.items.args.LookupArgParser +import org.bukkit.Color +import org.bukkit.NamespacedKey +import org.bukkit.Registry +import org.bukkit.inventory.ItemStack +import org.bukkit.inventory.meta.ArmorMeta +import org.bukkit.inventory.meta.ItemMeta +import org.bukkit.inventory.meta.LeatherArmorMeta +import org.bukkit.inventory.meta.trim.ArmorTrim +import org.bukkit.inventory.meta.trim.TrimMaterial +import org.bukkit.inventory.meta.trim.TrimPattern +import java.util.function.Predicate + +object ArgParserTrim : LookupArgParser { + override fun parseArguments(args: Array, meta: ItemMeta): Predicate? { + if (meta !is ArmorMeta) return null + + var material: TrimMaterial? = null + var pattern: TrimPattern? = null + + for (arg in args) { + val argSplit = arg.split(":") + if (!argSplit[0].equals("trim", ignoreCase = true)) { + continue + } + material = Registry.TRIM_MATERIAL.get(NamespacedKey.minecraft(argSplit.getOrElse(1) {""})) + pattern = Registry.TRIM_PATTERN.get(NamespacedKey.minecraft(argSplit.getOrElse(2) {""})) + } + + if (material == null || pattern == null) return null + + + meta.trim = ArmorTrim(material, pattern) + + return Predicate { + val testMeta = it.itemMeta as? ArmorMeta ?: return@Predicate false + val trim = testMeta.trim ?: return@Predicate false + return@Predicate trim.material == material + && trim.pattern == pattern + } + } + + override fun serializeBack(meta: ItemMeta): String? { + val trim = (meta as? ArmorMeta)?.trim ?: return null + + return "trim:${trim.material.key.key.lowercase()}:${trim.pattern.key.key.lowercase()}" + } +} \ No newline at end of file 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 abcb1cf7..7c3f4950 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 @@ -49,6 +49,7 @@ import com.willfp.eco.internal.items.ArgParserHead import com.willfp.eco.internal.items.ArgParserName import com.willfp.eco.internal.items.ArgParserTexture import com.willfp.eco.internal.items.ArgParserUnbreakable +import com.willfp.eco.internal.items.ArgParserTrim import com.willfp.eco.internal.lookup.SegmentParserGroup import com.willfp.eco.internal.lookup.SegmentParserUseIfPresent import com.willfp.eco.internal.particle.ParticleFactoryRGB @@ -148,6 +149,9 @@ abstract class EcoSpigotPlugin : EcoPlugin() { Items.registerArgParser(ArgParserUnbreakable) Items.registerArgParser(ArgParserName) Items.registerArgParser(ArgParserHead) + if (Prerequisite.HAS_1_20.isMet) { + Items.registerArgParser(ArgParserTrim) + } Entities.registerArgParser(EntityArgParserName) Entities.registerArgParser(EntityArgParserNoAI)