1
mirror of https://github.com/CarmJos/MineConfiguration.git synced 2026-06-04 21:58:16 +08:00

feat(item): 重构物品相关代码,支持更多功能

This commit is contained in:
2023-09-21 22:23:35 +08:00
parent 1396c6bd6e
commit 398bc773d6
6 changed files with 37 additions and 35 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>mineconfiguration-parent</artifactId> <artifactId>mineconfiguration-parent</artifactId>
<groupId>cc.carm.lib</groupId> <groupId>cc.carm.lib</groupId>
<version>2.8.5</version> <version>2.8.6</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<properties> <properties>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>mineconfiguration-parent</artifactId> <artifactId>mineconfiguration-parent</artifactId>
<groupId>cc.carm.lib</groupId> <groupId>cc.carm.lib</groupId>
<version>2.8.5</version> <version>2.8.6</version>
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@@ -1,31 +1,18 @@
package cc.carm.lib.mineconfiguration.bukkit.value.item; package cc.carm.lib.mineconfiguration.bukkit.value.item;
import cc.carm.lib.configuration.core.value.ValueManifest; import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
import cc.carm.lib.configuration.core.value.type.ConfiguredSection; import cc.carm.lib.configuration.core.value.type.ConfiguredSection;
import cc.carm.lib.mineconfiguration.bukkit.builder.item.ItemConfigBuilder; import cc.carm.lib.mineconfiguration.bukkit.builder.item.ItemConfigBuilder;
import cc.carm.lib.mineconfiguration.bukkit.utils.TextParser;
import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessage;
import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessageList;
import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils;
import com.cryptomorin.xseries.XItemStack; import com.cryptomorin.xseries.XItemStack;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
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.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ConfiguredItem extends ConfiguredSection<ItemStack> { public class ConfiguredItem extends ConfiguredSection<ItemStack> {
@@ -67,7 +54,7 @@ public class ConfiguredItem extends ConfiguredSection<ItemStack> {
} }
public @NotNull PreparedItem prepare(@NotNull Object... values) { public @NotNull PreparedItem prepare(@NotNull Object... values) {
return new PreparedItem(this, values); return PreparedItem.of(player -> get()).params(params).values(values);
} }
public @Nullable ItemStack get(@Nullable Player player) { public @Nullable ItemStack get(@Nullable Player player) {
@@ -19,6 +19,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.*; import java.util.*;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -26,7 +27,15 @@ public class PreparedItem {
public static final @NotNull Pattern LORE_INSERT_PATTERN = Pattern.compile("^(?:\\{(.*)})?#(.*)#(?:\\{(-?\\d+)(?:,(-?\\d+))?})?$"); public static final @NotNull Pattern LORE_INSERT_PATTERN = Pattern.compile("^(?:\\{(.*)})?#(.*)#(?:\\{(-?\\d+)(?:,(-?\\d+))?})?$");
protected final @NotNull ConfiguredItem itemConfig; public static PreparedItem of(@NotNull Function<@NotNull Player, @Nullable ItemStack> itemProvider) {
return new PreparedItem(itemProvider);
}
public static PreparedItem of(@Nullable ItemStack item) {
return of(player -> item);
}
protected final @NotNull Function<@NotNull Player, @Nullable ItemStack> itemProvider;
protected @NotNull Map<String, Object> placeholders = new HashMap<>(); protected @NotNull Map<String, Object> placeholders = new HashMap<>();
protected @NotNull String[] params; protected @NotNull String[] params;
@@ -37,10 +46,10 @@ public class PreparedItem {
protected @NotNull BiConsumer<ItemStack, Player> itemModifier; protected @NotNull BiConsumer<ItemStack, Player> itemModifier;
protected @NotNull BiConsumer<ItemMeta, Player> metaModifier; protected @NotNull BiConsumer<ItemMeta, Player> metaModifier;
protected PreparedItem(@NotNull ConfiguredItem itemConfig, @NotNull Object[] values) { protected PreparedItem(@NotNull Function<@NotNull Player, @Nullable ItemStack> itemProvider) {
this.itemConfig = itemConfig; this.itemProvider = itemProvider;
this.params = itemConfig.params; this.params = new String[0];
this.values = values; this.values = new Object[0];
itemModifier = (item, player) -> { itemModifier = (item, player) -> {
}; };
metaModifier = (meta, player) -> { metaModifier = (meta, player) -> {
@@ -48,7 +57,7 @@ public class PreparedItem {
} }
public @Nullable ItemStack get(Player player) { public @Nullable ItemStack get(Player player) {
ItemStack item = itemConfig.get(); @Nullable ItemStack item = itemProvider.apply(player);
if (item == null) return null; if (item == null) return null;
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
@@ -93,44 +102,50 @@ public class PreparedItem {
return this; return this;
} }
public PreparedItem placeholders(Map<String, Object> placeholders) { public PreparedItem placeholders(@NotNull Map<String, Object> placeholders) {
this.placeholders = placeholders; this.placeholders = placeholders;
return this; return this;
} }
public PreparedItem placeholders(Consumer<Map<String, Object>> consumer) { public PreparedItem placeholders(@NotNull Consumer<Map<String, Object>> consumer) {
Map<String, Object> placeholders = new HashMap<>(); Map<String, Object> placeholders = new HashMap<>();
consumer.accept(placeholders); consumer.accept(placeholders);
return placeholders(placeholders); return placeholders(placeholders);
} }
public PreparedItem insertLore(String path, LoreContent content) { public PreparedItem insertLore(@NotNull String path, @NotNull LoreContent content) {
insertLore.put(path, content); insertLore.put(path, content);
return this; return this;
} }
public PreparedItem insertLore(String path, List<String> content) { public PreparedItem insertLore(@NotNull String path, @NotNull List<String> content) {
return insertLore(path, content, false); return insertLore(path, content, false);
} }
public PreparedItem insertLore(String path, List<String> content, boolean original) { public PreparedItem insertLore(@NotNull String path, @NotNull List<String> content, boolean original) {
return insertLore(path, LoreContent.of(content, original)); return insertLore(path, LoreContent.of(content, original));
} }
public PreparedItem insertLore(String path, String... content) { public PreparedItem insertLore(@NotNull String path, @NotNull String... content) {
return insertLore(path, Arrays.asList(content)); return insertLore(path, Arrays.asList(content));
} }
public PreparedItem insertLore(String path, ConfiguredList<String> content) { public PreparedItem insertLore(@NotNull String path, @NotNull ConfiguredList<String> content) {
return insertLore(path, content.copy()); return insertLore(path, content.copy());
} }
public PreparedItem insertLore(String path, ConfiguredMessage<String> content, Object... params) { public PreparedItem insertLore(@NotNull String path,
return insertLore(path, content.parse(null, params)); @NotNull ConfiguredMessage<String> content, @NotNull Object... params) {
String c = content.parse(null, params);
if (c == null) return this;
return insertLore(path, c);
} }
public PreparedItem insertLore(String path, ConfiguredMessageList<String> content, Object... params) { public PreparedItem insertLore(@NotNull String path,
return insertLore(path, content.parse(null, params)); @NotNull ConfiguredMessageList<String> content, @NotNull Object... params) {
List<String> c = content.parse(null, params);
if (c == null || c.isEmpty()) return this;
return insertLore(path, c);
} }
public PreparedItem amount(int amount) { public PreparedItem amount(int amount) {
+1 -1
View File
@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>mineconfiguration-parent</artifactId> <artifactId>mineconfiguration-parent</artifactId>
<groupId>cc.carm.lib</groupId> <groupId>cc.carm.lib</groupId>
<version>2.8.5</version> <version>2.8.6</version>
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
+1 -1
View File
@@ -17,7 +17,7 @@
<groupId>cc.carm.lib</groupId> <groupId>cc.carm.lib</groupId>
<artifactId>mineconfiguration-parent</artifactId> <artifactId>mineconfiguration-parent</artifactId>
<version>2.8.5</version> <version>2.8.6</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<modules> <modules>
<module>common</module> <module>common</module>