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;
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 <V extends ConfigurationSerializable> @NotNull SerializableBuilder<V> ofSerializable(@NotNull Class<V> 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.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<String> lore;
@NotNull Map<String, List<String>> additional;
public ItemConfig(@NotNull Material type, short damage,
@Nullable String name, @NotNull List<String> lore,
@NotNull Map<String, List<String>> additional) {
@Nullable String name, @NotNull List<String> 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<String, List<String>> 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<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);
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<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.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<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,
@Nullable String sectionPath, @Nullable ConfigCommentInfo comments,
@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.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<SoundConfig> {
public static @NotNull SoundConfigBuilder create() {
return CraftConfigValue.builder().createSound();
}
public static @NotNull ConfiguredSound of(Sound sound) {
return CraftConfigValue.builder().createSound().defaults(sound).build();
}