Skip to content

Commit 0afec00

Browse files
committed
v1.1
1 parent e5d1541 commit 0afec00

File tree

9 files changed

+778
-22
lines changed

9 files changed

+778
-22
lines changed

README.md

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
- **自定义加入消息**:玩家可以设置自己的加入消息
1515
- **多种消息模式**:支持简单消息模式和前缀-后缀模式
1616
- **权限系统**:四个权限级别(管理员、颜色用户、普通用户、无权限)
17+
- **自定义权限组**:支持通过配置文件创建自定义权限组,如VIP、Premium等
18+
- **动态权限注册**:自定义权限组会自动注册对应的权限节点
19+
- **优先级系统**:支持自定义权限组和预设权限组的优先级配置
1720
- **颜色支持**:支持标准颜色代码(&a、&b等)和十六进制颜色代码(&#RRGGBB)
1821
- **数据库支持**:使用SQLite数据库存储玩家消息
1922
- **PlaceholderAPI集成**:支持使用PlaceholderAPI的占位符
@@ -31,18 +34,38 @@
3134

3235
插件使用以下权限节点:
3336

34-
- `cjm.admin`:管理员权限,可以管理其他玩家的消息和重载配置
35-
- `cjm.color`:颜色权限,可以在消息中使用颜色代码
36-
- `cjm.nocolor`:基本权限,可以设置纯文本消息
37-
- `cjm.basic`:基础权限,可以查看当前消息模式
37+
- `customjoinmessage.admin`:管理员权限,可以管理其他玩家的消息和重载配置
38+
- `customjoinmessage.use.color`:颜色权限,可以在消息中使用颜色代码
39+
- `customjoinmessage.use.nocolor`:基本权限,可以设置纯文本消息
40+
- `customjoinmessage.use`:基础权限,可以查看当前消息模式
41+
- `customjoinmessage.use.<组名>`:自定义权限组权限,如`customjoinmessage.use.vip`
3842

3943
### 权限级别
4044

41-
1. **管理员**cjm.admin):拥有所有权限,包括管理其他玩家的消息
42-
2. **颜色用户**cjm.color):可以使用颜色代码自定义加入消息
43-
3. **普通用户**cjm.nocolor):只能使用纯文本自定义加入消息
45+
1. **管理员**customjoinmessage.admin):拥有所有权限,包括管理其他玩家的消息
46+
2. **颜色用户**customjoinmessage.use.color):可以使用颜色代码自定义加入消息
47+
3. **普通用户**customjoinmessage.use.nocolor):只能使用纯文本自定义加入消息
4448
4. **无权限**:无法自定义加入消息
4549

50+
### 自定义权限组
51+
52+
插件支持通过配置文件创建自定义权限组,例如VIP、Premium等。每个自定义权限组可以:
53+
54+
- 设置优先级(数值越高优先级越高)
55+
- 定义完整的加入消息(完整模式)
56+
- 定义加入前缀和后缀(前后缀模式)
57+
- 自动注册对应的权限节点(如`customjoinmessage.use.vip`
58+
59+
### 优先级系统
60+
61+
系统按照以下优先级处理加入消息:
62+
63+
1. **最高优先级**:玩家个人自定义消息(数据库中存储的消息)
64+
2. **次高优先级**:玩家最高优先级权限组的消息配置
65+
3. **默认优先级**:插件默认配置的消息
66+
67+
预设权限组的优先级也可以在配置文件中自由调整。
68+
4669
## 命令说明
4770

4871
### 玩家命令
@@ -62,6 +85,9 @@
6285
- `/cjm help`:显示管理命令帮助
6386
- `/setjoin <玩家> <消息>`:为其他玩家设置加入消息
6487
- `/setjoin <玩家> reset`:清除其他玩家的加入消息
88+
- `/cjm group list`:列出所有自定义权限组和预设权限组
89+
- `/cjm group info <组名>`:查看指定权限组的详细信息
90+
- `/cjm group help`:显示权限组管理命令的帮助信息
6591

6692
## 配置文件
6793

@@ -93,6 +119,30 @@ placeholders:
93119
# Database settings
94120
database:
95121
file: "database.db"
122+
123+
# Predefined permission groups with their priorities
124+
predefined-permissions:
125+
admin:
126+
priority: 100
127+
permission: "customjoinmessage.admin"
128+
color:
129+
priority: 50
130+
permission: "customjoinmessage.use.color"
131+
nocolor:
132+
priority: 10
133+
permission: "customjoinmessage.use.nocolor"
134+
135+
# Custom permission groups
136+
permission-groups:
137+
vip:
138+
priority: 30
139+
message: "&6[VIP] %player% 加入了游戏"
140+
permission: "customjoinmessage.use.vip"
141+
premium:
142+
priority: 40
143+
prefix: "&b[Premium]"
144+
suffix: "&a 加入了服务器"
145+
permission: "customjoinmessage.use.premium"
96146
```
97147
98148
### messages.yml
@@ -136,7 +186,7 @@ database:
136186

137187
## 开发信息
138188

139-
- **版本**:1.0.0
189+
- **版本**:1.1
140190
- **Minecraft版本**
141191
- Folia:1.20.1+
142192
- Spigot:1.16+
@@ -171,7 +221,19 @@ database:
171221

172222
## 更新日志
173223

174-
### v1.0.0
224+
### v1.1
225+
- 添加自定义权限组功能,支持通过配置文件创建自定义权限组
226+
- 实现动态权限注册,自定义权限组会自动注册对应的权限节点
227+
- 增强优先级系统,支持自定义权限组和预设权限组的优先级配置
228+
- 添加权限组管理命令(/cjm group list/info/help)
229+
- 预设权限组优先级可在配置文件中自由调整
230+
- 修复配置文件和消息文件的自动更新机制
231+
- 改进文件加载错误处理,提高系统稳定性
232+
- 优化消息文件读取,支持UTF-8编码
233+
- 增强配置版本检查,确保平滑升级
234+
- 添加更详细的日志记录,便于问题排查
235+
236+
### v1.0
175237
- 初始版本发布
176238
- 支持自定义加入消息
177239
- 实现权限系统

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ plugins {
33
}
44

55
group = 'mc506lw'
6-
version = '1.0'
6+
version = '1.1'
77

88
repositories {
99
mavenCentral()

src/main/java/mc506lw/cjm/commands/CjmCommand.java

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ public class CjmCommand implements CommandExecutor, TabCompleter {
1717
private final CustomJoinMessage plugin;
1818
private final MessageManager messageManager;
1919
private final PermissionCommand permissionCommand;
20+
private final GroupCommand groupCommand;
2021

2122
public CjmCommand(CustomJoinMessage plugin) {
2223
this.plugin = plugin;
2324
this.messageManager = plugin.getMessageManager();
2425
this.permissionCommand = new PermissionCommand(plugin);
26+
this.groupCommand = new GroupCommand(plugin);
2527
}
2628

2729
@Override
@@ -37,9 +39,34 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
3739
}
3840

3941
if (args[0].equalsIgnoreCase("reload")) {
40-
plugin.reloadConfig();
41-
plugin.getConfigManager().reloadConfig();
42-
messageManager.sendMessage(sender, "config-reloaded");
42+
// Reload configuration and check if it was updated
43+
boolean configUpdated = plugin.getConfigManager().reloadConfig();
44+
45+
// Check if config was updated
46+
boolean configFileUpdated = plugin.getConfigManager().getLastBackupFile() != null;
47+
boolean messagesFileUpdated = plugin.getConfigManager().getLastMessagesBackupFile() != null;
48+
49+
// Send appropriate messages based on what was updated
50+
if (configFileUpdated) {
51+
messageManager.sendMessage(sender, "config-updated");
52+
String backupFile = plugin.getConfigManager().getLastBackupFile();
53+
if (backupFile != null) {
54+
messageManager.sendMessage(sender, "config-backup-created", "%backup_file%", backupFile);
55+
}
56+
}
57+
58+
if (messagesFileUpdated) {
59+
messageManager.sendMessage(sender, "messages-updated");
60+
String backupFile = plugin.getConfigManager().getLastMessagesBackupFile();
61+
if (backupFile != null) {
62+
messageManager.sendMessage(sender, "messages-backup-created", "%backup_file%", backupFile);
63+
}
64+
}
65+
66+
if (!configFileUpdated && !messagesFileUpdated) {
67+
messageManager.sendMessage(sender, "config-reloaded");
68+
}
69+
4370
return true;
4471
}
4572

@@ -50,6 +77,13 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
5077
return permissionCommand.onCommand(sender, command, "permission", permissionArgs);
5178
}
5279

80+
if (args[0].equalsIgnoreCase("group")) {
81+
// Forward group subcommand to GroupCommand
82+
String[] groupArgs = new String[args.length - 1];
83+
System.arraycopy(args, 1, groupArgs, 0, args.length - 1);
84+
return groupCommand.onCommand(sender, command, "group", groupArgs);
85+
}
86+
5387
// Unknown command
5488
messageManager.sendMessage(sender, "unknown-command");
5589
return true;
@@ -62,6 +96,7 @@ private void sendHelp(CommandSender sender) {
6296
// Send help commands
6397
messageManager.sendMessage(sender, "admin-help-reload");
6498
messageManager.sendMessage(sender, "admin-help-permission");
99+
messageManager.sendMessage(sender, "admin-help-group");
65100
messageManager.sendMessage(sender, "admin-help-help");
66101

67102
// Send config note
@@ -75,12 +110,18 @@ public List<String> onTabComplete(CommandSender sender, Command command, String
75110
if (args.length == 1) {
76111
completions.add("reload");
77112
completions.add("permission");
113+
completions.add("group");
78114
completions.add("help");
79115
} else if (args.length == 2 && args[0].equalsIgnoreCase("permission")) {
80116
// Forward tab completion to PermissionCommand
81117
String[] permissionArgs = new String[args.length - 1];
82118
System.arraycopy(args, 1, permissionArgs, 0, args.length - 1);
83119
return permissionCommand.onTabComplete(sender, command, "permission", permissionArgs);
120+
} else if (args.length == 2 && args[0].equalsIgnoreCase("group")) {
121+
// Forward tab completion to GroupCommand
122+
String[] groupArgs = new String[args.length - 1];
123+
System.arraycopy(args, 1, groupArgs, 0, args.length - 1);
124+
return groupCommand.onTabComplete(sender, command, "group", groupArgs);
84125
}
85126

86127
// Filter completions based on what the user has typed

0 commit comments

Comments
 (0)