diff --git a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java index dd97d221454..f3d29b3824e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java @@ -20,6 +20,8 @@ import org.bukkit.block.Banner; import org.bukkit.block.banner.PatternType; import org.bukkit.enchantments.Enchantment; +import org.bukkit.Registry; +import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BannerMeta; @@ -32,6 +34,10 @@ import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.inventory.meta.ArmorMeta; +import org.bukkit.inventory.meta.trim.ArmorTrim; +import org.bukkit.inventory.meta.trim.TrimMaterial; +import org.bukkit.inventory.meta.trim.TrimPattern; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -343,6 +349,15 @@ public void addStringMeta(final CommandSource sender, final boolean allowUnsafe, } else { throw new TranslatableException("leatherSyntax"); } + } else if (MaterialUtil.isArmor(stack.getType()) && split.length > 1 && split[0].equalsIgnoreCase("trim")) { + final ArmorMeta armorMeta = (ArmorMeta) stack.getItemMeta(); + final String[] trimData = split[1].split("\\|"); + final TrimPattern pattern = Registry.TRIM_PATTERN.getOrThrow(NamespacedKey.minecraft(trimData[0].toLowerCase())); + final TrimMaterial material = Registry.TRIM_MATERIAL.getOrThrow(NamespacedKey.minecraft(trimData[1].toLowerCase())); + + armorMeta.setTrim(new ArmorTrim(material, pattern)); + + stack.setItemMeta(armorMeta); } else { parseEnchantmentStrings(sender, allowUnsafe, split, ess); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java b/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java index a3bcd932fdc..dcca8a2b959 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java +++ b/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java @@ -28,6 +28,8 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.inventory.meta.ArmorMeta; +import org.bukkit.inventory.meta.trim.ArmorTrim; import org.bukkit.plugin.Plugin; import org.bukkit.potion.PotionEffect; @@ -337,10 +339,21 @@ public String serialize(final ItemStack is, final boolean useResolvers) { } } } - } else if (MaterialUtil.isLeatherArmor(material)) { - final LeatherArmorMeta leatherArmorMeta = (LeatherArmorMeta) is.getItemMeta(); - final int rgb = leatherArmorMeta.getColor().asRGB(); - sb.append("color:").append(rgb).append(" "); + } else if (MaterialUtil.isArmor(material)) { + final ArmorTrim armorTrim = ((ArmorMeta) is.getItemMeta()).getTrim(); + + if (armorTrim != null) { + final String trimPattern = armorTrim.getPattern().getKey().getKey(); + final String trimMaterial = armorTrim.getMaterial().getKey().getKey(); + + sb.append("trim:").append(trimPattern).append("|").append(trimMaterial).append(" "); + } + + if (MaterialUtil.isLeatherArmor(material)) { + final LeatherArmorMeta leatherArmorMeta = (LeatherArmorMeta) is.getItemMeta(); + final int rgb = leatherArmorMeta.getColor().asRGB(); + sb.append("color:").append(rgb).append(" "); + } } return sb.toString().trim().replaceAll("ยง", "&"); diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/MaterialUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/MaterialUtil.java index 125eed8fc9b..3db822004db 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/MaterialUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/MaterialUtil.java @@ -130,6 +130,10 @@ public static boolean isBoots(final Material material) { return BOOTS.contains(material); } + public static boolean isArmor(final Material material) { + return isHelmet(material) || isChestplate(material) || isLeggings(material) || isBoots(material); + } + public static boolean isBed(final Material material) { return BEDS.contains(material); }