mirror of
https://github.com/CarmJos/MineConfiguration.git
synced 2024-09-19 20:05:49 +00:00
添加 ItemConfigBuilder
This commit is contained in:
parent
b540188aad
commit
4f0cc316a6
@ -1,10 +1,14 @@
|
|||||||
package cc.carm.lib.configuration.craft.builder;
|
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.serializable.SerializableBuilder;
|
||||||
import cc.carm.lib.configuration.craft.builder.sound.SoundConfigBuilder;
|
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.bukkit.configuration.serialization.ConfigurationSerializable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class CraftConfigBuilder extends ConfigBuilder {
|
public class CraftConfigBuilder extends ConfigBuilder {
|
||||||
|
|
||||||
@ -12,8 +16,20 @@ public class CraftConfigBuilder extends ConfigBuilder {
|
|||||||
return new SoundConfigBuilder();
|
return new SoundConfigBuilder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public @NotNull ItemConfigBuilder createItem() {
|
||||||
|
return new ItemConfigBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
public <V extends ConfigurationSerializable> @NotNull SerializableBuilder<V> ofSerializable(@NotNull Class<V> valueClass) {
|
public <V extends ConfigurationSerializable> @NotNull SerializableBuilder<V> ofSerializable(@NotNull Class<V> valueClass) {
|
||||||
return new SerializableBuilder<>(valueClass);
|
return new SerializableBuilder<>(valueClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public @NotNull ConfiguredItem ofItem() {
|
||||||
|
return createItem().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull ConfiguredItem ofItem(@Nullable ItemConfig defaultItem) {
|
||||||
|
return createItem().defaults(defaultItem).build();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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<ItemConfig, ItemConfigBuilder> {
|
||||||
|
|
||||||
|
protected Material type;
|
||||||
|
protected short data;
|
||||||
|
protected String name;
|
||||||
|
protected List<String> 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<String> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -7,7 +7,10 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
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;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class ItemConfig {
|
public class ItemConfig {
|
||||||
@ -16,16 +19,13 @@ public class ItemConfig {
|
|||||||
short data;
|
short data;
|
||||||
@Nullable String name;
|
@Nullable String name;
|
||||||
@NotNull List<String> lore;
|
@NotNull List<String> lore;
|
||||||
@NotNull Map<String, List<String>> additional;
|
|
||||||
|
|
||||||
public ItemConfig(@NotNull Material type, short damage,
|
public ItemConfig(@NotNull Material type, short damage,
|
||||||
@Nullable String name, @NotNull List<String> lore,
|
@Nullable String name, @NotNull List<String> lore) {
|
||||||
@NotNull Map<String, List<String>> additional) {
|
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.data = damage;
|
this.data = damage;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.lore = lore;
|
this.lore = lore;
|
||||||
this.additional = additional;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull Material getType() {
|
public @NotNull Material getType() {
|
||||||
@ -44,31 +44,16 @@ public class ItemConfig {
|
|||||||
return lore;
|
return lore;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull Map<String, List<String>> getAdditionalLore() {
|
|
||||||
return additional;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull ItemStack getItemStack() {
|
public @NotNull ItemStack getItemStack() {
|
||||||
return getItemStack(1);
|
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);
|
ItemStack item = new ItemStack(type, amount, data);
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
if (meta == null) return item;
|
if (meta == null) return item;
|
||||||
|
|
||||||
if (getName() != null) meta.setDisplayName(getName());
|
if (getName() != null) meta.setDisplayName(getName());
|
||||||
|
if (!getLore().isEmpty()) meta.setLore(getLore());
|
||||||
List<String> finalLore = new ArrayList<>();
|
|
||||||
if (!this.lore.isEmpty()) finalLore.addAll(this.lore);
|
|
||||||
|
|
||||||
for (String s : withAdditional) {
|
|
||||||
List<String> additional = this.additional.get(s);
|
|
||||||
if (additional != null) finalLore.addAll(additional);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!finalLore.isEmpty()) meta.setLore(finalLore);
|
|
||||||
|
|
||||||
item.setItemMeta(meta);
|
item.setItemMeta(meta);
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
@ -80,7 +65,6 @@ public class ItemConfig {
|
|||||||
if (this.data != 0) map.put("data", data);
|
if (this.data != 0) map.put("data", data);
|
||||||
if (name != null) map.put("name", name);
|
if (name != null) map.put("name", name);
|
||||||
if (!lore.isEmpty()) map.put("lore", lore);
|
if (!lore.isEmpty()) map.put("lore", lore);
|
||||||
if (!additional.isEmpty()) map.put("additional", additional);
|
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
@ -92,9 +76,9 @@ public class ItemConfig {
|
|||||||
Material type = Material.matchMaterial(typeName);
|
Material type = Material.matchMaterial(typeName);
|
||||||
if (type == null) throw new Exception("Invalid material name: " + typeName);
|
if (type == null) throw new Exception("Invalid material name: " + typeName);
|
||||||
else return new ItemConfig(
|
else return new ItemConfig(
|
||||||
type, section.getShort("data", (short) 0), section.getString("name"),
|
type, section.getShort("data", (short) 0),
|
||||||
parseStringList(section.getList("lore")),
|
section.getString("name"),
|
||||||
readAdditionalLore(section.getConfigurationSection("additional"))
|
parseStringList(section.getList("lore"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,21 +89,4 @@ public class ItemConfig {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<String, List<String>> readAdditionalLore(@Nullable ConfigurationWrapper loreSection) {
|
|
||||||
Map<String, List<String>> additionalMap = new HashMap<>();
|
|
||||||
if (loreSection == null) return additionalMap;
|
|
||||||
|
|
||||||
for (String loreName : loreSection.getKeys(false)) {
|
|
||||||
if (!loreSection.isList(loreName)) continue;
|
|
||||||
|
|
||||||
List<String> additionalLore = parseStringList(loreSection.getList(loreName));
|
|
||||||
if (additionalLore.isEmpty()) continue;
|
|
||||||
|
|
||||||
additionalMap.put(loreName, additionalLore);
|
|
||||||
}
|
|
||||||
|
|
||||||
return additionalMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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.ConfigurationProvider;
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredSection;
|
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 cc.carm.lib.configuration.craft.data.ItemConfig;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class ConfiguredItem extends ConfiguredSection<ItemConfig> {
|
public class ConfiguredItem extends ConfiguredSection<ItemConfig> {
|
||||||
|
|
||||||
|
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,
|
public ConfiguredItem(@Nullable ConfigurationProvider<?> provider,
|
||||||
@Nullable String sectionPath, @Nullable ConfigCommentInfo comments,
|
@Nullable String sectionPath, @Nullable ConfigCommentInfo comments,
|
||||||
@Nullable ItemConfig defaultValue) {
|
@Nullable ItemConfig defaultValue) {
|
||||||
|
@ -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.source.ConfigurationProvider;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
||||||
import cc.carm.lib.configuration.craft.CraftConfigValue;
|
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 cc.carm.lib.configuration.craft.data.SoundConfig;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -15,6 +16,10 @@ import java.util.Optional;
|
|||||||
|
|
||||||
public class ConfiguredSound extends ConfiguredValue<SoundConfig> {
|
public class ConfiguredSound extends ConfiguredValue<SoundConfig> {
|
||||||
|
|
||||||
|
public static @NotNull SoundConfigBuilder create() {
|
||||||
|
return CraftConfigValue.builder().createSound();
|
||||||
|
}
|
||||||
|
|
||||||
public static @NotNull ConfiguredSound of(Sound sound) {
|
public static @NotNull ConfiguredSound of(Sound sound) {
|
||||||
return CraftConfigValue.builder().createSound().defaults(sound).build();
|
return CraftConfigValue.builder().createSound().defaults(sound).build();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user