From 1ea993a31b0374a3f893d2e2ba43c5f4c828de91 Mon Sep 17 00:00:00 2001 From: carm Date: Thu, 23 Feb 2023 22:27:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(gui):=20=E6=94=AF=E6=8C=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=9B=B4=E5=A4=9AGUI=E6=8C=89=E9=92=AE=E3=80=82(#44)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 +-- .../java/cc/carm/plugin/userprefix/Main.java | 4 +- .../plugin/userprefix/conf/PluginConfig.java | 34 ++++-------- .../plugin/userprefix/conf/gui/GUIItems.java | 53 +++++++++++++++++++ .../plugin/userprefix/ui/PrefixSelectGUI.java | 6 +-- 5 files changed, 73 insertions(+), 31 deletions(-) create mode 100644 src/main/java/cc/carm/plugin/userprefix/conf/gui/GUIItems.java diff --git a/pom.xml b/pom.xml index 4b9ba62..9203410 100644 --- a/pom.xml +++ b/pom.xml @@ -13,13 +13,13 @@ UTF-8 UTF-8 - 1.5.0 - 2.3.0 + 1.5.2 + 2.4.0 cc.carm.plugin userprefix - 3.1.2 + 3.2.0 UserPrefix 轻便、高效、实时的用户前缀系统。 @@ -129,6 +129,7 @@ true + cc.carm.lib easyplugin-githubchecker diff --git a/src/main/java/cc/carm/plugin/userprefix/Main.java b/src/main/java/cc/carm/plugin/userprefix/Main.java index ac76ba6..b8d6bb3 100644 --- a/src/main/java/cc/carm/plugin/userprefix/Main.java +++ b/src/main/java/cc/carm/plugin/userprefix/Main.java @@ -61,8 +61,8 @@ public class Main extends EasyPlugin { log("初始化GUI管理器..."); GUI.initialize(this); - AutoPagedGUI.defaultNextPage = (PluginConfig.GUI.ITEMS.NEXT_PAGE::getItem); - AutoPagedGUI.defaultPreviousPage = (PluginConfig.GUI.ITEMS.PREV_PAGE::getItem); + AutoPagedGUI.defaultNextPage = (PluginConfig.GUI.BOTTOMS.NEXT_PAGE::getItem); + AutoPagedGUI.defaultPreviousPage = (PluginConfig.GUI.BOTTOMS.PREV_PAGE::getItem); if (MessageUtils.hasPlaceholderAPI()) { log("注册变量..."); diff --git a/src/main/java/cc/carm/plugin/userprefix/conf/PluginConfig.java b/src/main/java/cc/carm/plugin/userprefix/conf/PluginConfig.java index b8afa3b..852acc8 100644 --- a/src/main/java/cc/carm/plugin/userprefix/conf/PluginConfig.java +++ b/src/main/java/cc/carm/plugin/userprefix/conf/PluginConfig.java @@ -6,18 +6,13 @@ import cc.carm.lib.configuration.core.annotation.HeaderComment; import cc.carm.lib.configuration.core.value.ConfigValue; import cc.carm.lib.configuration.core.value.type.ConfiguredList; import cc.carm.lib.configuration.core.value.type.ConfiguredValue; -import cc.carm.lib.easyplugin.gui.configuration.GUIActionConfiguration; -import cc.carm.lib.easyplugin.gui.configuration.GUIActionType; -import cc.carm.lib.easyplugin.gui.configuration.GUIItemConfiguration; -import cc.carm.lib.mineconfiguration.bukkit.source.CraftSectionWrapper; import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredItem; import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredSound; +import cc.carm.plugin.userprefix.conf.gui.GUIItems; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemFlag; -import java.util.Collections; - public class PluginConfig extends ConfigurationRoot { @HeaderComment({"开发者查错模式"}) @@ -99,8 +94,8 @@ public class PluginConfig extends ConfigurationRoot { @HeaderComment("GUI的标题") public static final ConfigValue TITLE = ConfiguredValue.of(String.class, "&f&l我的前缀 &8| 列表"); - @HeaderComment("GUI中的按钮") - public static final class ITEMS extends ConfigurationRoot { + @HeaderComment("GUI中的基本按钮物品") + public static final class BOTTOMS extends ConfigurationRoot { @HeaderComment("前往下一页的物品 (只有存在下一页时才会显示)") public static final ConfiguredItem NEXT_PAGE = ConfiguredItem.create() @@ -117,23 +112,16 @@ public class PluginConfig extends ConfigurationRoot { .defaultLore("&7&o右键可前往第一页哦") .build(); - @HeaderComment("GUI中其他的物品配置") - public static final ConfigValue BACK = ConfiguredValue.builder(GUIItemConfiguration.class) - .fromSection() - .serializeValue(GUIItemConfiguration::serialize) - .parseValue((v, d) -> { - if (!(v instanceof CraftSectionWrapper)) return null; - return GUIItemConfiguration.readFrom(((CraftSectionWrapper) v).getSource()); - }) - .defaults(new GUIItemConfiguration( - Material.BARRIER, 1, 0, "&c&l返回", - Collections.singletonList("&f点击即可返回上一菜单"), - Collections.singletonList(GUIActionConfiguration.of(GUIActionType.CHAT, "/menu")), - Collections.singletonList(49) - )).build(); - } + @HeaderComment("GUI中的其他按钮物品 (若与现有物品位置冲突,将被覆盖)") + public static final ConfigValue ITEMS = ConfiguredValue + .builder(GUIItems.class).fromSection() + .defaults(GUIItems::defaults) + .serializeValue(GUIItems::serialize) + .parseValue((v, d) -> GUIItems.parse(v)) + .build(); + } @HeaderComment({"相关的声音,留空则不播放声音", "格式为 【声音名:音量:音调】 或 【声音名:音量】 或 【声音名】"}) diff --git a/src/main/java/cc/carm/plugin/userprefix/conf/gui/GUIItems.java b/src/main/java/cc/carm/plugin/userprefix/conf/gui/GUIItems.java new file mode 100644 index 0000000..2ec85fa --- /dev/null +++ b/src/main/java/cc/carm/plugin/userprefix/conf/gui/GUIItems.java @@ -0,0 +1,53 @@ +package cc.carm.plugin.userprefix.conf.gui; + +import cc.carm.lib.configuration.core.source.ConfigurationWrapper; +import cc.carm.lib.easyplugin.gui.configuration.GUIActionConfiguration; +import cc.carm.lib.easyplugin.gui.configuration.GUIActionType; +import cc.carm.lib.easyplugin.gui.configuration.GUIConfiguration; +import cc.carm.lib.easyplugin.gui.configuration.GUIItemConfiguration; +import cc.carm.lib.mineconfiguration.bukkit.source.CraftSectionWrapper; +import org.bukkit.Material; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.stream.Collectors; + +public class GUIItems { + + protected final Map items; + + public GUIItems(Map items) { + this.items = items; + } + + public Map getItems() { + return items; + } + + public Map serialize() { + return items.entrySet().stream().collect(Collectors.toMap( + Map.Entry::getKey, + entry -> entry.getValue().serialize(), (a, b) -> b, + LinkedHashMap::new + )); + } + + public static GUIItems parse(ConfigurationWrapper section) { + if (!(section instanceof CraftSectionWrapper)) return new GUIItems(new LinkedHashMap<>()); + CraftSectionWrapper craft = (CraftSectionWrapper) section; + return new GUIItems(GUIConfiguration.readItems(craft.getSource())); + } + + public static GUIItems defaults() { + LinkedHashMap map = new LinkedHashMap<>(); + map.put("back", new GUIItemConfiguration( + Material.BARRIER, 1, 0, "&c&l返回", + Collections.singletonList("&f点击即可返回上一菜单"), + Collections.singletonList(GUIActionConfiguration.of(GUIActionType.CHAT, "/menu")), + Collections.singletonList(49) + )); + return new GUIItems(map); + } + +} diff --git a/src/main/java/cc/carm/plugin/userprefix/ui/PrefixSelectGUI.java b/src/main/java/cc/carm/plugin/userprefix/ui/PrefixSelectGUI.java index 1ce24f8..c2606a4 100644 --- a/src/main/java/cc/carm/plugin/userprefix/ui/PrefixSelectGUI.java +++ b/src/main/java/cc/carm/plugin/userprefix/ui/PrefixSelectGUI.java @@ -28,7 +28,7 @@ public class PrefixSelectGUI extends AutoPagedGUI { setPreviousPageSlot(18); setNextPageSlot(26); - loadBackButton(); + loadExtraIcons(); loadItems(); } @@ -36,8 +36,8 @@ public class PrefixSelectGUI extends AutoPagedGUI { return player; } - public void loadBackButton() { - PluginConfig.GUI.ITEMS.BACK.getOptional().ifPresent(item -> item.setupItems(player, this)); + public void loadExtraIcons() { + PluginConfig.GUI.ITEMS.getNotNull().getItems().values().forEach(v -> v.setupItems(player, this)); } public void loadItems() {