1
mirror of https://github.com/CarmJos/UserPrefix.git synced 2026-06-04 23:43:29 +08:00

feat(gui): 支持配置更多GUI按钮。(#44)

This commit is contained in:
2023-02-23 22:27:22 +08:00
parent 8ce82ec7fd
commit 1ea993a31b
5 changed files with 73 additions and 31 deletions
+4 -3
View File
@@ -13,13 +13,13 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<deps.easyplugin.version>1.5.0</deps.easyplugin.version>
<deps.mineconfig.version>2.3.0</deps.mineconfig.version>
<deps.easyplugin.version>1.5.2</deps.easyplugin.version>
<deps.mineconfig.version>2.4.0</deps.mineconfig.version>
</properties>
<groupId>cc.carm.plugin</groupId>
<artifactId>userprefix</artifactId>
<version>3.1.2</version>
<version>3.2.0</version>
<name>UserPrefix</name>
<description>轻便、高效、实时的用户前缀系统。</description>
@@ -129,6 +129,7 @@
<optional>true</optional>
</dependency>
<!--suppress VulnerableLibrariesLocal -->
<dependency>
<groupId>cc.carm.lib</groupId>
<artifactId>easyplugin-githubchecker</artifactId>
@@ -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("注册变量...");
@@ -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<String> 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<GUIItemConfiguration> 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<GUIItems> ITEMS = ConfiguredValue
.builder(GUIItems.class).fromSection()
.defaults(GUIItems::defaults)
.serializeValue(GUIItems::serialize)
.parseValue((v, d) -> GUIItems.parse(v))
.build();
}
@HeaderComment({"相关的声音,留空则不播放声音", "格式为 【声音名:音量:音调】 或 【声音名:音量】 或 【声音名】"})
@@ -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<String, GUIItemConfiguration> items;
public GUIItems(Map<String, GUIItemConfiguration> items) {
this.items = items;
}
public Map<String, GUIItemConfiguration> getItems() {
return items;
}
public Map<String, Object> 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<String, GUIItemConfiguration> 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);
}
}
@@ -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() {