diff --git a/src/main/java/cc/carm/plugin/commanditem/item/ItemSettings.java b/src/main/java/cc/carm/plugin/commanditem/item/ItemSettings.java index dd27ce9..d0848df 100644 --- a/src/main/java/cc/carm/plugin/commanditem/item/ItemSettings.java +++ b/src/main/java/cc/carm/plugin/commanditem/item/ItemSettings.java @@ -101,7 +101,9 @@ public class ItemSettings { if (identifier == null) throw new Exception("identifier not provided."); return new ItemSettings( identifier, config.getString("name"), - ItemStackConfig.read(config.getConfigurationSection("item")), + config.isItemStack("item") ? + ItemStackConfig.create(config.getItemStack("item")) : + ItemStackConfig.read(config.getConfigurationSection("item")), ItemRestrictions.read(config.getConfigurationSection("restrictions")), ConfigManager.readStringMap(config.getConfigurationSection("permissions"), (s -> s)), ConfigManager.readListMap(config.getConfigurationSection("actions"), ItemActionGroup::read) diff --git a/src/main/java/cc/carm/plugin/commanditem/item/ItemStackConfig.java b/src/main/java/cc/carm/plugin/commanditem/item/ItemStackConfig.java index bbc98e8..9a615d1 100644 --- a/src/main/java/cc/carm/plugin/commanditem/item/ItemStackConfig.java +++ b/src/main/java/cc/carm/plugin/commanditem/item/ItemStackConfig.java @@ -13,91 +13,49 @@ import java.util.Optional; @SuppressWarnings("UnusedReturnValue") public class ItemStackConfig { - protected @Nullable ItemStack original; - - protected @Nullable Material material; - protected @Nullable String displayName; - protected @Nullable List lore; + protected @Nullable ItemStack item; public ItemStackConfig() { } public ItemStackConfig(@Nullable Material material, @Nullable String displayName, @Nullable List lore) { - this(null, material, displayName, lore); + if (material == null) { + this.item = null; + return; + } + + ItemStackFactory factory = new ItemStackFactory(material); + if (displayName != null) factory.setDisplayName(ColorParser.parse(displayName)); + if (lore != null && !lore.isEmpty()) factory.setLore(lore); + this.item = factory.toItemStack(); } - public ItemStackConfig(@Nullable ItemStack original) { - this(original, null, null, null); - } - - private ItemStackConfig(@Nullable ItemStack original, - @Nullable Material material, @Nullable String displayName, @Nullable List lore) { - this.original = original; - this.material = material; - this.displayName = displayName; - this.lore = lore; + public ItemStackConfig(@Nullable ItemStack item) { + this.item = item; } public @Nullable ItemStack getItemStack(int amount) { - if (amount <= 0) return null; - if (original != null) return original.clone(); - if (material == null) return null; - ItemStackFactory factory = new ItemStackFactory(material, amount); - if (displayName != null) factory.setDisplayName(ColorParser.parse(displayName)); - if (lore != null && !lore.isEmpty()) factory.setLore(lore); - return factory.toItemStack(); + if (amount <= 0 || item == null) return null; + ItemStack item = this.item.clone(); + item.setAmount(amount); + return item; } public @Nullable ItemStack getItemStack() { return getItemStack(1); } - public @Nullable ItemStack getOriginal() { - return original; - } - - public ItemStackConfig setOriginal(@Nullable ItemStack original) { - this.original = original; - return this; - } - - public @Nullable Material getMaterial() { - return material; - } - - public ItemStackConfig setMaterial(@Nullable Material material) { - this.material = material; - return this; - } - - public @Nullable String getDisplayName() { - return displayName; - } - - public ItemStackConfig setDisplayName(@Nullable String displayName) { - this.displayName = displayName; - return this; - } - - public @Nullable List getLore() { - return lore; - } - - public ItemStackConfig setLore(@Nullable List lore) { - this.lore = lore; - return this; - } - public static @Nullable ItemStackConfig read(@Nullable ConfigurationSection section) { if (section == null) return null; - ItemStackConfig config = new ItemStackConfig(); - if (section.contains("original") && section.isItemStack("original")) { - config.setOriginal(section.getItemStack("original")); - } - Optional.ofNullable(section.getString("material")).map(Material::matchMaterial).ifPresent(config::setMaterial); - Optional.ofNullable(section.getString("displayName")).ifPresent(config::setDisplayName); - Optional.of(section.getStringList("lore")).filter(l -> !l.isEmpty()).ifPresent(config::setLore); - return config; + return new ItemStackConfig( + Optional.ofNullable(section.getString("material")).map(Material::matchMaterial).orElse(null), + section.getString("displayName"), section.getStringList("lore") + ); + } + + public static @Nullable ItemStackConfig create(@Nullable ItemStack item) { + if (item == null) return null; + return new ItemStackConfig(item); } diff --git a/src/main/resources/items/.example-item.yml b/src/main/resources/items/.example-item.yml index 7a4c793..0dd5830 100644 --- a/src/main/resources/items/.example-item.yml +++ b/src/main/resources/items/.example-item.yml @@ -7,16 +7,15 @@ name: "Pro会员前缀" item: # 使用原生 ItemStack 配置物品 可能引起配置无法加载而报错! - original: - ==: org.bukkit.inventory.ItemStack - type: DIAMOND - damage: 8 - meta: - ==: ItemMeta - meta-type: UNSPECIFIC - display-name: "&b&lPro+ &b会员前缀" - lore: - - "&7手持物品右键点击即可获得!" +# ==: org.bukkit.inventory.ItemStack +# type: DIAMOND +# damage: 8 +# meta: +# ==: ItemMeta +# meta-type: UNSPECIFIC +# display-name: "&b&lPro+ &b会员前缀" +# lore: +# - "&7手持物品右键点击即可获得!" # 使用插件提供的方法配置物品,更简单 type: DIAMOND