From 5bdc5908ef7d26af425ff453cd8d1ed1b7a4b45e Mon Sep 17 00:00:00 2001 From: carm Date: Fri, 8 Sep 2023 22:15:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(item):=20=E6=94=AF=E6=8C=81=E4=B8=BA?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E7=9A=84LORE=E8=AE=BE=E7=BD=AE=E5=81=8F?= =?UTF-8?q?=E7=A7=BB=E9=87=8F=EF=BC=8C=E4=BB=A5=E4=BE=BF=E5=9C=A8=E4=B8=8A?= =?UTF-8?q?=E6=96=B9=E3=80=81=E4=B8=8B=E6=96=B9=E7=A9=BA=E8=A1=8C=EF=BC=8C?= =?UTF-8?q?=E5=88=86=E5=89=B2=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/pom.xml | 2 +- platform/bukkit/pom.xml | 2 +- .../bukkit/value/ConfiguredItem.java | 60 ++++++++++++++++++- .../bukkit/src/test/java/LoreOffsetTest.java | 20 +++++++ platform/bungee/pom.xml | 2 +- pom.xml | 2 +- 6 files changed, 81 insertions(+), 7 deletions(-) create mode 100644 platform/bukkit/src/test/java/LoreOffsetTest.java diff --git a/common/pom.xml b/common/pom.xml index 58be9f4..12bac81 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-parent cc.carm.lib - 2.8.2 + 2.8.3 4.0.0 diff --git a/platform/bukkit/pom.xml b/platform/bukkit/pom.xml index 39576e8..381395b 100644 --- a/platform/bukkit/pom.xml +++ b/platform/bukkit/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-parent cc.carm.lib - 2.8.2 + 2.8.3 ../../pom.xml 4.0.0 diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredItem.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredItem.java index 1f2da63..58c557d 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredItem.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredItem.java @@ -7,12 +7,15 @@ import cc.carm.lib.mineconfiguration.bukkit.builder.item.ItemConfigBuilder; import cc.carm.lib.mineconfiguration.bukkit.utils.TextParser; import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; import com.cryptomorin.xseries.XItemStack; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -24,7 +27,8 @@ import java.util.regex.Pattern; public class ConfiguredItem extends ConfiguredSection { - public static final @NotNull Pattern LORE_INSERT_PATTERN = Pattern.compile("^#(.*)#$"); + public static final @NotNull Pattern LORE_INSERT_PATTERN = Pattern.compile("^#(.*)#(\\{\\w+})?$"); + public static final @NotNull Pattern LORE_OFFSET_PATTERN = Pattern.compile("\\{(-?\\d+)(?:,(-?\\d+))?}"); public static ItemConfigBuilder create() { return new ItemConfigBuilder(); @@ -134,7 +138,7 @@ public class ConfiguredItem extends ConfiguredSection { }).orElse(null); } - protected static List insertLore(List original, Map> inserted) { + public static List insertLore(List original, Map> inserted) { if (original == null) return Collections.emptyList(); List finalLore = new ArrayList<>(); @@ -146,13 +150,38 @@ public class ConfiguredItem extends ConfiguredSection { finalLore.add(line); } else { String path = matcher.group(1); - Optional.ofNullable(inserted.get(path)).ifPresent(finalLore::addAll); + String offset = matcher.group(2); + finalLore.addAll(addLoreOffset(inserted.get(path), offset)); } } return finalLore; } + public static List addLoreOffset(List lore, String offsetSettings) { + if (lore == null || lore.isEmpty()) return Collections.emptyList(); + if (offsetSettings == null) return lore; + + Matcher offsetMatcher = LORE_OFFSET_PATTERN.matcher(offsetSettings); + if (!offsetMatcher.matches()) return lore; + + int upOffset = Optional.ofNullable(offsetMatcher.group(1)).map(Integer::parseInt).orElse(0); + int downOffset = Optional.ofNullable(offsetMatcher.group(2)).map(Integer::parseInt).orElse(0); + + return addLoreOffset(lore, upOffset, downOffset); + } + + public static List addLoreOffset(List lore, int upOffset, int downOffset) { + if (lore == null || lore.isEmpty()) return Collections.emptyList(); + upOffset = Math.max(0, upOffset); + downOffset = Math.max(0, downOffset); + + ArrayList finalLore = new ArrayList<>(lore); + for (int i = 0; i < upOffset; i++) finalLore.add(0, " "); + for (int i = 0; i < downOffset; i++) finalLore.add(finalLore.size(), " "); + + return finalLore; + } public static class PreparedItem { @@ -233,6 +262,31 @@ public class ConfiguredItem extends ConfiguredSection { return addItemFlags(ItemFlag.HIDE_ENCHANTS).addEnchantment(Enchantment.DURABILITY); } + /** + * @param owner 玩家名 + * @return this + * @deprecated Use {@link #setSkullOwner(OfflinePlayer)} instead. + */ + @Deprecated + public PreparedItem setSkullOwner(String owner) { + return modifyItem((item, player) -> { + if (!(item.getItemMeta() instanceof SkullMeta)) return; + SkullMeta meta = (SkullMeta) item.getItemMeta(); + meta.setOwner(owner); + }); + } + + public PreparedItem setSkullOwner(UUID owner) { + return setSkullOwner(Bukkit.getOfflinePlayer(owner)); + } + + public PreparedItem setSkullOwner(OfflinePlayer owner) { + return modifyItem((item, player) -> { + if (!(item.getItemMeta() instanceof SkullMeta)) return; + SkullMeta meta = (SkullMeta) item.getItemMeta(); + meta.setOwningPlayer(owner); + }); + } public @Nullable ItemStack get(Player player) { return Optional.ofNullable(itemConfig.get(player, values, insertLore)).map(item -> { diff --git a/platform/bukkit/src/test/java/LoreOffsetTest.java b/platform/bukkit/src/test/java/LoreOffsetTest.java new file mode 100644 index 0000000..85ba4f2 --- /dev/null +++ b/platform/bukkit/src/test/java/LoreOffsetTest.java @@ -0,0 +1,20 @@ +import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredItem; +import org.junit.Test; + +import java.util.Arrays; + +public class LoreOffsetTest { + + + @Test + public void lore() { + + System.out.println(ConfiguredItem.addLoreOffset(Arrays.asList("测试lore", "第二行"), "{1,-5}")); + System.out.println(ConfiguredItem.addLoreOffset(Arrays.asList("测试lore", "第二行"), "{1,2}")); + System.out.println(ConfiguredItem.addLoreOffset(Arrays.asList("测试lore", "第二行"), "{1,0}")); + System.out.println(ConfiguredItem.addLoreOffset(Arrays.asList("测试lore", "第二行"), "{2}")); + + } + + +} diff --git a/platform/bungee/pom.xml b/platform/bungee/pom.xml index cad91bc..9fb3490 100644 --- a/platform/bungee/pom.xml +++ b/platform/bungee/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-parent cc.carm.lib - 2.8.2 + 2.8.3 ../../pom.xml 4.0.0 diff --git a/pom.xml b/pom.xml index 53a2910..a133f5f 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ cc.carm.lib mineconfiguration-parent - 2.8.2 + 2.8.3 pom common