mirror of
https://github.com/CarmJos/UserPrefix.git
synced 2026-06-14 03:41:10 +08:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7cf9f3f9ee | |||
| 84bb41ab2f | |||
| 2fc2474f89 | |||
| 01a83d5c9e | |||
| f648e29ee2 | |||
| cc0122f9ba | |||
| e3c911d375 | |||
| dc14b0cd2e | |||
| a8908b6dd4 | |||
| fa9f3bc1ed | |||
| 7c2391a3b0 | |||
| cb384ca201 | |||
| bb9d672016 | |||
| 13d3d56eea | |||
| 71db4b663c | |||
| 9d601b4f75 | |||
| 9693bc6b8a |
@@ -0,0 +1,31 @@
|
|||||||
|
# UserPrefix Actions 操作
|
||||||
|
|
||||||
|
## 使用方式
|
||||||
|
|
||||||
|
在 `actions` 配置节点下,可以配置多个操作,格式为 `[操作类型] {操作参数}`,例如:
|
||||||
|
|
||||||
|
- `[CHAT] HELLO %player_name%!`
|
||||||
|
- `[SOUND] ENTITY_PLAYER_LEVELUP`
|
||||||
|
|
||||||
|
## 操作类型
|
||||||
|
|
||||||
|
目前支持以下操作类型:
|
||||||
|
- `CHAT` 以玩家聊天的形式发送,若需要发送指令则添加“/”前缀
|
||||||
|
- `CONSOLE` 以后台的形式发送指令
|
||||||
|
- `MESSAGE` 向玩家发送一条消息
|
||||||
|
- `SOUND` 向玩家发送声音
|
||||||
|
- `CLOSE` 关闭当前打开的GUI
|
||||||
|
|
||||||
|
所有需要键入文本的类型均支持 [PlaceholderAPI](https://www.spigotmc.org/resources/6245/) 变量 。
|
||||||
|
|
||||||
|
## 限定点击类型
|
||||||
|
|
||||||
|
若您需要限定玩家点击的类型,如左键、右键等,则可以添加在操作类型后,以“`:`”分割,如:
|
||||||
|
|
||||||
|
- `[CLOSE:LEFT]` 代表左键点击关闭
|
||||||
|
- `[MESSAGE:MIDDLE] HELLO WORLD` 代表鼠标中间点击发送消息
|
||||||
|
|
||||||
|
详细点击类型见 [`org.bukkit.event.inventory.ClickType`](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/inventory/ClickType.html) 。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
- 使用示例
|
- 使用示例
|
||||||
- [前缀配置文件预设示例](../src/main/resources/prefixes/example-prefix.yml)
|
- [前缀配置文件预设示例](../src/main/resources/prefixes/example-prefix.yml)
|
||||||
|
- [操作(Actions)配置](ACTIONS.md)
|
||||||
|
|
||||||
## [开发文档](JAVADOC-README.md)
|
## [开发文档](JAVADOC-README.md)
|
||||||
|
|
||||||
|
|||||||
@@ -92,11 +92,11 @@ README LANGUAGES [ [**中文**](README.md) | [English](README-en.md) ]
|
|||||||
|
|
||||||
## 配置文件示例
|
## 配置文件示例
|
||||||
|
|
||||||
### 基础配置文件 ([`config.yml`](src/main/java/cc/carm/plugin/userprefix/configuration/PluginConfig.java))
|
### 基础配置文件 ([`config.yml`](src/main/java/cc/carm/plugin/userprefix/conf/PluginConfig.java))
|
||||||
|
|
||||||
将会在服务器首次启动时生成,如果您想要修改配置,请在服务器启动后打开配置文件。
|
将会在服务器首次启动时生成,如果您想要修改配置,请在服务器启动后打开配置文件。
|
||||||
|
|
||||||
### 消息配置文件 ([`messages.yml`](src/main/java/cc/carm/plugin/userprefix/configuration/PluginMessages.java))
|
### 消息配置文件 ([`messages.yml`](src/main/java/cc/carm/plugin/userprefix/conf/PluginMessages.java))
|
||||||
|
|
||||||
将会在服务器首次启动时生成,如果您想要修改配置,请在服务器启动后打开配置文件 。
|
将会在服务器首次启动时生成,如果您想要修改配置,请在服务器启动后打开配置文件 。
|
||||||
|
|
||||||
|
|||||||
@@ -13,13 +13,13 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
|
|
||||||
<easyplugin.version>1.4.9</easyplugin.version>
|
<easyplugin.version>1.4.18</easyplugin.version>
|
||||||
<mineconfig.version>2.0.1</mineconfig.version>
|
<mineconfig.version>2.3.0</mineconfig.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<groupId>cc.carm.plugin</groupId>
|
<groupId>cc.carm.plugin</groupId>
|
||||||
<artifactId>userprefix</artifactId>
|
<artifactId>userprefix</artifactId>
|
||||||
<version>3.0.0</version>
|
<version>3.1.0</version>
|
||||||
|
|
||||||
<name>UserPrefix</name>
|
<name>UserPrefix</name>
|
||||||
<description>轻便、高效、实时的用户前缀系统。</description>
|
<description>轻便、高效、实时的用户前缀系统。</description>
|
||||||
@@ -61,6 +61,16 @@
|
|||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
|
||||||
|
<repository>
|
||||||
|
<id>maven-central</id>
|
||||||
|
<url>https://repo1.maven.org/maven2/</url>
|
||||||
|
</repository>
|
||||||
|
|
||||||
|
<repository>
|
||||||
|
<id>sonatype</id>
|
||||||
|
<url>https://oss.sonatype.org/content/repositories/public/</url>
|
||||||
|
</repository>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>spigot-repo</id>
|
<id>spigot-repo</id>
|
||||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||||
@@ -71,16 +81,6 @@
|
|||||||
<url>https://repo.lucko.me/</url>
|
<url>https://repo.lucko.me/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>maven-central</id>
|
|
||||||
<url>https://repo1.maven.org/maven2/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>sonatype-repo</id>
|
|
||||||
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>EasyPlugin</id>
|
<id>EasyPlugin</id>
|
||||||
<url>https://raw.githubusercontent.com/CarmJos/EasyPlugin/repo/</url>
|
<url>https://raw.githubusercontent.com/CarmJos/EasyPlugin/repo/</url>
|
||||||
@@ -113,6 +113,14 @@
|
|||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cc.carm.lib</groupId>
|
||||||
|
<artifactId>easyplugin-command</artifactId>
|
||||||
|
<version>${easyplugin.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyplugin-gui</artifactId>
|
<artifactId>easyplugin-gui</artifactId>
|
||||||
@@ -154,7 +162,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.luckperms</groupId>
|
<groupId>net.luckperms</groupId>
|
||||||
<artifactId>api</artifactId>
|
<artifactId>api</artifactId>
|
||||||
<version>5.3</version>
|
<version>5.4</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@@ -205,30 +213,6 @@
|
|||||||
</filesets>
|
</filesets>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-javadoc-plugin</artifactId>
|
|
||||||
<version>3.2.0</version>
|
|
||||||
<configuration>
|
|
||||||
<classifier>javadoc</classifier>
|
|
||||||
<links>
|
|
||||||
<link>https://javadoc.io/doc/org.jetbrains/annotations/</link>
|
|
||||||
</links>
|
|
||||||
<detectJavaApiLink>true</detectJavaApiLink>
|
|
||||||
<encoding>UTF-8</encoding>
|
|
||||||
<charset>UTF-8</charset>
|
|
||||||
<docencoding>UTF-8</docencoding>
|
|
||||||
<locale>zh_CN</locale>
|
|
||||||
</configuration>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>attach-javadocs</id>
|
|
||||||
<goals>
|
|
||||||
<goal>jar</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
@@ -274,6 +258,7 @@
|
|||||||
<finalName>${project.name}-${project.version}</finalName>
|
<finalName>${project.name}-${project.version}</finalName>
|
||||||
<outputDirectory>${project.basedir}/asset/</outputDirectory>
|
<outputDirectory>${project.basedir}/asset/</outputDirectory>
|
||||||
<createDependencyReducedPom>false</createDependencyReducedPom>
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
|
<minimizeJar>true</minimizeJar>
|
||||||
<relocations>
|
<relocations>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>org.bstats</pattern>
|
<pattern>org.bstats</pattern>
|
||||||
@@ -299,6 +284,33 @@
|
|||||||
</filters>
|
</filters>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>3.2.0</version>
|
||||||
|
<configuration>
|
||||||
|
<classifier>javadoc</classifier>
|
||||||
|
<links>
|
||||||
|
<link>https://javadoc.io/doc/org.jetbrains/annotations/</link>
|
||||||
|
<link>https://hub.spigotmc.org/javadocs/bukkit/</link>
|
||||||
|
<link>https://carmjos.github.io/EasyPlugin/</link>
|
||||||
|
<link>https://carmjos.github.io/MineConfiguration/</link>
|
||||||
|
</links>
|
||||||
|
<detectJavaApiLink>true</detectJavaApiLink>
|
||||||
|
<encoding>UTF-8</encoding>
|
||||||
|
<charset>UTF-8</charset>
|
||||||
|
<docencoding>UTF-8</docencoding>
|
||||||
|
<locale>zh_CN</locale>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>attach-javadocs</id>
|
||||||
|
<goals>
|
||||||
|
<goal>jar</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
|||||||
@@ -2,19 +2,21 @@ package cc.carm.plugin.userprefix;
|
|||||||
|
|
||||||
import cc.carm.lib.easyplugin.EasyPlugin;
|
import cc.carm.lib.easyplugin.EasyPlugin;
|
||||||
import cc.carm.lib.easyplugin.gui.GUI;
|
import cc.carm.lib.easyplugin.gui.GUI;
|
||||||
|
import cc.carm.lib.easyplugin.gui.paged.AutoPagedGUI;
|
||||||
import cc.carm.lib.easyplugin.updatechecker.GHUpdateChecker;
|
import cc.carm.lib.easyplugin.updatechecker.GHUpdateChecker;
|
||||||
import cc.carm.lib.easyplugin.utils.MessageUtils;
|
import cc.carm.lib.easyplugin.utils.MessageUtils;
|
||||||
import cc.carm.plugin.userprefix.command.AdminCommand;
|
import cc.carm.plugin.userprefix.command.AdminCommand;
|
||||||
import cc.carm.plugin.userprefix.command.UserCommand;
|
import cc.carm.plugin.userprefix.command.UserCommand;
|
||||||
import cc.carm.plugin.userprefix.configuration.PluginConfig;
|
import cc.carm.plugin.userprefix.conf.PluginConfig;
|
||||||
import cc.carm.plugin.userprefix.hooker.UserPrefixExpansion;
|
import cc.carm.plugin.userprefix.hooker.UserPrefixExpansion;
|
||||||
import cc.carm.plugin.userprefix.listener.ChatListener;
|
import cc.carm.plugin.userprefix.listener.ChatListener;
|
||||||
import cc.carm.plugin.userprefix.listener.UserListener;
|
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.ConfigManager;
|
||||||
import cc.carm.plugin.userprefix.manager.PrefixManager;
|
import cc.carm.plugin.userprefix.manager.PrefixManager;
|
||||||
import cc.carm.plugin.userprefix.manager.ServiceManager;
|
import cc.carm.plugin.userprefix.manager.ServiceManager;
|
||||||
import cc.carm.plugin.userprefix.manager.UserManager;
|
import cc.carm.plugin.userprefix.manager.UserManager;
|
||||||
|
import cc.carm.plugin.userprefix.ui.PrefixSelectGUI;
|
||||||
import net.luckperms.api.event.user.UserDataRecalculateEvent;
|
import net.luckperms.api.event.user.UserDataRecalculateEvent;
|
||||||
import org.bstats.bukkit.Metrics;
|
import org.bstats.bukkit.Metrics;
|
||||||
import org.bstats.charts.SimplePie;
|
import org.bstats.charts.SimplePie;
|
||||||
@@ -47,17 +49,21 @@ public class Main extends EasyPlugin {
|
|||||||
|
|
||||||
log("注册指令...");
|
log("注册指令...");
|
||||||
registerCommand("UserPrefix", new UserCommand());
|
registerCommand("UserPrefix", new UserCommand());
|
||||||
registerCommand("UserPrefixAdmin", new AdminCommand());
|
registerCommand("UserPrefixAdmin", new AdminCommand(this));
|
||||||
|
|
||||||
log("注册监听器...");
|
log("注册监听器...");
|
||||||
GUI.initialize(this);
|
|
||||||
registerListener(new UserListener());
|
registerListener(new UserListener());
|
||||||
registerListener(new ChatListener());
|
registerListener(new ChatListener());
|
||||||
ServiceManager.getService().getEventBus().subscribe(
|
ServiceManager.getService().getEventBus().subscribe(
|
||||||
this, UserDataRecalculateEvent.class,
|
this, UserDataRecalculateEvent.class,
|
||||||
UserNodeUpdateProcessor::process
|
UserPermListener::process
|
||||||
);
|
);
|
||||||
|
|
||||||
|
log("初始化GUI管理器...");
|
||||||
|
GUI.initialize(this);
|
||||||
|
AutoPagedGUI.defaultNextPage = (PluginConfig.GUI.ITEMS.NEXT_PAGE::getItem);
|
||||||
|
AutoPagedGUI.defaultPreviousPage = (PluginConfig.GUI.ITEMS.PREV_PAGE::getItem);
|
||||||
|
|
||||||
if (MessageUtils.hasPlaceholderAPI()) {
|
if (MessageUtils.hasPlaceholderAPI()) {
|
||||||
log("注册变量...");
|
log("注册变量...");
|
||||||
new UserPrefixExpansion(getInstance()).register();
|
new UserPrefixExpansion(getInstance()).register();
|
||||||
@@ -93,6 +99,20 @@ public class Main extends EasyPlugin {
|
|||||||
return true;
|
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
|
@Override
|
||||||
public boolean isDebugging() {
|
public boolean isDebugging() {
|
||||||
return PluginConfig.DEBUG.getNotNull();
|
return PluginConfig.DEBUG.getNotNull();
|
||||||
@@ -106,7 +126,7 @@ public class Main extends EasyPlugin {
|
|||||||
getInstance().debug(message);
|
getInstance().debug(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void serve(String... message) {
|
public static void severe(String... message) {
|
||||||
getInstance().error(message);
|
getInstance().error(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package cc.carm.plugin.userprefix;
|
package cc.carm.plugin.userprefix;
|
||||||
|
|
||||||
import cc.carm.plugin.userprefix.configuration.prefix.PrefixConfig;
|
import cc.carm.plugin.userprefix.conf.prefix.PrefixConfig;
|
||||||
import cc.carm.plugin.userprefix.manager.ConfigManager;
|
import cc.carm.plugin.userprefix.manager.ConfigManager;
|
||||||
import cc.carm.plugin.userprefix.manager.PrefixManager;
|
import cc.carm.plugin.userprefix.manager.PrefixManager;
|
||||||
import cc.carm.plugin.userprefix.manager.UserManager;
|
import cc.carm.plugin.userprefix.manager.UserManager;
|
||||||
|
|||||||
@@ -1,63 +1,38 @@
|
|||||||
package cc.carm.plugin.userprefix.command;
|
package cc.carm.plugin.userprefix.command;
|
||||||
|
|
||||||
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
import cc.carm.lib.easyplugin.command.CommandHandler;
|
||||||
import cc.carm.plugin.userprefix.configuration.PluginMessages;
|
import cc.carm.plugin.userprefix.command.admin.ListCommand;
|
||||||
import cc.carm.plugin.userprefix.configuration.prefix.PrefixConfig;
|
import cc.carm.plugin.userprefix.command.admin.ReloadCommand;
|
||||||
import cc.carm.plugin.userprefix.ui.PrefixSelectGUI;
|
import cc.carm.plugin.userprefix.command.admin.SetCommand;
|
||||||
import org.bukkit.Bukkit;
|
import cc.carm.plugin.userprefix.conf.PluginMessages;
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class AdminCommand implements CommandExecutor {
|
public class AdminCommand extends CommandHandler {
|
||||||
|
|
||||||
|
|
||||||
|
public AdminCommand(@NotNull JavaPlugin plugin) {
|
||||||
|
super(plugin);
|
||||||
|
registerSubCommand(new ListCommand(this, "list", "l"));
|
||||||
|
registerSubCommand(new SetCommand(this, "set"));
|
||||||
|
registerSubCommand(new ReloadCommand(this, "reload"));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
|
public Void noArgs(CommandSender sender) {
|
||||||
if (args.length == 1) {
|
|
||||||
String aim = args[0];
|
|
||||||
if (aim.equalsIgnoreCase("list")) {
|
|
||||||
PluginMessages.LIST.HEADER.send(sender);
|
|
||||||
for (PrefixConfig value : UserPrefixAPI.getPrefixManager().getPrefixes().values()) {
|
|
||||||
PluginMessages.LIST.VALUE.send(sender,
|
|
||||||
value.getWeight(), value.getIdentifier(),
|
|
||||||
value.getName(), value.getPermission(),
|
|
||||||
value.getContent(), sender.getName()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} else if (aim.equalsIgnoreCase("reload")) {
|
|
||||||
long s1 = System.currentTimeMillis();
|
|
||||||
PrefixSelectGUI.closeAll(); // 关掉所有正在显示的前缀列表
|
|
||||||
try {
|
|
||||||
UserPrefixAPI.getConfigManager().reload(); // 重载配置文件
|
|
||||||
int num = UserPrefixAPI.getPrefixManager().loadPrefixes(); //加载重载后了的前缀配置
|
|
||||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
|
||||||
UserPrefixAPI.getUserManager().checkPrefix(onlinePlayer, false);
|
|
||||||
/*
|
|
||||||
* 这里关掉loadOthers(为其他玩家更新)了。
|
|
||||||
* 因为每个玩家更新的时候会为其他人更新自己,
|
|
||||||
* 全部走完一遍后,所有玩家都会加载最新的前缀内容。
|
|
||||||
*/
|
|
||||||
UserPrefixAPI.getUserManager().updatePrefixView(onlinePlayer, false);
|
|
||||||
}
|
|
||||||
PluginMessages.RELOAD.SUCCESS.send(sender, System.currentTimeMillis() - s1, num);
|
|
||||||
} catch (Exception e) {
|
|
||||||
PluginMessages.RELOAD.FAILED.send(sender, e.getMessage());
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return help(sender);
|
|
||||||
}
|
|
||||||
return help(sender);
|
return help(sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean help(CommandSender sender) {
|
@Override
|
||||||
|
public Void noPermission(CommandSender sender) {
|
||||||
|
PluginMessages.COMMAND_USAGE.NO_PERM.send(sender);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Void help(CommandSender sender) {
|
||||||
PluginMessages.COMMAND_USAGE.ADMIN.send(sender);
|
PluginMessages.COMMAND_USAGE.ADMIN.send(sender);
|
||||||
return true;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package cc.carm.plugin.userprefix.command;
|
package cc.carm.plugin.userprefix.command;
|
||||||
|
|
||||||
import cc.carm.plugin.userprefix.configuration.PluginMessages;
|
import cc.carm.plugin.userprefix.conf.PluginMessages;
|
||||||
import cc.carm.plugin.userprefix.ui.PrefixSelectGUI;
|
import cc.carm.plugin.userprefix.ui.PrefixSelectGUI;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package cc.carm.plugin.userprefix.command.admin;
|
||||||
|
|
||||||
|
import cc.carm.lib.easyplugin.command.SubCommand;
|
||||||
|
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
||||||
|
import cc.carm.plugin.userprefix.command.AdminCommand;
|
||||||
|
import cc.carm.plugin.userprefix.conf.PluginMessages;
|
||||||
|
import cc.carm.plugin.userprefix.conf.prefix.PrefixConfig;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class ListCommand extends SubCommand<AdminCommand> {
|
||||||
|
|
||||||
|
public ListCommand(@NotNull AdminCommand parent, String name, String... aliases) {
|
||||||
|
super(parent, name, aliases);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void execute(JavaPlugin plugin, CommandSender sender, String[] args) {
|
||||||
|
PluginMessages.LIST.HEADER.send(sender);
|
||||||
|
for (PrefixConfig value : UserPrefixAPI.getPrefixManager().getPrefixes().values()) {
|
||||||
|
PluginMessages.LIST.VALUE.send(sender,
|
||||||
|
value.getWeight(), value.getIdentifier(),
|
||||||
|
value.getName(), value.getPermission(),
|
||||||
|
value.getContent(), sender.getName()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package cc.carm.plugin.userprefix.command.admin;
|
||||||
|
|
||||||
|
import cc.carm.lib.easyplugin.command.SubCommand;
|
||||||
|
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
||||||
|
import cc.carm.plugin.userprefix.command.AdminCommand;
|
||||||
|
import cc.carm.plugin.userprefix.conf.PluginMessages;
|
||||||
|
import cc.carm.plugin.userprefix.ui.PrefixSelectGUI;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class ReloadCommand extends SubCommand<AdminCommand> {
|
||||||
|
|
||||||
|
public ReloadCommand(@NotNull AdminCommand parent, String name, String... aliases) {
|
||||||
|
super(parent, name, aliases);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void execute(JavaPlugin plugin, CommandSender sender, String[] args) {
|
||||||
|
long s1 = System.currentTimeMillis();
|
||||||
|
PrefixSelectGUI.closeAll(); // 关掉所有正在显示的前缀列表
|
||||||
|
try {
|
||||||
|
UserPrefixAPI.getConfigManager().reload(); // 重载配置文件
|
||||||
|
int num = UserPrefixAPI.getPrefixManager().loadPrefixes(); //加载重载后了的前缀配置
|
||||||
|
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||||
|
UserPrefixAPI.getUserManager().checkPrefix(onlinePlayer, false);
|
||||||
|
/*
|
||||||
|
* 这里关掉loadOthers(为其他玩家更新)了。
|
||||||
|
* 因为每个玩家更新的时候会为其他人更新自己,
|
||||||
|
* 全部走完一遍后,所有玩家都会加载最新的前缀内容。
|
||||||
|
*/
|
||||||
|
UserPrefixAPI.getUserManager().updatePrefixView(onlinePlayer, false);
|
||||||
|
}
|
||||||
|
PluginMessages.RELOAD.SUCCESS.send(sender, System.currentTimeMillis() - s1, num);
|
||||||
|
} catch (Exception e) {
|
||||||
|
PluginMessages.RELOAD.FAILED.send(sender, e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package cc.carm.plugin.userprefix.command.admin;
|
||||||
|
|
||||||
|
import cc.carm.lib.easyplugin.command.SubCommand;
|
||||||
|
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
||||||
|
import cc.carm.plugin.userprefix.command.AdminCommand;
|
||||||
|
import cc.carm.plugin.userprefix.conf.PluginMessages;
|
||||||
|
import cc.carm.plugin.userprefix.conf.prefix.PrefixConfig;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class SetCommand extends SubCommand<AdminCommand> {
|
||||||
|
|
||||||
|
public SetCommand(@NotNull AdminCommand parent, String name, String... aliases) {
|
||||||
|
super(parent, name, aliases);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void execute(JavaPlugin plugin, CommandSender sender, String[] args) {
|
||||||
|
if (args.length < 2) return getParent().noArgs(sender);
|
||||||
|
|
||||||
|
Player target = Bukkit.getPlayer(args[0]);
|
||||||
|
if (target == null) {
|
||||||
|
PluginMessages.NOT_ONLINE.send(sender, args[0]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PrefixConfig prefixConfig;
|
||||||
|
String prefixInput = args[1];
|
||||||
|
if (prefixInput.equalsIgnoreCase("default")) {
|
||||||
|
prefixConfig = UserPrefixAPI.getDefaultPrefix();
|
||||||
|
} else {
|
||||||
|
prefixConfig = UserPrefixAPI.getPrefixManager().getPrefix(prefixInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prefixConfig == null) {
|
||||||
|
PluginMessages.SET.PREFIX_NOT_FOUND.send(sender, prefixInput);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!prefixConfig.checkPermission(target)) {
|
||||||
|
PluginMessages.SET.NO_PERM.send(sender, target.getName(), prefixConfig.getName());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
UserPrefixAPI.getUserManager().setPrefix(target, prefixConfig, true);
|
||||||
|
PluginMessages.SET.SUCCESS.send(sender, target.getName(), prefixConfig.getName());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+23
-14
@@ -1,16 +1,17 @@
|
|||||||
package cc.carm.plugin.userprefix.configuration;
|
package cc.carm.plugin.userprefix.conf;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
||||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
||||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
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.configuration.core.value.type.ConfiguredValue;
|
||||||
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.GUIItemConfiguration;
|
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.ConfiguredItem;
|
||||||
import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredSound;
|
import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredSound;
|
||||||
import cc.carm.plugin.userprefix.configuration.reader.GUIItemReader;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.inventory.ItemFlag;
|
import org.bukkit.inventory.ItemFlag;
|
||||||
@@ -37,7 +38,7 @@ public class PluginConfig extends ConfigurationRoot {
|
|||||||
public static final ConfigValue<Boolean> CHECK_UPDATE = ConfiguredValue.of(Boolean.class, true);
|
public static final ConfigValue<Boolean> CHECK_UPDATE = ConfiguredValue.of(Boolean.class, true);
|
||||||
|
|
||||||
@HeaderComment({"自定义存储位置设定", "可以规定到远程文件夹中去加载前缀配置"})
|
@HeaderComment({"自定义存储位置设定", "可以规定到远程文件夹中去加载前缀配置"})
|
||||||
public static final class CUSTOM_STORAGE {
|
public static final class CUSTOM_STORAGE extends ConfigurationRoot {
|
||||||
|
|
||||||
@HeaderComment({"是否启用自定义存储位置"})
|
@HeaderComment({"是否启用自定义存储位置"})
|
||||||
public static final ConfigValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, false);
|
public static final ConfigValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, false);
|
||||||
@@ -52,7 +53,7 @@ public class PluginConfig extends ConfigurationRoot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@HeaderComment("功能设定")
|
@HeaderComment("功能设定")
|
||||||
public static class FUNCTIONS {
|
public static class FUNCTIONS extends ConfigurationRoot {
|
||||||
|
|
||||||
@ConfigPath("on-name-prefix")
|
@ConfigPath("on-name-prefix")
|
||||||
@HeaderComment({"头顶与TabList前缀功能,该方法用到了玩家名计分板接口,如有冲突请关掉哦~"})
|
@HeaderComment({"头顶与TabList前缀功能,该方法用到了玩家名计分板接口,如有冲突请关掉哦~"})
|
||||||
@@ -78,28 +79,28 @@ public class PluginConfig extends ConfigurationRoot {
|
|||||||
"- 注意聊天格式需要遵守Bukkit原格式,即不得缺失 “%1$s” 和 “%2$s” 。",
|
"- 注意聊天格式需要遵守Bukkit原格式,即不得缺失 “%1$s” 和 “%2$s” 。",
|
||||||
"- 本插件的聊天功能不影响其他插件对聊天事件的操作。"
|
"- 本插件的聊天功能不影响其他插件对聊天事件的操作。"
|
||||||
})
|
})
|
||||||
public static final class CHAT {
|
public static final class CHAT extends ConfigurationRoot {
|
||||||
|
|
||||||
@HeaderComment("是否开启本功能")
|
@HeaderComment("是否开启本功能")
|
||||||
public static ConfigValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, false);
|
public static final ConfigValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, false);
|
||||||
@HeaderComment({
|
@HeaderComment({
|
||||||
"聊天的格式,注意 “%1$s” 和 “%2$s” 不可缺少。",
|
"聊天的格式,注意 “%1$s” 和 “%2$s” 不可缺少。",
|
||||||
"- %1$s -> 玩家名", "- %2$s -> 聊天内容"
|
"- %1$s -> 玩家名", "- %2$s -> 聊天内容"
|
||||||
})
|
})
|
||||||
public static ConfigValue<String> FORMAT = ConfiguredValue.of(String.class, "<%1$s> %2$s");
|
public static final ConfigValue<String> FORMAT = ConfiguredValue.of(String.class, "<%1$s> %2$s");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@HeaderComment({"前缀GUI界面设定"})
|
@HeaderComment({"前缀GUI界面设定"})
|
||||||
public static class GUI {
|
public static class GUI extends ConfigurationRoot {
|
||||||
|
|
||||||
@HeaderComment("GUI的标题")
|
@HeaderComment("GUI的标题")
|
||||||
public static final ConfigValue<String> TITLE = ConfiguredValue.of(String.class, "&f&l我的前缀 &8| 列表");
|
public static final ConfigValue<String> TITLE = ConfiguredValue.of(String.class, "&f&l我的前缀 &8| 列表");
|
||||||
|
|
||||||
@HeaderComment("GUI中的按钮")
|
@HeaderComment("GUI中的按钮")
|
||||||
public static final class ITEMS {
|
public static final class ITEMS extends ConfigurationRoot {
|
||||||
|
|
||||||
@HeaderComment("前往下一页的物品 (只有存在下一页时才会显示)")
|
@HeaderComment("前往下一页的物品 (只有存在下一页时才会显示)")
|
||||||
public static final ConfiguredItem NEXT_PAGE = ConfiguredItem.create()
|
public static final ConfiguredItem NEXT_PAGE = ConfiguredItem.create()
|
||||||
@@ -120,9 +121,12 @@ public class PluginConfig extends ConfigurationRoot {
|
|||||||
public static final ConfigValue<GUIItemConfiguration> BACK = ConfiguredValue.builder(GUIItemConfiguration.class)
|
public static final ConfigValue<GUIItemConfiguration> BACK = ConfiguredValue.builder(GUIItemConfiguration.class)
|
||||||
.fromSection()
|
.fromSection()
|
||||||
.serializeValue(GUIItemConfiguration::serialize)
|
.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(
|
.defaults(new GUIItemConfiguration(
|
||||||
Material.BARRIER, 0, "&c&l返回",
|
Material.BARRIER, 1, 0, "&c&l返回",
|
||||||
Collections.singletonList("&f点击即可返回上一菜单"),
|
Collections.singletonList("&f点击即可返回上一菜单"),
|
||||||
Collections.singletonList(GUIActionConfiguration.of(GUIActionType.CHAT, "/menu")),
|
Collections.singletonList(GUIActionConfiguration.of(GUIActionType.CHAT, "/menu")),
|
||||||
Collections.singletonList(49)
|
Collections.singletonList(49)
|
||||||
@@ -133,7 +137,7 @@ public class PluginConfig extends ConfigurationRoot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@HeaderComment({"相关的声音,留空则不播放声音", "格式为 【声音名:音量:音调】 或 【声音名:音量】 或 【声音名】"})
|
@HeaderComment({"相关的声音,留空则不播放声音", "格式为 【声音名:音量:音调】 或 【声音名:音量】 或 【声音名】"})
|
||||||
public static final class SOUNDS {
|
public static final class SOUNDS extends ConfigurationRoot {
|
||||||
|
|
||||||
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");
|
||||||
@@ -143,7 +147,7 @@ public class PluginConfig extends ConfigurationRoot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@HeaderComment({"默认前缀配置"})
|
@HeaderComment({"默认前缀配置"})
|
||||||
public static final class DEFAULT_PREFIX {
|
public static final class DEFAULT_PREFIX extends ConfigurationRoot {
|
||||||
|
|
||||||
@HeaderComment("默认前缀的显示名称,用于在消息提示中显示。")
|
@HeaderComment("默认前缀的显示名称,用于在消息提示中显示。")
|
||||||
public static final ConfigValue<String> NAME = ConfiguredValue.of(String.class, "默认前缀");
|
public static final ConfigValue<String> NAME = ConfiguredValue.of(String.class, "默认前缀");
|
||||||
@@ -154,8 +158,13 @@ public class PluginConfig extends ConfigurationRoot {
|
|||||||
@HeaderComment({"默认前缀的内容,即用于显示的实际前缀"})
|
@HeaderComment({"默认前缀的内容,即用于显示的实际前缀"})
|
||||||
public static final ConfigValue<String> CONTENT = ConfiguredValue.of(String.class, "&r");
|
public static final ConfigValue<String> CONTENT = ConfiguredValue.of(String.class, "&r");
|
||||||
|
|
||||||
|
@HeaderComment({"选择默认前缀时执行的操作"})
|
||||||
|
public static final ConfiguredList<String> ACTIONS = ConfiguredList.builder(String.class).fromString()
|
||||||
|
.defaults("[CONSOLE] " + "say %player_name% 选择了默认前缀")
|
||||||
|
.build();
|
||||||
|
|
||||||
@HeaderComment({"默认前缀的显示物品"})
|
@HeaderComment({"默认前缀的显示物品"})
|
||||||
public static final class ITEM {
|
public static final class ITEM extends ConfigurationRoot {
|
||||||
|
|
||||||
@HeaderComment({"当未选择默认前缀时显示的物品"})
|
@HeaderComment({"当未选择默认前缀时显示的物品"})
|
||||||
public static final ConfiguredItem NOT_USING = ConfiguredItem.create()
|
public static final ConfiguredItem NOT_USING = ConfiguredItem.create()
|
||||||
+32
-5
@@ -1,4 +1,4 @@
|
|||||||
package cc.carm.plugin.userprefix.configuration;
|
package cc.carm.plugin.userprefix.conf;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
||||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||||
@@ -6,7 +6,7 @@ import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessageList;
|
|||||||
|
|
||||||
public class PluginMessages extends ConfigurationRoot {
|
public class PluginMessages extends ConfigurationRoot {
|
||||||
|
|
||||||
public static final class COMMAND_USAGE {
|
public static final class COMMAND_USAGE extends ConfigurationRoot {
|
||||||
|
|
||||||
public static ConfiguredMessageList<String> CONSOLE = ConfiguredMessageList.asStrings().defaults(
|
public static ConfiguredMessageList<String> CONSOLE = ConfiguredMessageList.asStrings().defaults(
|
||||||
"&f请输入 &b/prefix <玩家ID> &f为指定玩家打开前缀GUI。"
|
"&f请输入 &b/prefix <玩家ID> &f为指定玩家打开前缀GUI。"
|
||||||
@@ -16,12 +16,22 @@ public class PluginMessages extends ConfigurationRoot {
|
|||||||
"&3&l用户前缀系统 &f帮助",
|
"&3&l用户前缀系统 &f帮助",
|
||||||
"&8# &f/upa list",
|
"&8# &f/upa list",
|
||||||
"&8- &7查看当前前缀列表。",
|
"&8- &7查看当前前缀列表。",
|
||||||
|
"&8# &f/upa set &b<玩家ID> &b<前缀ID>",
|
||||||
|
"&8- &7为玩家设定指定前缀。",
|
||||||
|
"&8- &7&o注意:玩家必须拥有指定前缀的权限。",
|
||||||
"&8# &f/upa reload",
|
"&8# &f/upa reload",
|
||||||
"&8- &7重载前缀配置。"
|
"&8- &7重载前缀配置。"
|
||||||
).build();
|
).build();
|
||||||
|
|
||||||
|
public static ConfiguredMessageList<String> NO_PERM = ConfiguredMessageList.asStrings()
|
||||||
|
.defaults("&c&l抱歉!&f但您没有权限使用该指令。")
|
||||||
|
.build();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ConfiguredMessageList<String> NOT_ONLINE = ConfiguredMessageList.asStrings()
|
||||||
|
.defaults("&7玩家 &b%(player) &7并不在线。")
|
||||||
|
.params("player").build();
|
||||||
|
|
||||||
public static ConfiguredMessageList<String> SELECTED = ConfiguredMessageList.asStrings()
|
public static ConfiguredMessageList<String> SELECTED = ConfiguredMessageList.asStrings()
|
||||||
.defaults("&7您选择了 &f%(name) &7作为当前显示的前缀。")
|
.defaults("&7您选择了 &f%(name) &7作为当前显示的前缀。")
|
||||||
@@ -37,7 +47,7 @@ public class PluginMessages extends ConfigurationRoot {
|
|||||||
.defaults("&7您先前使用的前缀已被移除,现在已为您重新调整为 &f%(newName) &7。")
|
.defaults("&7您先前使用的前缀已被移除,现在已为您重新调整为 &f%(newName) &7。")
|
||||||
.params("newName").build();
|
.params("newName").build();
|
||||||
|
|
||||||
public static final class RELOAD {
|
public static final class RELOAD extends ConfigurationRoot {
|
||||||
|
|
||||||
public static ConfiguredMessageList<String> SUCCESS = ConfiguredMessageList.asStrings()
|
public static ConfiguredMessageList<String> SUCCESS = ConfiguredMessageList.asStrings()
|
||||||
.defaults("&a&l重载完成!&7耗时 &f%(time)ms&7,共加载了 &b%(count) &7个前缀。")
|
.defaults("&a&l重载完成!&7耗时 &f%(time)ms&7,共加载了 &b%(count) &7个前缀。")
|
||||||
@@ -48,9 +58,26 @@ public class PluginMessages extends ConfigurationRoot {
|
|||||||
.params("error").build();
|
.params("error").build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final class SET extends ConfigurationRoot {
|
||||||
|
|
||||||
|
public static ConfiguredMessageList<String> SUCCESS = ConfiguredMessageList.asStrings()
|
||||||
|
.defaults("&a&l设置成功!&7成功设定玩家 &b%(player) &f的前缀为 &r%(prefix) &f。")
|
||||||
|
.params("player", "prefix").build();
|
||||||
|
|
||||||
|
public static ConfiguredMessageList<String> PREFIX_NOT_FOUND = ConfiguredMessageList.asStrings()
|
||||||
|
.defaults("&c&l无法设置!&7不存在ID为 &b%(prefix) &7的前缀。")
|
||||||
|
.params("prefix").build();
|
||||||
|
|
||||||
|
public static ConfiguredMessageList<String> NO_PERM = ConfiguredMessageList.asStrings()
|
||||||
|
.defaults("&c&l无法设置!&7玩家 &b%(player) &7并没有前缀 &r%(prefix) &7的前缀。")
|
||||||
|
.params("player", "prefix")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@HeaderComment("管理员使用的 “/upa list” 指令的格式")
|
@HeaderComment("管理员使用的 “/upa list” 指令的格式")
|
||||||
public static final class LIST {
|
public static final class LIST extends ConfigurationRoot {
|
||||||
|
|
||||||
public static ConfiguredMessageList<String> HEADER = ConfiguredMessageList.asStrings()
|
public static ConfiguredMessageList<String> HEADER = ConfiguredMessageList.asStrings()
|
||||||
.defaults("&3&l用户前缀系统 &f前缀列表").build();
|
.defaults("&3&l用户前缀系统 &f前缀列表").build();
|
||||||
@@ -59,7 +86,7 @@ public class PluginMessages extends ConfigurationRoot {
|
|||||||
"&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)"
|
||||||
).params("weight", "identifier", "name", "permission", "sender_name").build();
|
).params("weight", "identifier", "name", "permission", "content", "sender_name").build();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+13
-9
@@ -1,22 +1,18 @@
|
|||||||
package cc.carm.plugin.userprefix.configuration.prefix;
|
package cc.carm.plugin.userprefix.conf.prefix;
|
||||||
|
|
||||||
|
import cc.carm.lib.easyplugin.gui.configuration.GUIActionConfiguration;
|
||||||
import cc.carm.lib.easyplugin.utils.ColorParser;
|
import cc.carm.lib.easyplugin.utils.ColorParser;
|
||||||
import cc.carm.lib.mineconfiguration.bukkit.data.ItemConfig;
|
import cc.carm.lib.mineconfiguration.bukkit.data.ItemConfig;
|
||||||
import cc.carm.plugin.userprefix.manager.ServiceManager;
|
import cc.carm.plugin.userprefix.manager.ServiceManager;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.io.File;
|
import java.util.List;
|
||||||
|
|
||||||
public class PrefixConfig {
|
public class PrefixConfig {
|
||||||
|
|
||||||
|
|
||||||
private @Nullable File dataFile;
|
|
||||||
private @Nullable FileConfiguration configuration;
|
|
||||||
|
|
||||||
protected final @NotNull String identifier;
|
protected final @NotNull String identifier;
|
||||||
|
|
||||||
protected final @NotNull String name;
|
protected final @NotNull String name;
|
||||||
@@ -26,12 +22,15 @@ public class PrefixConfig {
|
|||||||
|
|
||||||
protected final @Nullable String permission;
|
protected final @Nullable String permission;
|
||||||
|
|
||||||
|
protected final @NotNull List<GUIActionConfiguration> actions;
|
||||||
|
|
||||||
protected final @NotNull ItemConfig itemHasPermission;
|
protected final @NotNull ItemConfig itemHasPermission;
|
||||||
protected final @Nullable ItemConfig itemNoPermission;
|
protected final @Nullable ItemConfig itemNoPermission;
|
||||||
protected final @Nullable ItemConfig itemWhenUsing;
|
protected final @Nullable ItemConfig itemWhenUsing;
|
||||||
|
|
||||||
public PrefixConfig(@NotNull String identifier, @NotNull String name,
|
public PrefixConfig(@NotNull String identifier, @NotNull String name,
|
||||||
@NotNull String content, int weight, @Nullable String permission,
|
@NotNull String content, int weight, @Nullable String permission,
|
||||||
|
@NotNull List<GUIActionConfiguration> actions,
|
||||||
@NotNull ItemConfig itemHasPermission,
|
@NotNull ItemConfig itemHasPermission,
|
||||||
@Nullable ItemConfig itemWhenUsing,
|
@Nullable ItemConfig itemWhenUsing,
|
||||||
@Nullable ItemConfig itemNoPermission) {
|
@Nullable ItemConfig itemNoPermission) {
|
||||||
@@ -40,6 +39,7 @@ public class PrefixConfig {
|
|||||||
this.content = content;
|
this.content = content;
|
||||||
this.weight = weight;
|
this.weight = weight;
|
||||||
this.permission = permission;
|
this.permission = permission;
|
||||||
|
this.actions = actions;
|
||||||
this.itemHasPermission = itemHasPermission;
|
this.itemHasPermission = itemHasPermission;
|
||||||
this.itemNoPermission = itemNoPermission;
|
this.itemNoPermission = itemNoPermission;
|
||||||
this.itemWhenUsing = itemWhenUsing;
|
this.itemWhenUsing = itemWhenUsing;
|
||||||
@@ -82,7 +82,7 @@ public class PrefixConfig {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public ItemStack getItemWhenUsing(@Nullable Player player) {
|
public ItemStack getItemWhenUsing(@Nullable Player player) {
|
||||||
if (this.itemWhenUsing == null) return getItemHasPermission(player);
|
if (this.itemWhenUsing == null) return null;
|
||||||
else return this.itemWhenUsing.getItemStack(player);
|
else return this.itemWhenUsing.getItemStack(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,8 +90,12 @@ public class PrefixConfig {
|
|||||||
return getPermission() == null;
|
return getPermission() == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void executeActions(@NotNull Player player) {
|
||||||
|
this.actions.forEach(action -> action.executeAction(player));
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isVisible(Player player) {
|
public boolean isVisible(Player player) {
|
||||||
return this.itemWhenUsing != null || checkPermission(player);
|
return this.itemNoPermission != null || checkPermission(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
package cc.carm.plugin.userprefix.configuration.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);
|
|
||||||
String name = section.getString("name");
|
|
||||||
List<String> lore = section.getStringList("lore");
|
|
||||||
|
|
||||||
List<Integer> slots = section.getIntegerList("slots");
|
|
||||||
int slot = section.getInt("slot", 0);
|
|
||||||
|
|
||||||
List<String> actionsString = section.getStringList("actions");
|
|
||||||
List<GUIActionConfiguration> actions = new ArrayList<>();
|
|
||||||
for (String actionString : actionsString) {
|
|
||||||
GUIActionConfiguration action = GUIActionConfiguration.deserialize(actionString);
|
|
||||||
if (action == null) continue;
|
|
||||||
actions.add(action);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new GUIItemConfiguration(
|
|
||||||
type, data, name, lore, actions,
|
|
||||||
slots.size() > 0 ? slots : Collections.singletonList(slot)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.userprefix.event;
|
package cc.carm.plugin.userprefix.event;
|
||||||
|
|
||||||
import cc.carm.plugin.userprefix.Main;
|
import cc.carm.plugin.userprefix.Main;
|
||||||
import cc.carm.plugin.userprefix.configuration.prefix.PrefixConfig;
|
import cc.carm.plugin.userprefix.conf.prefix.PrefixConfig;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.userprefix.event;
|
package cc.carm.plugin.userprefix.event;
|
||||||
|
|
||||||
import cc.carm.plugin.userprefix.Main;
|
import cc.carm.plugin.userprefix.Main;
|
||||||
import cc.carm.plugin.userprefix.configuration.prefix.PrefixConfig;
|
import cc.carm.plugin.userprefix.conf.prefix.PrefixConfig;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package cc.carm.plugin.userprefix.hooker;
|
|||||||
|
|
||||||
import cc.carm.plugin.userprefix.Main;
|
import cc.carm.plugin.userprefix.Main;
|
||||||
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
||||||
import cc.carm.plugin.userprefix.configuration.prefix.PrefixConfig;
|
import cc.carm.plugin.userprefix.conf.prefix.PrefixConfig;
|
||||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -14,7 +14,7 @@ public class UserPrefixExpansion extends PlaceholderExpansion {
|
|||||||
|
|
||||||
protected final @NotNull Main plugin;
|
protected final @NotNull Main plugin;
|
||||||
protected final @NotNull List<String> placeholders = Arrays.asList(
|
protected final @NotNull List<String> placeholders = Arrays.asList(
|
||||||
"%UserPrefix_prefix%", "%UserPrefix_weight%",
|
"%UserPrefix_prefix%", "%UserPrefix_amount%", "%UserPrefix_weight%",
|
||||||
"%UserPrefix_identifier%", "%UserPrefix_name%",
|
"%UserPrefix_identifier%", "%UserPrefix_name%",
|
||||||
"%UserPrefix_has_<Identifier>%"
|
"%UserPrefix_has_<Identifier>%"
|
||||||
);
|
);
|
||||||
@@ -65,6 +65,9 @@ public class UserPrefixExpansion extends PlaceholderExpansion {
|
|||||||
case "prefix": {
|
case "prefix": {
|
||||||
return UserPrefixAPI.getUserManager().getPrefix(player).getContent();
|
return UserPrefixAPI.getUserManager().getPrefix(player).getContent();
|
||||||
}
|
}
|
||||||
|
case "amount": {
|
||||||
|
return String.valueOf(UserPrefixAPI.getUserManager().getUsablePrefixes(player).size() + 1);
|
||||||
|
}
|
||||||
case "name": {
|
case "name": {
|
||||||
return UserPrefixAPI.getUserManager().getPrefix(player).getName();
|
return UserPrefixAPI.getUserManager().getPrefix(player).getName();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ package cc.carm.plugin.userprefix.listener;
|
|||||||
|
|
||||||
import cc.carm.lib.easyplugin.utils.MessageUtils;
|
import cc.carm.lib.easyplugin.utils.MessageUtils;
|
||||||
import cc.carm.plugin.userprefix.Main;
|
import cc.carm.plugin.userprefix.Main;
|
||||||
import cc.carm.plugin.userprefix.configuration.PluginConfig;
|
import cc.carm.plugin.userprefix.conf.PluginConfig;
|
||||||
import me.clip.placeholderapi.PlaceholderAPI;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||||
@@ -20,8 +19,8 @@ public class ChatListener implements Listener {
|
|||||||
try {
|
try {
|
||||||
event.setFormat(MessageUtils.setPlaceholders(event.getPlayer(), format));
|
event.setFormat(MessageUtils.setPlaceholders(event.getPlayer(), format));
|
||||||
} catch (Exception exception) {
|
} catch (Exception exception) {
|
||||||
Main.serve("请检查配置文件中聊天相关是否配置正确。");
|
Main.severe("请检查配置文件中聊天相关是否配置正确。");
|
||||||
Main.serve("Please check the chat configuration.");
|
Main.severe("Please check the chat configuration.");
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -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.Main;
|
||||||
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
||||||
@@ -7,7 +7,7 @@ import net.luckperms.api.event.user.UserDataRecalculateEvent;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class UserNodeUpdateProcessor {
|
public class UserPermListener {
|
||||||
|
|
||||||
public static void process(UserDataRecalculateEvent event) {
|
public static void process(UserDataRecalculateEvent event) {
|
||||||
Player player = Bukkit.getPlayer(event.getUser().getUniqueId());
|
Player player = Bukkit.getPlayer(event.getUser().getUniqueId());
|
||||||
@@ -3,8 +3,8 @@ package cc.carm.plugin.userprefix.manager;
|
|||||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
||||||
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.configuration.PluginConfig;
|
import cc.carm.plugin.userprefix.conf.PluginConfig;
|
||||||
import cc.carm.plugin.userprefix.configuration.PluginMessages;
|
import cc.carm.plugin.userprefix.conf.PluginMessages;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package cc.carm.plugin.userprefix.manager;
|
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.data.ItemConfig;
|
||||||
import cc.carm.lib.mineconfiguration.bukkit.source.CraftSectionWrapper;
|
|
||||||
import cc.carm.plugin.userprefix.Main;
|
import cc.carm.plugin.userprefix.Main;
|
||||||
import cc.carm.plugin.userprefix.configuration.PluginConfig;
|
import cc.carm.plugin.userprefix.conf.PluginConfig;
|
||||||
import cc.carm.plugin.userprefix.configuration.prefix.PrefixConfig;
|
import cc.carm.plugin.userprefix.conf.prefix.PrefixConfig;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
@@ -41,9 +41,9 @@ public class PrefixManager {
|
|||||||
|
|
||||||
String[] filesList = prefixDataFolder.list();
|
String[] filesList = prefixDataFolder.list();
|
||||||
if (filesList == null || filesList.length < 1) {
|
if (filesList == null || filesList.length < 1) {
|
||||||
Main.serve("配置文件夹中暂无任何前缀配置问,请检查。");
|
Main.severe("配置文件夹中暂无任何前缀配置问,请检查。");
|
||||||
Main.serve("There's no configured prefix.");
|
Main.severe("There's no configured prefix.");
|
||||||
Main.serve("Path: " + prefixDataFolder.getAbsolutePath());
|
Main.severe("Path: " + prefixDataFolder.getAbsolutePath());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,12 +57,12 @@ public class PrefixManager {
|
|||||||
if (files.size() > 0) {
|
if (files.size() > 0) {
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
try {
|
try {
|
||||||
PrefixConfig prefix = adPrefix(file);
|
PrefixConfig prefix = addPrefix(file);
|
||||||
Main.debugging("完成前缀加载 " + prefix.getIdentifier() + " : " + prefix.getName());
|
Main.debugging("完成前缀加载 " + prefix.getIdentifier() + " : " + prefix.getName());
|
||||||
loaded.put(prefix.getIdentifier(), prefix);
|
loaded.put(prefix.getIdentifier(), prefix);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Main.serve("在加载前缀 " + file.getAbsolutePath() + " 时出错,请检查配置!");
|
Main.severe("在加载前缀 " + file.getAbsolutePath() + " 时出错,请检查配置!");
|
||||||
Main.serve("Error occurred when loading prefix #" + file.getAbsolutePath() + " !");
|
Main.severe("Error occurred when loading prefix #" + file.getAbsolutePath() + " !");
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,6 +78,7 @@ public class PrefixManager {
|
|||||||
PluginConfig.DEFAULT_PREFIX.CONTENT.getNotNull(),
|
PluginConfig.DEFAULT_PREFIX.CONTENT.getNotNull(),
|
||||||
PluginConfig.DEFAULT_PREFIX.WEIGHT.getNotNull(),
|
PluginConfig.DEFAULT_PREFIX.WEIGHT.getNotNull(),
|
||||||
null,
|
null,
|
||||||
|
readActions(PluginConfig.DEFAULT_PREFIX.ACTIONS.get()),
|
||||||
PluginConfig.DEFAULT_PREFIX.ITEM.NOT_USING.getNotNull(),
|
PluginConfig.DEFAULT_PREFIX.ITEM.NOT_USING.getNotNull(),
|
||||||
PluginConfig.DEFAULT_PREFIX.ITEM.USING.get(),
|
PluginConfig.DEFAULT_PREFIX.ITEM.USING.get(),
|
||||||
null
|
null
|
||||||
@@ -122,10 +123,11 @@ public class PrefixManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull PrefixConfig adPrefix(@NotNull File file) throws Exception {
|
public static @NotNull PrefixConfig addPrefix(@NotNull File file) throws Exception {
|
||||||
FileConfiguration configuration = YamlConfiguration.loadConfiguration(file);
|
FileConfiguration configuration = YamlConfiguration.loadConfiguration(file);
|
||||||
String identifier = configuration.getString("identifier");
|
String identifier = configuration.getString("identifier");
|
||||||
if (identifier == null) throw new Exception("配置文件 " + file.getAbsolutePath() + " 中没有配置前缀的唯一标识。");
|
if (identifier == null)
|
||||||
|
throw new Exception("配置文件 " + file.getAbsolutePath() + " 中没有配置前缀的唯一标识。");
|
||||||
|
|
||||||
String name = configuration.getString("name");
|
String name = configuration.getString("name");
|
||||||
if (name == null) throw new Exception("配置文件 " + file.getAbsolutePath() + " 中没有配置前缀的显示名称。");
|
if (name == null) throw new Exception("配置文件 " + file.getAbsolutePath() + " 中没有配置前缀的显示名称。");
|
||||||
@@ -135,6 +137,7 @@ public class PrefixManager {
|
|||||||
configuration.getString("content", "&r"),
|
configuration.getString("content", "&r"),
|
||||||
configuration.getInt("weight", 1),
|
configuration.getInt("weight", 1),
|
||||||
configuration.getString("permission"),
|
configuration.getString("permission"),
|
||||||
|
readActions(configuration.getStringList("actions")),
|
||||||
readItem(
|
readItem(
|
||||||
configuration.getConfigurationSection("item.has-perm"),
|
configuration.getConfigurationSection("item.has-perm"),
|
||||||
new ItemConfig(Material.STONE, name, Arrays.asList(" ", "§a➥ 点击切换到该前缀"))
|
new ItemConfig(Material.STONE, name, Arrays.asList(" ", "§a➥ 点击切换到该前缀"))
|
||||||
@@ -148,8 +151,11 @@ public class PrefixManager {
|
|||||||
@Contract("_,!null->!null")
|
@Contract("_,!null->!null")
|
||||||
protected static ItemConfig readItem(@Nullable ConfigurationSection section, @Nullable ItemConfig defaultValue) throws Exception {
|
protected static ItemConfig readItem(@Nullable ConfigurationSection section, @Nullable ItemConfig defaultValue) throws Exception {
|
||||||
if (section == null) return defaultValue;
|
if (section == null) return defaultValue;
|
||||||
else return ItemConfig.deserialize(CraftSectionWrapper.of(section));
|
else return ItemConfig.deserialize(section);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static List<GUIActionConfiguration> readActions(@NotNull List<String> strings) {
|
||||||
|
return strings.stream().map(GUIActionConfiguration::deserialize).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package cc.carm.plugin.userprefix.manager;
|
|||||||
import cc.carm.lib.easyplugin.gui.GUI;
|
import cc.carm.lib.easyplugin.gui.GUI;
|
||||||
import cc.carm.plugin.userprefix.Main;
|
import cc.carm.plugin.userprefix.Main;
|
||||||
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
||||||
import cc.carm.plugin.userprefix.configuration.PluginConfig;
|
import cc.carm.plugin.userprefix.conf.PluginConfig;
|
||||||
import cc.carm.plugin.userprefix.configuration.PluginMessages;
|
import cc.carm.plugin.userprefix.conf.PluginMessages;
|
||||||
import cc.carm.plugin.userprefix.configuration.prefix.PrefixConfig;
|
import cc.carm.plugin.userprefix.conf.prefix.PrefixConfig;
|
||||||
import cc.carm.plugin.userprefix.event.UserPrefixChangeEvent;
|
import cc.carm.plugin.userprefix.event.UserPrefixChangeEvent;
|
||||||
import cc.carm.plugin.userprefix.event.UserPrefixExpireEvent;
|
import cc.carm.plugin.userprefix.event.UserPrefixExpireEvent;
|
||||||
import cc.carm.plugin.userprefix.hooker.UserNameTag;
|
import cc.carm.plugin.userprefix.hooker.UserNameTag;
|
||||||
@@ -141,9 +141,7 @@ public class UserManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
UserPrefixChangeEvent.call(player, currentPrefix, newPrefix, (after) -> {
|
UserPrefixChangeEvent.call(player, currentPrefix, newPrefix, (after) -> {
|
||||||
if (after != null) {
|
if (after != null) setPrefix(player, after, updateView);
|
||||||
setPrefix(player, after, updateView);
|
|
||||||
}
|
|
||||||
checkingPlayers.remove(player.getUniqueId());
|
checkingPlayers.remove(player.getUniqueId());
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -183,6 +181,7 @@ public class UserManager {
|
|||||||
*/
|
*/
|
||||||
public void setPrefix(Player player, PrefixConfig prefix, boolean updateView) {
|
public void setPrefix(Player player, PrefixConfig prefix, boolean updateView) {
|
||||||
setPrefixData(player, prefix.getIdentifier());
|
setPrefixData(player, prefix.getIdentifier());
|
||||||
|
prefix.executeActions(player);
|
||||||
if (updateView) updatePrefixView(player, false);
|
if (updateView) updatePrefixView(player, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ import cc.carm.lib.easyplugin.gui.GUIItem;
|
|||||||
import cc.carm.lib.easyplugin.gui.GUIType;
|
import cc.carm.lib.easyplugin.gui.GUIType;
|
||||||
import cc.carm.lib.easyplugin.gui.paged.AutoPagedGUI;
|
import cc.carm.lib.easyplugin.gui.paged.AutoPagedGUI;
|
||||||
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
import cc.carm.plugin.userprefix.UserPrefixAPI;
|
||||||
import cc.carm.plugin.userprefix.configuration.PluginConfig;
|
import cc.carm.plugin.userprefix.conf.PluginConfig;
|
||||||
import cc.carm.plugin.userprefix.configuration.PluginMessages;
|
import cc.carm.plugin.userprefix.conf.PluginMessages;
|
||||||
import cc.carm.plugin.userprefix.configuration.prefix.PrefixConfig;
|
import cc.carm.plugin.userprefix.conf.prefix.PrefixConfig;
|
||||||
|
import cc.carm.plugin.userprefix.event.UserPrefixChangeEvent;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.ClickType;
|
import org.bukkit.event.inventory.ClickType;
|
||||||
|
|
||||||
@@ -51,15 +52,22 @@ public class PrefixSelectGUI extends AutoPagedGUI {
|
|||||||
addItem(new GUIItem(prefix.getItemWhenUsing(player) != null ? prefix.getItemWhenUsing(player) : prefix.getItemHasPermission(player)));
|
addItem(new GUIItem(prefix.getItemWhenUsing(player) != null ? prefix.getItemWhenUsing(player) : prefix.getItemHasPermission(player)));
|
||||||
} else if (prefix.checkPermission(player)) {
|
} else if (prefix.checkPermission(player)) {
|
||||||
addItem(new GUIItem(prefix.getItemHasPermission(player)) {
|
addItem(new GUIItem(prefix.getItemHasPermission(player)) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(ClickType type) {
|
public void onClick(Player clicker, ClickType type) {
|
||||||
player.closeInventory();
|
player.closeInventory();
|
||||||
//再次检查,防止打开GUI后、选择前的时间段内权限消失
|
//再次检查,防止打开GUI后、选择前的时间段内权限消失
|
||||||
if (prefix.checkPermission(player)) {
|
if (prefix.checkPermission(player)) {
|
||||||
UserPrefixAPI.getUserManager().setPrefix(player, prefix, true);
|
|
||||||
|
|
||||||
|
// 发送消息与提示
|
||||||
PluginConfig.SOUNDS.PREFIX_CHANGE.playTo(player);
|
PluginConfig.SOUNDS.PREFIX_CHANGE.playTo(player);
|
||||||
PluginMessages.SELECTED.send(player, prefix.getName());
|
PluginMessages.SELECTED.send(player, prefix.getName());
|
||||||
|
|
||||||
|
UserPrefixChangeEvent.call(player, usingPrefix, prefix, config -> {
|
||||||
|
if (config == null) return;
|
||||||
|
UserPrefixAPI.getUserManager().setPrefix(player, config, true);
|
||||||
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
PluginConfig.SOUNDS.GUI_CLICK.playTo(player);
|
PluginConfig.SOUNDS.GUI_CLICK.playTo(player);
|
||||||
}
|
}
|
||||||
@@ -68,7 +76,7 @@ public class PrefixSelectGUI extends AutoPagedGUI {
|
|||||||
} else {
|
} else {
|
||||||
addItem(new GUIItem(prefix.getItemNoPermission(player)) {
|
addItem(new GUIItem(prefix.getItemNoPermission(player)) {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(ClickType type) {
|
public void onClick(Player clicker, ClickType type) {
|
||||||
PluginConfig.SOUNDS.GUI_CLICK.playTo(player);
|
PluginConfig.SOUNDS.GUI_CLICK.playTo(player);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -22,6 +22,11 @@ weight: 1
|
|||||||
# (because it is impossible to display items without permission at all)
|
# (because it is impossible to display items without permission at all)
|
||||||
permission: "yc.vip"
|
permission: "yc.vip"
|
||||||
|
|
||||||
|
# Actions when select [Unnecessary]
|
||||||
|
# Please check https://github.com/CarmJos/UserPrefix/tree/master/.documentation/ACTIONS.md
|
||||||
|
actions:
|
||||||
|
- "[CONSOLE] say %player_name% selected PRO !"
|
||||||
|
|
||||||
item:
|
item:
|
||||||
# itemHasPermission [Necessary]
|
# itemHasPermission [Necessary]
|
||||||
# This Item will be displayed when player has permission
|
# This Item will be displayed when player has permission
|
||||||
|
|||||||
@@ -22,6 +22,13 @@ weight: 1
|
|||||||
# 如果没有就是人人都能用,也代表不用配置“itemNoPermission”了(因为压根不可能显示没权限时候的物品)
|
# 如果没有就是人人都能用,也代表不用配置“itemNoPermission”了(因为压根不可能显示没权限时候的物品)
|
||||||
permission: "yc.pro"
|
permission: "yc.pro"
|
||||||
|
|
||||||
|
# 选择这个前缀时执行的操作 [非必须]
|
||||||
|
# 用于在玩家选择/取消选择前缀时执行相应动作,以便于实现一些特殊的功能。
|
||||||
|
# 具体操作类型详见介绍,前缀操作不支持限定点击类型。
|
||||||
|
# https://github.com/CarmJos/UserPrefix/tree/master/.documentation/ACTIONS.md
|
||||||
|
actions:
|
||||||
|
- "[CONSOLE] say %player_name% 选择了 Pro会员前缀 !"
|
||||||
|
|
||||||
# 该前缀的GUI物品配置
|
# 该前缀的GUI物品配置
|
||||||
item:
|
item:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user