Skip to content

Commit

Permalink
feat(gui): 支持配置更多GUI按钮。(#44)
Browse files Browse the repository at this point in the history
  • Loading branch information
CarmJos committed Feb 23, 2023
1 parent 8ce82ec commit 1ea993a
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 31 deletions.
7 changes: 4 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -129,6 +129,7 @@
<optional>true</optional>
</dependency>

<!--suppress VulnerableLibrariesLocal -->
<dependency>
<groupId>cc.carm.lib</groupId>
<artifactId>easyplugin-githubchecker</artifactId>
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/cc/carm/plugin/userprefix/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ protected boolean initialize() {

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("注册变量...");
Expand Down
34 changes: 11 additions & 23 deletions src/main/java/cc/carm/plugin/userprefix/conf/PluginConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,13 @@
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({"开发者查错模式"})
Expand Down Expand Up @@ -99,8 +94,8 @@ public static class GUI 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()
Expand All @@ -117,23 +112,16 @@ public static final class ITEMS 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({"相关的声音,留空则不播放声音", "格式为 【声音名:音量:音调】 或 【声音名:音量】 或 【声音名】"})
Expand Down
53 changes: 53 additions & 0 deletions src/main/java/cc/carm/plugin/userprefix/conf/gui/GUIItems.java
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@ public PrefixSelectGUI(Player player) {
setPreviousPageSlot(18);
setNextPageSlot(26);

loadBackButton();
loadExtraIcons();
loadItems();
}

public Player getPlayer() {
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() {
Expand Down

0 comments on commit 1ea993a

Please sign in to comment.