1
mirror of https://github.com/CarmJos/MineConfiguration.git synced 2024-09-19 20:05:49 +00:00

添加 ItemConfigBuilder

This commit is contained in:
Carm Jos 2022-04-23 23:50:27 +08:00
parent b540188aad
commit 4f0cc316a6
5 changed files with 119 additions and 44 deletions

View File

@ -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();
}
} }

View File

@ -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);
}
}

View File

@ -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;
}
} }

View File

@ -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) {

View File

@ -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();
} }