diff --git a/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/builder/CraftConfigBuilder.java b/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/builder/CraftConfigBuilder.java index e7c6017..1fe8486 100644 --- a/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/builder/CraftConfigBuilder.java +++ b/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/builder/CraftConfigBuilder.java @@ -1,10 +1,14 @@ package cc.carm.lib.configuration.craft.builder; +import cc.carm.lib.configuration.core.builder.ConfigBuilder; +import cc.carm.lib.configuration.craft.builder.item.ItemConfigBuilder; import cc.carm.lib.configuration.craft.builder.serializable.SerializableBuilder; import cc.carm.lib.configuration.craft.builder.sound.SoundConfigBuilder; -import cc.carm.lib.configuration.core.builder.ConfigBuilder; +import cc.carm.lib.configuration.craft.data.ItemConfig; +import cc.carm.lib.configuration.craft.value.ConfiguredItem; import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class CraftConfigBuilder extends ConfigBuilder { @@ -12,8 +16,20 @@ public class CraftConfigBuilder extends ConfigBuilder { return new SoundConfigBuilder(); } + public @NotNull ItemConfigBuilder createItem() { + return new ItemConfigBuilder(); + } + public @NotNull SerializableBuilder ofSerializable(@NotNull Class valueClass) { return new SerializableBuilder<>(valueClass); } + public @NotNull ConfiguredItem ofItem() { + return createItem().build(); + } + + public @NotNull ConfiguredItem ofItem(@Nullable ItemConfig defaultItem) { + return createItem().defaults(defaultItem).build(); + } + } diff --git a/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/builder/item/ItemConfigBuilder.java b/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/builder/item/ItemConfigBuilder.java new file mode 100644 index 0000000..e8536df --- /dev/null +++ b/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/builder/item/ItemConfigBuilder.java @@ -0,0 +1,73 @@ +package cc.carm.lib.configuration.craft.builder.item; + +import cc.carm.lib.configuration.craft.builder.AbstractCraftBuilder; +import cc.carm.lib.configuration.craft.data.ItemConfig; +import cc.carm.lib.configuration.craft.value.ConfiguredItem; +import org.bukkit.Material; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +public class ItemConfigBuilder extends AbstractCraftBuilder { + + protected Material type; + protected short data; + protected String name; + protected List lore = new ArrayList<>(); + + public ItemConfigBuilder defaults(@NotNull Material type, + @Nullable String name, @NotNull String... lore) { + return defaults(type, (short) 0, name, Arrays.asList(lore)); + } + + public ItemConfigBuilder defaults(@NotNull Material type, short data, + @Nullable String name, @NotNull String... lore) { + return defaults(type, data, name, Arrays.asList(lore)); + } + + public ItemConfigBuilder defaults(@NotNull Material type, short data, + @Nullable String name, @NotNull List lore) { + return defaults(new ItemConfig(type, data, name, lore)); + } + + public ItemConfigBuilder defaultType(@NotNull Material type) { + this.type = type; + return this; + } + + public ItemConfigBuilder defaultName(@NotNull String name) { + this.name = name; + return this; + } + + public ItemConfigBuilder defaultDataID(short dataID) { + this.data = dataID; + return this; + } + + public ItemConfigBuilder defaultLore(@NotNull String... lore) { + this.lore = new ArrayList<>(Arrays.asList(lore)); + return this; + } + + @Override + protected @NotNull ItemConfigBuilder getThis() { + return this; + } + + protected @Nullable ItemConfig buildDefault() { + if (this.type == null) return null; + else return new ItemConfig(type, data, name, lore); + } + + @Override + public @NotNull ConfiguredItem build() { + ItemConfig defaultItem = Optional.ofNullable(this.defaultValue).orElse(buildDefault()); + return new ConfiguredItem(this.provider, this.path, buildComments(), defaultItem); + } + +} diff --git a/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/data/ItemConfig.java b/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/data/ItemConfig.java index 6db4d84..f97fec2 100644 --- a/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/data/ItemConfig.java +++ b/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/data/ItemConfig.java @@ -7,7 +7,10 @@ import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; public class ItemConfig { @@ -16,16 +19,13 @@ public class ItemConfig { short data; @Nullable String name; @NotNull List lore; - @NotNull Map> additional; public ItemConfig(@NotNull Material type, short damage, - @Nullable String name, @NotNull List lore, - @NotNull Map> additional) { + @Nullable String name, @NotNull List lore) { this.type = type; this.data = damage; this.name = name; this.lore = lore; - this.additional = additional; } public @NotNull Material getType() { @@ -44,31 +44,16 @@ public class ItemConfig { return lore; } - public @NotNull Map> getAdditionalLore() { - return additional; - } - public @NotNull ItemStack getItemStack() { return getItemStack(1); } - public @NotNull ItemStack getItemStack(int amount, @NotNull String... withAdditional) { + public @NotNull ItemStack getItemStack(int amount) { ItemStack item = new ItemStack(type, amount, data); ItemMeta meta = item.getItemMeta(); if (meta == null) return item; - if (getName() != null) meta.setDisplayName(getName()); - - List finalLore = new ArrayList<>(); - if (!this.lore.isEmpty()) finalLore.addAll(this.lore); - - for (String s : withAdditional) { - List additional = this.additional.get(s); - if (additional != null) finalLore.addAll(additional); - } - - if (!finalLore.isEmpty()) meta.setLore(finalLore); - + if (!getLore().isEmpty()) meta.setLore(getLore()); item.setItemMeta(meta); return item; } @@ -80,7 +65,6 @@ public class ItemConfig { if (this.data != 0) map.put("data", data); if (name != null) map.put("name", name); if (!lore.isEmpty()) map.put("lore", lore); - if (!additional.isEmpty()) map.put("additional", additional); return map; } @@ -92,9 +76,9 @@ public class ItemConfig { Material type = Material.matchMaterial(typeName); if (type == null) throw new Exception("Invalid material name: " + typeName); else return new ItemConfig( - type, section.getShort("data", (short) 0), section.getString("name"), - parseStringList(section.getList("lore")), - readAdditionalLore(section.getConfigurationSection("additional")) + type, section.getShort("data", (short) 0), + section.getString("name"), + parseStringList(section.getList("lore")) ); } @@ -105,21 +89,4 @@ public class ItemConfig { .collect(Collectors.toList()); } - private static Map> readAdditionalLore(@Nullable ConfigurationWrapper loreSection) { - Map> additionalMap = new HashMap<>(); - if (loreSection == null) return additionalMap; - - for (String loreName : loreSection.getKeys(false)) { - if (!loreSection.isList(loreName)) continue; - - List additionalLore = parseStringList(loreSection.getList(loreName)); - if (additionalLore.isEmpty()) continue; - - additionalMap.put(loreName, additionalLore); - } - - return additionalMap; - } - - } diff --git a/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/value/ConfiguredItem.java b/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/value/ConfiguredItem.java index b675afb..157af38 100644 --- a/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/value/ConfiguredItem.java +++ b/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/value/ConfiguredItem.java @@ -5,11 +5,25 @@ import cc.carm.lib.configuration.core.source.ConfigCommentInfo; import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.configuration.core.source.ConfigurationWrapper; import cc.carm.lib.configuration.core.value.type.ConfiguredSection; +import cc.carm.lib.configuration.craft.CraftConfigValue; +import cc.carm.lib.configuration.craft.builder.item.ItemConfigBuilder; import cc.carm.lib.configuration.craft.data.ItemConfig; import org.jetbrains.annotations.Nullable; public class ConfiguredItem extends ConfiguredSection { + public static ItemConfigBuilder create() { + return CraftConfigValue.builder().createItem(); + } + + public static ConfiguredItem of() { + return CraftConfigValue.builder().ofItem(); + } + + public static ConfiguredItem of(@Nullable ItemConfig defaultItem) { + return CraftConfigValue.builder().ofItem(defaultItem); + } + public ConfiguredItem(@Nullable ConfigurationProvider provider, @Nullable String sectionPath, @Nullable ConfigCommentInfo comments, @Nullable ItemConfig defaultValue) { diff --git a/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/value/ConfiguredSound.java b/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/value/ConfiguredSound.java index cfb17f8..e34ae1b 100644 --- a/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/value/ConfiguredSound.java +++ b/craftbukkit/src/main/java/cc/carm/lib/configuration/craft/value/ConfiguredSound.java @@ -5,6 +5,7 @@ import cc.carm.lib.configuration.core.source.ConfigCommentInfo; import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.configuration.core.value.type.ConfiguredValue; import cc.carm.lib.configuration.craft.CraftConfigValue; +import cc.carm.lib.configuration.craft.builder.sound.SoundConfigBuilder; import cc.carm.lib.configuration.craft.data.SoundConfig; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -15,6 +16,10 @@ import java.util.Optional; public class ConfiguredSound extends ConfiguredValue { + public static @NotNull SoundConfigBuilder create() { + return CraftConfigValue.builder().createSound(); + } + public static @NotNull ConfiguredSound of(Sound sound) { return CraftConfigValue.builder().createSound().defaults(sound).build(); }