1
mirror of https://github.com/CarmJos/UserPrefix.git synced 2026-06-05 00:35:02 +08:00

fix: use 3.0 MineConfiguration

This commit is contained in:
flowerinsnow
2025-05-05 19:21:27 +08:00
committed by Carm
parent 610242ff62
commit 003884d772
12 changed files with 118 additions and 113 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<properties> <properties>
@@ -26,12 +26,12 @@ public class AdminCommand extends CommandHandler {
@Override @Override
public Void noPermission(CommandSender sender) { public Void noPermission(CommandSender sender) {
PluginMessages.COMMAND_USAGE.NO_PERM.send(sender); PluginMessages.COMMAND_USAGE.NO_PERM.sendTo(sender);
return null; return null;
} }
public static Void help(CommandSender sender) { public static Void help(CommandSender sender) {
PluginMessages.COMMAND_USAGE.ADMIN.send(sender); PluginMessages.COMMAND_USAGE.ADMIN.sendTo(sender);
return null; return null;
} }
@@ -18,7 +18,7 @@ public class UserCommand implements CommandExecutor {
PrefixSelectGUI.open((Player) sender); PrefixSelectGUI.open((Player) sender);
} else { } else {
if (strings.length != 1) { if (strings.length != 1) {
PluginMessages.COMMAND_USAGE.CONSOLE.send(sender); PluginMessages.COMMAND_USAGE.CONSOLE.sendTo(sender);
} else { } else {
Player player = Bukkit.getPlayer(strings[0]); Player player = Bukkit.getPlayer(strings[0]);
if (player != null) { if (player != null) {
@@ -17,9 +17,9 @@ public class ListCommand extends SubCommand<AdminCommand> {
@Override @Override
public Void execute(JavaPlugin plugin, CommandSender sender, String[] args) { public Void execute(JavaPlugin plugin, CommandSender sender, String[] args) {
PluginMessages.LIST.HEADER.send(sender); PluginMessages.LIST.HEADER.sendTo(sender);
for (PrefixConfig value : UserPrefixAPI.getPrefixManager().getPrefixes().values()) { for (PrefixConfig value : UserPrefixAPI.getPrefixManager().getPrefixes().values()) {
PluginMessages.LIST.VALUE.send(sender, PluginMessages.LIST.VALUE.sendTo(sender,
value.getWeight(), value.getIdentifier(), value.getWeight(), value.getIdentifier(),
value.getName(), value.getPermission(), value.getName(), value.getPermission(),
value.getContent(sender), sender.getName() value.getContent(sender), sender.getName()
@@ -33,9 +33,9 @@ public class ReloadCommand extends SubCommand<AdminCommand> {
*/ */
UserPrefixAPI.getUserManager().updatePrefixView(onlinePlayer, false); UserPrefixAPI.getUserManager().updatePrefixView(onlinePlayer, false);
} }
PluginMessages.RELOAD.SUCCESS.send(sender, System.currentTimeMillis() - s1, num); PluginMessages.RELOAD.SUCCESS.sendTo(sender, System.currentTimeMillis() - s1, num);
} catch (Exception e) { } catch (Exception e) {
PluginMessages.RELOAD.FAILED.send(sender, e.getMessage()); PluginMessages.RELOAD.FAILED.sendTo(sender, e.getMessage());
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
@@ -23,7 +23,7 @@ public class SetCommand extends SubCommand<AdminCommand> {
Player target = Bukkit.getPlayer(args[0]); Player target = Bukkit.getPlayer(args[0]);
if (target == null) { if (target == null) {
PluginMessages.NOT_ONLINE.send(sender, args[0]); PluginMessages.NOT_ONLINE.sendTo(sender, args[0]);
return null; return null;
} }
@@ -37,17 +37,17 @@ public class SetCommand extends SubCommand<AdminCommand> {
} }
if (prefixConfig == null) { if (prefixConfig == null) {
PluginMessages.SET.PREFIX_NOT_FOUND.send(sender, prefixInput); PluginMessages.SET.PREFIX_NOT_FOUND.sendTo(sender, prefixInput);
return null; return null;
} }
if (!prefixConfig.checkPermission(target)) { if (!prefixConfig.checkPermission(target)) {
PluginMessages.SET.NO_PERM.send(sender, target.getName(), prefixConfig.getName()); PluginMessages.SET.NO_PERM.sendTo(sender, target.getName(), prefixConfig.getName());
return null; return null;
} }
UserPrefixAPI.getUserManager().setPrefix(target, prefixConfig, true); UserPrefixAPI.getUserManager().setPrefix(target, prefixConfig, true);
PluginMessages.SET.SUCCESS.send(sender, target.getName(), prefixConfig.getName()); PluginMessages.SET.SUCCESS.sendTo(sender, target.getName(), prefixConfig.getName());
return null; return null;
} }
@@ -1,11 +1,10 @@
package cc.carm.plugin.userprefix.conf; package cc.carm.plugin.userprefix.conf;
import cc.carm.lib.configuration.core.ConfigurationRoot; import cc.carm.lib.configuration.Configuration;
import cc.carm.lib.configuration.core.annotation.ConfigPath; import cc.carm.lib.configuration.annotation.ConfigPath;
import cc.carm.lib.configuration.core.annotation.HeaderComment; import cc.carm.lib.configuration.annotation.HeaderComments;
import cc.carm.lib.configuration.core.value.ConfigValue; import cc.carm.lib.configuration.value.standard.ConfiguredList;
import cc.carm.lib.configuration.core.value.type.ConfiguredList; import cc.carm.lib.configuration.value.standard.ConfiguredValue;
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredSound; import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredSound;
import cc.carm.lib.mineconfiguration.bukkit.value.item.ConfiguredItem; import cc.carm.lib.mineconfiguration.bukkit.value.item.ConfiguredItem;
import cc.carm.plugin.userprefix.conf.gui.GUIItems; import cc.carm.plugin.userprefix.conf.gui.GUIItems;
@@ -13,91 +12,91 @@ import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemFlag;
public class PluginConfig extends ConfigurationRoot { public class PluginConfig implements Configuration {
@HeaderComment({"开发者查错模式"}) @HeaderComments({"开发者查错模式"})
public static final ConfigValue<Boolean> DEBUG = ConfiguredValue.of(Boolean.class, false); public static final ConfiguredValue<Boolean> DEBUG = ConfiguredValue.of(Boolean.class, false);
@HeaderComment({ @HeaderComments({
"统计数据设定", "统计数据设定",
" 该选项用于帮助开发者统计插件版本与使用情况,且绝不会影响性能与使用体验。", " 该选项用于帮助开发者统计插件版本与使用情况,且绝不会影响性能与使用体验。",
" 当然,您也可以选择在这里关闭,或在plugins/bStats下的配置文件中关闭。" " 当然,您也可以选择在这里关闭,或在plugins/bStats下的配置文件中关闭。"
}) })
public static final ConfigValue<Boolean> METRICS = ConfiguredValue.of(Boolean.class, true); public static final ConfiguredValue<Boolean> METRICS = ConfiguredValue.of(Boolean.class, true);
@HeaderComment({ @HeaderComments({
"检查更新设定", "检查更新设定",
"该选项用于插件判断是否要检查更新,若您不希望插件检查更新并提示您,可以选择关闭。", "该选项用于插件判断是否要检查更新,若您不希望插件检查更新并提示您,可以选择关闭。",
"检查更新为异步操作,绝不会影响性能与使用体验。" "检查更新为异步操作,绝不会影响性能与使用体验。"
}) })
public static final ConfigValue<Boolean> CHECK_UPDATE = ConfiguredValue.of(Boolean.class, true); public static final ConfiguredValue<Boolean> CHECK_UPDATE = ConfiguredValue.of(Boolean.class, true);
@HeaderComment({"自定义存储位置设定", "可以规定到远程文件夹中去加载前缀配置"}) @HeaderComments({"自定义存储位置设定", "可以规定到远程文件夹中去加载前缀配置"})
public static final class CUSTOM_STORAGE extends ConfigurationRoot { public static final class CUSTOM_STORAGE implements Configuration {
@HeaderComment({"是否启用自定义存储位置"}) @HeaderComments({"是否启用自定义存储位置"})
public static final ConfigValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, false); public static final ConfiguredValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, false);
@HeaderComment({ @HeaderComments({
"目标存储路径,必须指向一个文件夹。", "目标存储路径,必须指向一个文件夹。",
"默认存储位置为 “插件文件夹”/prefixes", "默认存储位置为 “插件文件夹”/prefixes",
"支持绝对文件路径,如 \"/etc/minecraft/configurations/prefixes/\"" "支持绝对文件路径,如 \"/etc/minecraft/configurations/prefixes/\""
}) })
public static final ConfigValue<String> PATH = ConfiguredValue.of(String.class, "prefixes/"); public static final ConfiguredValue<String> PATH = ConfiguredValue.of(String.class, "prefixes/");
} }
@HeaderComment("功能设定") @HeaderComments("功能设定")
public static class FUNCTIONS extends ConfigurationRoot { public static class FUNCTIONS implements Configuration {
@ConfigPath("on-name-prefix") @ConfigPath("on-name-prefix")
@HeaderComment({"头顶与TabList前缀功能,该方法用到了玩家名计分板接口,如有冲突请关掉哦~"}) @HeaderComments({"头顶与TabList前缀功能,该方法用到了玩家名计分板接口,如有冲突请关掉哦~"})
public static final class NAME_PREFIX extends ConfigurationRoot { public static final class NAME_PREFIX implements Configuration {
@HeaderComment("是否开启本功能") @HeaderComments("是否开启本功能")
public static final ConfigValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, true); public static final ConfiguredValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, true);
@HeaderComment("是否按降序排列,即权重越高的前缀显示在越上面;若为false则按升序排列。") @HeaderComments("是否按降序排列,即权重越高的前缀显示在越上面;若为false则按升序排列。")
public static final ConfigValue<Boolean> ORDER_DESC = ConfiguredValue.of(Boolean.class, true); public static final ConfiguredValue<Boolean> ORDER_DESC = ConfiguredValue.of(Boolean.class, true);
} }
@ConfigPath("auto-prefix-use") @ConfigPath("auto-prefix-use")
@HeaderComment("自动使用前缀,即当玩家没有自己选择一个前缀的时候,会自动使用所拥有的的前缀中权重最高的那一个") @HeaderComments("自动使用前缀,即当玩家没有自己选择一个前缀的时候,会自动使用所拥有的的前缀中权重最高的那一个")
public static final ConfigValue<Boolean> AUTO_USE = ConfiguredValue.of(Boolean.class, true); public static final ConfiguredValue<Boolean> AUTO_USE = ConfiguredValue.of(Boolean.class, true);
@HeaderComment({ @HeaderComments({
"聊天功能设定", "聊天功能设定",
"- 我不推荐使用本插件的聊天功能,而是建议使用其他的聊天插件。", "- 我不推荐使用本插件的聊天功能,而是建议使用其他的聊天插件。",
"- 本插件仅仅提供了**最基本**的格式变量支持,不包含其他任何功能。", "- 本插件仅仅提供了**最基本**的格式变量支持,不包含其他任何功能。",
"- 注意聊天格式需要遵守Bukkit原格式,即不得缺失 “%1$s” 和 “%2$s” 。", "- 注意聊天格式需要遵守Bukkit原格式,即不得缺失 “%1$s” 和 “%2$s” 。",
"- 本插件的聊天功能不影响其他插件对聊天事件的操作。" "- 本插件的聊天功能不影响其他插件对聊天事件的操作。"
}) })
public static final class CHAT extends ConfigurationRoot { public static final class CHAT implements Configuration {
@HeaderComment("是否开启本功能") @HeaderComments("是否开启本功能")
public static final ConfigValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, false); public static final ConfiguredValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, false);
@HeaderComment({ @HeaderComments({
"聊天的格式,注意 “%1$s” 和 “%2$s” 不可缺少。", "聊天的格式,注意 “%1$s” 和 “%2$s” 不可缺少。",
"- %1$s -> 玩家名", "- %2$s -> 聊天内容" "- %1$s -> 玩家名", "- %2$s -> 聊天内容"
}) })
public static final ConfigValue<String> FORMAT = ConfiguredValue.of(String.class, "<%1$s> %2$s"); public static final ConfiguredValue<String> FORMAT = ConfiguredValue.of(String.class, "<%1$s> %2$s");
} }
} }
@HeaderComment({"前缀GUI界面设定"}) @HeaderComments({"前缀GUI界面设定"})
public static class GUI extends ConfigurationRoot { public static class GUI implements Configuration {
@HeaderComment("GUI的标题") @HeaderComments("GUI的标题")
public static final ConfigValue<String> TITLE = ConfiguredValue.of(String.class, "&f&l我的前缀 &8| 列表"); public static final ConfiguredValue<String> TITLE = ConfiguredValue.of(String.class, "&f&l我的前缀 &8| 列表");
@HeaderComment("GUI中的基本按钮物品") @HeaderComments("GUI中的基本按钮物品")
public static final class BOTTOMS extends ConfigurationRoot { public static final class BOTTOMS implements Configuration {
@HeaderComment("前往下一页的物品 (只有存在下一页时才会显示)") @HeaderComments("前往下一页的物品 (只有存在下一页时才会显示)")
public static final ConfiguredItem NEXT_PAGE = ConfiguredItem.create() public static final ConfiguredItem NEXT_PAGE = ConfiguredItem.create()
.defaultType(Material.ARROW) .defaultType(Material.ARROW)
.defaultName("下一页") .defaultName("下一页")
@@ -105,7 +104,7 @@ public class PluginConfig extends ConfigurationRoot {
.build(); .build();
@ConfigPath("previous-page") @ConfigPath("previous-page")
@HeaderComment({"前往上一页时的物品 (只有当前页不是第一页时才会显示)"}) @HeaderComments({"前往上一页时的物品 (只有当前页不是第一页时才会显示)"})
public static final ConfiguredItem PREV_PAGE = ConfiguredItem.create() public static final ConfiguredItem PREV_PAGE = ConfiguredItem.create()
.defaultType(Material.ARROW) .defaultType(Material.ARROW)
.defaultName("上一页") .defaultName("上一页")
@@ -114,18 +113,18 @@ public class PluginConfig extends ConfigurationRoot {
} }
@HeaderComment("GUI中的其他按钮物品 (若与现有物品位置冲突,将被覆盖)") @HeaderComments("GUI中的其他按钮物品 (若与现有物品位置冲突,将被覆盖)")
public static final ConfigValue<GUIItems> ITEMS = ConfiguredValue public static final ConfiguredValue<GUIItems> ITEMS = ConfiguredValue
.builderOf(GUIItems.class).fromSection() .builderOf(GUIItems.class).fromSection()
.defaults(GUIItems::defaults) .defaults(GUIItems::defaults)
.serializeValue(GUIItems::serialize) .serialize(GUIItems::serialize)
.parseValue((v, d) -> GUIItems.parse(v)) .parse(GUIItems::parse)
.build(); .build();
} }
@HeaderComment({"相关的声音,留空则不播放声音", "格式为 【声音名:音量:音调】 或 【声音名:音量】 或 【声音名】"}) @HeaderComments({"相关的声音,留空则不播放声音", "格式为 【声音名:音量:音调】 或 【声音名:音量】 或 【声音名】"})
public static final class SOUNDS extends ConfigurationRoot { public static final class SOUNDS implements Configuration {
public static final ConfiguredSound GUI_OPEN = ConfiguredSound.of("BLOCK_NOTE_BLOCK_PLING", 0.5F, 0.8F); public static final ConfiguredSound GUI_OPEN = ConfiguredSound.of("BLOCK_NOTE_BLOCK_PLING", 0.5F, 0.8F);
public static final ConfiguredSound GUI_CLICK = ConfiguredSound.of("UI_BUTTON_CLICK"); public static final ConfiguredSound GUI_CLICK = ConfiguredSound.of("UI_BUTTON_CLICK");
@@ -134,34 +133,34 @@ public class PluginConfig extends ConfigurationRoot {
} }
@HeaderComment({"默认前缀配置"}) @HeaderComments({"默认前缀配置"})
public static final class DEFAULT_PREFIX extends ConfigurationRoot { public static final class DEFAULT_PREFIX implements Configuration {
@HeaderComment("默认前缀的显示名称,用于在消息提示中显示。") @HeaderComments("默认前缀的显示名称,用于在消息提示中显示。")
public static final ConfigValue<String> NAME = ConfiguredValue.of(String.class, "默认前缀"); public static final ConfiguredValue<String> NAME = ConfiguredValue.of(String.class, "默认前缀");
@HeaderComment({"默认前缀的权重,默认为0。"}) @HeaderComments({"默认前缀的权重,默认为0。"})
public static final ConfigValue<Integer> WEIGHT = ConfiguredValue.of(Integer.class, 0); public static final ConfiguredValue<Integer> WEIGHT = ConfiguredValue.of(Integer.class, 0);
@HeaderComment({"默认前缀的内容,即用于显示的实际前缀"}) @HeaderComments({"默认前缀的内容,即用于显示的实际前缀"})
public static final ConfigValue<String> CONTENT = ConfiguredValue.of(String.class, "&r"); public static final ConfiguredValue<String> CONTENT = ConfiguredValue.of(String.class, "&r");
@HeaderComment({"选择默认前缀时执行的操作"}) @HeaderComments({"选择默认前缀时执行的操作"})
public static final ConfiguredList<String> ACTIONS = ConfiguredList.builderOf(String.class).fromString() public static final ConfiguredList<String> ACTIONS = ConfiguredList.builderOf(String.class).fromString()
.defaults("[CONSOLE] " + "say %player_name% 选择了默认前缀") .defaults("[CONSOLE] " + "say %player_name% 选择了默认前缀")
.build(); .build();
@HeaderComment({"默认前缀的显示物品"}) @HeaderComments({"默认前缀的显示物品"})
public static final class ITEM extends ConfigurationRoot { public static final class ITEM implements Configuration {
@HeaderComment({"当未选择默认前缀时显示的物品"}) @HeaderComments({"当未选择默认前缀时显示的物品"})
public static final ConfiguredItem NOT_USING = ConfiguredItem.create() public static final ConfiguredItem NOT_USING = ConfiguredItem.create()
.defaultType(Material.NAME_TAG) .defaultType(Material.NAME_TAG)
.defaultName("&f默认玩家前缀 &f(点击切换)") .defaultName("&f默认玩家前缀 &f(点击切换)")
.defaultLore("", "&a➥ 点击切换到该前缀") .defaultLore("", "&a➥ 点击切换到该前缀")
.build(); .build();
@HeaderComment({"当选择了默认前缀时显示的物品"}) @HeaderComments({"当选择了默认前缀时显示的物品"})
public static final ConfiguredItem USING = ConfiguredItem.create() public static final ConfiguredItem USING = ConfiguredItem.create()
.defaultType(Material.NAME_TAG) .defaultType(Material.NAME_TAG)
.defaultEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 1) .defaultEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
@@ -1,18 +1,18 @@
package cc.carm.plugin.userprefix.conf; package cc.carm.plugin.userprefix.conf;
import cc.carm.lib.configuration.core.ConfigurationRoot; import cc.carm.lib.configuration.Configuration;
import cc.carm.lib.configuration.core.annotation.HeaderComment; import cc.carm.lib.configuration.annotation.HeaderComments;
import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessageList; import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessage;
public class PluginMessages extends ConfigurationRoot { public class PluginMessages implements Configuration {
public static final class COMMAND_USAGE extends ConfigurationRoot { public static final class COMMAND_USAGE implements Configuration {
public static final ConfiguredMessageList<String> CONSOLE = ConfiguredMessageList.asStrings().defaults( public static final ConfiguredMessage<String> CONSOLE = ConfiguredMessage.asString().defaults(
"&f请输入 &b/prefix <玩家ID> &f为指定玩家打开前缀GUI。" "&f请输入 &b/prefix <玩家ID> &f为指定玩家打开前缀GUI。"
).build(); ).build();
public static final ConfiguredMessageList<String> ADMIN = ConfiguredMessageList.asStrings().defaults( public static final ConfiguredMessage<String> ADMIN = ConfiguredMessage.asString().defaults(
"&3&l用户前缀系统 &f帮助", "&3&l用户前缀系统 &f帮助",
"&8# &f/upa list", "&8# &f/upa list",
"&8- &7查看当前前缀列表。", "&8- &7查看当前前缀列表。",
@@ -23,52 +23,52 @@ public class PluginMessages extends ConfigurationRoot {
"&8- &7重载前缀配置。" "&8- &7重载前缀配置。"
).build(); ).build();
public static final ConfiguredMessageList<String> NO_PERM = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> NO_PERM = ConfiguredMessage.asString()
.defaults("&c&l抱歉!&f但您没有权限使用该指令。") .defaults("&c&l抱歉!&f但您没有权限使用该指令。")
.build(); .build();
} }
public static final ConfiguredMessageList<String> NOT_ONLINE = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> NOT_ONLINE = ConfiguredMessage.asString()
.defaults("&7玩家 &b%(player) &7并不在线。") .defaults("&7玩家 &b%(player) &7并不在线。")
.params("player").build(); .params("player").build();
public static final ConfiguredMessageList<String> SELECTED = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> SELECTED = ConfiguredMessage.asString()
.defaults("&7您选择了 &f%(name) &7作为当前显示的前缀。") .defaults("&7您选择了 &f%(name) &7作为当前显示的前缀。")
.params("name").build(); .params("name").build();
public static final ConfiguredMessageList<String> EXPIRED = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> EXPIRED = ConfiguredMessage.asString()
.defaults( .defaults(
"&7您先前使用的前缀 &f%(oldName) &7已到期。", "&7您先前使用的前缀 &f%(oldName) &7已到期。",
"&7现在已为您重新调整为 &f%(newName) &7。" "&7现在已为您重新调整为 &f%(newName) &7。"
).params("oldName", "newName").build(); ).params("oldName", "newName").build();
public static final ConfiguredMessageList<String> REMOVED = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> REMOVED = ConfiguredMessage.asString()
.defaults("&7您先前使用的前缀已被移除,现在已为您重新调整为 &f%(newName) &7。") .defaults("&7您先前使用的前缀已被移除,现在已为您重新调整为 &f%(newName) &7。")
.params("newName").build(); .params("newName").build();
public static final class RELOAD extends ConfigurationRoot { public static final class RELOAD implements Configuration {
public static final ConfiguredMessageList<String> SUCCESS = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> SUCCESS = ConfiguredMessage.asString()
.defaults("&a&l重载完成!&7耗时 &f%(time)ms&7,共加载了 &b%(count) &7个前缀。") .defaults("&a&l重载完成!&7耗时 &f%(time)ms&7,共加载了 &b%(count) &7个前缀。")
.params("time", "count").build(); .params("time", "count").build();
public static final ConfiguredMessageList<String> FAILED = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> FAILED = ConfiguredMessage.asString()
.defaults("&c&l重载出错!&7错误提示为 &8“&r%(error)&8”。") .defaults("&c&l重载出错!&7错误提示为 &8“&r%(error)&8”。")
.params("error").build(); .params("error").build();
} }
public static final class SET extends ConfigurationRoot { public static final class SET implements Configuration {
public static final ConfiguredMessageList<String> SUCCESS = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> SUCCESS = ConfiguredMessage.asString()
.defaults("&a&l设置成功!&7成功设定玩家 &b%(player) &f的前缀为 &r%(prefix) &f。") .defaults("&a&l设置成功!&7成功设定玩家 &b%(player) &f的前缀为 &r%(prefix) &f。")
.params("player", "prefix").build(); .params("player", "prefix").build();
public static final ConfiguredMessageList<String> PREFIX_NOT_FOUND = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> PREFIX_NOT_FOUND = ConfiguredMessage.asString()
.defaults("&c&l无法设置!&7不存在ID为 &b%(prefix) &7的前缀。") .defaults("&c&l无法设置!&7不存在ID为 &b%(prefix) &7的前缀。")
.params("prefix").build(); .params("prefix").build();
public static final ConfiguredMessageList<String> NO_PERM = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> NO_PERM = ConfiguredMessage.asString()
.defaults("&c&l无法设置!&7玩家 &b%(player) &7并没有前缀 &r%(prefix) &7的前缀。") .defaults("&c&l无法设置!&7玩家 &b%(player) &7并没有前缀 &r%(prefix) &7的前缀。")
.params("player", "prefix") .params("player", "prefix")
.build(); .build();
@@ -76,13 +76,13 @@ public class PluginMessages extends ConfigurationRoot {
} }
@HeaderComment("管理员使用的 “/upa list” 指令的格式") @HeaderComments("管理员使用的 “/upa list” 指令的格式")
public static final class LIST extends ConfigurationRoot { public static final class LIST implements Configuration {
public static final ConfiguredMessageList<String> HEADER = ConfiguredMessageList.asStrings() public static final ConfiguredMessage<String> HEADER = ConfiguredMessage.asString()
.defaults("&3&l用户前缀系统 &f前缀列表").build(); .defaults("&3&l用户前缀系统 &f前缀列表").build();
public static final ConfiguredMessageList<String> VALUE = ConfiguredMessageList.asStrings().defaults( public static final ConfiguredMessage<String> VALUE = ConfiguredMessage.asString().defaults(
"&8#%(weight) &f%(identifier)", "&8#%(weight) &f%(identifier)",
"&8- &7显示名 &r%(name) &7权限 &r%(permission)", "&8- &7显示名 &r%(name) &7权限 &r%(permission)",
"&8- &7内容示例&r %(content) %(sender_name)" "&8- &7内容示例&r %(content) %(sender_name)"
@@ -1,11 +1,12 @@
package cc.carm.plugin.userprefix.conf.gui; package cc.carm.plugin.userprefix.conf.gui;
import cc.carm.lib.configuration.core.source.ConfigurationWrapper; import cc.carm.lib.configuration.source.section.ConfigureSection;
import cc.carm.lib.easyplugin.gui.configuration.GUIActionConfiguration; import cc.carm.lib.easyplugin.gui.configuration.GUIActionConfiguration;
import cc.carm.lib.easyplugin.gui.configuration.GUIActionType; import cc.carm.lib.easyplugin.gui.configuration.GUIActionType;
import cc.carm.lib.easyplugin.gui.configuration.GUIConfiguration; import cc.carm.lib.easyplugin.gui.configuration.GUIConfiguration;
import cc.carm.lib.easyplugin.gui.configuration.GUIItemConfiguration; import cc.carm.lib.easyplugin.gui.configuration.GUIItemConfiguration;
import cc.carm.lib.mineconfiguration.bukkit.source.CraftSectionWrapper; import cc.carm.lib.mineconfiguration.bukkit.source.BukkitSection;
import cc.carm.plugin.userprefix.Main;
import org.bukkit.Material; import org.bukkit.Material;
import java.util.Collections; import java.util.Collections;
@@ -33,10 +34,15 @@ public class GUIItems {
)); ));
} }
public static GUIItems parse(ConfigurationWrapper<?> section) { public static GUIItems parse(ConfigureSection section) {
if (!(section instanceof CraftSectionWrapper)) return new GUIItems(new LinkedHashMap<>()); if (!(section instanceof BukkitSection)) {
CraftSectionWrapper craft = (CraftSectionWrapper) section; Main.severe("Unknown configure source, it should never happened!");
return new GUIItems(GUIConfiguration.readItems(craft.getSource())); Main.severe("Required: " + BukkitSection.class.getSimpleName());
Main.severe("Found: " + section.getClass().getSimpleName());
return new GUIItems(new LinkedHashMap<>());
}
BukkitSection craft = (BukkitSection) section;
return new GUIItems(GUIConfiguration.readItems(craft.data()));
} }
public static GUIItems defaults() { public static GUIItems defaults() {
@@ -1,6 +1,6 @@
package cc.carm.plugin.userprefix.manager; package cc.carm.plugin.userprefix.manager;
import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.configuration.source.ConfigurationHolder;
import cc.carm.lib.easyplugin.utils.JarResourceUtils; import cc.carm.lib.easyplugin.utils.JarResourceUtils;
import cc.carm.lib.mineconfiguration.bukkit.MineConfiguration; import cc.carm.lib.mineconfiguration.bukkit.MineConfiguration;
import cc.carm.plugin.userprefix.conf.PluginConfig; import cc.carm.plugin.userprefix.conf.PluginConfig;
@@ -11,13 +11,13 @@ import java.io.IOException;
public class ConfigManager { public class ConfigManager {
private final ConfigurationProvider<?> configProvider; private final ConfigurationHolder<?> configProvider;
private final ConfigurationProvider<?> messageProvider; private final ConfigurationHolder<?> messageProvider;
public ConfigManager(File dataFolder) { public ConfigManager(File dataFolder) {
firstInitialize(dataFolder); firstInitialize(dataFolder);
this.configProvider = MineConfiguration.from(new File(dataFolder, "config.yml")); this.configProvider = MineConfiguration.from(new File(dataFolder, "config.yml"), null);
this.messageProvider = MineConfiguration.from(new File(dataFolder, "messages.yml")); this.messageProvider = MineConfiguration.from(new File(dataFolder, "messages.yml"), null);
this.configProvider.initialize(PluginConfig.class); this.configProvider.initialize(PluginConfig.class);
this.messageProvider.initialize(PluginMessages.class); this.messageProvider.initialize(PluginMessages.class);
} }
@@ -35,11 +35,11 @@ public class ConfigManager {
} }
public ConfigurationProvider<?> getConfigProvider() { public ConfigurationHolder<?> getConfigProvider() {
return configProvider; return configProvider;
} }
public ConfigurationProvider<?> getMessageProvider() { public ConfigurationHolder<?> getMessageProvider() {
return messageProvider; return messageProvider;
} }
@@ -131,13 +131,13 @@ public class UserManager {
UserPrefixExpireEvent.call(player, currentPrefix); UserPrefixExpireEvent.call(player, currentPrefix);
// 发送消息 // 发送消息
PluginMessages.EXPIRED.send(player, currentPrefix.getName(), newPrefix.getName()); PluginMessages.EXPIRED.sendTo(player, currentPrefix.getName(), newPrefix.getName());
// 播放声音 // 播放声音
PluginConfig.SOUNDS.PREFIX_EXPIRED.playTo(player); PluginConfig.SOUNDS.PREFIX_EXPIRED.playTo(player);
} else { } else {
// 当前前缀为空,则代表是旧的前缀不存在了, // 当前前缀为空,则代表是旧的前缀不存在了,
PluginMessages.REMOVED.send(player, newPrefix.getName()); PluginMessages.REMOVED.sendTo(player, newPrefix.getName());
} }
UserPrefixChangeEvent.call(player, currentPrefix, newPrefix, (after) -> { UserPrefixChangeEvent.call(player, currentPrefix, newPrefix, (after) -> {
@@ -65,7 +65,7 @@ public class PrefixSelectGUI extends AutoPagedGUI {
// 发送消息与提示 // 发送消息与提示
PluginConfig.SOUNDS.PREFIX_CHANGE.playTo(player); PluginConfig.SOUNDS.PREFIX_CHANGE.playTo(player);
PluginMessages.SELECTED.send(player, prefix.getName()); PluginMessages.SELECTED.sendTo(player, prefix.getName());
UserPrefixChangeEvent.call(player, usingPrefix, prefix, config -> { UserPrefixChangeEvent.call(player, usingPrefix, prefix, config -> {
if (config == null) return; if (config == null) return;