mirror of
https://github.com/ColdeZhang/Dominion.git
synced 2025-03-12 17:06:42 +08:00
实现了权限组功能(未测试)
This commit is contained in:
parent
13c6d59b04
commit
27a7dea809
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>cn.lunadeer</groupId>
|
||||
<artifactId>Dominion</artifactId>
|
||||
<version>1.33.7-beta</version>
|
||||
<version>1.34.0-beta</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Dominion</name>
|
||||
|
@ -1,9 +1,6 @@
|
||||
package cn.lunadeer.dominion;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.dominion.dtos.*;
|
||||
import cn.lunadeer.dominion.utils.ResMigration;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.ParticleRender;
|
||||
@ -28,6 +25,7 @@ public class Cache {
|
||||
player_current_dominion_id = new HashMap<>();
|
||||
loadDominions();
|
||||
loadPlayerPrivileges();
|
||||
loadGroup();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -156,6 +154,51 @@ public class Cache {
|
||||
});
|
||||
}
|
||||
|
||||
public void loadGroup() {
|
||||
loadGroup(null);
|
||||
}
|
||||
|
||||
public void loadGroup(Integer groupId) {
|
||||
if (_last_update_group.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
|
||||
XLogger.debug("run loadGroupExecution directly");
|
||||
loadGroupExecution(groupId);
|
||||
} else {
|
||||
if (_update_group_is_scheduled.get()) return;
|
||||
XLogger.debug("schedule loadGroupExecution");
|
||||
_update_group_is_scheduled.set(true);
|
||||
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_group.get())) / 1000 * 20L;
|
||||
Scheduler.runTaskLaterAsync(() -> {
|
||||
XLogger.debug("run loadGroupExecution scheduled");
|
||||
loadGroupExecution(groupId);
|
||||
_update_group_is_scheduled.set(false);
|
||||
},
|
||||
delay_tick);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadGroupExecution(Integer groupId) {
|
||||
Scheduler.runTaskAsync(() -> {
|
||||
long start = System.currentTimeMillis();
|
||||
if (groupId == null) {
|
||||
id_groups = new ConcurrentHashMap<>();
|
||||
List<GroupDTO> groups = GroupDTO.selectAll();
|
||||
for (GroupDTO group : groups) {
|
||||
id_groups.put(group.getId(), group);
|
||||
}
|
||||
} else {
|
||||
GroupDTO group = GroupDTO.select(groupId);
|
||||
if (group == null && id_groups.containsKey(groupId)) {
|
||||
id_groups.remove(groupId);
|
||||
} else if (group != null) {
|
||||
id_groups.put(groupId, group);
|
||||
}
|
||||
}
|
||||
recheckPlayerState = true;
|
||||
_last_update_group.set(System.currentTimeMillis());
|
||||
XLogger.debug("loadGroupExecution cost: %d ms", System.currentTimeMillis() - start);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取玩家当前所在领地
|
||||
* 此方法会先判断缓存中是否有玩家当前所在领地,如果没有则遍历所有领地判断玩家所在位置
|
||||
@ -302,6 +345,10 @@ public class Cache {
|
||||
return dominionTree;
|
||||
}
|
||||
|
||||
public GroupDTO getGroup(Integer id) {
|
||||
return id_groups.get(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取玩家在指定领地的特权
|
||||
* 如果玩家不存在特权,则返回null
|
||||
@ -371,6 +418,7 @@ public class Cache {
|
||||
public static Cache instance;
|
||||
private ConcurrentHashMap<Integer, DominionDTO> id_dominions;
|
||||
private ConcurrentHashMap<String, List<DominionNode>> world_dominion_tree;
|
||||
private ConcurrentHashMap<Integer, GroupDTO> id_groups;
|
||||
private ConcurrentHashMap<UUID, ConcurrentHashMap<Integer, PlayerPrivilegeDTO>> player_uuid_to_privilege; // 玩家所有的特权
|
||||
private final Map<UUID, Integer> player_current_dominion_id; // 玩家当前所在领地
|
||||
private ConcurrentHashMap<Integer, List<Integer>> dominion_children;
|
||||
@ -378,6 +426,8 @@ public class Cache {
|
||||
private final AtomicBoolean _update_dominion_is_scheduled = new AtomicBoolean(false);
|
||||
private final AtomicLong _last_update_privilege = new AtomicLong(0);
|
||||
private final AtomicBoolean _update_privilege_is_scheduled = new AtomicBoolean(false);
|
||||
private final AtomicLong _last_update_group = new AtomicLong(0);
|
||||
private final AtomicBoolean _update_group_is_scheduled = new AtomicBoolean(false);
|
||||
private static final long UPDATE_INTERVAL = 1000 * 4;
|
||||
private boolean recheckPlayerState = false; // 是否需要重新检查玩家状态(发光、飞行)
|
||||
public final Map<UUID, LocalDateTime> NextTimeAllowTeleport = new java.util.HashMap<>();
|
||||
|
@ -187,6 +187,33 @@ public class Commands implements TabExecutor {
|
||||
case "env_info":
|
||||
DominionEnvInfo.show(sender, args);
|
||||
break;
|
||||
case "create_group":
|
||||
Group.createGroup(sender, args);
|
||||
break;
|
||||
case "delete_group":
|
||||
Group.deleteGroup(sender, args);
|
||||
break;
|
||||
case "rename_group":
|
||||
Group.renameGroup(sender, args);
|
||||
break;
|
||||
case "set_group_flag":
|
||||
Group.setGroupFlag(sender, args);
|
||||
break;
|
||||
case "group_add_member":
|
||||
Group.addMember(sender, args);
|
||||
break;
|
||||
case "group_remove_member":
|
||||
Group.removeMember(sender, args);
|
||||
break;
|
||||
case "group_list":
|
||||
DominionGroupList.show(sender, args);
|
||||
break;
|
||||
case "select_member_add_group":
|
||||
SelectMember.show(sender, args);
|
||||
break;
|
||||
case "group_manage":
|
||||
GroupManage.show(sender, args);
|
||||
break;
|
||||
// ---=== CUI ===---
|
||||
case "cui_rename":
|
||||
RenameDominion.open(sender, args);
|
||||
@ -209,6 +236,12 @@ public class Commands implements TabExecutor {
|
||||
case "cui_set_map_color":
|
||||
SetMapColor.open(sender, args);
|
||||
break;
|
||||
case "cui_create_group":
|
||||
CreateGroup.open(sender, args);
|
||||
break;
|
||||
case "cui_rename_group":
|
||||
RenameGroup.open(sender, args);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@ -251,7 +284,8 @@ public class Commands implements TabExecutor {
|
||||
"template_create",
|
||||
"template_set_flag",
|
||||
"all_dominion",
|
||||
"set_map_color"
|
||||
"set_map_color",
|
||||
"create_group", "delete_group", "rename_group", "set_group_flag", "group_add_member", "group_remove_member"
|
||||
);
|
||||
}
|
||||
if (args.length == 2) {
|
||||
@ -272,6 +306,12 @@ public class Commands implements TabExecutor {
|
||||
case "rename":
|
||||
case "give":
|
||||
case "set_tp_location":
|
||||
case "create_group":
|
||||
case "delete_group":
|
||||
case "rename_group":
|
||||
case "set_group_flag":
|
||||
case "group_add_member":
|
||||
case "group_remove_member":
|
||||
return playerDominions(sender);
|
||||
case "tp":
|
||||
return allDominions();
|
||||
@ -328,6 +368,14 @@ public class Commands implements TabExecutor {
|
||||
return playerNames();
|
||||
case "template_manage":
|
||||
return Collections.singletonList("页码(可选)");
|
||||
case "create_group":
|
||||
return Collections.singletonList("输入要创建的权限组名称");
|
||||
case "delete_group":
|
||||
case "rename_group":
|
||||
case "set_group_flag":
|
||||
case "group_add_member":
|
||||
case "group_remove_member":
|
||||
return dominionGroups(args[1]);
|
||||
}
|
||||
}
|
||||
if (args.length == 4) {
|
||||
@ -339,6 +387,20 @@ public class Commands implements TabExecutor {
|
||||
return boolOptions();
|
||||
case "apply_template":
|
||||
return allTemplates(sender);
|
||||
case "rename_group":
|
||||
return Collections.singletonList("输入新的权限组名称");
|
||||
case "set_group_flag":
|
||||
return playerPrivileges();
|
||||
case "group_add_member":
|
||||
return playerNames();
|
||||
case "group_remove_member":
|
||||
return groupPlayers(args[1], args[2]);
|
||||
}
|
||||
}
|
||||
if (args.length == 5) {
|
||||
switch (args[0]) {
|
||||
case "set_group_flag":
|
||||
return boolOptions();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
157
src/main/java/cn/lunadeer/dominion/commands/Group.java
Normal file
157
src/main/java/cn/lunadeer/dominion/commands/Group.java
Normal file
@ -0,0 +1,157 @@
|
||||
package cn.lunadeer.dominion.commands;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.GroupController;
|
||||
import cn.lunadeer.dominion.tuis.DominionGroupList;
|
||||
import cn.lunadeer.dominion.tuis.GroupManage;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||
|
||||
public class Group {
|
||||
|
||||
/**
|
||||
* /dominion create_group <领地名称> <权限组名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void createGroup(CommandSender sender, String[] args) {
|
||||
if (args.length < 3) {
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[1];
|
||||
String groupName = args[2];
|
||||
GroupController.createGroup(operator, dominionName, groupName);
|
||||
String[] newArgs = new String[2];
|
||||
newArgs[0] = "group_list";
|
||||
newArgs[1] = dominionName;
|
||||
DominionGroupList.show(sender, newArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* /dominion delete_group <领地名称> <权限组名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void deleteGroup(CommandSender sender, String[] args) {
|
||||
if (args.length < 3) {
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[1];
|
||||
String groupName = args[2];
|
||||
GroupController.deleteGroup(operator, dominionName, groupName);
|
||||
String[] newArgs = new String[2];
|
||||
newArgs[0] = "group_list";
|
||||
newArgs[1] = dominionName;
|
||||
DominionGroupList.show(sender, newArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* /dominion rename_group <领地名称> <权限组旧名称> <新名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void renameGroup(CommandSender sender, String[] args) {
|
||||
if (args.length < 4) {
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[1];
|
||||
String oldGroupName = args[2];
|
||||
String newGroupName = args[3];
|
||||
GroupController.renameGroup(operator, dominionName, oldGroupName, newGroupName);
|
||||
String[] newArgs = new String[3];
|
||||
newArgs[0] = "group_manage";
|
||||
newArgs[1] = dominionName;
|
||||
newArgs[2] = newGroupName;
|
||||
GroupManage.show(sender, newArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* /dominion set_group_flag <领地名称> <权限组名称> <权限名称> <true|false>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void setGroupFlag(CommandSender sender, String[] args) {
|
||||
if (args.length < 5) {
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[1];
|
||||
String groupName = args[2];
|
||||
String flag = args[3];
|
||||
boolean value = Boolean.parseBoolean(args[4]);
|
||||
GroupController.setGroupFlag(operator, dominionName, groupName, flag, value);
|
||||
String[] newArgs = new String[4];
|
||||
newArgs[0] = "group_manage";
|
||||
newArgs[1] = dominionName;
|
||||
newArgs[2] = groupName;
|
||||
newArgs[3] = String.valueOf(getPage(args, 5));
|
||||
GroupManage.show(sender, newArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* /dominion group_add_member <领地名称> <权限组名称> <玩家名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void addMember(CommandSender sender, String[] args) {
|
||||
if (args.length < 4) {
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[1];
|
||||
String groupName = args[2];
|
||||
String playerName = args[3];
|
||||
GroupController.addMember(operator, dominionName, groupName, playerName);
|
||||
String[] newArgs = new String[3];
|
||||
newArgs[0] = "group_list";
|
||||
newArgs[1] = dominionName;
|
||||
newArgs[2] = String.valueOf(getPage(args, 4));
|
||||
DominionGroupList.show(sender, newArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* /dominion group_remove_member <领地名称> <权限组名称> <玩家名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void removeMember(CommandSender sender, String[] args) {
|
||||
if (args.length < 4) {
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[1];
|
||||
String groupName = args[2];
|
||||
String playerName = args[3];
|
||||
GroupController.removeMember(operator, dominionName, groupName, playerName);
|
||||
String[] newArgs = new String[3];
|
||||
newArgs[0] = "group_list";
|
||||
newArgs[1] = dominionName;
|
||||
newArgs[2] = String.valueOf(getPage(args, 4));
|
||||
DominionGroupList.show(sender, newArgs);
|
||||
}
|
||||
|
||||
}
|
@ -1,10 +1,7 @@
|
||||
package cn.lunadeer.dominion.commands;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||
import cn.lunadeer.dominion.dtos.*;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@ -41,6 +38,32 @@ public class Helper {
|
||||
return dominions_name;
|
||||
}
|
||||
|
||||
public static List<String> dominionGroups(String dominionName) {
|
||||
List<String> groups_name = new ArrayList<>();
|
||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||
if (dominion == null) return groups_name;
|
||||
List<GroupDTO> groups = GroupDTO.selectByDominionId(dominion.getId());
|
||||
for (GroupDTO group : groups) {
|
||||
groups_name.add(group.getName());
|
||||
}
|
||||
return groups_name;
|
||||
}
|
||||
|
||||
public static List<String> groupPlayers(String domName, String groupName) {
|
||||
List<String> players_name = new ArrayList<>();
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) return players_name;
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group == null) return players_name;
|
||||
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.selectByGroupId(group.getId());
|
||||
for (PlayerPrivilegeDTO privilege : privileges) {
|
||||
PlayerDTO player = PlayerDTO.select(privilege.getPlayerUUID());
|
||||
if (player == null) continue;
|
||||
players_name.add(player.getLastKnownName());
|
||||
}
|
||||
return players_name;
|
||||
}
|
||||
|
||||
public static List<String> playerOwnDominions(CommandSender sender) {
|
||||
List<String> dominions_name = new ArrayList<>();
|
||||
Player player = playerOnly(sender);
|
||||
|
@ -118,9 +118,9 @@ public class PlayerPrivilege {
|
||||
PrivilegeController.applyTemplate(operator, dominionName, playerName, templateName);
|
||||
if (args.length == 5) {
|
||||
String[] newArgs = new String[3];
|
||||
newArgs[0] = "privilege_list";
|
||||
newArgs[1] = dominionName;
|
||||
newArgs[2] = args[4];
|
||||
newArgs[0] = "privilege_info";
|
||||
newArgs[1] = playerName;
|
||||
newArgs[2] = dominionName;
|
||||
DominionPrivilegeList.show(sender, newArgs);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,214 @@
|
||||
package cn.lunadeer.dominion.controllers;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.*;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
||||
import static cn.lunadeer.dominion.controllers.Apis.notOwner;
|
||||
|
||||
public class GroupController {
|
||||
|
||||
public static void createGroup(AbstractOperator operator, String domName, String groupName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建权限组 %s 失败", groupName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建权限组 %s 成功", groupName);
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法创建权限组", domName));
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group != null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 已存在名为 %s 的权限组", domName, groupName));
|
||||
return;
|
||||
}
|
||||
group = GroupDTO.create(groupName, dominion);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
public static void deleteGroup(AbstractOperator operator, String domName, String groupName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "删除权限组 %s 失败", groupName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "删除权限组 %s 成功", groupName);
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法删除权限组", domName));
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
||||
return;
|
||||
}
|
||||
group.delete();
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
public static void setGroupFlag(AbstractOperator operator, String domName, String groupName, String flag, boolean value) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置权限组 %s 的权限 %s 为 %s 失败", groupName, flag, value);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置权限组 %s 的权限 %s 为 %s 成功", groupName, flag, value);
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
if (noAuthToChangeFlags(operator, dominion)) {
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
||||
return;
|
||||
}
|
||||
if ((flag.equals("admin") || group.getAdmin()) && notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改管理员权限组权限", domName));
|
||||
return;
|
||||
}
|
||||
if (flag.equals("admin")) {
|
||||
group = group.setAdmin(value);
|
||||
} else {
|
||||
if (group.getAdmin()) {
|
||||
operator.setResponse(FAIL.addMessage("管理员拥有所有权限,无需单独设置权限"));
|
||||
return;
|
||||
}
|
||||
Flag f = Flag.getFlag(flag);
|
||||
if (f == null) {
|
||||
operator.setResponse(FAIL.addMessage("未知的权限 %s", flag));
|
||||
return;
|
||||
}
|
||||
group = group.setFlagValue(f, value);
|
||||
}
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
public static void renameGroup(AbstractOperator operator, String domName, String oldName, String newName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "重命名权限组 %s 为 %s 失败", oldName, newName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "重命名权限组 %s 为 %s 成功", oldName, newName);
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法重命名权限组", domName));
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), oldName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, oldName));
|
||||
return;
|
||||
}
|
||||
group = group.setName(newName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
public static void addMember(AbstractOperator operator, String domName, String groupName, String playerName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "添加成员 %s 到权限组 %s 失败", playerName, groupName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "添加成员 %s 到权限组 %s 成功", playerName, groupName);
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
||||
return;
|
||||
}
|
||||
if (noAuthToChangeFlags(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你没有权限修改领地 %s 的权限组 %s 成员", domName, groupName));
|
||||
return;
|
||||
}
|
||||
if (group.getAdmin() && notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法添加成员到管理员权限组", domName));
|
||||
return;
|
||||
}
|
||||
PlayerDTO player = PlayerDTO.select(playerName);
|
||||
if (player == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName));
|
||||
return;
|
||||
}
|
||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员,无法直接加入权限组", playerName, domName));
|
||||
return;
|
||||
}
|
||||
if (Objects.equals(privilege.getGroupId(), group.getId())) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 已在权限组 %s 中", playerName, groupName));
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion) && privilege.getAdmin()) {
|
||||
operator.setResponse(FAIL.addMessage("%s 是管理员,你不是领地 %s 的拥有者,无法添加管理员到权限组", playerName, domName));
|
||||
return;
|
||||
}
|
||||
privilege = privilege.setGroupId(group.getId());
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
public static void removeMember(AbstractOperator operator, String domName, String groupName, String playerName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "从权限组 %s 移除成员 %s 失败", groupName, playerName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "从权限组 %s 移除成员 %s 成功", groupName, playerName);
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
||||
return;
|
||||
}
|
||||
if (noAuthToChangeFlags(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你没有权限移除领地 %s 的权限组 %s 成员", domName, groupName));
|
||||
return;
|
||||
}
|
||||
if (group.getAdmin() && notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法从管理员权限组移除成员", domName));
|
||||
return;
|
||||
}
|
||||
PlayerDTO player = PlayerDTO.select(playerName);
|
||||
if (player == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName));
|
||||
return;
|
||||
}
|
||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, domName));
|
||||
return;
|
||||
}
|
||||
if (!Objects.equals(privilege.getGroupId(), group.getId())) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不在权限组 %s 中", playerName, groupName));
|
||||
return;
|
||||
}
|
||||
privilege = privilege.setGroupId(-1);
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
}
|
53
src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java
Normal file
53
src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java
Normal file
@ -0,0 +1,53 @@
|
||||
package cn.lunadeer.dominion.cuis;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.GroupController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.tuis.DominionGroupList;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
|
||||
public class CreateGroup {
|
||||
|
||||
private static class createGroupCB implements CuiTextInput.InputCallback {
|
||||
|
||||
private final Player sender;
|
||||
private final String dominionName;
|
||||
|
||||
public createGroupCB(Player sender, String dominionName) {
|
||||
this.sender = sender;
|
||||
this.dominionName = dominionName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleData(String input) {
|
||||
XLogger.debug("createGroupCB.run: %s", input);
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||
GroupController.createGroup(operator, dominionName, input);
|
||||
String[] newArgs = new String[2];
|
||||
newArgs[0] = "group_list";
|
||||
newArgs[1] = dominionName;
|
||||
DominionGroupList.show(sender, newArgs);
|
||||
}
|
||||
}
|
||||
|
||||
public static void open(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地不存在");
|
||||
return;
|
||||
}
|
||||
CuiTextInput.InputCallback createGroupCB = new createGroupCB(player, dominion.getName());
|
||||
CuiTextInput view = CuiTextInput.create(createGroupCB).setText("未命名权限组").title("输入要创建的权限组名称");
|
||||
view.setSuggestCommand("/dominion create_group <领地名称> <权限组名称>");
|
||||
view.open(player);
|
||||
}
|
||||
|
||||
}
|
57
src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java
Normal file
57
src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java
Normal file
@ -0,0 +1,57 @@
|
||||
package cn.lunadeer.dominion.cuis;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.GroupController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.tuis.DominionGroupList;
|
||||
import cn.lunadeer.dominion.tuis.GroupManage;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
|
||||
public class RenameGroup {
|
||||
|
||||
private static class renameGroupCB implements CuiTextInput.InputCallback {
|
||||
|
||||
private final Player sender;
|
||||
private final String dominionName;
|
||||
private final String oldName;
|
||||
|
||||
public renameGroupCB(Player sender, String dominionName, String oldName) {
|
||||
this.sender = sender;
|
||||
this.dominionName = dominionName;
|
||||
this.oldName = oldName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleData(String input) {
|
||||
XLogger.debug("renameGroupCB.run: %s", input);
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||
GroupController.renameGroup(operator, dominionName, oldName, input);
|
||||
String[] newArgs = new String[3];
|
||||
newArgs[0] = "group_manage";
|
||||
newArgs[1] = dominionName;
|
||||
newArgs[2] = input;
|
||||
GroupManage.show(sender, newArgs);
|
||||
}
|
||||
}
|
||||
|
||||
public static void open(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地不存在");
|
||||
return;
|
||||
}
|
||||
CuiTextInput.InputCallback renameGroupCB = new renameGroupCB(player, dominion.getName(), args[2]);
|
||||
CuiTextInput view = CuiTextInput.create(renameGroupCB).setText(args[2]).title("输入新的权限组名称");
|
||||
view.setSuggestCommand("/dominion rename_group <领地名称> <权限组旧名称> <新名称>");
|
||||
view.open(player);
|
||||
}
|
||||
|
||||
}
|
179
src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java
Normal file
179
src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java
Normal file
@ -0,0 +1,179 @@
|
||||
package cn.lunadeer.dominion.dtos;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class GroupDTO {
|
||||
|
||||
Field id = new Field("id", FieldType.INT);
|
||||
Field domID = new Field("dom_id", FieldType.INT);
|
||||
Field name = new Field("name", FieldType.STRING);
|
||||
Field admin = new Field("admin", FieldType.BOOLEAN);
|
||||
private final Map<Flag, Boolean> flags = new HashMap<>();
|
||||
|
||||
public Integer getId() {
|
||||
return (Integer) id.value;
|
||||
}
|
||||
|
||||
public Integer getDomID() {
|
||||
return (Integer) domID.value;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return (String) name.value;
|
||||
}
|
||||
|
||||
public Boolean getAdmin() {
|
||||
return (Boolean) admin.value;
|
||||
}
|
||||
|
||||
public Boolean getFlagValue(Flag flag) {
|
||||
if (!flags.containsKey(flag)) return flag.getDefaultValue();
|
||||
return flags.get(flag);
|
||||
}
|
||||
|
||||
public GroupDTO setName(String name) {
|
||||
this.name.value = name;
|
||||
UpdateRow updateRow = new UpdateRow().field(this.name);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public GroupDTO setAdmin(Boolean admin) {
|
||||
this.admin.value = admin;
|
||||
UpdateRow updateRow = new UpdateRow().field(this.admin);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public GroupDTO setFlagValue(Flag flag, Boolean value) {
|
||||
flags.put(flag, value);
|
||||
Field f = new Field(flag.getFlagName(), value);
|
||||
UpdateRow updateRow = new UpdateRow().field(f);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public static GroupDTO create(String name, DominionDTO dominionDTO) {
|
||||
GroupDTO group = new GroupDTO(name, dominionDTO.getId());
|
||||
InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null));
|
||||
insertRow.table("group")
|
||||
.field(group.domID)
|
||||
.field(group.name)
|
||||
.field(group.admin);
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
insertRow.field(new Field(f.getFlagName(), dominionDTO.getFlagValue(f)));
|
||||
}
|
||||
try (ResultSet rs = insertRow.execute()) {
|
||||
List<GroupDTO> groups = getDTOFromRS(rs);
|
||||
if (groups.size() == 0) return null;
|
||||
return groups.get(0);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("创建权限组失败: ", e, "");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
delete(getId());
|
||||
}
|
||||
|
||||
public static void delete(Integer id) {
|
||||
String sql = "DELETE FROM group WHERE id = ?;";
|
||||
DatabaseManager.instance.query(sql, id);
|
||||
Cache.instance.loadGroup(id);
|
||||
List<PlayerPrivilegeDTO> players = PlayerPrivilegeDTO.selectByGroupId(id);
|
||||
for (PlayerPrivilegeDTO player : players) {
|
||||
player.setGroupId(-1);
|
||||
}
|
||||
}
|
||||
|
||||
public static GroupDTO select(Integer id) {
|
||||
String sql = "SELECT * FROM group WHERE id = ?;";
|
||||
List<GroupDTO> groups = getDTOFromRS(DatabaseManager.instance.query(sql, id));
|
||||
if (groups.size() == 0) return null;
|
||||
return groups.get(0);
|
||||
}
|
||||
|
||||
public static GroupDTO select(Integer domID, String name) {
|
||||
String sql = "SELECT * FROM group WHERE dom_id = ? AND name = ?;";
|
||||
List<GroupDTO> groups = getDTOFromRS(DatabaseManager.instance.query(sql, domID, name));
|
||||
if (groups.size() == 0) return null;
|
||||
return groups.get(0);
|
||||
}
|
||||
|
||||
public static List<GroupDTO> selectAll() {
|
||||
String sql = "SELECT * FROM group;";
|
||||
return getDTOFromRS(DatabaseManager.instance.query(sql));
|
||||
}
|
||||
|
||||
public static List<GroupDTO> selectByDominionId(Integer domID) {
|
||||
String sql = "SELECT * FROM group WHERE dom_id = ?;";
|
||||
return getDTOFromRS(DatabaseManager.instance.query(sql, domID));
|
||||
}
|
||||
|
||||
private GroupDTO(String name, Integer domID) {
|
||||
this.domID.value = domID;
|
||||
this.name.value = name;
|
||||
this.admin.value = false;
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
flags.put(f, f.getDefaultValue());
|
||||
}
|
||||
}
|
||||
|
||||
private GroupDTO(Integer id, Integer domID, String name, Boolean admin, Map<Flag, Boolean> flags) {
|
||||
this.id.value = id;
|
||||
this.domID.value = domID;
|
||||
this.name.value = name;
|
||||
this.admin.value = admin;
|
||||
this.flags.putAll(flags);
|
||||
}
|
||||
|
||||
private static List<GroupDTO> getDTOFromRS(ResultSet rs) {
|
||||
List<GroupDTO> list = new ArrayList<>();
|
||||
if (rs == null) return list;
|
||||
try {
|
||||
while (rs.next()) {
|
||||
Map<Flag, Boolean> flags = new HashMap<>();
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
flags.put(f, rs.getBoolean(f.getFlagName()));
|
||||
}
|
||||
GroupDTO group = new GroupDTO(
|
||||
rs.getInt("id"),
|
||||
rs.getInt("dom_id"),
|
||||
rs.getString("name"),
|
||||
rs.getBoolean("admin"),
|
||||
flags
|
||||
);
|
||||
list.add(group);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("查询权限组失败: ", e, "");
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private GroupDTO doUpdate(UpdateRow updateRow) {
|
||||
updateRow.returningAll(id)
|
||||
.table("group")
|
||||
.where("id = ?", id.value);
|
||||
try (ResultSet rs = updateRow.execute()) {
|
||||
List<GroupDTO> groups = getDTOFromRS(rs);
|
||||
if (groups.size() == 0) return null;
|
||||
Cache.instance.loadGroup((Integer) id.value);
|
||||
return groups.get(0);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("更新权限组失败: ", e, "");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -3,6 +3,7 @@ package cn.lunadeer.dominion.dtos;
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
||||
|
||||
@ -35,7 +36,8 @@ public class PlayerPrivilegeDTO {
|
||||
UUID.fromString(rs.getString("player_uuid")),
|
||||
rs.getBoolean("admin"),
|
||||
rs.getInt("dom_id"),
|
||||
flags
|
||||
flags,
|
||||
rs.getInt("group_id")
|
||||
);
|
||||
players.add(player);
|
||||
}
|
||||
@ -46,14 +48,13 @@ public class PlayerPrivilegeDTO {
|
||||
}
|
||||
|
||||
private PlayerPrivilegeDTO doUpdate(UpdateRow updateRow) {
|
||||
Field id = new Field("id", this.id);
|
||||
updateRow.returningAll(id)
|
||||
.table("player_privilege")
|
||||
.where("id = ?", id.value);
|
||||
try (ResultSet rs = updateRow.execute()) {
|
||||
List<PlayerPrivilegeDTO> players = getDTOFromRS(rs);
|
||||
if (players.size() == 0) return null;
|
||||
Cache.instance.loadPlayerPrivileges(playerUUID);
|
||||
Cache.instance.loadPlayerPrivileges(getPlayerUUID());
|
||||
return players.get(0);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("更新玩家权限失败: ", e, "");
|
||||
@ -62,14 +63,11 @@ public class PlayerPrivilegeDTO {
|
||||
}
|
||||
|
||||
public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) {
|
||||
Field playerUUID = new Field("player_uuid", player.getPlayerUUID().toString());
|
||||
Field admin = new Field("admin", player.getAdmin());
|
||||
Field domID = new Field("dom_id", player.getDomID());
|
||||
InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null))
|
||||
.table("player_privilege")
|
||||
.field(playerUUID)
|
||||
.field(admin)
|
||||
.field(domID);
|
||||
.field(player.playerUUID)
|
||||
.field(player.admin)
|
||||
.field(player.domID);
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f)));
|
||||
}
|
||||
@ -112,25 +110,35 @@ public class PlayerPrivilegeDTO {
|
||||
return query(sql, player.toString());
|
||||
}
|
||||
|
||||
private final Integer id;
|
||||
private final UUID playerUUID;
|
||||
private Boolean admin;
|
||||
private final Integer domID;
|
||||
public static List<PlayerPrivilegeDTO> selectByGroupId(Integer groupId) {
|
||||
String sql = "SELECT * FROM player_privilege WHERE group_id = ?;";
|
||||
return query(sql, groupId);
|
||||
}
|
||||
|
||||
Field id = new Field("id", FieldType.INT);
|
||||
Field playerUUID = new Field("player_uuid", FieldType.STRING);
|
||||
Field admin = new Field("admin", FieldType.BOOLEAN);
|
||||
Field domID = new Field("dom_id", FieldType.INT);
|
||||
Field groupId = new Field("group_id", FieldType.INT);
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
return (Integer) id.value;
|
||||
}
|
||||
|
||||
public UUID getPlayerUUID() {
|
||||
return playerUUID;
|
||||
return UUID.fromString((String) playerUUID.value);
|
||||
}
|
||||
|
||||
public Boolean getAdmin() {
|
||||
return admin;
|
||||
return (Boolean) admin.value;
|
||||
}
|
||||
|
||||
public Integer getDomID() {
|
||||
return domID;
|
||||
return (Integer) domID.value;
|
||||
}
|
||||
|
||||
public Integer getGroupId() {
|
||||
return (Integer) groupId.value;
|
||||
}
|
||||
|
||||
private final Map<Flag, Boolean> flags = new HashMap<>();
|
||||
@ -148,14 +156,19 @@ public class PlayerPrivilegeDTO {
|
||||
}
|
||||
|
||||
public PlayerPrivilegeDTO setAdmin(Boolean admin) {
|
||||
this.admin = admin;
|
||||
Field f = new Field("admin", admin);
|
||||
UpdateRow updateRow = new UpdateRow().field(f);
|
||||
this.admin.value = admin;
|
||||
UpdateRow updateRow = new UpdateRow().field(this.admin);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public PlayerPrivilegeDTO setGroupId(Integer groupId) {
|
||||
this.groupId.value = groupId;
|
||||
UpdateRow updateRow = new UpdateRow().field(this.groupId);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public PlayerPrivilegeDTO applyTemplate(PrivilegeTemplateDTO template) {
|
||||
this.admin = template.getAdmin();
|
||||
this.admin.value = template.getAdmin();
|
||||
UpdateRow updateRow = new UpdateRow().field(new Field("admin", admin));
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
this.flags.put(f, template.getFlagValue(f));
|
||||
@ -164,19 +177,20 @@ public class PlayerPrivilegeDTO {
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map<Flag, Boolean> flags) {
|
||||
this.id = id;
|
||||
this.playerUUID = playerUUID;
|
||||
this.admin = admin;
|
||||
this.domID = domID;
|
||||
private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map<Flag, Boolean> flags, Integer groupId) {
|
||||
this.id.value = id;
|
||||
this.playerUUID.value = playerUUID.toString();
|
||||
this.admin.value = admin;
|
||||
this.domID.value = domID;
|
||||
this.groupId.value = groupId;
|
||||
this.flags.putAll(flags);
|
||||
}
|
||||
|
||||
public PlayerPrivilegeDTO(UUID playerUUID, DominionDTO dom) {
|
||||
this.id = null;
|
||||
this.playerUUID = playerUUID;
|
||||
this.admin = false;
|
||||
this.domID = dom.getId();
|
||||
this.id.value = null;
|
||||
this.playerUUID.value = playerUUID.toString();
|
||||
this.admin.value = false;
|
||||
this.domID.value = dom.getId();
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
this.flags.put(f, dom.getFlagValue(f));
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@ -52,8 +53,18 @@ public class Apis {
|
||||
return true;
|
||||
}
|
||||
if (prev != null) {
|
||||
if (prev.getFlagValue(flag)) {
|
||||
return true;
|
||||
if (prev.getGroupId() != -1) {
|
||||
if (prev.getFlagValue(flag)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
GroupDTO group = Cache.instance.getGroup(prev.getGroupId());
|
||||
if (group == null) {
|
||||
return false;
|
||||
}
|
||||
if (group.getFlagValue(flag)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (dom.getFlagValue(flag)) {
|
||||
|
@ -155,5 +155,28 @@ public class DatabaseTables {
|
||||
// 1.31.6
|
||||
TableColumn dominion_color = new TableColumn("color", FieldType.STRING, false, false, true, false, "'#00BFFF'");
|
||||
new AddColumn(dominion_color).table("dominion").ifNotExists().execute();
|
||||
|
||||
// 1.34.0
|
||||
TableColumn player_privilege_group_id = new TableColumn("group_id", FieldType.INT, false, false, true, false, -1);
|
||||
new AddColumn(player_privilege_group_id).table("player_privilege").ifNotExists().execute();
|
||||
|
||||
TableColumn group_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
||||
TableColumn group_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1);
|
||||
TableColumn group_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'");
|
||||
TableColumn group_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
|
||||
CreateTable.ForeignKey group_dom_id_fk = new CreateTable.ForeignKey(group_dom_id, "dominion", dominion_id, true);
|
||||
CreateTable group = new CreateTable().ifNotExists();
|
||||
group.table("group")
|
||||
.field(group_id)
|
||||
.field(group_dom_id)
|
||||
.field(group_name)
|
||||
.field(group_admin)
|
||||
.foreignKey(group_dom_id_fk)
|
||||
.unique(group_dom_id, group_name);
|
||||
group.execute();
|
||||
for (Flag flag : Flag.getAllPrivilegeFlags()) {
|
||||
TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
|
||||
new AddColumn(column).table("group").ifNotExists().execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,18 @@ public class Apis {
|
||||
return page;
|
||||
}
|
||||
|
||||
public static int getPage(String[] args, int pos) {
|
||||
int page = 1;
|
||||
if (args.length > pos) {
|
||||
try {
|
||||
page = Integer.parseInt(args[pos]);
|
||||
} catch (Exception e) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return page;
|
||||
}
|
||||
|
||||
/**
|
||||
* 尝试从 arg[1] 获取领地名称
|
||||
* 如果没有此参数则会尝试获取玩家当前所在位置
|
||||
|
@ -0,0 +1,75 @@
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||
|
||||
public class DominionGroupList {
|
||||
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = getDominionNameArg_1(player, args);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion group_list <领地名称>");
|
||||
return;
|
||||
}
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
int page = Apis.getPage(args, 2);
|
||||
List<GroupDTO> groups = GroupDTO.selectByDominionId(dominion.getId());
|
||||
ListView view = ListView.create(10, "/dominion group_list " + dominion.getName());
|
||||
view.title("权限组列表");
|
||||
view.navigator(
|
||||
Line.create()
|
||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||
.append("权限组列表")
|
||||
);
|
||||
|
||||
Button create_btn = Button.createGreen("创建权限组")
|
||||
.setHoverText("创建一个新的权限组")
|
||||
.setExecuteCommand("/dominion cui_create_group " + dominion.getName());
|
||||
view.add(new Line().append(create_btn.build()));
|
||||
|
||||
for (GroupDTO group : groups) {
|
||||
Line line = new Line();
|
||||
Button del = Button.createRed("删除")
|
||||
.setHoverText("删除权限组 " + group.getName())
|
||||
.setExecuteCommand("/dominion delete_group " + dominion.getName() + " " + group.getName());
|
||||
Button edit = Button.create("编辑")
|
||||
.setHoverText("编辑权限组 " + group.getName())
|
||||
.setExecuteCommand("/dominion group_manage " + dominion.getName() + " " + group.getName());
|
||||
Button add = Button.createGreen("+")
|
||||
.setHoverText("添加成员到权限组 " + group.getName())
|
||||
.setExecuteCommand("/dominion select_member_add_group " + dominion.getName() + " " + group.getName() + " " + page);
|
||||
line.append(del.build()).append(edit.build()).append(group.getName()).append(add.build());
|
||||
view.add(line);
|
||||
List<PlayerPrivilegeDTO> players = PlayerPrivilegeDTO.selectByGroupId(group.getId());
|
||||
for (PlayerPrivilegeDTO playerPrivilege : players) {
|
||||
PlayerDTO p = PlayerDTO.select(playerPrivilege.getPlayerUUID());
|
||||
if (p == null) continue;
|
||||
Button remove = Button.createRed("移出权限组")
|
||||
.setHoverText("把 " + p.getLastKnownName() + " 移出权限组 " + group.getName())
|
||||
.setExecuteCommand("/dominion group_remove_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + page);
|
||||
Line playerLine = new Line();
|
||||
playerLine.append(remove.build()).append(" | " + p.getLastKnownName());
|
||||
}
|
||||
}
|
||||
view.showOn(player, page);
|
||||
}
|
||||
|
||||
}
|
@ -25,6 +25,7 @@ public class DominionManage {
|
||||
return;
|
||||
}
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
int page = Apis.getPage(args, 2);
|
||||
Line size_info = Line.create()
|
||||
.append(Button.create("详细信息").setExecuteCommand("/dominion info " + dominion.getName()).build())
|
||||
.append("查看领地详细信息");
|
||||
@ -37,6 +38,9 @@ public class DominionManage {
|
||||
Line privilege_list = Line.create()
|
||||
.append(Button.create("成员权限").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build())
|
||||
.append("管理此领地成员的权限");
|
||||
Line group_list = Line.create()
|
||||
.append(Button.create("权限组").setExecuteCommand("/dominion group_list " + dominion.getName()).build())
|
||||
.append("管理此领地的权限组");
|
||||
Line set_tp = Line.create()
|
||||
.append(Button.create("设置传送点").setExecuteCommand("/dominion set_tp_location " + dominion.getName()).build())
|
||||
.append("设置当前位置为此领地传送点");
|
||||
@ -64,6 +68,7 @@ public class DominionManage {
|
||||
.add(env_info)
|
||||
.add(flag_info)
|
||||
.add(privilege_list)
|
||||
.add(group_list)
|
||||
.add(set_tp)
|
||||
.add(rename)
|
||||
.add(join_msg)
|
||||
@ -71,6 +76,6 @@ public class DominionManage {
|
||||
if (Dominion.config.getBlueMap()) {
|
||||
view.add(map_color);
|
||||
}
|
||||
view.showOn(player, 1);
|
||||
view.showOn(player, page);
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,7 @@
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.dtos.*;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
@ -53,9 +51,12 @@ public class DominionPrivilegeList {
|
||||
for (PlayerPrivilegeDTO privilege : privileges) {
|
||||
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
|
||||
if (p_player == null) continue;
|
||||
GroupDTO group = Cache.instance.getGroup(privilege.getGroupId());
|
||||
Line line = Line.create();
|
||||
|
||||
if (privilege.getAdmin()) {
|
||||
if (group != null) {
|
||||
line.append(groupTag);
|
||||
} else if (privilege.getAdmin()) {
|
||||
line.append(adminTag);
|
||||
} else {
|
||||
if (!privilege.getFlagValue(Flag.MOVE)) {
|
||||
@ -65,17 +66,34 @@ public class DominionPrivilegeList {
|
||||
}
|
||||
}
|
||||
|
||||
line.append(Button.createGreen("权限")
|
||||
Button prev = Button.createGreen("权限")
|
||||
.setHoverText("配置成员权限")
|
||||
.setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()).build());
|
||||
if ((!player.getName().equals(p_player.getLastKnownName()) && !privilege.getAdmin()) || dominion.getOwner().equals(player.getUniqueId())) {
|
||||
line.append(Button.createRed("移除")
|
||||
.setHoverText("将此成员移出(变为访客)")
|
||||
.setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b").build());
|
||||
line.append(Button.createGreen("模板")
|
||||
.setHoverText("套用权限模板")
|
||||
.setExecuteCommand("/dominion select_template " + p_player.getLastKnownName() + " " + dominion.getName() + " " + page).build());
|
||||
.setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName());
|
||||
Button remove = Button.createRed("移除")
|
||||
.setHoverText("将此成员移出(变为访客)")
|
||||
.setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b");
|
||||
|
||||
if (!player.getUniqueId().equals(dominion.getOwner())) {
|
||||
boolean disable = false;
|
||||
if (group == null) {
|
||||
if (privilege.getAdmin()) {
|
||||
disable = true;
|
||||
}
|
||||
} else {
|
||||
if (group.getAdmin()) {
|
||||
disable = true;
|
||||
}
|
||||
}
|
||||
if (disable) {
|
||||
prev.setDisabled("你不是领地主人,无法编辑管理员权限");
|
||||
remove.setDisabled("你不是领地主人,无法移除管理员");
|
||||
}
|
||||
}
|
||||
if (group != null) {
|
||||
prev.setDisabled(String.format("此成员属于权限组 %s 无法单独编辑权限", group.getName()));
|
||||
}
|
||||
line.append(remove.build());
|
||||
line.append(prev.build());
|
||||
line.append(p_player.getLastKnownName());
|
||||
view.add(line);
|
||||
}
|
||||
@ -88,4 +106,6 @@ public class DominionPrivilegeList {
|
||||
.hoverEvent(Component.text("这是一个普通成员"));
|
||||
private static final TextComponent banTag = Component.text("[B]", Style.style(TextColor.color(255, 67, 0)))
|
||||
.hoverEvent(Component.text("这是一个黑名单成员"));
|
||||
private static final TextComponent groupTag = Component.text("[G]", Style.style(TextColor.color(0, 185, 153)))
|
||||
.hoverEvent(Component.text("这个成员在一个权限组里"));
|
||||
}
|
||||
|
86
src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java
Normal file
86
src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java
Normal file
@ -0,0 +1,86 @@
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||
|
||||
public class GroupManage {
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 3) {
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地 %s 不存在", args[1]);
|
||||
return;
|
||||
}
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
int page = Apis.getPage(args, 3);
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), args[2]);
|
||||
if (group == null) {
|
||||
Notification.error(sender, "权限组 %s 不存在", args[2]);
|
||||
return;
|
||||
}
|
||||
|
||||
ListView view = ListView.create(10, "/dominion group_manage " + dominion.getName() + " " + group.getName());
|
||||
view.title("权限组 " + group.getName() + " 管理");
|
||||
view.navigator(
|
||||
Line.create()
|
||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||
.append(Button.create("权限组列表").setExecuteCommand("/dominion group_list" + dominion.getName()).build())
|
||||
);
|
||||
Button rename_btn = Button.create("重命名")
|
||||
.setHoverText("重命名权限组 " + group.getName())
|
||||
.setExecuteCommand("/dominion cui_rename_group " + dominion.getName() + " " + group.getName());
|
||||
view.add(Line.create().append(rename_btn.build()));
|
||||
|
||||
if (group.getAdmin()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑")
|
||||
.setExecuteCommand(String.format("/dominion set_group_flag %s %s admin false %s", dominion.getName(), group.getName(), page))
|
||||
.build())
|
||||
.append("管理员"));
|
||||
view.add(createOption(Flag.GLOW, group.getFlagValue(Flag.GLOW), dominion.getName(), group.getName(), page));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☐")
|
||||
.setExecuteCommand(String.format("/dominion set_group_flag %s %s admin true %s", dominion.getName(), group.getName(), page))
|
||||
.build())
|
||||
.append("管理员"));
|
||||
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
||||
view.add(createOption(flag, group.getFlagValue(flag), dominion.getName(), group.getName(), page));
|
||||
}
|
||||
}
|
||||
view.showOn(player, page);
|
||||
}
|
||||
|
||||
private static Line createOption(Flag flag, boolean value, String DominionName, String groupName, int page) {
|
||||
if (value) {
|
||||
return Line.create()
|
||||
.append(Button.createGreen("☑")
|
||||
.setExecuteCommand(String.format("/dominion set_group_flag %s %s %s false %s", DominionName, groupName, flag.getFlagName(), page))
|
||||
.build())
|
||||
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
|
||||
} else {
|
||||
return Line.create()
|
||||
.append(Button.createRed("☐")
|
||||
.setExecuteCommand(String.format("/dominion set_group_flag %s %s %s true %s", DominionName, groupName, flag.getFlagName(), page))
|
||||
.build())
|
||||
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
|
||||
}
|
||||
}
|
||||
}
|
@ -13,8 +13,7 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_2;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.*;
|
||||
|
||||
public class PrivilegeInfo {
|
||||
// /dominion privilege_info <玩家名称> [领地名称] [页码]
|
||||
@ -22,13 +21,7 @@ public class PrivilegeInfo {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = getDominionNameArg_2(player, args);
|
||||
int page = 1;
|
||||
if (args.length == 4) {
|
||||
try {
|
||||
page = Integer.parseInt(args[3]);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
int page = getPage(args, 3);
|
||||
String playerName = args[1];
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_info <玩家名称> [领地名称]");
|
||||
@ -55,6 +48,9 @@ public class PrivilegeInfo {
|
||||
.append(Button.create("成员列表").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build())
|
||||
.append("成员权限")
|
||||
);
|
||||
view.add(Line.create().append(Button.createGreen("套用模板")
|
||||
.setHoverText("选择一个权限模板套用")
|
||||
.setExecuteCommand("/dominion select_template " + playerName + " " + dominion.getName()).build()));
|
||||
if (privilege.getAdmin()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " admin false " + dominion.getName() + " " + page).build())
|
||||
|
55
src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java
Normal file
55
src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java
Normal file
@ -0,0 +1,55 @@
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.*;
|
||||
|
||||
public class SelectMember {
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 3) {
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = getDominionNameArg_1(player, args);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地不存在");
|
||||
return;
|
||||
}
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), args[2]);
|
||||
if (group == null) {
|
||||
Notification.error(sender, "权限组不存在");
|
||||
return;
|
||||
}
|
||||
int backPage = getPage(args, 3);
|
||||
ListView view = ListView.create(10, "/dominion select_member_add_group " + dominion.getName() + " " + group.getName() + " " + backPage);
|
||||
view.title("选择成员");
|
||||
view.navigator(
|
||||
Line.create()
|
||||
.append("添加到权限组 " + group.getName())
|
||||
.append(Button.create("返回").setExecuteCommand("/dominion group_list " + dominion.getName() + " " + backPage).build())
|
||||
);
|
||||
List<PlayerPrivilegeDTO> members = PlayerPrivilegeDTO.selectByGroupId(-1);
|
||||
for (PlayerPrivilegeDTO member : members) {
|
||||
PlayerDTO p = PlayerDTO.select(member.getPlayerUUID());
|
||||
if (p == null) continue;
|
||||
view.add(Line.create()
|
||||
.append(Button.create(p.getLastKnownName())
|
||||
.setExecuteCommand("/dominion group_add_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + backPage)
|
||||
.build()));
|
||||
}
|
||||
}
|
||||
}
|
@ -20,7 +20,6 @@ public class SelectTemplate {
|
||||
|
||||
String playerName = args[1];
|
||||
String dominionName = args[2];
|
||||
String backPage = args[3];
|
||||
|
||||
int page = 1;
|
||||
if (args.length == 5) {
|
||||
@ -32,18 +31,18 @@ public class SelectTemplate {
|
||||
|
||||
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
|
||||
|
||||
ListView view = ListView.create(10, "/dominion select_template " + playerName + " " + dominionName + " " + backPage);
|
||||
ListView view = ListView.create(10, "/dominion select_template " + playerName + " " + dominionName);
|
||||
view.title("选择一个模板");
|
||||
Line sub = Line.create()
|
||||
.append("套用在领地 " + dominionName + " 的成员 " + playerName + " 身上")
|
||||
.append(Button.create("返回").setExecuteCommand("/dominion privilege_list " + dominionName + " " + backPage).build());
|
||||
.append(Button.create("返回").setExecuteCommand("/dominion privilege_info " + playerName + " " + dominionName).build());
|
||||
view.subtitle(sub);
|
||||
|
||||
for (PrivilegeTemplateDTO template : templates) {
|
||||
// /dominion apply_template <玩家名称> <领地名称> <模板名称>
|
||||
view.add(Line.create()
|
||||
.append(Button.create("选择")
|
||||
.setExecuteCommand("/dominion apply_template " + playerName + " " + dominionName + " " + template.getName() + " " + backPage)
|
||||
.setExecuteCommand("/dominion apply_template " + playerName + " " + dominionName + " " + template.getName())
|
||||
.build())
|
||||
.append(Component.text(template.getName())));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user