diff --git a/pom.xml b/pom.xml index f30de22..c2d4ff9 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ UTF-8 1.4.14 - 2.0.2 + 2.1.0 cc.carm.plugin @@ -61,6 +61,16 @@ + + maven-central + https://repo1.maven.org/maven2/ + + + + sonatype + https://oss.sonatype.org/content/repositories/public/ + + spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ @@ -71,16 +81,6 @@ https://repo.lucko.me/ - - maven-central - https://repo1.maven.org/maven2/ - - - - sonatype-repo - https://oss.sonatype.org/content/repositories/snapshots/ - - EasyPlugin https://raw.githubusercontent.com/CarmJos/EasyPlugin/repo/ diff --git a/src/main/java/cc/carm/plugin/userprefix/Main.java b/src/main/java/cc/carm/plugin/userprefix/Main.java index 81d7e4f..3bb8656 100644 --- a/src/main/java/cc/carm/plugin/userprefix/Main.java +++ b/src/main/java/cc/carm/plugin/userprefix/Main.java @@ -11,11 +11,12 @@ import cc.carm.plugin.userprefix.conf.PluginConfig; import cc.carm.plugin.userprefix.hooker.UserPrefixExpansion; import cc.carm.plugin.userprefix.listener.ChatListener; import cc.carm.plugin.userprefix.listener.UserListener; -import cc.carm.plugin.userprefix.listener.processor.UserNodeUpdateProcessor; +import cc.carm.plugin.userprefix.listener.UserPermListener; import cc.carm.plugin.userprefix.manager.ConfigManager; import cc.carm.plugin.userprefix.manager.PrefixManager; import cc.carm.plugin.userprefix.manager.ServiceManager; import cc.carm.plugin.userprefix.manager.UserManager; +import cc.carm.plugin.userprefix.ui.PrefixSelectGUI; import net.luckperms.api.event.user.UserDataRecalculateEvent; import org.bstats.bukkit.Metrics; import org.bstats.charts.SimplePie; @@ -55,7 +56,7 @@ public class Main extends EasyPlugin { registerListener(new ChatListener()); ServiceManager.getService().getEventBus().subscribe( this, UserDataRecalculateEvent.class, - UserNodeUpdateProcessor::process + UserPermListener::process ); log("初始化GUI管理器..."); @@ -98,6 +99,20 @@ public class Main extends EasyPlugin { return true; } + @Override + protected void shutdown() { + + log("关闭已被打开的GUI..."); + Bukkit.getOnlinePlayers().stream().filter(GUI::hasOpenedGUI).forEach(player -> { + player.closeInventory(); + GUI.removeOpenedGUI(player); + PrefixSelectGUI.removeOpening(player); + }); + + log("&7感谢您使用 &3&lUserPrefix " + getDescription().getVersion() + "&7!"); + log("&7本插件由 &b&lYourCraft &7提供长期支持与维护。"); + } + @Override public boolean isDebugging() { return PluginConfig.DEBUG.getNotNull(); @@ -111,7 +126,7 @@ public class Main extends EasyPlugin { getInstance().debug(message); } - public static void serve(String... message) { + public static void severe(String... message) { getInstance().error(message); } 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 5f10311..3ca94c7 100644 --- a/src/main/java/cc/carm/plugin/userprefix/conf/PluginConfig.java +++ b/src/main/java/cc/carm/plugin/userprefix/conf/PluginConfig.java @@ -9,9 +9,9 @@ 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.reader.GUIItemReader; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemFlag; @@ -121,7 +121,10 @@ public class PluginConfig extends ConfigurationRoot { public static final ConfigValue BACK = ConfiguredValue.builder(GUIItemConfiguration.class) .fromSection() .serializeValue(GUIItemConfiguration::serialize) - .parseValue((v, d) -> GUIItemReader.readFrom(v)) + .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点击即可返回上一菜单"), @@ -159,6 +162,7 @@ public class PluginConfig extends ConfigurationRoot { public static final ConfiguredList ACTIONS = ConfiguredList.builder(String.class).fromString() .defaults("[CONSOLE] " + "say %player_name% 选择了默认前缀") .build(); + @HeaderComment({"默认前缀的显示物品"}) public static final class ITEM { diff --git a/src/main/java/cc/carm/plugin/userprefix/conf/PluginMessages.java b/src/main/java/cc/carm/plugin/userprefix/conf/PluginMessages.java index 684b602..6533dce 100644 --- a/src/main/java/cc/carm/plugin/userprefix/conf/PluginMessages.java +++ b/src/main/java/cc/carm/plugin/userprefix/conf/PluginMessages.java @@ -24,7 +24,6 @@ public class PluginMessages extends ConfigurationRoot { .defaults("&c&l抱歉!&f但您没有权限使用该指令。") .build(); - } diff --git a/src/main/java/cc/carm/plugin/userprefix/conf/reader/GUIItemReader.java b/src/main/java/cc/carm/plugin/userprefix/conf/reader/GUIItemReader.java deleted file mode 100644 index c6f5cb1..0000000 --- a/src/main/java/cc/carm/plugin/userprefix/conf/reader/GUIItemReader.java +++ /dev/null @@ -1,42 +0,0 @@ -package cc.carm.plugin.userprefix.conf.reader; - -import cc.carm.lib.configuration.core.source.ConfigurationWrapper; -import cc.carm.lib.easyplugin.gui.configuration.GUIActionConfiguration; -import cc.carm.lib.easyplugin.gui.configuration.GUIItemConfiguration; -import org.bukkit.Material; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -public class GUIItemReader { - - public static @Nullable GUIItemConfiguration readFrom(@Nullable ConfigurationWrapper section) { - if (section == null) return null; - String material = Optional.ofNullable(section.getString("type")).orElse("STONE"); - Material type = Optional.ofNullable(Material.matchMaterial(material)).orElse(Material.STONE); - int data = section.getInt("data", 0); - int amount = section.getInt("amount", 1); - String name = section.getString("name"); - List lore = section.getStringList("lore"); - - List slots = section.getIntegerList("slots"); - int slot = section.getInt("slot", 0); - - List actionsString = section.getStringList("actions"); - List actions = new ArrayList<>(); - for (String actionString : actionsString) { - GUIActionConfiguration action = GUIActionConfiguration.deserialize(actionString); - if (action == null) continue; - actions.add(action); - } - - return new GUIItemConfiguration( - type, amount, data, name, lore, actions, - slots.size() > 0 ? slots : Collections.singletonList(slot) - ); - } - -} diff --git a/src/main/java/cc/carm/plugin/userprefix/listener/ChatListener.java b/src/main/java/cc/carm/plugin/userprefix/listener/ChatListener.java index 088e6c4..b2600b1 100644 --- a/src/main/java/cc/carm/plugin/userprefix/listener/ChatListener.java +++ b/src/main/java/cc/carm/plugin/userprefix/listener/ChatListener.java @@ -19,8 +19,8 @@ public class ChatListener implements Listener { try { event.setFormat(MessageUtils.setPlaceholders(event.getPlayer(), format)); } catch (Exception exception) { - Main.serve("请检查配置文件中聊天相关是否配置正确。"); - Main.serve("Please check the chat configuration."); + Main.severe("请检查配置文件中聊天相关是否配置正确。"); + Main.severe("Please check the chat configuration."); exception.printStackTrace(); } diff --git a/src/main/java/cc/carm/plugin/userprefix/listener/processor/UserNodeUpdateProcessor.java b/src/main/java/cc/carm/plugin/userprefix/listener/UserPermListener.java similarity index 90% rename from src/main/java/cc/carm/plugin/userprefix/listener/processor/UserNodeUpdateProcessor.java rename to src/main/java/cc/carm/plugin/userprefix/listener/UserPermListener.java index 0cda79c..9c74a3f 100644 --- a/src/main/java/cc/carm/plugin/userprefix/listener/processor/UserNodeUpdateProcessor.java +++ b/src/main/java/cc/carm/plugin/userprefix/listener/UserPermListener.java @@ -1,4 +1,4 @@ -package cc.carm.plugin.userprefix.listener.processor; +package cc.carm.plugin.userprefix.listener; import cc.carm.plugin.userprefix.Main; import cc.carm.plugin.userprefix.UserPrefixAPI; @@ -7,7 +7,7 @@ import net.luckperms.api.event.user.UserDataRecalculateEvent; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -public class UserNodeUpdateProcessor { +public class UserPermListener { public static void process(UserDataRecalculateEvent event) { Player player = Bukkit.getPlayer(event.getUser().getUniqueId()); diff --git a/src/main/java/cc/carm/plugin/userprefix/manager/PrefixManager.java b/src/main/java/cc/carm/plugin/userprefix/manager/PrefixManager.java index c164dfc..1097f2e 100644 --- a/src/main/java/cc/carm/plugin/userprefix/manager/PrefixManager.java +++ b/src/main/java/cc/carm/plugin/userprefix/manager/PrefixManager.java @@ -2,7 +2,6 @@ package cc.carm.plugin.userprefix.manager; import cc.carm.lib.easyplugin.gui.configuration.GUIActionConfiguration; import cc.carm.lib.mineconfiguration.bukkit.data.ItemConfig; -import cc.carm.lib.mineconfiguration.bukkit.source.CraftSectionWrapper; import cc.carm.plugin.userprefix.Main; import cc.carm.plugin.userprefix.conf.PluginConfig; import cc.carm.plugin.userprefix.conf.prefix.PrefixConfig; @@ -42,9 +41,9 @@ public class PrefixManager { String[] filesList = prefixDataFolder.list(); if (filesList == null || filesList.length < 1) { - Main.serve("配置文件夹中暂无任何前缀配置问,请检查。"); - Main.serve("There's no configured prefix."); - Main.serve("Path: " + prefixDataFolder.getAbsolutePath()); + Main.severe("配置文件夹中暂无任何前缀配置问,请检查。"); + Main.severe("There's no configured prefix."); + Main.severe("Path: " + prefixDataFolder.getAbsolutePath()); return; } @@ -62,8 +61,8 @@ public class PrefixManager { Main.debugging("完成前缀加载 " + prefix.getIdentifier() + " : " + prefix.getName()); loaded.put(prefix.getIdentifier(), prefix); } catch (Exception ex) { - Main.serve("在加载前缀 " + file.getAbsolutePath() + " 时出错,请检查配置!"); - Main.serve("Error occurred when loading prefix #" + file.getAbsolutePath() + " !"); + Main.severe("在加载前缀 " + file.getAbsolutePath() + " 时出错,请检查配置!"); + Main.severe("Error occurred when loading prefix #" + file.getAbsolutePath() + " !"); ex.printStackTrace(); } } @@ -152,7 +151,11 @@ public class PrefixManager { @Contract("_,!null->!null") protected static ItemConfig readItem(@Nullable ConfigurationSection section, @Nullable ItemConfig defaultValue) throws Exception { if (section == null) return defaultValue; - else return ItemConfig.deserialize(CraftSectionWrapper.of(section)); + else return ItemConfig.deserialize(section); + } + + protected static List readActions(@NotNull List strings) { + return strings.stream().map(GUIActionConfiguration::deserialize).filter(Objects::nonNull).collect(Collectors.toList()); } protected static List readActions(@NotNull List strings) { diff --git a/src/main/resources/prefixes/example-prefix.yml b/src/main/resources/prefixes/example-prefix.yml index 197ea53..0872dd5 100644 --- a/src/main/resources/prefixes/example-prefix.yml +++ b/src/main/resources/prefixes/example-prefix.yml @@ -24,7 +24,8 @@ permission: "yc.pro" # 选择这个前缀时执行的操作 [非必须] # 用于在玩家选择/取消选择前缀时执行相应动作,以便于实现一些特殊的功能。 -# 具体操作类型详见: https://github.com/CarmJos/UserPrefix/tree/master/.documentation/ACTIONS.md +# 具体操作类型详见介绍,前缀操作不支持限定点击类型。 +# https://github.com/CarmJos/UserPrefix/tree/master/.documentation/ACTIONS.md actions: - "[CONSOLE] say %player_name% 选择了 Pro会员前缀 !"