Compare commits

...

10 Commits

48 changed files with 1850 additions and 641 deletions

View File

@ -6,7 +6,7 @@
<groupId>cn.lunadeer</groupId>
<artifactId>Dominion</artifactId>
<version>1.33.7-beta</version>
<version>1.34.5-beta</version>
<packaging>jar</packaging>
<name>Dominion</name>

View File

@ -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);
});
}
/**
* 获取玩家当前所在领地
* 此方法会先判断缓存中是否有玩家当前所在领地如果没有则遍历所有领地判断玩家所在位置
@ -242,7 +285,16 @@ public class Cache {
}
PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion);
if (privilege != null) {
player.setGlowing(privilege.getFlagValue(Flag.GLOW));
if (privilege.getGroupId() == -1) {
player.setGlowing(privilege.getFlagValue(Flag.GLOW));
} else {
GroupDTO group = getGroup(privilege.getGroupId());
if (group != null) {
player.setGlowing(group.getFlagValue(Flag.GLOW));
} else {
player.setGlowing(dominion.getFlagValue(Flag.GLOW));
}
}
} else {
player.setGlowing(dominion.getFlagValue(Flag.GLOW));
}
@ -270,7 +322,16 @@ public class Cache {
}
PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion);
if (privilege != null) {
player.setAllowFlight(privilege.getFlagValue(Flag.FLY));
if (privilege.getGroupId() == -1) {
player.setAllowFlight(privilege.getFlagValue(Flag.FLY));
} else {
GroupDTO group = getGroup(privilege.getGroupId());
if (group != null) {
player.setAllowFlight(group.getFlagValue(Flag.FLY));
} else {
player.setAllowFlight(dominion.getFlagValue(Flag.FLY));
}
}
} else {
player.setAllowFlight(dominion.getFlagValue(Flag.FLY));
}
@ -302,6 +363,10 @@ public class Cache {
return dominionTree;
}
public GroupDTO getGroup(Integer id) {
return id_groups.get(id);
}
/**
* 获取玩家在指定领地的特权
* 如果玩家不存在特权则返回null
@ -371,6 +436,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 +444,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<>();

View File

@ -4,8 +4,15 @@ import cn.lunadeer.dominion.commands.*;
import cn.lunadeer.dominion.controllers.PlayerController;
import cn.lunadeer.dominion.cuis.*;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.tuis.*;
import cn.lunadeer.dominion.tuis.AllDominion;
import cn.lunadeer.dominion.tuis.Menu;
import cn.lunadeer.dominion.tuis.MigrateList;
import cn.lunadeer.dominion.tuis.SysConfig;
import cn.lunadeer.dominion.tuis.dominion.DominionList;
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting;
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
import cn.lunadeer.dominion.tuis.dominion.manage.SizeInfo;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
@ -20,24 +27,6 @@ import java.util.List;
import static cn.lunadeer.dominion.commands.Helper.*;
public class Commands implements TabExecutor {
/*
创建领地 /dominion create <领地名称>
自动创建领地 /dominion auto_create <领地名称>
创建子领地 /dominion create_sub <子领地名称> [父领地名称]
自动创建子领地 /dominion auto_create_sub <子领地名称> [父领地名称]
扩张领地 /dominion expand [大小] [领地名称]
缩小领地 /dominion contract [大小] [领地名称]
删除领地 /dominion delete <领地名称> [force]
设置领地权限 /dominion set <权限名称> <true/false> [领地名称]
设置玩家权限 /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]
重置玩家权限 /dominion clear_privilege <玩家名称> [领地名称]
创建权限组 /dominion create_group <权限组名称>
删除权限组 /dominion delete_group <权限组名称>
设置权限组权限 /dominion set_group <权限组名称> <权限名称> <true/false>
设置玩家在某个领地归属的权限组 /dominion add_player <玩家名称> <权限组名称> [领地名称]
删除玩家在某个领地归属的权限组 /dominion remove_player <玩家名称> <权限组名称> [领地名称]
*/
/**
* Executes the given command, returning its success.
@ -62,19 +51,19 @@ public class Commands implements TabExecutor {
Menu.show(sender, args);
break;
case "list":
ListDominion.show(sender, args);
DominionList.show(sender, args);
break;
case "help":
cn.lunadeer.dominion.tuis.Apis.printHelp(sender, args);
break;
case "info":
DominionSizeInfo.show(sender, args);
SizeInfo.show(sender, args);
break;
case "manage":
DominionManage.show(sender, args);
break;
case "flag_info":
DominionFlagInfo.show(sender, args);
case "guest_setting":
GuestSetting.show(sender, args);
break;
case "create":
DominionOperate.createDominion(sender, args);
@ -100,24 +89,6 @@ public class Commands implements TabExecutor {
case "set":
DominionFlag.setDominionFlag(sender, args);
break;
case "create_privilege":
PlayerPrivilege.createPlayerPrivilege(sender, args);
break;
case "set_privilege":
PlayerPrivilege.setPlayerPrivilege(sender, args);
break;
case "clear_privilege":
PlayerPrivilege.clearPlayerPrivilege(sender, args);
break;
case "privilege_list":
DominionPrivilegeList.show(sender, args);
break;
case "privilege_info":
PrivilegeInfo.show(sender, args);
break;
case "select_player_create_privilege":
SelectPlayer.show(sender, args);
break;
case "set_enter_msg":
DominionOperate.setEnterMessage(sender, args);
break;
@ -145,8 +116,8 @@ public class Commands implements TabExecutor {
case "export_mca":
Operator.exportMca(sender, args);
break;
case "config":
DominionConfig.show(sender, args);
case "sys_config":
SysConfig.show(sender, args);
break;
case "set_config":
SetConfig.handler(sender, args);
@ -154,27 +125,6 @@ public class Commands implements TabExecutor {
case "all_dominion":
AllDominion.show(sender, args);
break;
case "template_list":
TemplateList.show(sender, args);
break;
case "template_manage":
TemplateManage.show(sender, args);
break;
case "template_delete":
Template.deleteTemplate(sender, args);
break;
case "template_create":
Template.createTemplate(sender, args);
break;
case "template_set_flag":
Template.setTemplateFlag(sender, args);
break;
case "apply_template":
PlayerPrivilege.applyTemplate(sender, args);
break;
case "select_template":
SelectTemplate.show(sender, args);
break;
case "migrate_list":
MigrateList.show(sender, args);
break;
@ -184,8 +134,18 @@ public class Commands implements TabExecutor {
case "set_map_color":
DominionOperate.setMapColor(sender, args);
break;
case "env_info":
DominionEnvInfo.show(sender, args);
case "env_setting":
EnvSetting.show(sender, args);
break;
// ---=== Sub Command ===---
case "member":
Member.handle(sender, args);
break;
case "group":
Group.handle(sender, args);
break;
case "template":
Template.handle(sender, args);
break;
// ---=== CUI ===---
case "cui_rename":
@ -200,8 +160,8 @@ public class Commands implements TabExecutor {
case "cui_create":
CreateDominion.open(sender, args);
break;
case "cui_create_privilege":
CreatePrivilege.open(sender, args);
case "cui_member_add":
MemberAdd.open(sender, args);
break;
case "cui_template_create":
CreateTemplate.open(sender, args);
@ -209,6 +169,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;
}
@ -231,9 +197,8 @@ public class Commands implements TabExecutor {
@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if (args.length == 1) {
return Arrays.asList("menu", "help", "info", "manage", "flag_info", "privilege_list",
return Arrays.asList("menu", "help", "info", "manage", "guest_setting",
"create", "auto_create", "create_sub", "auto_create_sub", "expand", "contract", "delete", "set",
"create_privilege", "set_privilege", "clear_privilege", "list", "privilege_info",
"set_enter_msg",
"set_leave_msg",
"set_tp_location",
@ -243,32 +208,35 @@ public class Commands implements TabExecutor {
"reload_cache",
"reload_config",
"export_mca",
"config",
"apply_template",
"template_list",
"template_manage",
"template_delete",
"template_create",
"template_set_flag",
"sys_config",
"all_dominion",
"set_map_color"
"set_map_color",
"member",
"group",
"template"
);
}
if (args.length > 1 && args[0].equals("member")) {
return Member.handleTab(sender, args);
}
if (args.length > 1 && args[0].equals("group")) {
return Group.handleTab(sender, args);
}
if (args.length > 1 && args[0].equals("template")) {
return Template.handleTab(sender, args);
}
if (args.length == 2) {
switch (args[0]) {
case "help":
case "list":
case "config":
case "template_list":
return Collections.singletonList("页码(可选)");
case "sys_config":
case "create":
case "auto_create":
return Collections.singletonList("输入领地名称");
case "delete":
case "info":
case "manage":
case "flag_info":
case "privilege_list":
case "guest_setting":
case "rename":
case "give":
case "set_tp_location":
@ -277,12 +245,6 @@ public class Commands implements TabExecutor {
return allDominions();
case "set":
return dominionFlags();
case "create_privilege":
case "set_privilege":
case "clear_privilege":
case "privilege_info":
case "apply_template":
return playerNames();
case "expand":
case "contract":
return Collections.singletonList("大小(整数)");
@ -293,12 +255,6 @@ public class Commands implements TabExecutor {
return Collections.singletonList("进入提示语内容");
case "set_leave_msg":
return Collections.singletonList("离开提示语内容");
case "template_manage":
case "template_delete":
case "template_set_flag":
return allTemplates(sender);
case "template_create":
return Collections.singletonList("输入模板名称");
case "set_map_color":
return Collections.singletonList("输入颜色(16进制)");
}
@ -307,48 +263,34 @@ public class Commands implements TabExecutor {
switch (args[0]) {
case "set":
return boolOptions();
case "set_privilege":
case "template_set_flag":
return playerPrivileges();
case "expand":
case "contract":
case "clear_privilege":
case "create_privilege":
case "privilege_info":
case "auto_create_sub":
case "create_sub":
case "set_enter_msg":
case "set_leave_msg":
case "apply_template":
case "set_map_color":
return playerDominions(sender);
case "rename":
return Collections.singletonList("输入新领地名称");
case "give":
return playerNames();
case "template_manage":
return Collections.singletonList("页码(可选)");
}
}
if (args.length == 4) {
switch (args[0]) {
case "set":
return playerDominions(sender);
case "set_privilege":
case "template_set_flag":
return boolOptions();
case "apply_template":
return allTemplates(sender);
}
}
return null;
}
private static List<String> boolOptions() {
public static List<String> boolOptions() {
return Arrays.asList("true", "false");
}
private static List<String> playerNames() {
public static List<String> playerNames() {
List<PlayerDTO> players = PlayerController.allPlayers();
List<String> names = new ArrayList<>();
for (PlayerDTO player : players) {

View File

@ -62,4 +62,8 @@ public class Apis {
return false;
}
public static String CommandParser(String command, Object... args) {
return String.format(command, args);
}
}

View File

@ -3,8 +3,8 @@ package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.FlagsController;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.tuis.DominionEnvInfo;
import cn.lunadeer.dominion.tuis.DominionFlagInfo;
import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting;
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -35,9 +35,9 @@ public class DominionFlag {
newArgs[1] = args[3];
newArgs[2] = args[4];
if (Flag.isDominionOnlyFlag(args[1])) {
DominionEnvInfo.show(sender, newArgs);
EnvSetting.show(sender, newArgs);
} else {
DominionFlagInfo.show(sender, newArgs);
GuestSetting.show(sender, newArgs);
}
} else {

View File

@ -0,0 +1,261 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.GroupController;
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList;
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting;
import cn.lunadeer.dominion.tuis.dominion.manage.group.SelectMember;
import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static cn.lunadeer.dominion.Commands.boolOptions;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.commands.Helper.*;
import static cn.lunadeer.dominion.tuis.Apis.getPage;
public class Group {
/**
* /dominion group create <领地名称> <权限组名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void createGroup(CommandSender sender, String[] args) {
try {
if (args.length < 4) {
Notification.error(sender, "用法: /dominion group create <领地名称> <权限组名称>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2];
String groupName = args[3];
GroupController.createGroup(operator, dominionName, groupName);
GroupList.show(sender, dominionName);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
/**
* /dominion group delete <领地名称> <权限组名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void deleteGroup(CommandSender sender, String[] args) {
try {
if (args.length < 4) {
Notification.error(sender, "用法: /dominion group delete <领地名称> <权限组名称>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2];
String groupName = args[3];
GroupController.deleteGroup(operator, dominionName, groupName);
GroupList.show(sender, dominionName);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
/**
* /dominion group rename <领地名称> <权限组旧名称> <新名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void renameGroup(CommandSender sender, String[] args) {
try {
if (args.length < 5) {
Notification.error(sender, "用法: /dominion group rename <领地名称> <权限组旧名称> <新名称>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2];
String oldGroupName = args[3];
String newGroupName = args[4];
GroupController.renameGroup(operator, dominionName, oldGroupName, newGroupName);
GroupSetting.show(sender, dominionName, newGroupName);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
/**
* /dominion group set_flag <领地名称> <权限组名称> <权限名称> <true|false>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void setGroupFlag(CommandSender sender, String[] args) {
try {
if (args.length < 6) {
Notification.error(sender, "用法: /dominion group set_flag <领地名称> <权限组名称> <权限名称> <true|false>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2];
String groupName = args[3];
String flag = args[4];
boolean value = Boolean.parseBoolean(args[5]);
int page = getPage(args, 6);
GroupController.setGroupFlag(operator, dominionName, groupName, flag, value);
GroupSetting.show(sender, dominionName, groupName, page);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
/**
* /dominion group add_member <领地名称> <权限组名称> <玩家名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void addMember(CommandSender sender, String[] args) {
try {
if (args.length < 5) {
Notification.error(sender, "用法: /dominion group add_member <领地名称> <权限组名称> <玩家名称>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2];
String groupName = args[3];
String playerName = args[4];
int page = getPage(args, 5);
GroupController.addMember(operator, dominionName, groupName, playerName);
GroupList.show(sender, dominionName, page);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
/**
* /dominion group remove_member <领地名称> <权限组名称> <玩家名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void removeMember(CommandSender sender, String[] args) {
try {
if (args.length < 5) {
Notification.error(sender, "用法: /dominion group remove_member <领地名称> <权限组名称> <玩家名称>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2];
String groupName = args[3];
String playerName = args[4];
int page = getPage(args, 5);
GroupController.removeMember(operator, dominionName, groupName, playerName);
GroupList.show(sender, dominionName, page);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
switch (args[1]) {
case "create":
createGroup(sender, args);
break;
case "delete":
deleteGroup(sender, args);
break;
case "rename":
renameGroup(sender, args);
break;
case "set_flag":
setGroupFlag(sender, args);
break;
case "add_member":
addMember(sender, args);
break;
case "remove_member":
removeMember(sender, args);
break;
case "select_member":
SelectMember.show(sender, args);
break;
case "setting":
GroupSetting.show(sender, args);
break;
case "list":
GroupList.show(sender, args);
break;
}
}
public static @Nullable List<String> handleTab(@NotNull CommandSender sender, @NotNull String[] args) {
if (args.length == 2) {
return Arrays.asList("create", "delete", "rename", "set_flag", "add_member", "remove_member",
"select_member", "list");
}
if (args.length == 3) {
switch (args[1]) {
case "create":
case "delete":
case "rename":
case "set_flag":
case "add_member":
case "remove_member":
case "select_member":
case "setting":
case "list":
return playerDominions(sender);
}
}
if (args.length == 4) {
switch (args[1]) {
case "create":
return Collections.singletonList("新权限组名称");
case "delete":
case "rename":
case "set_flag":
case "add_member":
case "remove_member":
case "select_member":
case "setting":
return dominionGroups(args[2]);
}
}
if (args.length == 5) {
switch (args[1]) {
case "rename":
return Collections.singletonList("权限组新名称");
case "set_flag":
return playerPrivileges();
case "remove_member":
return groupPlayers(args[2], args[3]);
}
}
if (args.length == 6) {
switch (args[1]) {
case "set_flag":
return boolOptions();
}
}
return null;
}
}

View File

@ -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);

View File

@ -0,0 +1,210 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.MemberController;
import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList;
import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberSetting;
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer;
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectTemplate;
import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static cn.lunadeer.dominion.Commands.boolOptions;
import static cn.lunadeer.dominion.Commands.playerNames;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.commands.Helper.*;
public class Member {
/**
* 创建玩家特权
* /dominion member add <领地名称> <玩家名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void member_add(CommandSender sender, String[] args) {
try {
if (args.length < 4) {
Notification.error(sender, "用法: /dominion member add <领地名称> <玩家名称>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2];
String playerName = args[3];
MemberController.memberAdd(operator, dominionName, playerName);
MemberList.show(sender, dominionName);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
/**
* 设置玩家权限
* /dominion member set_flag <领地名称> <玩家名称> <权限名称> <true/false>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void member_set_flag(CommandSender sender, String[] args) {
try {
if (args.length < 6) {
Notification.error(sender, "用法: /dominion member set_flag <领地名称> <玩家名称> <权限名称> <true/false>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2];
String playerName = args[3];
String flagName = args[4];
boolean flagValue = Boolean.parseBoolean(args[5]);
Integer page = args.length == 7 ? Integer.parseInt(args[6]) : 1;
MemberController.setMemberFlag(operator, dominionName, playerName, flagName, flagValue);
MemberSetting.show(sender, dominionName, playerName, page);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
/**
* 重置玩家权限
* /dominion member remove <领地名称> <玩家名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void member_remove(CommandSender sender, String[] args) {
try {
if (args.length < 4) {
Notification.error(sender, "用法: /dominion member remove <领地名称> <玩家名称>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2];
String playerName = args[3];
MemberController.memberRemove(operator, dominionName, playerName);
MemberList.show(sender, dominionName);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
/**
* 应用权限模板
* /dominion member apply_template <领地名称> <玩家名称> <模板名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void member_apply_template(CommandSender sender, String[] args) {
try {
if (args.length < 5) {
Notification.error(sender, "用法: /dominion member apply_template <领地名称> <玩家名称> <模板名称>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2];
String playerName = args[3];
String templateName = args[4];
MemberController.applyTemplate(operator, dominionName, playerName, templateName);
MemberSetting.show(sender, dominionName, playerName);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
switch (args[1]) {
case "add":
Member.member_add(sender, args);
break;
case "set_flag":
Member.member_set_flag(sender, args);
break;
case "remove":
Member.member_remove(sender, args);
break;
case "apply_template":
Member.member_apply_template(sender, args);
break;
case "list":
MemberList.show(sender, args);
break;
case "setting":
MemberSetting.show(sender, args);
break;
case "select_player":
SelectPlayer.show(sender, args);
break;
case "select_template":
SelectTemplate.show(sender, args);
break;
}
}
public static @Nullable List<String> handleTab(@NotNull CommandSender sender, @NotNull String[] args) {
if (args.length == 2) {
return Arrays.asList("add", "set_flag", "remove", "apply_template", "list", "setting", "select_player", "select_template");
}
if (args.length == 3) {
switch (args[1]) {
case "add":
case "remove":
case "list":
case "setting":
case "set_flag":
case "apply_template":
case "select_player":
case "select_template":
return playerDominions(sender);
}
}
if (args.length == 4) {
switch (args[1]) {
case "add":
case "remove":
case "set_flag":
case "apply_template":
case "setting":
case "select_template":
case "select_player":
return playerNames();
case "list":
return Collections.singletonList("页码(可选)");
}
}
if (args.length == 5) {
switch (args[1]) {
case "set_flag":
return playerPrivileges();
case "apply_template":
return allTemplates(sender);
case "setting":
case "select_template":
return Collections.singletonList("页码(可选)");
}
}
if (args.length == 6) {
switch (args[1]) {
case "set_flag":
return boolOptions();
}
}
return null;
}
}

View File

@ -31,6 +31,11 @@ public class Operator {
Cache.instance.loadPlayerPrivileges();
Notification.info(sender, "玩家权限缓存已重新加载");
});
Scheduler.runTaskAsync(() -> {
Notification.info(sender, "正在从数据库重新加载权限组缓存...");
Cache.instance.loadGroup();
Notification.info(sender, "权限组缓存已重新加载");
});
}
public static void exportMca(CommandSender sender, String[] args) {

View File

@ -1,128 +0,0 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.PrivilegeController;
import cn.lunadeer.dominion.tuis.DominionPrivilegeList;
import cn.lunadeer.dominion.tuis.PrivilegeInfo;
import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.controllers.PrivilegeController.*;
public class PlayerPrivilege {
/**
* 创建玩家特权
* /dominion create_privilege <玩家名称> [领地名称]
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void createPlayerPrivilege(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length != 2 && args.length != 3 && args.length != 4) {
Notification.error(sender, "用法: /dominion create_privilege <玩家名称> [领地名称]");
return;
}
if (args.length == 2) {
createPrivilege(operator, args[1]);
} else {
createPrivilege(operator, args[1], args[2]);
}
if (args.length == 4) {
String[] newArgs = new String[2];
newArgs[0] = "privilege_list";
newArgs[1] = args[2];
DominionPrivilegeList.show(sender, newArgs);
}
}
/**
* 设置玩家权限
* /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void setPlayerPrivilege(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length == 4) {
setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]));
} else if (args.length == 5) {
setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]), args[4]);
} else if (args.length == 6) {
setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]), args[4]);
String[] newArgs = new String[4];
newArgs[0] = "privilege_info";
newArgs[1] = args[1];
newArgs[2] = args[4];
newArgs[3] = args[5];
PrivilegeInfo.show(sender, newArgs);
} else {
Notification.error(sender, "用法: /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]");
}
}
/**
* 重置玩家权限
* /dominion clear_privilege <玩家名称> [领地名称]
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void clearPlayerPrivilege(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length != 2 && args.length != 3 && args.length != 4) {
Notification.error(sender, "用法: /dominion clear_privilege <玩家名称> [领地名称]");
return;
}
if (args.length == 2) {
clearPrivilege(operator, args[1]);
} else {
clearPrivilege(operator, args[1], args[2]);
}
if (args.length == 4) {
String[] newArgs = new String[3];
newArgs[0] = "privilege_list";
newArgs[1] = args[2];
DominionPrivilegeList.show(sender, newArgs);
}
}
/**
* 应用权限模板
* /dominion apply_template <玩家名称> <领地名称> <模板名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void applyTemplate(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length < 4) {
Notification.error(sender, "用法: /dominion apply_template <玩家名称> <领地名称> <模板名称>");
return;
}
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String playerName = args[1];
String dominionName = args[2];
String templateName = args[3];
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];
DominionPrivilegeList.show(sender, newArgs);
}
}
}

View File

@ -1,7 +1,7 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.tuis.DominionConfig;
import cn.lunadeer.dominion.tuis.SysConfig;
import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender;
@ -81,7 +81,7 @@ public class SetConfig {
String[] newArgs = new String[2];
newArgs[0] = "config";
newArgs[1] = String.valueOf(page);
DominionConfig.show(sender, newArgs);
SysConfig.show(sender, newArgs);
}
}

View File

@ -2,98 +2,150 @@ package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.TemplateController;
import cn.lunadeer.dominion.tuis.TemplateList;
import cn.lunadeer.dominion.tuis.TemplateManage;
import cn.lunadeer.dominion.tuis.template.TemplateList;
import cn.lunadeer.dominion.tuis.template.TemplateSetting;
import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static cn.lunadeer.dominion.Commands.boolOptions;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.commands.Helper.allTemplates;
import static cn.lunadeer.dominion.commands.Helper.playerPrivileges;
import static cn.lunadeer.dominion.tuis.Apis.getPage;
public class Template {
/**
* 删除权限模板
* /dominion template_delete <模板名称> [页码]
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void deleteTemplate(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length < 2) {
Notification.error(sender, "用法: /dominion template_delete <模板名称>");
return;
}
TemplateController.deleteTemplate(operator, args[1]);
String[] newArgs = new String[2];
newArgs[0] = "template_list";
if (args.length == 3) {
newArgs[1] = args[2];
} else {
newArgs[1] = "1";
}
TemplateList.show(sender, newArgs);
}
/**
* 创建权限模板
* /dominion template_create <模板名称> [页码]
* /dominion template create <模板名称> [页码]
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void createTemplate(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length < 2) {
Notification.error(sender, "用法: /dominion template_create <模板名称>");
return;
try {
if (args.length < 3) {
Notification.error(sender, "用法: /dominion template create <模板名称>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
TemplateController.createTemplate(operator, args[2]);
TemplateList.show(sender);
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
}
/**
* 删除权限模板
* /dominion template delete <模板名称> [页码]
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void deleteTemplate(CommandSender sender, String[] args) {
try {
if (args.length < 3) {
Notification.error(sender, "用法: /dominion template delete <模板名称>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
TemplateController.deleteTemplate(operator, args[2]);
TemplateList.show(sender, getPage(args, 3));
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
TemplateController.createTemplate(operator, args[1]);
String[] newArgs = new String[2];
newArgs[0] = "template_list";
newArgs[1] = "1";
TemplateList.show(sender, newArgs);
}
/**
* 编辑模板
* /dominion template_set_flag <模板名称> <权限名称> <true/false> [页码]
* /dominion template set_flag <模板名称> <权限名称> <true/false> [页码]
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void setTemplateFlag(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length < 4) {
Notification.error(sender, "用法: /dominion template_set_flag <模板名称> <权限名称> <true/false>");
return;
try {
if (args.length < 5) {
Notification.error(sender, "用法: /dominion template set_flag <模板名称> <权限名称> <true/false>");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String templateName = args[2];
String flagName = args[3];
boolean value = Boolean.parseBoolean(args[4]);
TemplateController.setTemplateFlag(operator, templateName, flagName, value);
TemplateSetting.show(sender, templateName, getPage(args, 5));
} catch (Exception e) {
Notification.error(sender, e.getMessage());
}
boolean value;
if (args[3].equalsIgnoreCase("true")) {
value = true;
} else if (args[3].equalsIgnoreCase("false")) {
value = false;
} else {
Notification.error(sender, "权限值必须是true或false");
return;
}
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
switch (args[1]) {
case "list":
TemplateList.show(sender, args);
break;
case "setting":
TemplateSetting.show(sender, args);
break;
case "delete":
Template.deleteTemplate(sender, args);
break;
case "create":
Template.createTemplate(sender, args);
break;
case "set_flag":
Template.setTemplateFlag(sender, args);
break;
}
}
public static @Nullable List<String> handleTab(@NotNull CommandSender sender, @NotNull String[] args) {
if (args.length == 2) {
return Arrays.asList("list", "setting", "delete", "create", "set_flag");
}
if (args.length == 3) {
switch (args[1]) {
case "create":
return Collections.singletonList("输入模板名称");
case "delete":
case "set_flag":
case "setting":
return allTemplates(sender);
case "list":
return Collections.singletonList("页码(可选)");
}
}
if (args.length == 4) {
switch (args[1]) {
case "set_flag":
return playerPrivileges();
case "setting":
return Collections.singletonList("页码(可选)");
}
}
TemplateController.setTemplateFlag(operator, args[1], args[2], value);
String[] newArgs = new String[3];
newArgs[0] = "template_manage";
newArgs[1] = args[1];
if (args.length == 5) {
newArgs[2] = args[4];
} else {
newArgs[2] = "1";
switch (args[1]) {
case "set_flag":
return boolOptions();
}
}
TemplateManage.show(sender, newArgs);
return null;
}
}

View File

@ -0,0 +1,222 @@
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);
if (groupName.contains(" ")) {
operator.setResponse(FAIL.addMessage("权限组名称不能包含空格"));
return;
}
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);
if (newName.contains(" ")) {
operator.setResponse(FAIL.addMessage("权限组名称不能包含空格"));
return;
}
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);
}
}

View File

@ -1,30 +1,11 @@
package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.dtos.*;
import cn.lunadeer.minecraftpluginutils.XLogger;
import java.util.UUID;
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
import static cn.lunadeer.dominion.controllers.Apis.notOwner;
public class PrivilegeController {
/**
* 清空玩家成员权限
*
* @param operator 操作者
* @param player_name 玩家
*/
public static void clearPrivilege(AbstractOperator operator, String player_name) {
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
if (dominion == null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion clear_privilege <玩家名称> <领地名称>"));
return;
}
clearPrivilege(operator, player_name, dominion.getName());
}
public class MemberController {
/**
* 清空玩家成员权限
@ -33,8 +14,9 @@ public class PrivilegeController {
* @param player_name 玩家
* @param dominionName 领地名称
*/
public static void clearPrivilege(AbstractOperator operator, String player_name, String dominionName) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "清空玩家 %s 在领地 %s 的权限失败", player_name, dominionName);
public static void memberRemove(AbstractOperator operator, String dominionName, String player_name) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "将玩家 %s 从领地 %s 移除失败", player_name, dominionName);
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "将玩家 %s 从领地 %s 移除成功", player_name, dominionName);
DominionDTO dominion = DominionDTO.select(dominionName);
if (dominion == null) {
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
@ -56,24 +38,7 @@ public class PrivilegeController {
return;
}
PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId());
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "清空玩家 %s 在领地 %s 的权限成功", player_name, dominionName));
}
/**
* 设置玩家成员权限
*
* @param operator 操作者
* @param player_name 玩家
* @param flag 权限名称
* @param value 权限值
*/
public static void setPrivilege(AbstractOperator operator, String player_name, String flag, boolean value) {
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
if (dominion == null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]"));
return;
}
setPrivilege(operator, player_name, flag, value, dominion.getName());
operator.setResponse(SUCCESS);
}
/**
@ -85,8 +50,9 @@ public class PrivilegeController {
* @param value 权限值
* @param dominionName 领地名称
*/
public static void setPrivilege(AbstractOperator operator, String player_name, String flag, boolean value, String dominionName) {
public static void setMemberFlag(AbstractOperator operator, String dominionName, String player_name, String flag, boolean value) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 失败", player_name, dominionName, flag, value);
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 成功", player_name, dominionName, flag, value);
DominionDTO dominion = DominionDTO.select(dominionName);
if (dominion == null) {
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
@ -100,8 +66,8 @@ public class PrivilegeController {
}
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
if (privilege == null) {
privilege = createPlayerPrivilege(operator, player.getUuid(), dominion);
if (privilege == null) return;
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
return;
}
if ((flag.equals("admin") || privilege.getAdmin()) && notOwner(operator, dominion)) {
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他玩家管理员的权限", dominionName));
@ -121,53 +87,29 @@ public class PrivilegeController {
}
privilege.setFlagValue(f, value);
}
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 成功", player_name, dominionName, flag, value));
operator.setResponse(SUCCESS);
}
public static void createPrivilege(AbstractOperator operator, String player_name) {
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
if (dominion == null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion create_privilege <玩家名称> <领地名称>"));
return;
}
createPrivilege(operator, player_name, dominion.getName());
}
public static void createPrivilege(AbstractOperator operator, String player_name, String dominionName) {
public static void memberAdd(AbstractOperator operator, String dominionName, String player_name) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "将玩家 %s 添加到领地成员 %s 失败", player_name, dominionName);
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "将玩家 %s 添加到领地成员 %s 成功", player_name, dominionName);
DominionDTO dominion = DominionDTO.select(dominionName);
if (dominion == null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在,无法创建成员权限", dominionName));
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
return;
}
if (noAuthToChangeFlags(operator, dominion)) return;
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
if (player == null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "玩家 %s 不存在或没有登录过", player_name));
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
return;
}
if (createPlayerPrivilege(operator, player.getUuid(), dominion) != null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建玩家 %s 在领地 %s 的成员权限成功", player_name, dominionName));
}
}
private static PlayerPrivilegeDTO createPlayerPrivilege(AbstractOperator operator, UUID player, DominionDTO dom) {
XLogger.debug("operator: " + operator.getUniqueId() + " player: " + player);
if (operator.getUniqueId().equals(player)) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不能给自己设置成员权限"));
return null;
}
PlayerDTO playerDTO = PlayerDTO.select(player);
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
if (privilege != null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建玩家成员权限失败,玩家 %s 已经是领地 %s 的成员", playerDTO.getLastKnownName(), dom.getName()));
return null;
}
privilege = PlayerPrivilegeDTO.insert(new PlayerPrivilegeDTO(player, dom));
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.insert(new PlayerPrivilegeDTO(player.getUuid(), dominion));
if (privilege == null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建玩家成员权限失败,请联系管理员"));
return null;
operator.setResponse(FAIL);
} else {
operator.setResponse(SUCCESS);
}
return privilege;
}
public static void applyTemplate(AbstractOperator operator, String dominionName, String playerName, String templateName) {

View File

@ -10,10 +10,14 @@ public class TemplateController {
public static void createTemplate(AbstractOperator operator, String templateName) {
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建成功");
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建失败");
if (templateName.contains(" ")) {
operator.setResponse(FAIL.addMessage("模板名称不能包含空格"));
return;
}
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(operator.getUniqueId());
for (PrivilegeTemplateDTO template : templates) {
if (template.getName().equals(templateName)) {
operator.setResponse(FAIL.addMessage("已经存在名为" + templateName + "的权限模板"));
operator.setResponse(FAIL.addMessage("已经存在名为 %s 的权限模板", templateName));
return;
}
}
@ -22,7 +26,7 @@ public class TemplateController {
operator.setResponse(FAIL.addMessage("可能是数据库错误,请联系管理员"));
return;
}
operator.setResponse(SUCCESS.addMessage("成功创建名为" + templateName + "的权限模板"));
operator.setResponse(SUCCESS.addMessage("成功创建名为 %s 的权限模板", templateName));
}
public static void deleteTemplate(AbstractOperator operator, String templateName) {

View File

@ -4,7 +4,7 @@ import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.controllers.AbstractOperator;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.tuis.DominionManage;
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.XLogger;
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;

View File

@ -0,0 +1,50 @@
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.dominion.manage.group.GroupList;
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);
GroupList.show(sender, dominionName);
}
}
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 group create <领地名称> <权限组名称>");
view.open(player);
}
}

View File

@ -2,7 +2,7 @@ package cn.lunadeer.dominion.cuis;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.TemplateController;
import cn.lunadeer.dominion.tuis.TemplateList;
import cn.lunadeer.dominion.tuis.template.TemplateList;
import cn.lunadeer.minecraftpluginutils.XLogger;
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
import org.bukkit.command.CommandSender;
@ -23,10 +23,8 @@ public class CreateTemplate {
public void handleData(String input) {
XLogger.debug("createTemplateCB.run: %s", input);
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
operator.getResponse().thenAccept(result -> {
TemplateList.show(sender, new String[]{"template_list"});
});
TemplateController.createTemplate(operator, input);
TemplateList.show(sender);
}
}
@ -35,7 +33,7 @@ public class CreateTemplate {
if (player == null) return;
CuiTextInput.InputCallback createTemplateCB = new createTemplateCB(player);
CuiTextInput view = CuiTextInput.create(createTemplateCB).setText("未命名模板").title("输入模板名称");
view.setSuggestCommand("/dominion template_create <模板名称>");
view.setSuggestCommand("/dominion template create <模板名称>");
view.open(player);
}

View File

@ -3,7 +3,7 @@ package cn.lunadeer.dominion.cuis;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.tuis.DominionManage;
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.XLogger;
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;

View File

@ -3,7 +3,7 @@ package cn.lunadeer.dominion.cuis;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.tuis.DominionManage;
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.XLogger;
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;

View File

@ -2,10 +2,10 @@ package cn.lunadeer.dominion.cuis;
import cn.lunadeer.dominion.controllers.AbstractOperator;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.PrivilegeController;
import cn.lunadeer.dominion.controllers.MemberController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.tuis.DominionPrivilegeList;
import cn.lunadeer.dominion.tuis.SelectPlayer;
import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList;
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer;
import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.XLogger;
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
@ -16,13 +16,13 @@ import java.util.Objects;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
public class CreatePrivilege {
public class MemberAdd {
private static class createPrivilegeCB implements CuiTextInput.InputCallback {
private static class memberAddCB implements CuiTextInput.InputCallback {
private final Player sender;
private final String dominionName;
public createPrivilegeCB(Player sender, String dominionName) {
public memberAddCB(Player sender, String dominionName) {
this.sender = sender;
this.dominionName = dominionName;
}
@ -32,13 +32,13 @@ public class CreatePrivilege {
XLogger.debug("createPrivilegeCB.run: %s", input);
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
operator.getResponse().thenAccept(result -> {
if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)){
DominionPrivilegeList.show(sender, new String[]{"privilege_list", dominionName});
if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)) {
MemberList.show(sender, dominionName);
} else {
SelectPlayer.show(sender, new String[]{"select_player_create_privilege", dominionName});
SelectPlayer.show(sender, dominionName, 1);
}
});
PrivilegeController.createPrivilege(operator, input, dominionName);
MemberController.memberAdd(operator, dominionName, input);
}
}
@ -50,9 +50,9 @@ public class CreatePrivilege {
Notification.error(sender, "领地不存在");
return;
}
CuiTextInput.InputCallback createPrivilegeCB = new createPrivilegeCB(player, dominion.getName());
CuiTextInput.InputCallback createPrivilegeCB = new memberAddCB(player, dominion.getName());
CuiTextInput view = CuiTextInput.create(createPrivilegeCB).setText("Steve").title("输入玩家名称以添加为成员");
view.setSuggestCommand("/dominion create_privilege <玩家名称> [领地名称]");
view.setSuggestCommand("/dominion member add <领地名称> <玩家名称>");
view.open(player);
}

View File

@ -2,7 +2,7 @@ package cn.lunadeer.dominion.cuis;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.tuis.DominionManage;
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
import cn.lunadeer.minecraftpluginutils.XLogger;
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
import org.bukkit.command.CommandSender;

View File

@ -0,0 +1,52 @@
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.dominion.manage.group.GroupSetting;
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);
GroupSetting.show(sender, dominionName, input);
}
}
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 group rename <领地名称> <权限组旧名称> <新名称>");
view.open(player);
}
}

View File

@ -3,7 +3,7 @@ package cn.lunadeer.dominion.cuis;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.tuis.DominionManage;
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.XLogger;
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;

View File

@ -0,0 +1,180 @@
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("dominion_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;
Cache.instance.loadGroup(groups.get(0).getId());
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 dominion_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 dominion_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 dominion_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 dominion_group;";
return getDTOFromRS(DatabaseManager.instance.query(sql));
}
public static List<GroupDTO> selectByDominionId(Integer domID) {
String sql = "SELECT * FROM dominion_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("dominion_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;
}
}
}

View File

@ -4,7 +4,6 @@ import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
import cn.lunadeer.minecraftpluginutils.databse.Field;
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
import cn.lunadeer.dominion.Dominion;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;

View File

@ -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,15 +156,20 @@ 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();
UpdateRow updateRow = new UpdateRow().field(new Field("admin", admin));
this.admin.value = template.getAdmin();
UpdateRow updateRow = new UpdateRow().field(admin);
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
this.flags.put(f, template.getFlagValue(f));
updateRow.field(new Field(f.getFlagName(), 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));
}

View File

@ -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)) {

View File

@ -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("dominion_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("dominion_group").ifNotExists().execute();
}
}
}

View File

@ -13,7 +13,7 @@ import java.util.List;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.tuis.Apis.getPage;
import static cn.lunadeer.dominion.tuis.Apis.notOp;
import static cn.lunadeer.dominion.tuis.ListDominion.BuildTreeLines;
import static cn.lunadeer.dominion.tuis.dominion.DominionList.BuildTreeLines;
public class AllDominion {
@ -21,7 +21,7 @@ public class AllDominion {
Player player = playerOnly(sender);
if (player == null) return;
if (notOp(player)) return;
int page = getPage(args);
int page = getPage(args, 1);
List<DominionNode> allDominions = Cache.instance.getAllDominionTree();

View File

@ -14,11 +14,11 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly;
public class Apis {
public static int getPage(String[] args) {
public static int getPage(String[] args, int pos) {
int page = 1;
if (args.length == 2) {
if (args.length > pos) {
try {
page = Integer.parseInt(args[1]);
page = Integer.parseInt(args[pos]);
} catch (Exception e) {
return 1;
}
@ -42,22 +42,6 @@ public class Apis {
}
}
/**
* 尝试从 arg[2] 获取领地名称
* 如果没有此参数则会尝试获取玩家当前所在位置
*
* @param player 玩家
* @param args 参数
* @return 领地信息
*/
public static DominionDTO getDominionNameArg_2(Player player, String[] args) {
if (args.length >= 3) {
return DominionDTO.select(args[2]);
} else {
return Cache.instance.getPlayerCurrentDominion(player);
}
}
public static boolean noAuthToManage(Player player, DominionDTO dominion) {
if (player.isOp()) return false;
if (!dominion.getOwner().equals(player.getUniqueId())) {
@ -81,11 +65,11 @@ public class Apis {
public static void printHelp(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
int page = getPage(args);
int page = getPage(args, 1);
ListView view = ListView.create(10, "/dominion help");
view.title("领地插件命令帮助 <>表示必填参数 []表示可选参数")
.add(Line.create().append("打开交互菜单").append(Button.create("/dominion menu").setExecuteCommand("/dominion menu").build()))
.add(Line.create().append("查看帮助").append(Button.create("/dominion help [页码]").setExecuteCommand("/dominion help 1").build()))
.add(Line.create().append("打开交互菜单").append("/dominion menu"))
.add(Line.create().append("查看帮助").append("/dominion help [页码]"))
.add(Line.create().append("创建领地").append("/dominion create <领地名称>"))
.add(Line.create().append("自动创建领地").append("/dominion auto_create <领地名称>"))
.add(Line.create().append("创建子领地").append("/dominion create_sub <子领地名称> [父领地名称]"))
@ -104,18 +88,6 @@ public class Apis {
.add(Line.create().append("---[管理员指令]---"))
.add(Line.create().append("刷新缓存").append(Button.create("/dominion reload_cache").setExecuteCommand("/dominion reload_cache").build()))
.add(Line.create().append("重载配置").append(Button.create("/dominion reload_config").setExecuteCommand("/dominion reload_config").build()))
// 以下指令主要被用于 ui 触发
.add(Line.create().append("---[以下主要用于UI触发]---"))
.add(Line.create().append("列出所有领地").append(Button.create("/dominion list [页码]").setExecuteCommand("/dominion list").build()))
.add(Line.create().append("查看领地信息").append(Button.create("/dominion info [领地名称]").setExecuteCommand("/dominion info").build()))
.add(Line.create().append("查看领地权限信息").append(Button.create("/dominion flag_info <领地名称> [页码]").setExecuteCommand("/dominion flag_info").build()))
.add(Line.create().append("设置领地权限").append("/dominion set <权限名称> <true/false> [领地名称]"))
.add(Line.create().append("创建玩家特权").append("/dominion create_privilege <玩家名称> [领地名称]"))
.add(Line.create().append("设置玩家特权").append("/dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]"))
.add(Line.create().append("重置玩家特权").append("/dominion clear_privilege <玩家名称> [领地名称]"))
.add(Line.create().append("查看领地玩家特权列表").append("/dominion privilege_list [领地名称] [页码]"))
.add(Line.create().append("查看玩家特权信息").append("/dominion privilege_info <玩家名称> [领地名称] [页码]"))
.add(Line.create().append("系统配置").append(Button.create("/dominion config [页码]").setExecuteCommand("/dominion config").build()))
.showOn(player, page);
}

View File

@ -31,7 +31,7 @@ public class Menu {
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
.append("查看我的领地");
Line template = Line.create()
.append(Button.create("模板列表").setExecuteCommand("/dominion template_list").build())
.append(Button.create("模板列表").setExecuteCommand("/dominion template list").build())
.append("成员权限模板列表");
Line help = Line.create()
.append(Button.create("指令帮助").setExecuteCommand("/dominion help").build())

View File

@ -31,13 +31,7 @@ public class MigrateList {
return;
}
int page = 1;
if (args.length == 2) {
try {
page = Integer.parseInt(args[1]);
} catch (Exception ignored) {
}
}
int page = Apis.getPage(args, 1);
ListView view = ListView.create(10, "/dominion migrate_list");

View File

@ -15,13 +15,13 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.tuis.Apis.getPage;
import static cn.lunadeer.dominion.tuis.Apis.notOp;
public class DominionConfig {
public class SysConfig {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (notOp(player)) return;
int page = getPage(args);
ListView view = ListView.create(10, "/dominion config");
int page = getPage(args, 1);
ListView view = ListView.create(10, "/dominion sys_config");
view.title("系统配置");
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("系统配置"));

View File

@ -1,4 +1,4 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.dominion;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.DominionNode;
@ -18,11 +18,11 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.commands.Helper.playerAdminDominions;
import static cn.lunadeer.dominion.tuis.Apis.getPage;
public class ListDominion {
public class DominionList {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
int page = getPage(args);
int page = getPage(args, 1);
ListView view = ListView.create(10, "/dominion list");
view.title("我的领地列表");

View File

@ -1,4 +1,4 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.dominion;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
@ -12,8 +12,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_1;
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
import static cn.lunadeer.dominion.tuis.Apis.*;
public class DominionManage {
public static void show(CommandSender sender, String[] args) {
@ -25,18 +24,22 @@ public class DominionManage {
return;
}
if (noAuthToManage(player, dominion)) return;
int page = getPage(args, 2);
Line size_info = Line.create()
.append(Button.create("详细信息").setExecuteCommand("/dominion info " + dominion.getName()).build())
.append("查看领地详细信息");
Line env_info = Line.create()
.append(Button.create("环境设置").setExecuteCommand("/dominion env_info " + dominion.getName()).build())
.append(Button.create("环境设置").setExecuteCommand("/dominion env_setting " + dominion.getName()).build())
.append("设置领地内的一些非玩家相关效果");
Line flag_info = Line.create()
.append(Button.create("访客权限").setExecuteCommand("/dominion flag_info " + dominion.getName()).build())
.append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build())
.append("访客在此领地的权限");
Line privilege_list = Line.create()
.append(Button.create("成员权限").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build())
.append(Button.create("成员管理").setExecuteCommand("/dominion member 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 +67,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 +75,6 @@ public class DominionManage {
if (Dominion.config.getBlueMap()) {
view.add(map_color);
}
view.showOn(player, 1);
view.showOn(player, page);
}
}

View File

@ -1,4 +1,4 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.dominion.manage;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
@ -11,29 +11,24 @@ 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 DominionEnvInfo {
public class EnvSetting {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length < 2) {
Notification.error(sender, "用法: /dominion env_info <领地名称> [页码]");
Notification.error(sender, "用法: /dominion env_setting <领地名称> [页码]");
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;
}
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
}
ListView view = ListView.create(10, "/dominion env_info " + dominion.getName());
int page = getPage(args, 2);
ListView view = ListView.create(10, "/dominion env_setting " + dominion.getName());
view.title("领地 " + dominion.getName() + " 环境设置")
.navigator(Line.create()
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())

View File

@ -1,4 +1,4 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.dominion.manage;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
@ -11,29 +11,24 @@ 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 DominionFlagInfo {
public class GuestSetting {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length < 2) {
Notification.error(sender, "用法: /dominion flag_info <领地名称> [页码]");
Notification.error(sender, "用法: /dominion guest_setting <领地名称> [页码]");
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;
}
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
}
ListView view = ListView.create(10, "/dominion flag_info " + dominion.getName());
int page = getPage(args, 2);
ListView view = ListView.create(10, "/dominion guest_setting " + dominion.getName());
view.title("领地 " + dominion.getName() + " 访客权限")
.navigator(Line.create()
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())

View File

@ -1,4 +1,4 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.dominion.manage;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.controllers.PlayerController;
@ -15,7 +15,7 @@ import org.bukkit.entity.Player;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1;
public class DominionSizeInfo {
public class SizeInfo {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
@ -47,7 +47,7 @@ public class DominionSizeInfo {
))
.actionBar(Line.create()
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
.append(Button.create("权限列表").setExecuteCommand("/dominion flag_info " + dominion.getName()).build()))
.append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build()))
.showOn(player);
ParticleRender.showBoxFace(Dominion.instance, player,
dominion.getLocation1(),

View File

@ -0,0 +1,93 @@
package cn.lunadeer.dominion.tuis.dominion.manage.group;
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.dominion.tuis.Apis;
import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.XLogger;
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 java.util.List;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
public class GroupList {
public static void show(CommandSender sender, String dominionName) {
show(sender, new String[]{"", "", dominionName});
}
public static void show(CommandSender sender, String dominionName, int page) {
show(sender, new String[]{"", "", dominionName, String.valueOf(page)});
}
public static void show(CommandSender sender, String[] args) {
if (args.length < 3) {
Notification.error(sender, "用法: /dominion group list <领地名称> [页码]");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = DominionDTO.select(args[2]);
if (dominion == null) {
Notification.error(sender, "领地 %s 不存在", args[2]);
return;
}
if (noAuthToManage(player, dominion)) return;
int page = Apis.getPage(args, 3);
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 group delete " + dominion.getName() + " " + group.getName());
Button edit = Button.create("编辑")
.setHoverText("编辑权限组 " + group.getName())
.setExecuteCommand("/dominion group setting " + dominion.getName() + " " + group.getName());
Button add = Button.createGreen("+")
.setHoverText("添加成员到权限组 " + group.getName())
.setExecuteCommand("/dominion group select_member " + 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());
XLogger.debug("players: " + players.size());
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().setDivider("");
playerLine.append(Component.text(" "));
playerLine.append(remove.build()).append(" | " + p.getLastKnownName());
view.add(playerLine);
}
view.add(new Line().append(""));
}
view.showOn(player, page);
}
}

View File

@ -0,0 +1,101 @@
package cn.lunadeer.dominion.tuis.dominion.manage.group;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.GroupDTO;
import cn.lunadeer.dominion.tuis.Apis;
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 GroupSetting {
public static void show(CommandSender sender, String dominionName, String groupName) {
show(sender, new String[]{"", "", dominionName, groupName});
}
public static void show(CommandSender sender, String dominionName, String groupName, Integer page) {
show(sender, new String[]{"", "", dominionName, groupName, page.toString()});
}
public static void show(CommandSender sender, String[] args) {
if (args.length < 4) {
Notification.error(sender, "用法: /dominion group setting <领地名称> <权限组名称> [页码]");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = DominionDTO.select(args[2]);
if (dominion == null) {
Notification.error(sender, "领地 %s 不存在", args[2]);
return;
}
if (noAuthToManage(player, dominion)) return;
int page = Apis.getPage(args, 4);
GroupDTO group = GroupDTO.select(dominion.getId(), args[3]);
if (group == null) {
Notification.error(sender, "权限组 %s 不存在", args[3]);
return;
}
ListView view = ListView.create(10, "/dominion group setting " + 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())
.append("权限组管理")
);
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(parseCommand(dominion.getName(), group.getName(), "admin", false, page))
.build())
.append("管理员"));
view.add(createOption(Flag.GLOW, group.getFlagValue(Flag.GLOW), dominion.getName(), group.getName(), page));
} else {
view.add(Line.create()
.append(Button.createRed("")
.setExecuteCommand(parseCommand(dominion.getName(), group.getName(), "admin", true, 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(parseCommand(DominionName, groupName, flag.getFlagName(), false, page))
.build())
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
} else {
return Line.create()
.append(Button.createRed("")
.setExecuteCommand(parseCommand(DominionName, groupName, flag.getFlagName(), true, page))
.build())
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
}
}
private static String parseCommand(String dominionName, String groupName, String flagName, boolean value, int page) {
return String.format("/dominion group set_flag %s %s %s %s %d", dominionName, groupName, flagName, value, page);
}
}

View File

@ -0,0 +1,57 @@
package cn.lunadeer.dominion.tuis.dominion.manage.group;
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.getPage;
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
public class SelectMember {
public static void show(CommandSender sender, String[] args) {
if (args.length < 4) {
Notification.error(sender, "用法: /dominion group select_member <领地名称> <权限组名称> [回显页码] [页码]");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = DominionDTO.select(args[2]);
if (dominion == null) {
Notification.error(sender, "领地 %s 不存在", args[2]);
return;
}
if (noAuthToManage(player, dominion)) return;
GroupDTO group = GroupDTO.select(dominion.getId(), args[3]);
if (group == null) {
Notification.error(sender, "权限组不存在");
return;
}
int backPage = getPage(args, 4);
int page = getPage(args, 5);
ListView view = ListView.create(10, "/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + backPage);
view.title("选择成员");
Line sub = Line.create().append("选择成员添加到权限组 " + group.getName())
.append(Button.create("返回").setExecuteCommand("/dominion group list " + dominion.getName() + " " + backPage).build());
view.subtitle(sub);
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()));
}
view.showOn(player, page);
}
}

View File

@ -1,9 +1,7 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.dominion.manage.member;
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;
@ -17,28 +15,35 @@ import org.bukkit.entity.Player;
import java.util.List;
import static cn.lunadeer.dominion.commands.Apis.CommandParser;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1;
import static cn.lunadeer.dominion.tuis.Apis.getPage;
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
public class DominionPrivilegeList {
public class MemberList {
public static void show(CommandSender sender, String dominionName, Integer page) {
show(sender, new String[]{"", "", dominionName, page.toString()});
}
public static void show(CommandSender sender, String dominionName) {
show(sender, new String[]{"", "", dominionName});
}
public static void show(CommandSender sender, String[] args) {
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
if (args.length < 3) {
Notification.error(sender, "用法: /dominion member list <领地名称> [页码]");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = getDominionNameArg_1(player, args);
DominionDTO dominion = DominionDTO.select(args[2]);
if (dominion == null) {
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_list <领地名称>");
Notification.error(sender, "领地 %s 不存在", args[2]);
return;
}
ListView view = ListView.create(10, "/dominion privilege_list " + dominion.getName());
int page = getPage(args, 3);
ListView view = ListView.create(10, "/dominion member list " + dominion.getName());
if (noAuthToManage(player, dominion)) return;
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(dominion.getId());
view.title("领地 " + dominion.getName() + " 成员列表");
@ -49,13 +54,17 @@ public class DominionPrivilegeList {
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
.append("成员列表")
);
view.add(Line.create().append(Button.create("添加成员").setExecuteCommand("/dominion select_player_create_privilege " + dominion.getName()).build()));
view.add(Line.create().append(Button.create("添加成员")
.setExecuteCommand(CommandParser("/dominion member select_player %s", dominion.getName())).build()));
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 +74,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(CommandParser("/dominion member setting %s %s", dominion.getName(), p_player.getLastKnownName()));
Button remove = Button.createRed("移除")
.setHoverText("将此成员移出(变为访客)")
.setExecuteCommand(CommandParser("/dominion member remove %s %s", dominion.getName(), p_player.getLastKnownName()));
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 +114,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("这个成员在一个权限组里"));
}

View File

@ -1,4 +1,4 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.dominion.manage.member;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
@ -13,29 +13,34 @@ 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.getPage;
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
public class PrivilegeInfo {
// /dominion privilege_info <玩家名称> [领地名称] [页码]
public class MemberSetting {
public static void show(CommandSender sender, String dominionName, String playerName, Integer page) {
show(sender, new String[]{"", "", dominionName, playerName, page.toString()});
}
public static void show(CommandSender sender, String dominionName, String playerName) {
show(sender, new String[]{"", "", dominionName, playerName});
}
public static void show(CommandSender sender, String[] args) {
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) {
}
}
String playerName = args[1];
if (dominion == null) {
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_info <玩家名称> [领地名称]");
if (args.length < 3) {
Notification.error(sender, "用法: /dominion member setting <领地名称> <玩家名称> [页码]");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = DominionDTO.select(args[2]);
if (dominion == null) {
Notification.error(sender, "领地 %s 不存在", args[2]);
return;
}
ListView view = ListView.create(10, "/dominion privilege_info " + playerName + " " + dominion.getName());
if (noAuthToManage(player, dominion)) return;
int page = getPage(args, 4);
String playerName = args[3];
ListView view = ListView.create(10, "/dominion member setting " + dominion.getName() + " " + playerName);
PlayerDTO playerDTO = PlayerDTO.select(playerName);
if (playerDTO == null) {
Notification.error(sender, "玩家 %s 不存在", playerName);
@ -52,17 +57,24 @@ public class PrivilegeInfo {
.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 privilege_list " + dominion.getName()).build())
.append(Button.create("成员列表").setExecuteCommand("/dominion member list " + dominion.getName()).build())
.append("成员权限")
);
view.add(Line.create().append(Button.createGreen("套用模板")
.setHoverText("选择一个权限模板套用")
.setExecuteCommand("/dominion member select_template " + dominion.getName() + " " + playerName).build()));
if (privilege.getAdmin()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + playerName + " admin false " + dominion.getName() + " " + page).build())
.append(Button.createGreen("").setExecuteCommand(
parseCommand(dominion.getName(), playerName, "admin", false, page)
).build())
.append("管理员"));
view.add(createOption(Flag.GLOW, privilege.getFlagValue(Flag.GLOW), playerName, dominion.getName(), page));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + playerName + " admin true " + dominion.getName() + " " + page).build())
.append(Button.createRed("").setExecuteCommand(
parseCommand(dominion.getName(), playerName, "admin", true, page)
).build())
.append("管理员"));
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
view.add(createOption(flag, privilege.getFlagValue(flag), playerName, dominion.getName(), page));
@ -74,12 +86,20 @@ public class PrivilegeInfo {
private static Line createOption(Flag flag, boolean value, String player_name, String dominion_name, int page) {
if (value) {
return Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set_privilege " + player_name + " " + flag.getFlagName() + " false " + dominion_name + " " + page).build())
.append(Button.createGreen("").setExecuteCommand(
parseCommand(dominion_name, player_name, flag.getFlagName(), false, page)
).build())
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
} else {
return Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set_privilege " + player_name + " " + flag.getFlagName() + " true " + dominion_name + " " + page).build())
.append(Button.createRed("").setExecuteCommand(
parseCommand(dominion_name, player_name, flag.getFlagName(), true, page)
).build())
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
}
}
private static String parseCommand(String dominionName, String playerName, String flagName, boolean value, int page) {
return String.format("/dominion member set_flag %s %s %s %s %d", dominionName, playerName, flagName, value, page);
}
}

View File

@ -1,7 +1,8 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.dominion.manage.member;
import cn.lunadeer.dominion.controllers.PlayerController;
import cn.lunadeer.dominion.dtos.PlayerDTO;
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;
@ -10,26 +11,29 @@ import org.bukkit.entity.Player;
import java.util.List;
import static cn.lunadeer.dominion.commands.Apis.CommandParser;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.tuis.Apis.getPage;
public class SelectPlayer {
// /dominion select_player_create_privilege <领地名称> [页码]
public static void show(CommandSender sender, String dominionName, Integer page) {
show(sender, new String[]{"", "", dominionName, page.toString()});
}
public static void show(CommandSender sender, String[] args) {
if (args.length < 3) {
Notification.error(sender, "用法: /dominion member select_player <领地名称> [页码]");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
}
String dominion_name = args[1];
ListView view = ListView.create(10, "/dominion select_player_create_privilege " + dominion_name);
int page = getPage(args, 3);
String dominion_name = args[2];
ListView view = ListView.create(10, "/dominion member select_player " + dominion_name);
Line sub = Line.create()
.append("只能选择已经登录过的玩家")
.append(Button.create("搜索").setExecuteCommand("/dominion cui_create_privilege " + dominion_name).build())
.append(Button.create("返回").setExecuteCommand("/dominion privilege_list " + dominion_name).build());
.append(Button.create("搜索").setExecuteCommand("/dominion cui_member_add " + dominion_name).build())
.append(Button.create("返回").setExecuteCommand("/dominion member list " + dominion_name).build());
view.title("选择玩家添加为成员").subtitle(sub);
List<PlayerDTO> players = PlayerController.allPlayers();
for (PlayerDTO p : players) {
@ -38,7 +42,7 @@ public class SelectPlayer {
}
view.add(Line.create().
append(Button.create(p.getLastKnownName())
.setExecuteCommand("/dominion create_privilege " + p.getLastKnownName() + " " + dominion_name + " b")
.setExecuteCommand(CommandParser("/dominion member add %s %s", dominion_name, p.getLastKnownName()))
.build()));
}
view.showOn(player, page);

View File

@ -1,6 +1,7 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.dominion.manage.member;
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
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;
@ -10,40 +11,42 @@ import org.bukkit.entity.Player;
import java.util.List;
import static cn.lunadeer.dominion.commands.Apis.CommandParser;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.tuis.Apis.getPage;
public class SelectTemplate {
public static void show(CommandSender sender, String[] args) {
if (args.length < 4) {
// /dominion member select_template <领地名称> <玩家名称> [页码]
Notification.error(sender, "用法: /dominion member select_template <领地名称> <玩家名称> [页码]");
return;
}
Player player = playerOnly(sender);
if (player == null) return;
String playerName = args[1];
String dominionName = args[2];
String backPage = args[3];
String playerName = args[3];
int page = 1;
if (args.length == 5) {
try {
page = Integer.parseInt(args[4]);
} catch (Exception ignored) {
}
}
int page = getPage(args, 4);
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
ListView view = ListView.create(10, "/dominion select_template " + playerName + " " + dominionName + " " + backPage);
ListView view = ListView.create(10, "/dominion member select_template " + dominionName + " " + playerName);
view.title("选择一个模板");
Line sub = Line.create()
.append("套用在领地 " + dominionName + " 的成员 " + playerName + " 身上")
.append(Button.create("返回").setExecuteCommand("/dominion privilege_list " + dominionName + " " + backPage).build());
.append(Button.create("返回").setExecuteCommand("/dominion member setting " + dominionName + " " + playerName).build());
view.subtitle(sub);
for (PrivilegeTemplateDTO template : templates) {
// /dominion apply_template <玩家名称> <领地名称> <模板名称>
// /dominion member apply_template <领地名称> <成员名称> <模板名称>
view.add(Line.create()
.append(Button.create("选择")
.setExecuteCommand("/dominion apply_template " + playerName + " " + dominionName + " " + template.getName() + " " + backPage)
.setExecuteCommand(CommandParser("/dominion member apply_template %s %s %s", dominionName, playerName, template.getName()))
.build())
.append(Component.text(template.getName())));
}

View File

@ -1,4 +1,4 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.template;
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
import cn.lunadeer.minecraftpluginutils.stui.ListView;
@ -14,11 +14,19 @@ import static cn.lunadeer.dominion.tuis.Apis.getPage;
public class TemplateList {
public static void show(CommandSender sender) {
show(sender, 1);
}
public static void show(CommandSender sender, int page) {
show(sender, new String[]{"", "", String.valueOf(page)});
}
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
int page = getPage(args);
ListView view = ListView.create(10, "/dominion template_list");
int page = getPage(args, 2);
ListView view = ListView.create(10, "/dominion template list");
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
view.title("成员权限模板列表");
@ -30,8 +38,8 @@ public class TemplateList {
view.add(Line.create().append(create.build()));
for (PrivilegeTemplateDTO template : templates) {
Button manage = Button.createGreen("配置").setExecuteCommand("/dominion template_manage " + template.getName());
Button delete = Button.createRed("删除").setExecuteCommand("/dominion template_delete " + template.getName());
Button manage = Button.createGreen("配置").setExecuteCommand("/dominion template setting " + template.getName());
Button delete = Button.createRed("删除").setExecuteCommand("/dominion template delete " + template.getName());
Line line = Line.create()
.append(delete.build())
.append(manage.build())

View File

@ -1,4 +1,4 @@
package cn.lunadeer.dominion.tuis;
package cn.lunadeer.dominion.tuis.template;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
@ -11,31 +11,34 @@ 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 TemplateManage {
public class TemplateSetting {
// /dominion template setting <模板名称> [页码]
public static void show(CommandSender sender, String templateName, int page) {
show(sender, new String[]{"", "", templateName, String.valueOf(page)});
}
public static void show(CommandSender sender, String templateName) {
show(sender, new String[]{"", "", templateName});
}
// /dominion template_manage <模板名称> [页码]
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
}
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(player.getUniqueId(), args[1]);
int page = getPage(args, 3);
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(player.getUniqueId(), args[2]);
if (template == null) {
Notification.error(sender, "模板 %s 不存在", args[1]);
Notification.error(sender, "模板 %s 不存在", args[2]);
return;
}
ListView view = ListView.create(10, "/dominion template_manage " + template.getName());
ListView view = ListView.create(10, "/dominion template manage " + template.getName());
view.title("模板 " + args[1] + " 权限管理");
view.navigator(Line.create()
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
.append(Button.create("模板列表").setExecuteCommand("/dominion template_list").build())
.append(Button.create("模板列表").setExecuteCommand("/dominion template list").build())
.append("模板管理")
);
@ -43,11 +46,11 @@ public class TemplateManage {
if (template.getAdmin()) {
view.add(Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion template_set_flag " + template.getName() + " admin false " + page).build())
.append(Button.createGreen("").setExecuteCommand("/dominion template set_flag " + template.getName() + " admin false " + page).build())
.append("管理员"));
} else {
view.add(Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion template_set_flag " + template.getName() + " admin true " + page).build())
.append(Button.createRed("").setExecuteCommand("/dominion template set_flag " + template.getName() + " admin true " + page).build())
.append("管理员"));
}
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
@ -59,11 +62,11 @@ public class TemplateManage {
private static Line createOption(Flag flag, boolean value, String templateName, int page) {
if (value) {
return Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion template_set_flag " + templateName + " " + flag.getFlagName() + " false " + page).build())
.append(Button.createGreen("").setExecuteCommand("/dominion template set_flag " + templateName + " " + flag.getFlagName() + " false " + page).build())
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
} else {
return Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion template_set_flag " + templateName + " " + flag.getFlagName() + " true " + page).build())
.append(Button.createRed("").setExecuteCommand("/dominion template set_flag " + templateName + " " + flag.getFlagName() + " true " + page).build())
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
}
}