From 15f19865efb6f342156e8df4923864feba545ad8 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Sat, 10 Feb 2024 15:35:03 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E4=BA=86=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=BB=84=20=E5=AE=8C=E6=88=90=E4=BA=86ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lunadeer/dominion/Commands.java | 89 +-- .../java/cn/lunadeer/dominion/Dominion.java | 2 - src/main/java/cn/lunadeer/dominion/TUIs.java | 505 ---------------- .../dominion/commands/DominionFlag.java | 13 +- .../dominion/commands/DominionOperate.java | 3 - .../cn/lunadeer/dominion/commands/Helper.java | 32 +- .../dominion/commands/PlayerPrivilege.java | 38 +- .../dominion/commands/PrivilegeGroup.java | 107 ---- .../lunadeer/dominion/controllers/Apis.java | 115 +--- .../controllers/DominionController.java | 1 - .../dominion/controllers/GroupController.java | 166 ------ .../controllers/PrivilegeController.java | 171 ++++-- .../dominion/dtos/PlayerPrivilegeDTO.java | 481 +++++++++++++-- .../dominion/dtos/PrivilegeTemplateDTO.java | 561 ------------------ .../java/cn/lunadeer/dominion/tuis/Apis.java | 76 +++ .../dominion/tuis/DominionFlagInfo.java | 376 ++++++++++++ .../dominion/tuis/DominionManage.java | 45 ++ .../dominion/tuis/DominionPrivilegeList.java | 62 ++ .../dominion/tuis/DominionSizeInfo.java | 45 ++ .../lunadeer/dominion/tuis/ListDominion.java | 37 ++ .../java/cn/lunadeer/dominion/tuis/Menu.java | 28 + .../lunadeer/dominion/tuis/PrivilegeInfo.java | 337 +++++++++++ .../cn/lunadeer/dominion/utils/Database.java | 23 +- .../cn/lunadeer/dominion/utils/STUI/View.java | 14 +- 24 files changed, 1630 insertions(+), 1697 deletions(-) delete mode 100644 src/main/java/cn/lunadeer/dominion/TUIs.java delete mode 100644 src/main/java/cn/lunadeer/dominion/commands/PrivilegeGroup.java delete mode 100644 src/main/java/cn/lunadeer/dominion/controllers/GroupController.java delete mode 100644 src/main/java/cn/lunadeer/dominion/dtos/PrivilegeTemplateDTO.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/Apis.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/DominionSizeInfo.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/Menu.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java diff --git a/src/main/java/cn/lunadeer/dominion/Commands.java b/src/main/java/cn/lunadeer/dominion/Commands.java index e3d4e87..be54351 100644 --- a/src/main/java/cn/lunadeer/dominion/Commands.java +++ b/src/main/java/cn/lunadeer/dominion/Commands.java @@ -1,22 +1,14 @@ package cn.lunadeer.dominion; -import cn.lunadeer.dominion.commands.*; -import cn.lunadeer.dominion.controllers.DominionController; -import cn.lunadeer.dominion.controllers.GroupController; +import cn.lunadeer.dominion.commands.DominionFlag; +import cn.lunadeer.dominion.commands.DominionOperate; +import cn.lunadeer.dominion.commands.PlayerPrivilege; import cn.lunadeer.dominion.controllers.PlayerController; -import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; -import cn.lunadeer.dominion.utils.Notification; -import cn.lunadeer.dominion.utils.STUI.Line; -import cn.lunadeer.dominion.utils.STUI.ListView; -import cn.lunadeer.dominion.utils.STUI.Pagination; -import cn.lunadeer.dominion.utils.STUI.View; -import net.kyori.adventure.text.TextComponent; +import cn.lunadeer.dominion.tuis.*; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; -import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -25,7 +17,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.commands.Helper.*; public class Commands implements TabExecutor { @@ -67,34 +58,22 @@ public class Commands implements TabExecutor { } switch (args[0]) { case "menu": - TUIs.menu(sender, args); + Menu.show(sender, args); break; case "list": - TUIs.list(sender, args); + ListDominion.show(sender, args); break; case "help": - TUIs.printHelp(sender, args); + cn.lunadeer.dominion.tuis.Apis.printHelp(sender, args); break; case "info": - TUIs.sizeInfo(sender, args); + DominionSizeInfo.show(sender, args); break; case "manage": - TUIs.manage(sender, args); + DominionManage.show(sender, args); break; case "flag_info": - TUIs.flagInfo(sender, args); - break; - case "group_list": - TUIs.groupList(sender, args); - break; - case "privilege_list": - TUIs.privilegeList(sender, args); - break; - case "group": - TUIs.group(sender, args); - break; - case "group_detail": - TUIs.groupDetail(sender, args); + DominionFlagInfo.show(sender, args); break; case "create": DominionOperate.createDominion(sender, args); @@ -126,20 +105,11 @@ public class Commands implements TabExecutor { case "clear_privilege": PlayerPrivilege.clearPlayerPrivilege(sender, args); break; - case "create_group": - PrivilegeGroup.createGroup(sender, args); + case "privilege_list": + DominionPrivilegeList.show(sender, args); break; - case "delete_group": - PrivilegeGroup.deleteGroup(sender, args); - break; - case "set_group": - PrivilegeGroup.setDominionFlag(sender, args); - break; - case "add_player": - PrivilegeGroup.addPlayer(sender, args); - break; - case "remove_player": - PrivilegeGroup.removePlayer(sender, args); + case "privilege_info": + PrivilegeInfo.show(sender, args); break; default: return false; @@ -165,8 +135,7 @@ public class Commands implements TabExecutor { if (args.length == 1) { return Arrays.asList("menu", "help", "info", "manage", "flag_info", "group_list", "privilege_list", "group", "create", "auto_create", "create_sub", "auto_create_sub", "expand", "contract", "delete", "set", - "set_privilege", "clear_privilege", "create_group", "delete_group", "set_group", "add_player", - "remove_player", "list" + "set_privilege", "clear_privilege", "list", "privilege_info" ); } if (args.length == 2) { @@ -178,28 +147,23 @@ public class Commands implements TabExecutor { case "auto_create": return Collections.singletonList("输入领地名称"); case "delete": - case "create_sub": - case "auto_create_sub": case "info": case "manage": case "flag_info": - case "group_list": case "privilege_list": return playerDominions(sender); case "set": return dominionFlags(); case "set_privilege": case "clear_privilege": - case "add_player": - case "remove_player": + case "privilege_info": return playerNames(); - case "create_group": - case "delete_group": - case "set_group": - return playerGroups(sender); case "expand": case "contract": return Collections.singletonList("大小(整数)"); + case "create_sub": + case "auto_create_sub": + return Collections.singletonList("子领地名称"); } } if (args.length == 3) { @@ -208,25 +172,20 @@ public class Commands implements TabExecutor { return boolOptions(); case "set_privilege": return playerPrivileges(); - case "set_group": - return groupPrivileges(); - case "add_player": - case "remove_player": - return playerGroups(sender); case "expand": case "contract": + case "clear_privilege": + case "privilege_info": + case "auto_create_sub": + case "create_sub": return playerDominions(sender); } } if (args.length == 4) { switch (args[0]) { case "set": - case "set_privilege": - case "clear_privilege": - case "add_player": - case "remove_player": return playerDominions(sender); - case "set_group": + case "set_privilege": return boolOptions(); } } diff --git a/src/main/java/cn/lunadeer/dominion/Dominion.java b/src/main/java/cn/lunadeer/dominion/Dominion.java index efd5498..2482398 100644 --- a/src/main/java/cn/lunadeer/dominion/Dominion.java +++ b/src/main/java/cn/lunadeer/dominion/Dominion.java @@ -7,9 +7,7 @@ import cn.lunadeer.dominion.utils.XLogger; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.plugin.java.JavaPlugin; -import org.postgresql.core.Tuple; -import javax.xml.crypto.Data; import java.sql.Connection; import java.util.*; diff --git a/src/main/java/cn/lunadeer/dominion/TUIs.java b/src/main/java/cn/lunadeer/dominion/TUIs.java deleted file mode 100644 index f92ef61..0000000 --- a/src/main/java/cn/lunadeer/dominion/TUIs.java +++ /dev/null @@ -1,505 +0,0 @@ -package cn.lunadeer.dominion; - -import cn.lunadeer.dominion.commands.Helper; -import cn.lunadeer.dominion.controllers.GroupController; -import cn.lunadeer.dominion.controllers.PlayerController; -import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; -import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; -import cn.lunadeer.dominion.utils.Notification; -import cn.lunadeer.dominion.utils.STUI.Button; -import cn.lunadeer.dominion.utils.STUI.Line; -import cn.lunadeer.dominion.utils.STUI.ListView; -import cn.lunadeer.dominion.utils.STUI.View; -import net.kyori.adventure.text.TextComponent; -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.commands.Helper.playerDominions; -import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion; - -public class TUIs { - private static int getPage(String[] args) { - int page = 1; - if (args.length == 2) { - try { - page = Integer.parseInt(args[1]); - } catch (Exception e) { - return 1; - } - } - return page; - } - - private static DominionDTO getDominion(Player player, String[] args) { - if (args.length == 2) { - return DominionDTO.select(args[1]); - } else { - return getPlayerCurrentDominion(player); - } - } - - private static boolean noAuthToManage(Player player, DominionDTO dominion) { - if (player.isOp()) return false; - if (!dominion.getOwner().equals(player.getUniqueId())) { - List privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId()); - for (PlayerPrivilegeDTO privilege : privileges) { - if (privilege.getAdmin()) return false; - } - Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者或管理员,无权访问此页面"); - return true; - } else { - return false; - } - } - - public static void printHelp(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - int page = getPage(args); - ListView view = ListView.create(5, "/dominion help"); - view.title("领地插件命令帮助") - .add(Line.create().append("打开交互菜单").append(Button.create("/dominion menu", "/dominion menu"))) - .add(Line.create().append("列出所有领地").append(Button.create("/dominion list", "/dominion list"))) - .add(Line.create().append("查看帮助").append(Button.create("/dominion help [页码]", "/dominion help 1"))) - .add(Line.create().append("查看领地信息").append(Button.create("/dominion info [领地名称]", "/dominion info"))) - .add(Line.create().append("查看领地权限信息").append(Button.create("/dominion flag_info <领地名称> [页码]", "/dominion flag_info"))) - .add(Line.create().append("管理领地").append("/dominion manage <领地名称>")) - .add(Line.create().append("创建领地").append("/dominion create <领地名称>")) - .add(Line.create().append("自动创建领地").append("/dominion auto_create <领地名称>")) - .add(Line.create().append("创建子领地").append("/dominion create_sub <子领地名称> [父领地名称]")) - .add(Line.create().append("自动创建子领地").append("/dominion auto_create_sub <子领地名称> [父领地名称]")) - .add(Line.create().append("扩张领地").append("/dominion expand [大小] [领地名称]")) - .add(Line.create().append("缩小领地").append("/dominion contract [大小] [领地名称]")) - .add(Line.create().append("删除领地").append("/dominion delete <领地名称> [force]")) - .add(Line.create().append("设置领地权限").append("/dominion set <权限名称> [领地名称]")) - .add(Line.create().append("设置玩家权限").append("/dominion set_privilege <玩家名称> <权限名称> [领地名称]")) - .add(Line.create().append("重置玩家权限").append("/dominion clear_privilege <玩家名称> [领地名称]")) - .add(Line.create().append("查看领地玩家权限").append("/dominion privilege_list <领地名称> [页码]")) - .add(Line.create().append("查看权限组").append("/dominion group [页码]")) - .add(Line.create().append("查看权限组详情").append("/dominion group_detail <权限组名称> [页码]")) - .add(Line.create().append("创建权限组").append("/dominion create_group <权限组名称>")) - .add(Line.create().append("删除权限组").append("/dominion delete_group <权限组名称>")) - .add(Line.create().append("设置权限组权限").append("/dominion set_group <权限组名称> <权限名称> ")) - .add(Line.create().append("设置玩家在某个领地归属的权限组").append("/dominion add_player <玩家名称> <权限组名称> [领地名称]")) - .add(Line.create().append("删除玩家在某个领地归属的权限组").append("/dominion remove_player <玩家名称> <权限组名称> [领地名称]")) - .add(Line.create().append("查看领地的权限组").append("/dominion group_list <领地名称> [页码]")) - .showOn(player, page); - } - - public static void sizeInfo(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - DominionDTO dominion = getDominion(player, args); - if (dominion == null) { - Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion info <领地名称>"); - return; - } - PlayerDTO owner = PlayerController.getPlayerDTO(dominion.getOwner()); - Integer x1 = dominion.getX1(); - Integer y1 = dominion.getY1(); - Integer z1 = dominion.getZ1(); - Integer x2 = dominion.getX2(); - Integer y2 = dominion.getY2(); - Integer z2 = dominion.getZ2(); - View view = View.create(); - view.title("领地 " + dominion.getName() + " 的尺寸信息") - .subtitle("领地归属:" + owner.getLastKnownName()) - .addLine(Line.create().append("领地大小:").append((x2 - x1) + " x" + (y2 - y1) + " x" + (z2 - z1))) - .addLine(Line.create().append("中心坐标:").append((x1 + (x2 - x1) / 2) + " " + (y1 + (y2 - y1) / 2) + " " + (z1 + (z2 - z1) / 2))) - .addLine(Line.create().append("垂直高度:").append(String.valueOf(y2 - y1))) - .addLine(Line.create().append("水平面积:").append(String.valueOf((x2 - x1) * (z2 - z1)))) - .addLine(Line.create().append("领地体积:").append(String.valueOf((x2 - x1) * (y2 - y1) * (z2 - z1)))) - .actionBar(Line.create() - .append(Button.create("管理界面", "/dominion manage " + dominion.getName())) - .append(Button.create("权限列表", "/dominion flag_info " + dominion.getName()))) - .showOn(player); - } - - public static void group(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - int page = getPage(args); - List template = GroupController.all(player); - if (template.isEmpty()) { - Notification.warn(sender, "没有任何权限组"); - return; - } - ListView view = ListView.create(5, "/dominion group"); - for (PrivilegeTemplateDTO dto : template) { - view.add(Line.create().append(dto.getName()).append(Button.create("管理", "/dominion group_detail " + dto.getName()))); - } - view.showOn(player, page); - } - - public static void groupDetail(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length < 2) { - Notification.error(sender, "用法: /dominion group_detail <权限组名称> [页码]"); - return; - } - int page = 1; - if (args.length == 3) { - try { - page = Integer.parseInt(args[2]); - } catch (Exception e) { - Notification.error(sender, "页码格式错误"); - return; - } - } - PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(player.getUniqueId(), args[1]); - if (template == null) { - Notification.error(sender, "权限组 " + args[1] + " 不存在"); - return; - } - // todo group detail - } - - public static void menu(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - Line list = Line.create() - .append(Button.create("我的领地", "/dominion list")) - .append("查看我的领地"); - Line group = Line.create() - .append(Button.create("权限组", "/dominion group")) - .append("管理权限组"); - Line help = Line.create() - .append(Button.create("指令帮助", "/dominion help")) - .append("查看指令帮助"); - View view = View.create(); - view.title("Dominion 领地系统") - .navigator(Line.create().append("主菜单")) - .addLine(list) - .addLine(group) - .addLine(help) - .showOn(player); - } - - public static void list(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - int page = getPage(args); - ListView view = ListView.create(5, "/dominion list"); - List dominions = playerDominions(sender); - if (dominions.isEmpty()) { - Notification.warn(sender, "你没有任何领地"); - return; - } - view.title("我的领地列表"); - view.navigator(Line.create().append(Button.create("主菜单", "/dominion menu")).append("我的领地")); - for (String dominion : dominions) { - TextComponent manage = Button.createGreen("管理", "/dominion manage " + dominion); - TextComponent delete = Button.createRed("删除", "/dominion delete " + dominion); - view.add(Line.create().append(dominion).append(manage).append(delete)); - } - view.showOn(player, page); - } - - public static void flagInfo(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length < 2) { - Notification.error(sender, "用法: /dominion flag_info <领地名称> [页码]"); - return; - } - DominionDTO dominion = DominionDTO.select(args[1]); - if (dominion == null) { - Notification.error(sender, "领地 " + args[1] + " 不存在"); - return; - } - int page = 1; - if (args.length == 3) { - try { - page = Integer.parseInt(args[2]); - } catch (Exception ignored) { - } - } - ListView view = ListView.create(6, "/dominion flag_info " + dominion.getName()); - view.title("领地 " + dominion.getName() + " 默认权限") - .navigator(Line.create() - .append(Button.create("主菜单", "/dominion menu")) - .append(Button.create("我的领地", "/dominion list")) - .append(Button.create("管理界面", "/dominion manage " + dominion.getName())) - .append("权限列表")); - if (dominion.getAnchor()) { - view.add(Line.create().append("重生锚").append(Button.createRed("禁用", "/dominion set anchor false " + dominion.getName()))); - } else { - view.add(Line.create().append("重生锚").append(Button.createGreen("启用", "/dominion set anchor true " + dominion.getName()))); - } - if (dominion.getAnimalKilling()) { - view.add(Line.create().append("动物伤害").append(Button.createRed("禁用", "/dominion set animal_killing false " + dominion.getName()))); - } else { - view.add(Line.create().append("动物伤害").append(Button.createGreen("启用", "/dominion set animal_killing true " + dominion.getName()))); - } - if (dominion.getAnvil()) { - view.add(Line.create().append("使用铁砧").append(Button.createRed("禁用", "/dominion set anvil false " + dominion.getName()))); - } else { - view.add(Line.create().append("使用铁砧").append(Button.createGreen("启用", "/dominion set anvil true " + dominion.getName()))); - } - if (dominion.getBeacon()) { - view.add(Line.create().append("信标交互").append(Button.createRed("禁用", "/dominion set beacon false " + dominion.getName()))); - } else { - view.add(Line.create().append("信标交互").append(Button.createGreen("启用", "/dominion set beacon true " + dominion.getName()))); - } - if (dominion.getBed()) { - view.add(Line.create().append("床交互").append(Button.createRed("禁用", "/dominion set bed false " + dominion.getName()))); - } else { - view.add(Line.create().append("床交互").append(Button.createGreen("启用", "/dominion set bed true " + dominion.getName()))); - } - if (dominion.getBrew()) { - view.add(Line.create().append("使用酿造台").append(Button.createRed("禁用", "/dominion set brew false " + dominion.getName()))); - } else { - view.add(Line.create().append("使用酿造台").append(Button.createGreen("启用", "/dominion set brew true " + dominion.getName()))); - } - if (dominion.getButton()) { - view.add(Line.create().append("使用按钮").append(Button.createRed("禁用", "/dominion set button false " + dominion.getName()))); - } else { - view.add(Line.create().append("使用按钮").append(Button.createGreen("启用", "/dominion set button true " + dominion.getName()))); - } - if (dominion.getCake()) { - view.add(Line.create().append("使用蛋糕").append(Button.createRed("禁用", "/dominion set cake false " + dominion.getName()))); - } else { - view.add(Line.create().append("使用蛋糕").append(Button.createGreen("启用", "/dominion set cake true " + dominion.getName()))); - } - if (dominion.getContainer()) { - view.add(Line.create().append("容器交互").append(Button.createRed("禁用", "/dominion set container false " + dominion.getName()))); - } else { - view.add(Line.create().append("容器交互").append(Button.createGreen("启用", "/dominion set container true " + dominion.getName()))); - } - if (dominion.getCraft()) { - view.add(Line.create().append("合成").append(Button.createRed("禁用", "/dominion set craft false " + dominion.getName()))); - } else { - view.add(Line.create().append("合成").append(Button.createGreen("启用", "/dominion set craft true " + dominion.getName()))); - } - if (dominion.getCreeperExplode()) { - view.add(Line.create().append("苦力怕爆炸").append(Button.createRed("禁用", "/dominion set creeper_explode false " + dominion.getName()))); - } else { - view.add(Line.create().append("苦力怕爆炸").append(Button.createGreen("启用", "/dominion set creeper_explode true " + dominion.getName()))); - } - if (dominion.getDiode()) { - view.add(Line.create().append("中继器交互").append(Button.createRed("禁用", "/dominion set diode false " + dominion.getName()))); - } else { - view.add(Line.create().append("中继器交互").append(Button.createGreen("启用", "/dominion set diode true " + dominion.getName()))); - } - if (dominion.getDoor()) { - view.add(Line.create().append("门交互").append(Button.createRed("禁用", "/dominion set door false " + dominion.getName()))); - } else { - view.add(Line.create().append("门交互").append(Button.createGreen("启用", "/dominion set door true " + dominion.getName()))); - } - if (dominion.getDye()) { - view.add(Line.create().append("染色").append(Button.createRed("禁用", "/dominion set dye false " + dominion.getName()))); - } else { - view.add(Line.create().append("染色").append(Button.createGreen("启用", "/dominion set dye true " + dominion.getName()))); - } - if (dominion.getEgg()) { - view.add(Line.create().append("投掷鸡蛋").append(Button.createRed("禁用", "/dominion set egg false " + dominion.getName()))); - } else { - view.add(Line.create().append("投掷鸡蛋").append(Button.createGreen("启用", "/dominion set egg true " + dominion.getName()))); - } - if (dominion.getEnchant()) { - view.add(Line.create().append("附魔").append(Button.createRed("禁用", "/dominion set enchant false " + dominion.getName()))); - } else { - view.add(Line.create().append("附魔").append(Button.createGreen("启用", "/dominion set enchant true " + dominion.getName()))); - } - if (dominion.getEnderPearl()) { - view.add(Line.create().append("末影珍珠").append(Button.createRed("禁用", "/dominion set ender_pearl false " + dominion.getName()))); - } else { - view.add(Line.create().append("末影珍珠").append(Button.createGreen("启用", "/dominion set ender_pearl true " + dominion.getName()))); - } - if (dominion.getFeed()) { - view.add(Line.create().append("喂食").append(Button.createRed("禁用", "/dominion set feed false " + dominion.getName()))); - } else { - view.add(Line.create().append("喂食").append(Button.createGreen("启用", "/dominion set feed true " + dominion.getName()))); - } - if (dominion.getFireSpread()) { - view.add(Line.create().append("火焰蔓延").append(Button.createRed("禁用", "/dominion set fire_spread false " + dominion.getName()))); - } else { - view.add(Line.create().append("火焰蔓延").append(Button.createGreen("启用", "/dominion set fire_spread true " + dominion.getName()))); - } - if (dominion.getFlowInProtection()) { - view.add(Line.create().append("流体保护").append(Button.createRed("禁用", "/dominion set flow_in_protection false " + dominion.getName()))); - } else { - view.add(Line.create().append("流体保护").append(Button.createGreen("启用", "/dominion set flow_in_protection true " + dominion.getName()))); - } - if (dominion.getGlow()) { - view.add(Line.create().append("发光").append(Button.createRed("禁用", "/dominion set glow false " + dominion.getName()))); - } else { - view.add(Line.create().append("发光").append(Button.createGreen("启用", "/dominion set glow true " + dominion.getName()))); - } - if (dominion.getGrow()) { - view.add(Line.create().append("植物生长").append(Button.createRed("禁用", "/dominion set grow false " + dominion.getName()))); - } else { - view.add(Line.create().append("植物生长").append(Button.createGreen("启用", "/dominion set grow true " + dominion.getName()))); - } - if (dominion.getHoney()) { - view.add(Line.create().append("蜂巢交互").append(Button.createRed("禁用", "/dominion set honey false " + dominion.getName()))); - } else { - view.add(Line.create().append("蜂巢交互").append(Button.createGreen("启用", "/dominion set honey true " + dominion.getName()))); - } - if (dominion.getHook()) { - view.add(Line.create().append("钩子交互").append(Button.createRed("禁用", "/dominion set hook false " + dominion.getName()))); - } else { - view.add(Line.create().append("钩子交互").append(Button.createGreen("启用", "/dominion set hook true " + dominion.getName()))); - } - if (dominion.getIgnite()) { - view.add(Line.create().append("点燃").append(Button.createRed("禁用", "/dominion set ignite false " + dominion.getName()))); - } else { - view.add(Line.create().append("点燃").append(Button.createGreen("启用", "/dominion set ignite true " + dominion.getName()))); - } - if (dominion.getMobKilling()) { - view.add(Line.create().append("生物伤害").append(Button.createRed("禁用", "/dominion set mob_killing false " + dominion.getName()))); - } else { - view.add(Line.create().append("生物伤害").append(Button.createGreen("启用", "/dominion set mob_killing true " + dominion.getName()))); - } - if (dominion.getMove()) { - view.add(Line.create().append("移动").append(Button.createRed("禁用", "/dominion set move false " + dominion.getName()))); - } else { - view.add(Line.create().append("移动").append(Button.createGreen("启用", "/dominion set move true " + dominion.getName()))); - } - if (dominion.getPlace()) { - view.add(Line.create().append("放置").append(Button.createRed("禁用", "/dominion set place false " + dominion.getName()))); - } else { - view.add(Line.create().append("放置").append(Button.createGreen("启用", "/dominion set place true " + dominion.getName()))); - } - if (dominion.getPressure()) { - view.add(Line.create().append("压力板交互").append(Button.createRed("禁用", "/dominion set pressure false " + dominion.getName()))); - } else { - view.add(Line.create().append("压力板交互").append(Button.createGreen("启用", "/dominion set pressure true " + dominion.getName()))); - } - if (dominion.getRiding()) { - view.add(Line.create().append("骑乘").append(Button.createRed("禁用", "/dominion set riding false " + dominion.getName()))); - } else { - view.add(Line.create().append("骑乘").append(Button.createGreen("启用", "/dominion set riding true " + dominion.getName()))); - } - if (dominion.getShear()) { - view.add(Line.create().append("剪羊毛").append(Button.createRed("禁用", "/dominion set shear false " + dominion.getName()))); - } else { - view.add(Line.create().append("剪羊毛").append(Button.createGreen("启用", "/dominion set shear true " + dominion.getName()))); - } - if (dominion.getShoot()) { - view.add(Line.create().append("发射").append(Button.createRed("禁用", "/dominion set shoot false " + dominion.getName()))); - } else { - view.add(Line.create().append("发射").append(Button.createGreen("启用", "/dominion set shoot true " + dominion.getName()))); - } - if (dominion.getTntExplode()) { - view.add(Line.create().append("TNT爆炸").append(Button.createRed("禁用", "/dominion set tnt_explode false " + dominion.getName()))); - } else { - view.add(Line.create().append("TNT爆炸").append(Button.createGreen("启用", "/dominion set tnt_explode true " + dominion.getName()))); - } - if (dominion.getTrade()) { - view.add(Line.create().append("交易").append(Button.createRed("禁用", "/dominion set trade false " + dominion.getName()))); - } else { - view.add(Line.create().append("交易").append(Button.createGreen("启用", "/dominion set trade true " + dominion.getName()))); - } - if (dominion.getVehicleDestroy()) { - view.add(Line.create().append("破坏载具").append(Button.createRed("禁用", "/dominion set vehicle_destroy false " + dominion.getName()))); - } else { - view.add(Line.create().append("破坏载具").append(Button.createGreen("启用", "/dominion set vehicle_destroy true " + dominion.getName()))); - } - if (dominion.getWitherSpawn()) { - view.add(Line.create().append("凋零生成").append(Button.createRed("禁用", "/dominion set wither_spawn false " + dominion.getName()))); - } else { - view.add(Line.create().append("凋零生成").append(Button.createGreen("启用", "/dominion set wither_spawn true " + dominion.getName()))); - } - if (dominion.getHarvest()) { - view.add(Line.create().append("收获").append(Button.createRed("禁用", "/dominion set harvest false " + dominion.getName()))); - } else { - view.add(Line.create().append("收获").append(Button.createGreen("启用", "/dominion set harvest true " + dominion.getName()))); - } - view.showOn(player, page); - } - - public static void manage(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - DominionDTO dominion = getDominion(player, args); - if (dominion == null) { - Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion manage <领地名称>"); - return; - } - if (noAuthToManage(player, dominion)) return; - Line size_info = Line.create() - .append(Button.create("尺寸信息", "/dominion info " + dominion.getName())) - .append("查看领地尺寸信息"); - Line flag_info = Line.create() - .append(Button.create("权限设置", "/dominion flag_info " + dominion.getName())) - .append("管理领地默认权限"); - Line group_info = Line.create() - .append(Button.create("权限组", "/dominion group_list " + dominion.getName())) - .append("管理领地权限组"); - Line privilege_list = Line.create() - .append(Button.create("玩家权限", "/dominion privilege_list " + dominion.getName())) - .append("管理玩家特权"); - View view = View.create(); - view.title("领地 " + dominion.getName() + " 管理界面") - .navigator(Line.create() - .append(Button.create("主菜单", "/dominion menu")) - .append(Button.create("我的领地", "/dominion list")) - .append(dominion.getName())) - .addLine(size_info) - .addLine(flag_info) - .addLine(group_info) - .addLine(privilege_list) - .showOn(player); - } - - public static void groupList(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length < 2) { - Notification.error(sender, "用法: /dominion group_list <领地名称> [页码]"); - return; - } - DominionDTO dominion = DominionDTO.select(args[1]); - if (dominion == null) { - Notification.error(sender, "领地 " + args[1] + " 不存在"); - return; - } - if (noAuthToManage(player, dominion)) return; - int page = 1; - if (args.length == 3) { - try { - page = Integer.parseInt(args[2]); - } catch (Exception ignored) { - } - } - ListView view = ListView.create(6, "/dominion group_list " + dominion.getName()); - view.title("领地 " + dominion.getName() + " 权限组信息") - .subtitle(Button.create("返回管理界面", "/dominion manage " + dominion.getName())); - // todo - view.showOn(player, page); - } - - public static void privilegeList(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length < 2) { - Notification.error(sender, "用法: /dominion privilege_list <领地名称> [页码]"); - return; - } - DominionDTO dominion = DominionDTO.select(args[1]); - if (dominion == null) { - Notification.error(sender, "领地 " + args[1] + " 不存在"); - return; - } - if (noAuthToManage(player, dominion)) return; - int page = 1; - if (args.length == 3) { - try { - page = Integer.parseInt(args[2]); - } catch (Exception ignored) { - } - } - ListView view = ListView.create(6, "/dominion privilege_list " + dominion.getName()); - view.title("领地 " + dominion.getName() + " 玩家权限信息") - .subtitle(Button.create("返回管理界面", "/dominion manage " + dominion.getName())); - // todo - view.showOn(player, page); - } -} diff --git a/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java b/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java index 7e3d066..2b1d355 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java +++ b/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java @@ -1,7 +1,7 @@ package cn.lunadeer.dominion.commands; -import cn.lunadeer.dominion.controllers.DominionController; import cn.lunadeer.dominion.controllers.FlagsController; +import cn.lunadeer.dominion.tuis.DominionFlagInfo; import cn.lunadeer.dominion.utils.Notification; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -28,8 +28,19 @@ public class DominionFlag { if (FlagsController.setFlag(player, args[1], Boolean.parseBoolean(args[2]), args[3]) == null) { Notification.error(sender, "设置领地权限失败"); } + } else if (args.length == 5) { + if (FlagsController.setFlag(player, args[1], Boolean.parseBoolean(args[2]), args[3]) == null) { + Notification.error(sender, "设置领地权限失败"); + } + String[] newArgs = new String[3]; + newArgs[0] = "flag_info"; + newArgs[1] = args[3]; + newArgs[2] = args[4]; + DominionFlagInfo.show(sender, newArgs); + return; } else { Notification.error(sender, "用法: /dominion set <权限名称> [领地名称]"); + return; } Notification.info(sender, "设置领地权限 " + args[1] + " 为 " + args[2]); } diff --git a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java index 545f8ea..480e288 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java +++ b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java @@ -4,16 +4,13 @@ import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.controllers.DominionController; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.utils.Notification; -import net.kyori.adventure.text.Component; import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; import java.util.List; import static cn.lunadeer.dominion.commands.Apis.*; -import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion; public class DominionOperate { /** diff --git a/src/main/java/cn/lunadeer/dominion/commands/Helper.java b/src/main/java/cn/lunadeer/dominion/commands/Helper.java index 4158ed8..b53fb4b 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Helper.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Helper.java @@ -1,17 +1,7 @@ package cn.lunadeer.dominion.commands; import cn.lunadeer.dominion.controllers.DominionController; -import cn.lunadeer.dominion.controllers.GroupController; -import cn.lunadeer.dominion.controllers.PlayerController; import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; -import cn.lunadeer.dominion.utils.Notification; -import cn.lunadeer.dominion.utils.STUI.Button; -import cn.lunadeer.dominion.utils.STUI.Line; -import cn.lunadeer.dominion.utils.STUI.ListView; -import cn.lunadeer.dominion.utils.STUI.View; -import net.kyori.adventure.text.TextComponent; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -20,7 +10,6 @@ import java.util.Arrays; import java.util.List; import static cn.lunadeer.dominion.commands.Apis.playerOnly; -import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion; public class Helper { @@ -33,20 +22,14 @@ public class Helper { "harvest"); } - public static List groupPrivileges() { + public static List playerPrivileges() { return Arrays.asList( - "anchor", "animal_killing", "anvil", "beacon", "bed", "brew", "button", "cake", "container", "craft", + "admin", "anchor", "animal_killing", "anvil", "beacon", "bed", "brew", "button", "cake", "container", "craft", "diode", "door", "dye", "egg", "enchant", "ender_pearl", "feed", "glow", "honey", "hook", "ignite", "mob_killing", "move", "place", "pressure", "riding", "shear", "shoot", "trade", "vehicle_destroy", "harvest"); } - public static List playerPrivileges() { - List privileges = new ArrayList<>(groupPrivileges()); - privileges.add("admin"); - return privileges; - } - public static List playerDominions(CommandSender sender) { List dominions_name = new ArrayList<>(); Player player = playerOnly(sender); @@ -58,16 +41,5 @@ public class Helper { return dominions_name; } - public static List playerGroups(CommandSender sender) { - List groups_name = new ArrayList<>(); - Player player = playerOnly(sender); - if (player == null) return groups_name; - List groups = GroupController.all(player); - for (PrivilegeTemplateDTO group : groups) { - groups_name.add(group.getName()); - } - return groups_name; - } - } diff --git a/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java b/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java index d5663a5..6fa1e11 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java +++ b/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java @@ -1,6 +1,6 @@ package cn.lunadeer.dominion.commands; -import cn.lunadeer.dominion.dtos.PlayerDTO; +import cn.lunadeer.dominion.tuis.PrivilegeInfo; import cn.lunadeer.dominion.utils.Notification; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -21,20 +21,34 @@ public class PlayerPrivilege { public static void setPlayerPrivilege(CommandSender sender, String[] args) { Player player = playerOnly(sender); if (player == null) return; - if (args.length != 4 && args.length != 5) { + + if (args.length == 4) { + if (!setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]))) { + Notification.error(sender, "设置玩家权限失败"); + return; + } + } else if (args.length == 5) { + if (!setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]), args[4])) { + Notification.error(sender, "设置玩家权限失败"); + return; + } + } else if (args.length == 6) { + if (!setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]), args[4])) { + Notification.error(sender, "设置玩家权限失败"); + return; + } + 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); + return; + } else { Notification.error(sender, "用法: /dominion set_privilege <玩家名称> <权限名称> [领地名称]"); return; } - if (args.length == 4) { - if (setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]))) { - return; - } - } else { - if (setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]), args[4])) { - return; - } - } - Notification.error(sender, "设置玩家权限失败"); + Notification.info(sender, "设置玩家权限 " + args[1] + " 为 " + args[2]); } /** diff --git a/src/main/java/cn/lunadeer/dominion/commands/PrivilegeGroup.java b/src/main/java/cn/lunadeer/dominion/commands/PrivilegeGroup.java deleted file mode 100644 index a072587..0000000 --- a/src/main/java/cn/lunadeer/dominion/commands/PrivilegeGroup.java +++ /dev/null @@ -1,107 +0,0 @@ -package cn.lunadeer.dominion.commands; - -import cn.lunadeer.dominion.controllers.FlagsController; -import cn.lunadeer.dominion.controllers.GroupController; -import cn.lunadeer.dominion.controllers.PlayerController; -import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.utils.Notification; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import static cn.lunadeer.dominion.commands.Apis.playerOnly; - -public class PrivilegeGroup { - - /** - * 创建权限组 - * /dominion create_group <权限组名称> - * - * @param sender 命令发送者 - * @param args 命令参数 - */ - public static void createGroup(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length != 2) { - Notification.error(sender, "用法: /dominion create_group <权限组名称>"); - return; - } - GroupController.create(player, args[1]); - } - - /** - * 删除权限组 - * /dominion delete_group <权限组名称> - * - * @param sender 命令发送者 - * @param args 命令参数 - */ - public static void deleteGroup(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length != 2) { - Notification.error(sender, "用法: /dominion delete_group <权限组名称>"); - return; - } - GroupController.delete(player, args[1]); - } - - /** - * 设置权限组权限 - * /dominion set_group <权限组名称> <权限名称> - * - * @param sender 命令发送者 - * @param args 命令参数 - */ - public static void setDominionFlag(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length != 4) { - Notification.error(sender, "用法: /dominion set_group <权限组名称> <权限名称> "); - return; - } - GroupController.setFlag(player, args[1], args[2], Boolean.parseBoolean(args[3])); - } - - /** - * 设置玩家在某个领地归属的权限组 - * /dominion add_player <玩家名称> <权限组名称> [领地名称] - * - * @param sender 命令发送者 - * @param args 命令参数 - */ - public static void addPlayer(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length != 3 && args.length != 4) { - Notification.error(sender, "用法: /dominion add_player <玩家名称> <权限组名称> [领地名称]"); - return; - } - if (args.length == 3) { - GroupController.addPlayer(player, args[1], args[2]); - } else { - GroupController.addPlayer(player, args[1], args[2], args[3]); - } - } - - /** - * 删除玩家在某个领地归属的权限组 - * /dominion remove_player <玩家名称> <权限组名称> [领地名称] - * - * @param sender 命令发送者 - * @param args 命令参数 - */ - public static void removePlayer(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length != 3 && args.length != 4) { - Notification.error(sender, "用法: /dominion remove_player <玩家名称> <权限组名称> [领地名称]"); - return; - } - if (args.length == 3) { - GroupController.removePlayer(player, args[1], args[2]); - } else { - GroupController.removePlayer(player, args[1], args[2], args[3]); - } - } -} diff --git a/src/main/java/cn/lunadeer/dominion/controllers/Apis.java b/src/main/java/cn/lunadeer/dominion/controllers/Apis.java index 031d08d..85e1b2c 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/Apis.java @@ -2,7 +2,6 @@ package cn.lunadeer.dominion.controllers; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; -import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; import cn.lunadeer.dominion.utils.Notification; import org.bukkit.Location; import org.bukkit.block.BlockFace; @@ -22,15 +21,13 @@ public class Apis { public static boolean noAuthToChangeFlags(Player player, DominionDTO dominion) { if (player.isOp()) return false; if (!dominion.getOwner().equals(player.getUniqueId())) { - List privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId()); - for (PlayerPrivilegeDTO privilege : privileges) { - if (privilege.getAdmin()) return false; + PlayerPrivilegeDTO privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId()); + if (privileges == null || !privileges.getAdmin()) { + Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者或管理员,无权修改权限"); + return true; } - Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者或管理员,无法执行此操作"); - return true; - } else { - return false; } + return false; } /** @@ -57,108 +54,6 @@ public class Apis { return getPlayerCurrentDominion(player, true); } - - public static boolean updateTemplateFlag(PrivilegeTemplateDTO privilege, String flag, boolean value) { - switch (flag) { - case "anchor": - privilege.setAnchor(value); - break; - case "animal_killing": - privilege.setAnimalKilling(value); - break; - case "anvil": - privilege.setAnvil(value); - break; - case "beacon": - privilege.setBeacon(value); - break; - case "bed": - privilege.setBed(value); - break; - case "brew": - privilege.setBrew(value); - break; - case "button": - privilege.setButton(value); - break; - case "cake": - privilege.setCake(value); - break; - case "container": - privilege.setContainer(value); - break; - case "craft": - privilege.setCraft(value); - break; - case "diode": - privilege.setDiode(value); - break; - case "door": - privilege.setDoor(value); - break; - case "dye": - privilege.setDye(value); - break; - case "egg": - privilege.setEgg(value); - break; - case "enchant": - privilege.setEnchant(value); - break; - case "ender_pearl": - privilege.setEnderPearl(value); - break; - case "feed": - privilege.setFeed(value); - break; - case "glow": - privilege.setGlow(value); - break; - case "honey": - privilege.setHoney(value); - break; - case "hook": - privilege.setHook(value); - break; - case "ignite": - privilege.setIgnite(value); - break; - case "mob_killing": - privilege.setMobKilling(value); - break; - case "move": - privilege.setMove(value); - break; - case "place": - privilege.setPlace(value); - break; - case "pressure": - privilege.setPressure(value); - break; - case "riding": - privilege.setRiding(value); - break; - case "shear": - privilege.setShear(value); - break; - case "shoot": - privilege.setShoot(value); - break; - case "trade": - privilege.setTrade(value); - break; - case "vehicle_destroy": - privilege.setVehicleDestroy(value); - break; - case "harvest": - privilege.setHarvest(value); - break; - default: - return false; - } - return true; - } - public static BlockFace getFace(Player player) { float yaw = player.getYaw(); float pitch = player.getPitch(); diff --git a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java index 2346832..c8f5390 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java @@ -3,7 +3,6 @@ package cn.lunadeer.dominion.controllers; import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.utils.Notification; -import cn.lunadeer.dominion.utils.STUI.Pagination; import cn.lunadeer.dominion.utils.Time; import cn.lunadeer.dominion.utils.XLogger; import org.bukkit.Location; diff --git a/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java b/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java deleted file mode 100644 index e3cb3ec..0000000 --- a/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java +++ /dev/null @@ -1,166 +0,0 @@ -package cn.lunadeer.dominion.controllers; - -import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; -import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; -import cn.lunadeer.dominion.utils.Notification; -import org.bukkit.entity.Player; - -import java.util.List; -import java.util.UUID; - -import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags; - -public class GroupController { - - public static List all(Player owner) { - return PrivilegeTemplateDTO.selectGroup(owner.getUniqueId()); - } - - /** - * 创建权限组 - * - * @param operator 操作者 - * @param name 权限组名称 - * @return 是否创建成功 - */ - public static PrivilegeTemplateDTO create(Player operator, String name) { - PrivilegeTemplateDTO template = new PrivilegeTemplateDTO(name, operator.getUniqueId(), true); - template = PrivilegeTemplateDTO.insert(template); - if (template == null) { - Notification.error(operator, "创建权限组失败"); - return null; - } - return template; - } - - /** - * 删除权限组 - * - * @param operator 操作者 - * @param name 权限组名称 - * @return 是否删除成功 - */ - public static boolean delete(Player operator, String name) { - PrivilegeTemplateDTO.delete(operator.getUniqueId(), name); - return true; - } - - /** - * 设置权限组的权限 - * - * @param operator 操作者 - * @param name 权限组名称 - * @param flag 权限名称 - * @param value 权限值 - * @return 是否设置成功 - */ - public static boolean setFlag(Player operator, String name, String flag, boolean value) { - PrivilegeTemplateDTO privilege = PrivilegeTemplateDTO.select(operator.getUniqueId(), name); - if (privilege == null) { - Notification.error(operator, "没有找到权限组 " + name); - return false; - } - if (!Apis.updateTemplateFlag(privilege, flag, value)) { - Notification.error(operator, "未知的权限组权限 " + flag); - return false; - } - Notification.info(operator, "设置权限组 " + name + " 权限 " + flag + " 为 " + value); - return true; - } - - /** - * 添加玩家到权限组 - * - * @param operator 操作者 - * @param player_name 玩家 - * @param groupName 权限组名称 - * @return 是否添加成功 - */ - public static boolean addPlayer(Player operator, String player_name, String groupName) { - DominionDTO dominion = Apis.getPlayerCurrentDominion(operator); - if (dominion == null) return false; - return addPlayer(operator, player_name, groupName, dominion.getName()); - } - - /** - * 添加玩家到权限组 - * - * @param operator 操作者 - * @param player_name 玩家 - * @param groupName 权限组名称 - * @param dominionName 领地名称 - * @return 是否添加成功 - */ - public static boolean addPlayer(Player operator, String player_name, String groupName, String dominionName) { - PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), groupName); - if (template == null) { - Notification.error(operator, "没有找到权限组 " + groupName + " 或者需要先创建权限组"); - return false; - } - PlayerDTO player = PlayerDTO.select(player_name); - if (player == null) { - Notification.error(operator, "玩家 " + player_name + " 不存在或没有登录过"); - return false; - } - DominionDTO dominion = DominionDTO.select(dominionName); - if (dominion == null) { - Notification.error(operator, "领地 " + dominionName + " 不存在"); - return false; - } - if (noAuthToChangeFlags(operator, dominion)) return false; - PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player.getUuid(), false, dominion.getId(), template.getId()); - privilege = PlayerPrivilegeDTO.insert(privilege); - if (privilege == null) { - Notification.error(operator, "设置玩家" + player.getLastKnownName() + "在领地 " + dominionName + " 归属权限组 " + groupName + " 失败"); - return false; - } - Notification.info(operator, "设置玩家" + player.getLastKnownName() + "在领地 " + dominionName + " 归属权限组 " + groupName); - return true; - } - - /** - * 从权限组中移除玩家 - * - * @param operator 操作者 - * @param player_name 玩家 - * @param groupName 权限组名称 - * @return 是否移除成功 - */ - public static boolean removePlayer(Player operator, String player_name, String groupName) { - DominionDTO dominion = Apis.getPlayerCurrentDominion(operator); - if (dominion == null) return false; - return removePlayer(operator, player_name, groupName, dominion.getName()); - } - - /** - * 从权限组中移除玩家 - * - * @param operator 操作者 - * @param player_name 玩家 - * @param groupName 权限组名称 - * @param dominionName 领地名称 - * @return 是否移除成功 - */ - public static boolean removePlayer(Player operator, String player_name, String groupName, String dominionName) { - PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), groupName); - if (template == null) { - Notification.error(operator, "没有找到权限组 " + groupName); - return false; - } - DominionDTO dominion = DominionDTO.select(dominionName); - if (dominion == null) { - Notification.error(operator, "领地 " + dominionName + " 不存在"); - return false; - } - if (noAuthToChangeFlags(operator, dominion)) return false; - PlayerDTO player = PlayerDTO.select(player_name); - if (player == null) { - Notification.error(operator, "玩家 " + player_name + " 不存在或没有登录过"); - return false; - } - PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId(), template.getId()); - return true; - } -} diff --git a/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java b/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java index f890aad..e385f97 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java @@ -3,14 +3,9 @@ package cn.lunadeer.dominion.controllers; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; -import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; import cn.lunadeer.dominion.utils.Notification; -import cn.lunadeer.dominion.utils.XLogger; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; import java.util.UUID; import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags; @@ -50,13 +45,7 @@ public class PrivilegeController { Notification.error(operator, "玩家 " + player_name + " 不存在或没有登录过"); return false; } - List templates = getPlayerPrivilegeTemplates(player.getUuid(), dominion.getId()); - if (templates.size() < 1) { - return true; - } - for (PrivilegeTemplateDTO template : templates) { - PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId(), template.getId()); - } + PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId()); return true; } @@ -97,69 +86,121 @@ public class PrivilegeController { Notification.error(operator, "玩家 " + player_name + " 不存在或没有登录过"); return false; } - List templates = getPlayerPrivilegeTemplates(player.getUuid(), dominion.getId()); - if (templates.size() < 1) { - PrivilegeTemplateDTO template = createPlayerPrivilege(operator, player.getUuid(), dominion.getId()); - if (template == null) return false; - templates.add(template); + PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); + if (privilege == null) { + privilege = createPlayerPrivilege(operator, player.getUuid(), dominion.getId()); + if (privilege == null) return false; } - if (templates.size() > 1) { - Notification.error(operator, "玩家特权拥有多个权限模板,建议使用 clear_privilege 清空此玩家特权后重新设置"); - XLogger.warn("玩家特权拥有多个权限模板,使用搜索到的第一个 id: " + templates.get(0).getId() + " 进行操作,请检查数据库"); - XLogger.warn("其他权限模板如下:"); - for (int i = 1; i < templates.size(); i++) { - XLogger.warn(" id: " + templates.get(i).getId()); - } - } - PrivilegeTemplateDTO privilege = templates.get(0); - if (Objects.equals(flag, "admin")) { - List privileges = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); - for (PlayerPrivilegeDTO p : privileges) { - if (p.getPrivilegeTemplateID().equals(privilege.getId())) { - p = p.setAdmin(value); - if (p == null) { - Notification.error(operator, "更新玩家特权失败"); - return false; - } - return true; - } - } - Notification.error(operator, "没有找到玩家权限关联数据"); - return false; - } - if (!Apis.updateTemplateFlag(privilege, flag, value)) { - Notification.error(operator, "未知的领地权限 " + flag); - return false; + switch (flag) { + case "anchor": + privilege.setAnchor(value); + break; + case "animal_killing": + privilege.setAnimalKilling(value); + break; + case "anvil": + privilege.setAnvil(value); + break; + case "beacon": + privilege.setBeacon(value); + break; + case "bed": + privilege.setBed(value); + break; + case "brew": + privilege.setBrew(value); + break; + case "button": + privilege.setButton(value); + break; + case "cake": + privilege.setCake(value); + break; + case "container": + privilege.setContainer(value); + break; + case "craft": + privilege.setCraft(value); + break; + case "diode": + privilege.setDiode(value); + break; + case "door": + privilege.setDoor(value); + break; + case "dye": + privilege.setDye(value); + break; + case "egg": + privilege.setEgg(value); + break; + case "enchant": + privilege.setEnchant(value); + break; + case "ender_pearl": + privilege.setEnderPearl(value); + break; + case "feed": + privilege.setFeed(value); + break; + case "glow": + privilege.setGlow(value); + break; + case "honey": + privilege.setHoney(value); + break; + case "hook": + privilege.setHook(value); + break; + case "ignite": + privilege.setIgnite(value); + break; + case "mob_killing": + privilege.setMobKilling(value); + break; + case "move": + privilege.setMove(value); + break; + case "place": + privilege.setPlace(value); + break; + case "pressure": + privilege.setPressure(value); + break; + case "riding": + privilege.setRiding(value); + break; + case "shear": + privilege.setShear(value); + break; + case "shoot": + privilege.setShoot(value); + break; + case "trade": + privilege.setTrade(value); + break; + case "vehicle_destroy": + privilege.setVehicleDestroy(value); + break; + case "harvest": + privilege.setHarvest(value); + break; + default: + Notification.error(operator, "未知的领地权限 " + flag); + return false; } + Notification.info(operator, "设置玩家在领地 " + dominionName + " 的权限 " + flag + " 为 " + value); return true; } - private static PrivilegeTemplateDTO createPlayerPrivilege(Player operator, UUID player, Integer domID) { - PrivilegeTemplateDTO template = new PrivilegeTemplateDTO(player.toString(), operator.getUniqueId(), false); - template = PrivilegeTemplateDTO.insert(template); - if (template == null) { - Notification.error(operator, "创建玩家特权失败"); - return null; - } - PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, false, domID, template.getId()); + private static PlayerPrivilegeDTO createPlayerPrivilege(Player operator, UUID player, Integer domID) { + PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, false, domID); privilege = PlayerPrivilegeDTO.insert(privilege); if (privilege == null) { Notification.error(operator, "创建玩家特权关联玩家时失败"); - PrivilegeTemplateDTO.delete(template); return null; } - return template; + return privilege; } - private static List getPlayerPrivilegeTemplates(UUID player, Integer domID) { - List privileges = PlayerPrivilegeDTO.select(player, domID); - List templates = new ArrayList<>(); - for (PlayerPrivilegeDTO privilege : privileges) { - PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(privilege.getPrivilegeTemplateID()); - if (template == null) continue; - if (template.getGroup()) continue; // 跳过组权限 - templates.add(template); - } - return templates; - } } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java index a877924..4b1b293 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java @@ -11,52 +11,70 @@ import java.util.UUID; public class PlayerPrivilegeDTO { public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) { - String sql = "INSERT INTO player_privilege (player_uuid, admin, dom_id, privilege_template_id) VALUES (" + + String sql = "INSERT INTO player_privilege (player_uuid, admin, dom_id) VALUES (" + "'" + player.getPlayerUUID() + "', " + player.getAdmin() + ", " + - player.getDomID() + ", " + - player.getPrivilegeTemplateID() + ")" + - "RETURNING *;"; + player.getDomID() + + ") RETURNING *;"; List players = query(sql); if (players.size() == 0) return null; return players.get(0); } - public static List select(UUID playerUUID, Integer dom_id) { + public static PlayerPrivilegeDTO select(UUID playerUUID, Integer dom_id) { String sql = "SELECT * FROM player_privilege WHERE player_uuid = '" + playerUUID + "' " + "AND dom_id = " + dom_id + ";"; - return query(sql); + List p = query(sql); + if (p.size() == 0) return null; + return p.get(0); } - public static PlayerPrivilegeDTO select(Integer dom_id) { + public static List select(Integer dom_id) { String sql = "SELECT * FROM player_privilege WHERE dom_id = " + dom_id + ";"; - List players = query(sql); - if (players.size() == 0) return null; - return players.get(0); - } - - public static void delete(UUID player, Integer domID, Integer privilegeTemplateID) { - String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "' " + - "AND dom_id = " + domID + " " + - "AND privilege_template_id = " + privilegeTemplateID + ";"; - query(sql); - } - - public static void delete(UUID player) { - String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "';"; - query(sql); - } - - public static List selectAll() { - String sql = "SELECT * FROM player_privilege;"; return query(sql); } + public static void delete(UUID player, Integer domID) { + String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "' " + + "AND dom_id = " + domID + ";"; + query(sql); + } + private final Integer id; private final UUID playerUUID; private Boolean admin; private final Integer domID; - private final Integer privilegeTemplateID; + private Boolean anchor; + private Boolean animalKilling; + private Boolean anvil; + private Boolean beacon; + private Boolean bed; + private Boolean brew; + private Boolean button; + private Boolean cake; + private Boolean container; + private Boolean craft; + private Boolean diode; + private Boolean door; + private Boolean dye; + private Boolean egg; + private Boolean enchant; + private Boolean enderPearl; + private Boolean feed; + private Boolean glow; + private Boolean honey; + private Boolean hook; + private Boolean ignite; + private Boolean mobKilling; + private Boolean move; + private Boolean place; + private Boolean pressure; + private Boolean riding; + private Boolean shear; + private Boolean shoot; + private Boolean trade; + private Boolean vehicleDestroy; + private Boolean harvest; public Integer getId() { return id; @@ -74,8 +92,283 @@ public class PlayerPrivilegeDTO { return domID; } - public Integer getPrivilegeTemplateID() { - return privilegeTemplateID; + public Boolean getAnchor() { + return anchor; + } + + public Boolean getAnimalKilling() { + return animalKilling; + } + + public Boolean getAnvil() { + return anvil; + } + + public Boolean getBeacon() { + return beacon; + } + + public Boolean getBed() { + return bed; + } + + public Boolean getBrew() { + return brew; + } + + public Boolean getButton() { + return button; + } + + public Boolean getCake() { + return cake; + } + + public Boolean getContainer() { + return container; + } + + public Boolean getCraft() { + return craft; + } + + public Boolean getDiode() { + return diode; + } + + public Boolean getDoor() { + return door; + } + + public Boolean getDye() { + return dye; + } + + public Boolean getEgg() { + return egg; + } + + public Boolean getEnchant() { + return enchant; + } + + public Boolean getEnderPearl() { + return enderPearl; + } + + public Boolean getFeed() { + return feed; + } + + public Boolean getGlow() { + return glow; + } + + public Boolean getHoney() { + return honey; + } + + public Boolean getHook() { + return hook; + } + + public Boolean getIgnite() { + return ignite; + } + + public Boolean getMobKilling() { + return mobKilling; + } + + public Boolean getMove() { + return move; + } + + public Boolean getPlace() { + return place; + } + + public Boolean getPressure() { + return pressure; + } + + public Boolean getRiding() { + return riding; + } + + public Boolean getShear() { + return shear; + } + + public Boolean getShoot() { + return shoot; + } + + public Boolean getTrade() { + return trade; + } + + public Boolean getVehicleDestroy() { + return vehicleDestroy; + } + + public Boolean getHarvest() { + return harvest; + } + + public PlayerPrivilegeDTO setAnchor(Boolean anchor) { + this.anchor = anchor; + return update(this); + } + + public PlayerPrivilegeDTO setAnimalKilling(Boolean animalKilling) { + this.animalKilling = animalKilling; + return update(this); + } + + public PlayerPrivilegeDTO setAnvil(Boolean anvil) { + this.anvil = anvil; + return update(this); + } + + public PlayerPrivilegeDTO setBeacon(Boolean beacon) { + this.beacon = beacon; + return update(this); + } + + public PlayerPrivilegeDTO setBed(Boolean bed) { + this.bed = bed; + return update(this); + } + + public PlayerPrivilegeDTO setBrew(Boolean brew) { + this.brew = brew; + return update(this); + } + + public PlayerPrivilegeDTO setButton(Boolean button) { + this.button = button; + return update(this); + } + + public PlayerPrivilegeDTO setCake(Boolean cake) { + this.cake = cake; + return update(this); + } + + public PlayerPrivilegeDTO setContainer(Boolean container) { + this.container = container; + return update(this); + } + + public PlayerPrivilegeDTO setCraft(Boolean craft) { + this.craft = craft; + return update(this); + } + + public PlayerPrivilegeDTO setDiode(Boolean diode) { + this.diode = diode; + return update(this); + } + + public PlayerPrivilegeDTO setDoor(Boolean door) { + this.door = door; + return update(this); + } + + public PlayerPrivilegeDTO setDye(Boolean dye) { + this.dye = dye; + return update(this); + } + + public PlayerPrivilegeDTO setEgg(Boolean egg) { + this.egg = egg; + return update(this); + } + + public PlayerPrivilegeDTO setEnchant(Boolean enchant) { + this.enchant = enchant; + return update(this); + } + + public PlayerPrivilegeDTO setEnderPearl(Boolean enderPearl) { + this.enderPearl = enderPearl; + return update(this); + } + + public PlayerPrivilegeDTO setFeed(Boolean feed) { + this.feed = feed; + return update(this); + } + + public PlayerPrivilegeDTO setGlow(Boolean glow) { + this.glow = glow; + return update(this); + } + + public PlayerPrivilegeDTO setHoney(Boolean honey) { + this.honey = honey; + return update(this); + } + + public PlayerPrivilegeDTO setHook(Boolean hook) { + this.hook = hook; + return update(this); + } + + public PlayerPrivilegeDTO setIgnite(Boolean ignite) { + this.ignite = ignite; + return update(this); + } + + public PlayerPrivilegeDTO setMobKilling(Boolean mobKilling) { + this.mobKilling = mobKilling; + return update(this); + } + + public PlayerPrivilegeDTO setMove(Boolean move) { + this.move = move; + return update(this); + } + + public PlayerPrivilegeDTO setPlace(Boolean place) { + this.place = place; + return update(this); + } + + public PlayerPrivilegeDTO setPressure(Boolean pressure) { + this.pressure = pressure; + return update(this); + } + + public PlayerPrivilegeDTO setRiding(Boolean riding) { + this.riding = riding; + return update(this); + } + + public PlayerPrivilegeDTO setShear(Boolean shear) { + this.shear = shear; + return update(this); + } + + public PlayerPrivilegeDTO setShoot(Boolean shoot) { + this.shoot = shoot; + return update(this); + } + + public PlayerPrivilegeDTO setTrade(Boolean trade) { + this.trade = trade; + return update(this); + } + + public PlayerPrivilegeDTO setVehicleDestroy(Boolean vehicleDestroy) { + this.vehicleDestroy = vehicleDestroy; + return update(this); + } + + public PlayerPrivilegeDTO setHarvest(Boolean harvest) { + this.harvest = harvest; + return update(this); } public PlayerPrivilegeDTO setAdmin(Boolean admin) { @@ -83,16 +376,60 @@ public class PlayerPrivilegeDTO { return update(this); } - private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Integer privilegeTemplateID) { + private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, + Boolean anchor, Boolean animalKilling, Boolean anvil, + Boolean beacon, Boolean bed, Boolean brew, Boolean button, Boolean cake, + Boolean container, Boolean craft, Boolean diode, Boolean door, Boolean dye, + Boolean egg, Boolean enchant, Boolean enderPearl, Boolean feed, Boolean glow, + Boolean honey, Boolean hook, Boolean ignite, Boolean mobKilling, Boolean move, + Boolean place, Boolean pressure, Boolean riding, Boolean shear, Boolean shoot, + Boolean trade, Boolean vehicleDestroy, Boolean harvest) { this.id = id; this.playerUUID = playerUUID; this.admin = admin; this.domID = domID; - this.privilegeTemplateID = privilegeTemplateID; + this.anchor = anchor; + this.animalKilling = animalKilling; + this.anvil = anvil; + this.beacon = beacon; + this.bed = bed; + this.brew = brew; + this.button = button; + this.cake = cake; + this.container = container; + this.craft = craft; + this.diode = diode; + this.door = door; + this.dye = dye; + this.egg = egg; + this.enchant = enchant; + this.enderPearl = enderPearl; + this.feed = feed; + this.glow = glow; + this.honey = honey; + this.hook = hook; + this.ignite = ignite; + this.mobKilling = mobKilling; + this.move = move; + this.place = place; + this.pressure = pressure; + this.riding = riding; + this.shear = shear; + this.shoot = shoot; + this.trade = trade; + this.vehicleDestroy = vehicleDestroy; + this.harvest = harvest; } - public PlayerPrivilegeDTO(UUID playerUUID, Boolean admin, Integer domID, Integer privilegeTemplateID) { - this(null, playerUUID, admin, domID, privilegeTemplateID); + public PlayerPrivilegeDTO(UUID playerUUID, Boolean admin, Integer domID) { + this(null, playerUUID, admin, domID, + false, false, false, + false, false, false, false, false, + false, false, false, false, false, + false, false, false, false, false, + false, false, false, false, false, + false, false, false, false, false, + false, false, false); } private static List query(String sql) { @@ -100,12 +437,43 @@ public class PlayerPrivilegeDTO { try (ResultSet rs = Database.query(sql)) { if (rs == null) return players; while (rs.next()) { - Integer id = rs.getInt("id"); - UUID uuid = UUID.fromString(rs.getString("player_uuid")); - Boolean admin = rs.getBoolean("admin"); - Integer domID = rs.getInt("dom_id"); - Integer privilegeTemplateID = rs.getInt("privilege_template_id"); - PlayerPrivilegeDTO player = new PlayerPrivilegeDTO(id, uuid, admin, domID, privilegeTemplateID); + PlayerPrivilegeDTO player = new PlayerPrivilegeDTO( + rs.getInt("id"), + UUID.fromString(rs.getString("player_uuid")), + rs.getBoolean("admin"), + rs.getInt("dom_id"), + rs.getBoolean("anchor"), + rs.getBoolean("animal_killing"), + rs.getBoolean("anvil"), + rs.getBoolean("beacon"), + rs.getBoolean("bed"), + rs.getBoolean("brew"), + rs.getBoolean("button"), + rs.getBoolean("cake"), + rs.getBoolean("container"), + rs.getBoolean("craft"), + rs.getBoolean("diode"), + rs.getBoolean("door"), + rs.getBoolean("dye"), + rs.getBoolean("egg"), + rs.getBoolean("enchant"), + rs.getBoolean("ender_pearl"), + rs.getBoolean("feed"), + rs.getBoolean("glow"), + rs.getBoolean("honey"), + rs.getBoolean("hook"), + rs.getBoolean("ignite"), + rs.getBoolean("mob_killing"), + rs.getBoolean("move"), + rs.getBoolean("place"), + rs.getBoolean("pressure"), + rs.getBoolean("riding"), + rs.getBoolean("shear"), + rs.getBoolean("shoot"), + rs.getBoolean("trade"), + rs.getBoolean("vehicle_destroy"), + rs.getBoolean("harvest") + ); players.add(player); } } catch (Exception e) { @@ -119,8 +487,39 @@ public class PlayerPrivilegeDTO { String sql = "UPDATE player_privilege SET " + "admin = " + player.getAdmin() + ", " + "dom_id = " + player.getDomID() + ", " + - "privilege_template_id = " + player.getPrivilegeTemplateID() + " " + - "WHERE id = " + player.getId() + ";"; + "anchor = " + player.getAnchor() + ", " + + "animal_killing = " + player.getAnimalKilling() + ", " + + "anvil = " + player.getAnvil() + ", " + + "beacon = " + player.getBeacon() + ", " + + "bed = " + player.getBed() + ", " + + "brew = " + player.getBrew() + ", " + + "button = " + player.getButton() + ", " + + "cake = " + player.getCake() + ", " + + "container = " + player.getContainer() + ", " + + "craft = " + player.getCraft() + ", " + + "diode = " + player.getDiode() + ", " + + "door = " + player.getDoor() + ", " + + "dye = " + player.getDye() + ", " + + "egg = " + player.getEgg() + ", " + + "enchant = " + player.getEnchant() + ", " + + "ender_pearl = " + player.getEnderPearl() + ", " + + "feed = " + player.getFeed() + ", " + + "glow = " + player.getGlow() + ", " + + "honey = " + player.getHoney() + ", " + + "hook = " + player.getHook() + ", " + + "ignite = " + player.getIgnite() + ", " + + "mob_killing = " + player.getMobKilling() + ", " + + "move = " + player.getMove() + ", " + + "place = " + player.getPlace() + ", " + + "pressure = " + player.getPressure() + ", " + + "riding = " + player.getRiding() + ", " + + "shear = " + player.getShear() + ", " + + "shoot = " + player.getShoot() + ", " + + "trade = " + player.getTrade() + ", " + + "vehicle_destroy = " + player.getVehicleDestroy() + ", " + + "harvest = " + player.getHarvest() + " " + + "WHERE id = " + player.getId() + " " + + "RETURNING *;"; List players = query(sql); if (players.size() == 0) return null; return players.get(0); diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PrivilegeTemplateDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PrivilegeTemplateDTO.java deleted file mode 100644 index bde5b81..0000000 --- a/src/main/java/cn/lunadeer/dominion/dtos/PrivilegeTemplateDTO.java +++ /dev/null @@ -1,561 +0,0 @@ -package cn.lunadeer.dominion.dtos; - -import cn.lunadeer.dominion.utils.Database; -import cn.lunadeer.dominion.utils.XLogger; - -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -public class PrivilegeTemplateDTO { - - public static PrivilegeTemplateDTO insert(PrivilegeTemplateDTO privilege) { - String sql = "INSERT INTO privilege_template (name, creator, team) " + - "VALUES ('" + - privilege.getName() + "', '" + - privilege.getCreator().toString() + "', " + - privilege.getGroup() + ") " + - "RETURNING *;"; - List templates = query(sql); - if (templates.size() == 0) return null; - return templates.get(0); - } - - public static List selectAll() { - String sql = "SELECT * FROM privilege_template;"; - return query(sql); - } - - public static List searchGroup(String name){ - String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%' AND team = true;"; - return query(sql); - } - - public static List selectGroup(UUID creator){ - String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "' AND team = true;"; - return query(sql); - } - - public static PrivilegeTemplateDTO select(Integer id) { - String sql = "SELECT * FROM privilege_template WHERE id = " + id + ";"; - List templates = query(sql); - if (templates.size() == 0) return null; - return templates.get(0); - } - - public static PrivilegeTemplateDTO select(UUID creator, String name) { - String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "' AND name = '" + name + "';"; - List templates = query(sql); - if (templates.size() == 0) return null; - return templates.get(0); - } - - public static List search(String name) { - String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%';"; - return query(sql); - } - - public static List search(UUID creator) { - String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "';"; - return query(sql); - } - - public static void delete(PrivilegeTemplateDTO privilege) { - String sql = "DELETE FROM privilege_template WHERE id = " + privilege.getId() + ";"; - query(sql); - } - - public static void delete(UUID creator, String name) { - String sql = "DELETE FROM privilege_template WHERE creator = '" + creator.toString() + "' AND name = '" + name + "';"; - query(sql); - } - - private static PrivilegeTemplateDTO update(PrivilegeTemplateDTO privilege) { - String sql = "UPDATE privilege_template SET " + - "name = '" + privilege.getName() + "', " + - "creator = '" + privilege.getCreator().toString() + "', " + - "team = " + privilege.getGroup() + ", " + - "anchor = " + privilege.getAnchor() + ", " + - "animal_killing = " + privilege.getAnimalKilling() + ", " + - "anvil = " + privilege.getAnvil() + ", " + - "beacon = " + privilege.getBeacon() + ", " + - "bed = " + privilege.getBed() + ", " + - "brew = " + privilege.getBrew() + ", " + - "button = " + privilege.getButton() + ", " + - "cake = " + privilege.getCake() + ", " + - "container = " + privilege.getContainer() + ", " + - "craft = " + privilege.getCraft() + ", " + - "diode = " + privilege.getDiode() + ", " + - "door = " + privilege.getDoor() + ", " + - "dye = " + privilege.getDye() + ", " + - "egg = " + privilege.getEgg() + ", " + - "enchant = " + privilege.getEnchant() + ", " + - "ender_pearl = " + privilege.getEnderPearl() + ", " + - "feed = " + privilege.getFeed() + ", " + - "glow = " + privilege.getGlow() + ", " + - "honey = " + privilege.getHoney() + ", " + - "hook = " + privilege.getHook() + ", " + - "ignite = " + privilege.getIgnite() + ", " + - "mob_killing = " + privilege.getMobKilling() + ", " + - "move = " + privilege.getMove() + ", " + - "place = " + privilege.getPlace() + ", " + - "pressure = " + privilege.getPressure() + ", " + - "riding = " + privilege.getRiding() + ", " + - "shear = " + privilege.getShear() + ", " + - "shoot = " + privilege.getShoot() + ", " + - "trade = " + privilege.getTrade() + ", " + - "vehicle_destroy = " + privilege.getVehicleDestroy() + ", " + - "harvest = " + privilege.getHarvest() + " " + - "WHERE id = " + privilege.getId() + " " + - "RETURNING *;"; - List templates = query(sql); - if (templates.size() == 0) return null; - return templates.get(0); - } - - private final Integer id; - private String name; - private final UUID creator; - private final Boolean team; - private Boolean anchor; - private Boolean animalKilling; - private Boolean anvil; - private Boolean beacon; - private Boolean bed; - private Boolean brew; - private Boolean button; - private Boolean cake; - private Boolean container; - private Boolean craft; - private Boolean diode; - private Boolean door; - private Boolean dye; - private Boolean egg; - private Boolean enchant; - private Boolean enderPearl; - private Boolean feed; - private Boolean glow; - private Boolean honey; - private Boolean hook; - private Boolean ignite; - private Boolean mobKilling; - private Boolean move; - private Boolean place; - private Boolean pressure; - private Boolean riding; - private Boolean shear; - private Boolean shoot; - private Boolean trade; - private Boolean vehicleDestroy; - private Boolean harvest; - - public Integer getId() { - return id; - } - - public String getName() { - return name; - } - - public UUID getCreator() { - return creator; - } - - public Boolean getGroup() { - return team; - } - - public Boolean getAnchor() { - return anchor; - } - - public Boolean getAnimalKilling() { - return animalKilling; - } - - public Boolean getAnvil() { - return anvil; - } - - public Boolean getBeacon() { - return beacon; - } - - public Boolean getBed() { - return bed; - } - - public Boolean getBrew() { - return brew; - } - - public Boolean getButton() { - return button; - } - - public Boolean getCake() { - return cake; - } - - public Boolean getContainer() { - return container; - } - - public Boolean getCraft() { - return craft; - } - - public Boolean getDiode() { - return diode; - } - - public Boolean getDoor() { - return door; - } - - public Boolean getDye() { - return dye; - } - - public Boolean getEgg() { - return egg; - } - - public Boolean getEnchant() { - return enchant; - } - - public Boolean getEnderPearl() { - return enderPearl; - } - - public Boolean getFeed() { - return feed; - } - - public Boolean getGlow() { - return glow; - } - - public Boolean getHoney() { - return honey; - } - - public Boolean getHook() { - return hook; - } - - public Boolean getIgnite() { - return ignite; - } - - public Boolean getMobKilling() { - return mobKilling; - } - - public Boolean getMove() { - return move; - } - - public Boolean getPlace() { - return place; - } - - public Boolean getPressure() { - return pressure; - } - - public Boolean getRiding() { - return riding; - } - - public Boolean getShear() { - return shear; - } - - public Boolean getShoot() { - return shoot; - } - - public Boolean getTrade() { - return trade; - } - - public Boolean getVehicleDestroy() { - return vehicleDestroy; - } - - public Boolean getHarvest() { - return harvest; - } - - public PrivilegeTemplateDTO setName(String name) { - this.name = name; - return update(this); - } - - public PrivilegeTemplateDTO setAnchor(Boolean anchor) { - this.anchor = anchor; - return update(this); - } - - public PrivilegeTemplateDTO setAnimalKilling(Boolean animalKilling) { - this.animalKilling = animalKilling; - return update(this); - } - - public PrivilegeTemplateDTO setAnvil(Boolean anvil) { - this.anvil = anvil; - return update(this); - } - - public PrivilegeTemplateDTO setBeacon(Boolean beacon) { - this.beacon = beacon; - return update(this); - } - - public PrivilegeTemplateDTO setBed(Boolean bed) { - this.bed = bed; - return update(this); - } - - public PrivilegeTemplateDTO setBrew(Boolean brew) { - this.brew = brew; - return update(this); - } - - public PrivilegeTemplateDTO setButton(Boolean button) { - this.button = button; - return update(this); - } - - public PrivilegeTemplateDTO setCake(Boolean cake) { - this.cake = cake; - return update(this); - } - - public PrivilegeTemplateDTO setContainer(Boolean container) { - this.container = container; - return update(this); - } - - public PrivilegeTemplateDTO setCraft(Boolean craft) { - this.craft = craft; - return update(this); - } - - public PrivilegeTemplateDTO setDiode(Boolean diode) { - this.diode = diode; - return update(this); - } - - public PrivilegeTemplateDTO setDoor(Boolean door) { - this.door = door; - return update(this); - } - - public PrivilegeTemplateDTO setDye(Boolean dye) { - this.dye = dye; - return update(this); - } - - public PrivilegeTemplateDTO setEgg(Boolean egg) { - this.egg = egg; - return update(this); - } - - public PrivilegeTemplateDTO setEnchant(Boolean enchant) { - this.enchant = enchant; - return update(this); - } - - public PrivilegeTemplateDTO setEnderPearl(Boolean enderPearl) { - this.enderPearl = enderPearl; - return update(this); - } - - public PrivilegeTemplateDTO setFeed(Boolean feed) { - this.feed = feed; - return update(this); - } - - public PrivilegeTemplateDTO setGlow(Boolean glow) { - this.glow = glow; - return update(this); - } - - public PrivilegeTemplateDTO setHoney(Boolean honey) { - this.honey = honey; - return update(this); - } - - public PrivilegeTemplateDTO setHook(Boolean hook) { - this.hook = hook; - return update(this); - } - - public PrivilegeTemplateDTO setIgnite(Boolean ignite) { - this.ignite = ignite; - return update(this); - } - - public PrivilegeTemplateDTO setMobKilling(Boolean mobKilling) { - this.mobKilling = mobKilling; - return update(this); - } - - public PrivilegeTemplateDTO setMove(Boolean move) { - this.move = move; - return update(this); - } - - public PrivilegeTemplateDTO setPlace(Boolean place) { - this.place = place; - return update(this); - } - - public PrivilegeTemplateDTO setPressure(Boolean pressure) { - this.pressure = pressure; - return update(this); - } - - public PrivilegeTemplateDTO setRiding(Boolean riding) { - this.riding = riding; - return update(this); - } - - public PrivilegeTemplateDTO setShear(Boolean shear) { - this.shear = shear; - return update(this); - } - - public PrivilegeTemplateDTO setShoot(Boolean shoot) { - this.shoot = shoot; - return update(this); - } - - public PrivilegeTemplateDTO setTrade(Boolean trade) { - this.trade = trade; - return update(this); - } - - public PrivilegeTemplateDTO setVehicleDestroy(Boolean vehicleDestroy) { - this.vehicleDestroy = vehicleDestroy; - return update(this); - } - - public PrivilegeTemplateDTO setHarvest(Boolean harvest) { - this.harvest = harvest; - return update(this); - } - - public PrivilegeTemplateDTO(String name, UUID creator, Boolean team) { - this(null, name, creator, team, - false, false, false, - false, false, false, false, false, - false, false, false, false, false, - false, false, false, false, false, - false, false, false, false, false, - false, false, false, false, false, - false, false, false); - } - - private PrivilegeTemplateDTO(Integer id, String name, UUID creator, Boolean team, - Boolean anchor, Boolean animalKilling, Boolean anvil, - Boolean beacon, Boolean bed, Boolean brew, Boolean button, Boolean cake, - Boolean container, Boolean craft, Boolean diode, Boolean door, Boolean dye, - Boolean egg, Boolean enchant, Boolean enderPearl, Boolean feed, Boolean glow, - Boolean honey, Boolean hook, Boolean ignite, Boolean mobKilling, Boolean move, - Boolean place, Boolean pressure, Boolean riding, Boolean shear, Boolean shoot, - Boolean trade, Boolean vehicleDestroy, Boolean harvest) { - this.id = id; - this.name = name; - this.creator = creator; - this.team = team; - this.anchor = anchor; - this.animalKilling = animalKilling; - this.anvil = anvil; - this.beacon = beacon; - this.bed = bed; - this.brew = brew; - this.button = button; - this.cake = cake; - this.container = container; - this.craft = craft; - this.diode = diode; - this.door = door; - this.dye = dye; - this.egg = egg; - this.enchant = enchant; - this.enderPearl = enderPearl; - this.feed = feed; - this.glow = glow; - this.honey = honey; - this.hook = hook; - this.ignite = ignite; - this.mobKilling = mobKilling; - this.move = move; - this.place = place; - this.pressure = pressure; - this.riding = riding; - this.shear = shear; - this.shoot = shoot; - this.trade = trade; - this.vehicleDestroy = vehicleDestroy; - this.harvest = harvest; - } - - private static List query(String sql) { - List privilegeTemplates = new ArrayList<>(); - try (ResultSet rs = Database.query(sql)) { - if (rs == null) return privilegeTemplates; - while (rs.next()) { - PrivilegeTemplateDTO privilegeTemplate = new PrivilegeTemplateDTO( - rs.getInt("id"), - rs.getString("name"), - UUID.fromString(rs.getString("creator")), - rs.getBoolean("team"), - rs.getBoolean("anchor"), - rs.getBoolean("animal_killing"), - rs.getBoolean("anvil"), - rs.getBoolean("beacon"), - rs.getBoolean("bed"), - rs.getBoolean("brew"), - rs.getBoolean("button"), - rs.getBoolean("cake"), - rs.getBoolean("container"), - rs.getBoolean("craft"), - rs.getBoolean("diode"), - rs.getBoolean("door"), - rs.getBoolean("dye"), - rs.getBoolean("egg"), - rs.getBoolean("enchant"), - rs.getBoolean("ender_pearl"), - rs.getBoolean("feed"), - rs.getBoolean("glow"), - rs.getBoolean("honey"), - rs.getBoolean("hook"), - rs.getBoolean("ignite"), - rs.getBoolean("mob_killing"), - rs.getBoolean("move"), - rs.getBoolean("place"), - rs.getBoolean("pressure"), - rs.getBoolean("riding"), - rs.getBoolean("shear"), - rs.getBoolean("shoot"), - rs.getBoolean("trade"), - rs.getBoolean("vehicle_destroy"), - rs.getBoolean("harvest") - ); - privilegeTemplates.add(privilegeTemplate); - } - } catch (SQLException e) { - XLogger.err("Database query failed: " + e.getMessage()); - XLogger.err("SQL: " + sql); - } - return privilegeTemplates; - } - -} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java new file mode 100644 index 0000000..c21e1c8 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java @@ -0,0 +1,76 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.utils.Notification; +import cn.lunadeer.dominion.utils.STUI.Button; +import cn.lunadeer.dominion.utils.STUI.Line; +import cn.lunadeer.dominion.utils.STUI.ListView; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion; + +public class Apis { + + public static int getPage(String[] args) { + int page = 1; + if (args.length == 2) { + try { + page = Integer.parseInt(args[1]); + } catch (Exception e) { + return 1; + } + } + return page; + } + + public static DominionDTO getDominion(Player player, String[] args) { + if (args.length == 2) { + return DominionDTO.select(args[1]); + } else { + return getPlayerCurrentDominion(player); + } + } + + public static boolean noAuthToManage(Player player, DominionDTO dominion) { + if (player.isOp()) return false; + if (!dominion.getOwner().equals(player.getUniqueId())) { + PlayerPrivilegeDTO privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId()); + if (privileges == null || !privileges.getAdmin()) { + Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者或管理员,无权访问此页面"); + return true; + } + } + return false; + } + + public static void printHelp(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + int page = getPage(args); + ListView view = ListView.create(5, "/dominion help"); + view.title("领地插件命令帮助") + .add(Line.create().append("打开交互菜单").append(Button.create("/dominion menu", "/dominion menu"))) + .add(Line.create().append("列出所有领地").append(Button.create("/dominion list", "/dominion list"))) + .add(Line.create().append("查看帮助").append(Button.create("/dominion help [页码]", "/dominion help 1"))) + .add(Line.create().append("查看领地信息").append(Button.create("/dominion info [领地名称]", "/dominion info"))) + .add(Line.create().append("查看领地权限信息").append(Button.create("/dominion flag_info <领地名称> [页码]", "/dominion flag_info"))) + .add(Line.create().append("管理领地").append("/dominion manage <领地名称>")) + .add(Line.create().append("创建领地").append("/dominion create <领地名称>")) + .add(Line.create().append("自动创建领地").append("/dominion auto_create <领地名称>")) + .add(Line.create().append("创建子领地").append("/dominion create_sub <子领地名称> [父领地名称]")) + .add(Line.create().append("自动创建子领地").append("/dominion auto_create_sub <子领地名称> [父领地名称]")) + .add(Line.create().append("扩张领地").append("/dominion expand [大小] [领地名称]")) + .add(Line.create().append("缩小领地").append("/dominion contract [大小] [领地名称]")) + .add(Line.create().append("删除领地").append("/dominion delete <领地名称> [force]")) + .add(Line.create().append("设置领地权限").append("/dominion set <权限名称> [领地名称]")) + .add(Line.create().append("设置玩家权限").append("/dominion set_privilege <玩家名称> <权限名称> [领地名称]")) + .add(Line.create().append("重置玩家权限").append("/dominion clear_privilege <玩家名称> [领地名称]")) + .add(Line.create().append("查看领地玩家特权列表").append("/dominion privilege_list [领地名称] [页码]")) + .add(Line.create().append("查看玩家权限信息").append("/dominion privilege_info <玩家名称> [领地名称] [页码]")) + .showOn(player, page); + } + +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java new file mode 100644 index 0000000..2b856a4 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java @@ -0,0 +1,376 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.utils.Notification; +import cn.lunadeer.dominion.utils.STUI.Button; +import cn.lunadeer.dominion.utils.STUI.Line; +import cn.lunadeer.dominion.utils.STUI.ListView; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; + +public class DominionFlagInfo { + + 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 <领地名称> [页码]"); + return; + } + DominionDTO dominion = DominionDTO.select(args[1]); + if (dominion == null) { + Notification.error(sender, "领地 " + args[1] + " 不存在"); + return; + } + int page = 1; + if (args.length == 3) { + try { + page = Integer.parseInt(args[2]); + } catch (Exception ignored) { + } + } + ListView view = ListView.create(6, "/dominion flag_info " + dominion.getName()); + view.title("领地 " + dominion.getName() + " 默认权限") + .navigator(Line.create() + .append(Button.create("主菜单", "/dominion menu")) + .append(Button.create("我的领地", "/dominion list")) + .append(Button.create("管理界面", "/dominion manage " + dominion.getName())) + .append("权限列表")); + if (dominion.getAnchor()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set anchor false " + dominion.getName() + " " + page)) + .append("重生锚")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set anchor true " + dominion.getName() + " " + page)) + .append("重生锚")); + } + if (dominion.getAnimalKilling()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set animal_killing false " + dominion.getName() + " " + page)) + .append("动物伤害")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set animal_killing true " + dominion.getName() + " " + page)) + .append("动物伤害")); + } + if (dominion.getAnvil()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set anvil false " + dominion.getName() + " " + page)) + .append("使用铁砧")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set anvil true " + dominion.getName() + " " + page)) + .append("使用铁砧")); + } + if (dominion.getBeacon()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set beacon false " + dominion.getName() + " " + page)) + .append("信标交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set beacon true " + dominion.getName() + " " + page)) + .append("信标交互")); + } + if (dominion.getBed()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set bed false " + dominion.getName() + " " + page)) + .append("床交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set bed true " + dominion.getName() + " " + page)) + .append("床交互")); + } + if (dominion.getBrew()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set brew false " + dominion.getName() + " " + page)) + .append("使用酿造台")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set brew true " + dominion.getName() + " " + page)) + .append("使用酿造台")); + } + if (dominion.getButton()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set button false " + dominion.getName() + " " + page)) + .append("使用按钮")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set button true " + dominion.getName() + " " + page)) + .append("使用按钮")); + } + if (dominion.getCake()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set cake false " + dominion.getName() + " " + page)) + .append("使用蛋糕")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set cake true " + dominion.getName() + " " + page)) + .append("使用蛋糕")); + } + if (dominion.getContainer()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set container false " + dominion.getName() + " " + page)) + .append("容器交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set container true " + dominion.getName() + " " + page)) + .append("容器交互")); + } + if (dominion.getCraft()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set craft false " + dominion.getName() + " " + page)) + .append("合成")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set craft true " + dominion.getName() + " " + page)) + .append("合成")); + } + if (dominion.getCreeperExplode()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set creeper_explode false " + dominion.getName() + " " + page)) + .append("苦力怕爆炸")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set creeper_explode true " + dominion.getName() + " " + page)) + .append("苦力怕爆炸")); + } + if (dominion.getDiode()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set diode false " + dominion.getName() + " " + page)) + .append("中继器交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set diode true " + dominion.getName() + " " + page)) + .append("中继器交互")); + } + if (dominion.getDoor()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set door false " + dominion.getName() + " " + page)) + .append("门交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set door true " + dominion.getName() + " " + page)) + .append("门交互")); + } + if (dominion.getDye()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set dye false " + dominion.getName() + " " + page)) + .append("染色")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set dye true " + dominion.getName() + " " + page)) + .append("染色")); + } + if (dominion.getEgg()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set egg false " + dominion.getName() + " " + page)) + .append("投掷鸡蛋")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set egg true " + dominion.getName() + " " + page)) + .append("投掷鸡蛋")); + } + if (dominion.getEnchant()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set enchant false " + dominion.getName() + " " + page)) + .append("附魔")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set enchant true " + dominion.getName() + " " + page)) + .append("附魔")); + } + if (dominion.getEnderPearl()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set ender_pearl false " + dominion.getName() + " " + page)) + .append("末影珍珠")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set ender_pearl true " + dominion.getName() + " " + page)) + .append("末影珍珠")); + } + if (dominion.getFeed()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set feed false " + dominion.getName() + " " + page)) + .append("喂食")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set feed true " + dominion.getName() + " " + page)) + .append("喂食")); + } + if (dominion.getFireSpread()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set fire_spread false " + dominion.getName() + " " + page)) + .append("火焰蔓延")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set fire_spread true " + dominion.getName() + " " + page)) + .append("火焰蔓延")); + } + if (dominion.getFlowInProtection()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set flow_in_protection false " + dominion.getName() + " " + page)) + .append("流体保护")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set flow_in_protection true " + dominion.getName() + " " + page)) + .append("流体保护")); + } + if (dominion.getGlow()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set glow false " + dominion.getName() + " " + page)) + .append("发光")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set glow true " + dominion.getName() + " " + page)) + .append("发光")); + } + if (dominion.getGrow()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set grow false " + dominion.getName() + " " + page)) + .append("植物生长")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set grow true " + dominion.getName() + " " + page)) + .append("植物生长")); + } + if (dominion.getHoney()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set honey false " + dominion.getName() + " " + page)) + .append("蜂巢交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set honey true " + dominion.getName() + " " + page)) + .append("蜂巢交互")); + } + if (dominion.getHook()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set hook false " + dominion.getName() + " " + page)) + .append("钩子交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set hook true " + dominion.getName() + " " + page)) + .append("钩子交互")); + } + if (dominion.getIgnite()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set ignite false " + dominion.getName() + " " + page)) + .append("点燃")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set ignite true " + dominion.getName() + " " + page)) + .append("点燃")); + } + if (dominion.getMobKilling()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set mob_killing false " + dominion.getName() + " " + page)) + .append("生物伤害")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set mob_killing true " + dominion.getName() + " " + page)) + .append("生物伤害")); + } + if (dominion.getMove()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set move false " + dominion.getName() + " " + page)) + .append("移动")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set move true " + dominion.getName() + " " + page)) + .append("移动")); + } + if (dominion.getPlace()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set place false " + dominion.getName() + " " + page)) + .append("放置")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set place true " + dominion.getName() + " " + page)) + .append("放置")); + } + if (dominion.getPressure()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set pressure false " + dominion.getName() + " " + page)) + .append("压力板交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set pressure true " + dominion.getName() + " " + page)) + .append("压力板交互")); + } + if (dominion.getRiding()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set riding false " + dominion.getName() + " " + page)) + .append("骑乘")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set riding true " + dominion.getName() + " " + page)) + .append("骑乘")); + } + if (dominion.getShear()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set shear false " + dominion.getName() + " " + page)) + .append("剪羊毛")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set shear true " + dominion.getName() + " " + page)) + .append("剪羊毛")); + } + if (dominion.getShoot()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set shoot false " + dominion.getName() + " " + page)) + .append("发射")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set shoot true " + dominion.getName() + " " + page)) + .append("发射")); + } + if (dominion.getTntExplode()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set tnt_explode false " + dominion.getName() + " " + page)) + .append("TNT爆炸")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set tnt_explode true " + dominion.getName() + " " + page)) + .append("TNT爆炸")); + } + if (dominion.getTrade()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set trade false " + dominion.getName() + " " + page)) + .append("交易")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set trade true " + dominion.getName() + " " + page)) + .append("交易")); + } + if (dominion.getVehicleDestroy()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set vehicle_destroy false " + dominion.getName() + " " + page)) + .append("破坏载具")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set vehicle_destroy true " + dominion.getName() + " " + page)) + .append("破坏载具")); + } + if (dominion.getWitherSpawn()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set wither_spawn false " + dominion.getName() + " " + page)) + .append("凋零生成")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set wither_spawn true " + dominion.getName() + " " + page)) + .append("凋零生成")); + } + if (dominion.getHarvest()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set harvest false " + dominion.getName() + " " + page)) + .append("收获")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set harvest true " + dominion.getName() + " " + page)) + .append("收获")); + } + view.showOn(player, page); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java new file mode 100644 index 0000000..1e52e5b --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java @@ -0,0 +1,45 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.utils.Notification; +import cn.lunadeer.dominion.utils.STUI.Button; +import cn.lunadeer.dominion.utils.STUI.Line; +import cn.lunadeer.dominion.utils.STUI.View; +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.getDominion; +import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; + +public class DominionManage { + public static void show(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + DominionDTO dominion = getDominion(player, args); + if (dominion == null) { + Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion manage <领地名称>"); + return; + } + if (noAuthToManage(player, dominion)) return; + Line size_info = Line.create() + .append(Button.create("尺寸信息", "/dominion info " + dominion.getName())) + .append("查看领地尺寸信息"); + Line flag_info = Line.create() + .append(Button.create("权限设置", "/dominion flag_info " + dominion.getName())) + .append("管理领地默认权限"); + Line privilege_list = Line.create() + .append(Button.create("玩家权限", "/dominion privilege_list " + dominion.getName())) + .append("管理玩家特权"); + View view = View.create(); + view.title("领地 " + dominion.getName() + " 管理界面") + .navigator(Line.create() + .append(Button.create("主菜单", "/dominion menu")) + .append(Button.create("我的领地", "/dominion list")) + .append(dominion.getName())) + .addLine(size_info) + .addLine(flag_info) + .addLine(privilege_list) + .showOn(player); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java new file mode 100644 index 0000000..bac391b --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java @@ -0,0 +1,62 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.PlayerDTO; +import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.utils.Notification; +import cn.lunadeer.dominion.utils.STUI.Button; +import cn.lunadeer.dominion.utils.STUI.Line; +import cn.lunadeer.dominion.utils.STUI.ListView; +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.getDominion; +import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; + +public class DominionPrivilegeList { + + public static void show(CommandSender sender, String[] args) { + int page = 1; + if (args.length == 3) { + try { + page = Integer.parseInt(args[2]); + } catch (Exception ignored) { + } + } + Player player = playerOnly(sender); + if (player == null) return; + DominionDTO dominion = getDominion(player, args); + if (dominion == null) { + Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_list <领地名称>"); + return; + } + ListView view = ListView.create(5, "/dominion privilege_list " + dominion.getName()); + if (noAuthToManage(player, dominion)) return; + List privileges = PlayerPrivilegeDTO.select(dominion.getId()); + if (privileges.isEmpty()) { + Notification.warn(sender, "领地 " + dominion.getName() + " 没有任何玩家拥有特权"); + return; + } + view.title("领地 " + dominion.getName() + " 玩家特权列表"); + view.navigator( + Line.create() + .append(Button.create("主菜单", "/dominion menu")) + .append(Button.create("我的领地", "/dominion list")) + .append(Button.create("管理界面", "/dominion manage " + dominion.getName())) + .append("特权列表") + ); + for (PlayerPrivilegeDTO privilege : privileges) { + PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID()); + if (p_player == null) continue; + view.add(Line.create() + .append(p_player.getLastKnownName()) + .append(Button.createGreen("管理", "/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName())) + .append(Button.createRed("清空", "/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName())) + ); + } + view.showOn(player, page); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionSizeInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionSizeInfo.java new file mode 100644 index 0000000..58d1fb6 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionSizeInfo.java @@ -0,0 +1,45 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.controllers.PlayerController; +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.PlayerDTO; +import cn.lunadeer.dominion.utils.Notification; +import cn.lunadeer.dominion.utils.STUI.Button; +import cn.lunadeer.dominion.utils.STUI.Line; +import cn.lunadeer.dominion.utils.STUI.View; +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.getDominion; + +public class DominionSizeInfo { + public static void show(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + DominionDTO dominion = getDominion(player, args); + if (dominion == null) { + Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion info <领地名称>"); + return; + } + PlayerDTO owner = PlayerController.getPlayerDTO(dominion.getOwner()); + Integer x1 = dominion.getX1(); + Integer y1 = dominion.getY1(); + Integer z1 = dominion.getZ1(); + Integer x2 = dominion.getX2(); + Integer y2 = dominion.getY2(); + Integer z2 = dominion.getZ2(); + View view = View.create(); + view.title("领地 " + dominion.getName() + " 的尺寸信息") + .subtitle("领地归属:" + owner.getLastKnownName()) + .addLine(Line.create().append("领地大小:").append((x2 - x1) + " x" + (y2 - y1) + " x" + (z2 - z1))) + .addLine(Line.create().append("中心坐标:").append((x1 + (x2 - x1) / 2) + " " + (y1 + (y2 - y1) / 2) + " " + (z1 + (z2 - z1) / 2))) + .addLine(Line.create().append("垂直高度:").append(String.valueOf(y2 - y1))) + .addLine(Line.create().append("水平面积:").append(String.valueOf((x2 - x1) * (z2 - z1)))) + .addLine(Line.create().append("领地体积:").append(String.valueOf((x2 - x1) * (y2 - y1) * (z2 - z1)))) + .actionBar(Line.create() + .append(Button.create("管理界面", "/dominion manage " + dominion.getName())) + .append(Button.create("权限列表", "/dominion flag_info " + dominion.getName()))) + .showOn(player); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java b/src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java new file mode 100644 index 0000000..9ba3430 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java @@ -0,0 +1,37 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.utils.Notification; +import cn.lunadeer.dominion.utils.STUI.Button; +import cn.lunadeer.dominion.utils.STUI.Line; +import cn.lunadeer.dominion.utils.STUI.ListView; +import net.kyori.adventure.text.TextComponent; +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.commands.Helper.playerDominions; +import static cn.lunadeer.dominion.tuis.Apis.getPage; + +public class ListDominion { + public static void show(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + int page = getPage(args); + ListView view = ListView.create(5, "/dominion list"); + List dominions = playerDominions(sender); + if (dominions.isEmpty()) { + Notification.warn(sender, "你没有任何领地"); + return; + } + view.title("我的领地列表"); + view.navigator(Line.create().append(Button.create("主菜单", "/dominion menu")).append("我的领地")); + for (String dominion : dominions) { + TextComponent manage = Button.createGreen("管理", "/dominion manage " + dominion); + TextComponent delete = Button.createRed("删除", "/dominion delete " + dominion); + view.add(Line.create().append(dominion).append(manage).append(delete)); + } + view.showOn(player, page); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java new file mode 100644 index 0000000..d568700 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java @@ -0,0 +1,28 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.utils.STUI.Button; +import cn.lunadeer.dominion.utils.STUI.Line; +import cn.lunadeer.dominion.utils.STUI.View; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; + +public class Menu { + public static void show(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + Line list = Line.create() + .append(Button.create("我的领地", "/dominion list")) + .append("查看我的领地"); + Line help = Line.create() + .append(Button.create("指令帮助", "/dominion help")) + .append("查看指令帮助"); + View view = View.create(); + view.title("Dominion 领地系统") + .navigator(Line.create().append("主菜单")) + .addLine(list) + .addLine(help) + .showOn(player); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java new file mode 100644 index 0000000..d004650 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java @@ -0,0 +1,337 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.PlayerDTO; +import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.utils.Notification; +import cn.lunadeer.dominion.utils.STUI.Button; +import cn.lunadeer.dominion.utils.STUI.Line; +import cn.lunadeer.dominion.utils.STUI.ListView; +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.getDominion; +import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; + +public class PrivilegeInfo { + // /dominion privilege_info <玩家名称> [领地名称] [页码] + public static void show(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + DominionDTO dominion = getDominion(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 <玩家名称> [领地名称]"); + return; + } + ListView view = ListView.create(5, "/dominion privilege_info " + playerName + " " + dominion.getName()); + if (noAuthToManage(player, dominion)) return; + PlayerDTO playerDTO = PlayerDTO.select(playerName); + if (playerDTO == null) { + Notification.error(sender, "玩家 " + playerName + " 不存在"); + return; + } + PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(playerDTO.getUuid(), dominion.getId()); + if (privilege == null) { + Notification.warn(sender, "玩家 " + playerName + " 没有任何特权"); + return; + } + view.title("玩家 " + playerName + " 在领地 " + dominion.getName() + " 的特权信息"); + view.navigator( + Line.create() + .append(Button.create("主菜单", "/dominion menu")) + .append(Button.create("我的领地", "/dominion list")) + .append(Button.create("管理界面", "/dominion manage " + dominion.getName())) + .append(Button.create("特权列表", "/dominion privilege_list " + dominion.getName())) + .append("特权信息") + ); + if (privilege.getAnchor()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " anchor false " + dominion.getName() + " " + page)) + .append("重生锚")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " anchor true " + dominion.getName() + " " + page)) + .append("重生锚")); + } + if (privilege.getAnimalKilling()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " animal_killing false " + dominion.getName() + " " + page)) + .append("动物伤害")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " animal_killing true " + dominion.getName() + " " + page)) + .append("动物伤害")); + } + if (privilege.getAnvil()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " anvil false " + dominion.getName() + " " + page)) + .append("使用铁砧")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " anvil true " + dominion.getName() + " " + page)) + .append("使用铁砧")); + } + if (privilege.getBeacon()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " beacon false " + dominion.getName() + " " + page)) + .append("信标交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " beacon true " + dominion.getName() + " " + page)) + .append("信标交互")); + } + if (privilege.getBed()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " bed false " + dominion.getName() + " " + page)) + .append("床交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " bed true " + dominion.getName() + " " + page)) + .append("床交互")); + } + if (privilege.getBrew()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " brew false " + dominion.getName() + " " + page)) + .append("使用酿造台")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " brew true " + dominion.getName() + " " + page)) + .append("使用酿造台")); + } + if (privilege.getButton()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " button false " + dominion.getName() + " " + page)) + .append("使用按钮")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " button true " + dominion.getName() + " " + page)) + .append("使用按钮")); + } + if (privilege.getCake()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " cake false " + dominion.getName() + " " + page)) + .append("使用蛋糕")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " cake true " + dominion.getName() + " " + page)) + .append("使用蛋糕")); + } + if (privilege.getContainer()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " container false " + dominion.getName() + " " + page)) + .append("容器交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " container true " + dominion.getName() + " " + page)) + .append("容器交互")); + } + if (privilege.getCraft()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " craft false " + dominion.getName() + " " + page)) + .append("合成")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " craft true " + dominion.getName() + " " + page)) + .append("合成")); + } + if (privilege.getDiode()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " diode false " + dominion.getName() + " " + page)) + .append("中继器交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " diode true " + dominion.getName() + " " + page)) + .append("中继器交互")); + } + if (privilege.getDoor()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " door false " + dominion.getName() + " " + page)) + .append("门交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " door true " + dominion.getName() + " " + page)) + .append("门交互")); + } + if (privilege.getDye()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " dye false " + dominion.getName() + " " + page)) + .append("染色")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " dye true " + dominion.getName() + " " + page)) + .append("染色")); + } + if (privilege.getEgg()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " egg false " + dominion.getName() + " " + page)) + .append("投掷鸡蛋")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " egg true " + dominion.getName() + " " + page)) + .append("投掷鸡蛋")); + } + if (privilege.getEnchant()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " enchant false " + dominion.getName() + " " + page)) + .append("附魔")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " enchant true " + dominion.getName() + " " + page)) + .append("附魔")); + } + if (privilege.getEnderPearl()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " ender_pearl false " + dominion.getName() + " " + page)) + .append("末影珍珠")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " ender_pearl true " + dominion.getName() + " " + page)) + .append("末影珍珠")); + } + if (privilege.getFeed()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " feed false " + dominion.getName() + " " + page)) + .append("喂食")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " feed true " + dominion.getName() + " " + page)) + .append("喂食")); + } + if (privilege.getGlow()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " glow false " + dominion.getName() + " " + page)) + .append("发光")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " glow true " + dominion.getName() + " " + page)) + .append("发光")); + } + if (privilege.getHoney()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " honey false " + dominion.getName() + " " + page)) + .append("蜂巢交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " honey true " + dominion.getName() + " " + page)) + .append("蜂巢交互")); + } + if (privilege.getHook()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " hook false " + dominion.getName() + " " + page)) + .append("钩子交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " hook true " + dominion.getName() + " " + page)) + .append("钩子交互")); + } + if (privilege.getIgnite()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " ignite false " + dominion.getName() + " " + page)) + .append("点燃")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " ignite true " + dominion.getName() + " " + page)) + .append("点燃")); + } + if (privilege.getMobKilling()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " mob_killing false " + dominion.getName() + " " + page)) + .append("生物伤害")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " mob_killing true " + dominion.getName() + " " + page)) + .append("生物伤害")); + } + if (privilege.getMove()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " move false " + dominion.getName() + " " + page)) + .append("移动")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " move true " + dominion.getName() + " " + page)) + .append("移动")); + } + if (privilege.getPlace()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " place false " + dominion.getName() + " " + page)) + .append("放置")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " place true " + dominion.getName() + " " + page)) + .append("放置")); + } + if (privilege.getPressure()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " pressure false " + dominion.getName() + " " + page)) + .append("压力板交互")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " pressure true " + dominion.getName() + " " + page)) + .append("压力板交互")); + } + if (privilege.getRiding()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " riding false " + dominion.getName() + " " + page)) + .append("骑乘")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " riding true " + dominion.getName() + " " + page)) + .append("骑乘")); + } + if (privilege.getShear()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " shear false " + dominion.getName() + " " + page)) + .append("剪羊毛")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " shear true " + dominion.getName() + " " + page)) + .append("剪羊毛")); + } + if (privilege.getShoot()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " shoot false " + dominion.getName() + " " + page)) + .append("发射")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " shoot true " + dominion.getName() + " " + page)) + .append("发射")); + } + if (privilege.getTrade()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " trade false " + dominion.getName() + " " + page)) + .append("交易")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " trade true " + dominion.getName() + " " + page)) + .append("交易")); + } + if (privilege.getVehicleDestroy()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " vehicle_destroy false " + dominion.getName() + " " + page)) + .append("破坏载具")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " vehicle_destroy true " + dominion.getName() + " " + page)) + .append("破坏载具")); + } + if (privilege.getHarvest()) { + view.add(Line.create() + .append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " harvest false " + dominion.getName() + " " + page)) + .append("收获")); + } else { + view.add(Line.create() + .append(Button.createRed("☐", "/dominion set_privilege " + playerName + " harvest true " + dominion.getName() + " " + page)) + .append("收获")); + } + view.showOn(player, page); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/utils/Database.java b/src/main/java/cn/lunadeer/dominion/utils/Database.java index 9eb48de..f174a68 100644 --- a/src/main/java/cn/lunadeer/dominion/utils/Database.java +++ b/src/main/java/cn/lunadeer/dominion/utils/Database.java @@ -105,13 +105,13 @@ public class Database { " FOREIGN KEY (parent_dom_id) REFERENCES dominion(id)" + ");"; - // privilege template - sql += "CREATE TABLE IF NOT EXISTS privilege_template (" + + // player privilege + sql += "CREATE TABLE IF NOT EXISTS player_privilege (" + " id SERIAL PRIMARY KEY," + - " name TEXT NOT NULL," + - " creator VARCHAR(36) NOT NULL," + - " team BOOLEAN NOT NULL DEFAULT TRUE," + + " player_uuid VARCHAR(36) NOT NULL," + + " dom_id INT NOT NULL," + + " admin BOOLEAN NOT NULL DEFAULT FALSE," + " anchor BOOLEAN NOT NULL DEFAULT FALSE," + " animal_killing BOOLEAN NOT NULL DEFAULT FALSE," + " anvil BOOLEAN NOT NULL DEFAULT FALSE," + @@ -143,20 +143,9 @@ public class Database { " trade BOOLEAN NOT NULL DEFAULT FALSE," + " vehicle_destroy BOOLEAN NOT NULL DEFAULT FALSE," + " harvest BOOLEAN NOT NULL DEFAULT FALSE," + - " UNIQUE (name, creator)," + - " FOREIGN KEY (creator) REFERENCES player_name(uuid)" + - ");"; - // player dominion privilege - sql += "CREATE TABLE IF NOT EXISTS player_dom_privilege (" + - " id SERIAL PRIMARY KEY," + - " player_uuid VARCHAR(36) NOT NULL," + - " admin BOOLEAN NOT NULL DEFAULT FALSE," + - " dom_id INT NOT NULL," + - " privilege_template_id INT NOT NULL," + " FOREIGN KEY (player_uuid) REFERENCES player_name(uuid)," + - " FOREIGN KEY (dom_id) REFERENCES dominion(id)," + - " FOREIGN KEY (privilege_template_id) REFERENCES privilege_template(id)" + + " FOREIGN KEY (dom_id) REFERENCES dominion(id)" + ");"; sql += "INSERT INTO player_name (" + diff --git a/src/main/java/cn/lunadeer/dominion/utils/STUI/View.java b/src/main/java/cn/lunadeer/dominion/utils/STUI/View.java index 6f988a0..df8b218 100644 --- a/src/main/java/cn/lunadeer/dominion/utils/STUI/View.java +++ b/src/main/java/cn/lunadeer/dominion/utils/STUI/View.java @@ -10,7 +10,6 @@ import java.util.List; import static cn.lunadeer.dominion.utils.STUI.ViewStyles.main_color; public class View { - protected TextComponent title_decorate = Component.text("━", main_color); protected TextComponent space = Component.text(" "); protected TextComponent sub_title_decorate = Component.text("- ", main_color); protected TextComponent line_decorate = Component.text("⌗ ", main_color); @@ -23,18 +22,11 @@ public class View { protected TextComponent divide_line = Component.text("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", main_color); public void showOn(Player player) { - player.sendMessage(edge); + // player.sendMessage(edge); TextComponent.Builder builder = Component.text(); - int title_length = title.content().length(); - int title_width = title_length * 2 + 2; - int decorate_count = divide_line.content().length() - title_width; - for (int i = 0; i < decorate_count / 2; i++) { - builder.append(title_decorate); - } + builder.append(Component.text("__/", main_color)); builder.append(space).append(title).append(space); - for (int i = 0; i < decorate_count / 2; i++) { - builder.append(title_decorate); - } + builder.append(Component.text("\\__", main_color)); player.sendMessage(builder.build()); if (subtitle != null) { player.sendMessage(divide_line);