Skip to content

Commit

Permalink
添加 ItemConfigBuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
CarmJos committed Apr 23, 2022
1 parent b540188 commit 4f0cc31
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 44 deletions.
Original file line number Diff line number Diff line change
@@ -1,19 +1,35 @@
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 {

public @NotNull SoundConfigBuilder createSound() {
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();
}

}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
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 {
Expand All @@ -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() {
Expand All @@ -44,31 +44,16 @@ public short getData() {
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;
}
Expand All @@ -80,7 +65,6 @@ public short getData() {
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;
}
Expand All @@ -92,9 +76,9 @@ public short getData() {
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"))
);
}

Expand All @@ -105,21 +89,4 @@ private static List<String> parseStringList(@Nullable List<?> data) {
.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;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,25 @@
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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
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;
Expand All @@ -15,6 +16,10 @@

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

0 comments on commit 4f0cc31

Please sign in to comment.