From d28d20757b04b39157f4c2b981b5878cf5872557 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Wed, 12 Jun 2024 15:08:22 +0800 Subject: [PATCH 01/19] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E4=BA=86=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 +- src/main/java/cn/lunadeer/dominion/Cache.java | 14 ++ .../java/cn/lunadeer/dominion/Commands.java | 7 + .../lunadeer/dominion/commands/Migration.java | 71 +++++++++ .../lunadeer/dominion/dtos/DominionDTO.java | 13 +- .../java/cn/lunadeer/dominion/tuis/Menu.java | 6 +- .../lunadeer/dominion/tuis/MigrateList.java | 67 ++++++++ .../lunadeer/dominion/utils/ResMigration.java | 144 ++++++++++++++++++ .../dominion/utils/Residence/Message.java | 24 +++ .../dominion/utils/Residence/Permission.java | 24 +++ .../dominion/utils/Residence/Residence.java | 62 ++++++++ .../dominion/utils/Residence/SaveFile.java | 25 +++ 12 files changed, 456 insertions(+), 8 deletions(-) create mode 100644 src/main/java/cn/lunadeer/dominion/commands/Migration.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java create mode 100644 src/main/java/cn/lunadeer/dominion/utils/ResMigration.java create mode 100644 src/main/java/cn/lunadeer/dominion/utils/Residence/Message.java create mode 100644 src/main/java/cn/lunadeer/dominion/utils/Residence/Permission.java create mode 100644 src/main/java/cn/lunadeer/dominion/utils/Residence/Residence.java create mode 100644 src/main/java/cn/lunadeer/dominion/utils/Residence/SaveFile.java diff --git a/pom.xml b/pom.xml index 3d4700e..c80edf7 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.31.1-beta + 1.32.0-beta jar Dominion @@ -90,5 +90,10 @@ v2.6.2 provided + + org.yaml + snakeyaml + 2.0 + diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index ce65544..b7456c6 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -4,6 +4,7 @@ import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.utils.ResMigration; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.ParticleRender; import cn.lunadeer.minecraftpluginutils.Scheduler; @@ -27,6 +28,13 @@ public class Cache { player_current_dominion_id = new HashMap<>(); loadDominions(); loadPlayerPrivileges(); + List residences = ResMigration.extractFromResidence(Dominion.instance); + for (ResMigration.ResidenceNode node : residences) { + if (!residence_data.containsKey(node.owner)) { + residence_data.put(node.owner, new ArrayList<>()); + } + residence_data.get(node.owner).add(node); + } } /** @@ -301,6 +309,10 @@ public class Cache { return count; } + public List getResidenceData(UUID player_uuid) { + return residence_data.get(player_uuid); + } + public List getDominions() { return new ArrayList<>(id_dominions.values()); } @@ -318,4 +330,6 @@ public class Cache { private static final long UPDATE_INTERVAL = 1000 * 4; public final Map NextTimeAllowTeleport = new java.util.HashMap<>(); + + private final Map> residence_data = new HashMap<>(); } diff --git a/src/main/java/cn/lunadeer/dominion/Commands.java b/src/main/java/cn/lunadeer/dominion/Commands.java index 6b1699c..1a4c34c 100644 --- a/src/main/java/cn/lunadeer/dominion/Commands.java +++ b/src/main/java/cn/lunadeer/dominion/Commands.java @@ -5,6 +5,7 @@ import cn.lunadeer.dominion.controllers.PlayerController; import cn.lunadeer.dominion.cuis.*; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.dominion.tuis.*; +import cn.lunadeer.dominion.tuis.MigrateList; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; @@ -174,6 +175,12 @@ public class Commands implements TabExecutor { case "select_template": SelectTemplate.show(sender, args); break; + case "migrate_list": + MigrateList.show(sender, args); + break; + case "migration": + Migration.migrate(sender, args); + break; // ---=== CUI ===--- case "cui_rename": RenameDominion.open(sender, args); diff --git a/src/main/java/cn/lunadeer/dominion/commands/Migration.java b/src/main/java/cn/lunadeer/dominion/commands/Migration.java new file mode 100644 index 0000000..324a6e5 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/commands/Migration.java @@ -0,0 +1,71 @@ +package cn.lunadeer.dominion.commands; + +import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; +import cn.lunadeer.dominion.controllers.DominionController; +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.utils.ResMigration; +import cn.lunadeer.minecraftpluginutils.Notification; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.Objects; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; + +public class Migration { + + public static void migrate(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + if (args.length != 2) { + Notification.error(sender, "用法: /dominion migrate "); + return; + } + String resName = args[1]; + List res_data = Cache.instance.getResidenceData(player.getUniqueId()); + if (res_data == null) { + Notification.error(sender, "你没有可迁移的数据"); + return; + } + ResMigration.ResidenceNode resNode = res_data.stream().filter(node -> node.name.equals(resName)).findFirst().orElse(null); + if (resNode == null) { + Notification.error(sender, "未找到指定的 Residence 领地"); + return; + } + create(player, resNode); + } + + private static void create(Player player, ResMigration.ResidenceNode node) { + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + operator.getResponse().thenAccept(result -> { + if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.SUCCESS)) { + DominionDTO dominion = DominionDTO.select(node.name); + if (dominion == null) { + return; + } + dominion.setTpLocation(node.tpLoc) + .setJoinMessage(node.joinMessage) + .setLeaveMessage(node.leaveMessage); + for (String msg : result.getMessages()) { + Notification.info(player, msg); + } + if (node.children != null) { + for (ResMigration.ResidenceNode child : node.children) { + create(player, child); + } + } + } else if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.WARNING)) { + for (String msg : result.getMessages()) { + Notification.warn(player, msg); + } + } else { + for (String msg : result.getMessages()) { + Notification.error(player, msg); + } + } + }); + DominionController.create(operator, node.name, node.loc1, node.loc2); + } +} diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java index 08f8089..ff34660 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java @@ -116,7 +116,7 @@ public class DominionDTO { for (Flag f : Flag.getAllDominionFlags()) { sql.append(f.getDefaultValue()).append(", "); } - sql.append("'default', ?, ?"); + sql.append("?, ?, ?"); sql.append(") RETURNING *;"); List dominions = query(sql.toString(), dominion.getOwner(), @@ -128,8 +128,9 @@ public class DominionDTO { dominion.getX2(), dominion.getY2(), dominion.getZ2(), - "欢迎来到 ${DOM_NAME}!", - "你正在离开 ${DOM_NAME},欢迎下次光临~" + dominion.tp_location, + dominion.getJoinMessage(), + dominion.getLeaveMessage() ); if (dominions.size() == 0) return null; return dominions.get(0); @@ -234,10 +235,10 @@ public class DominionDTO { private Integer y2; private Integer z2; private Integer parentDomId = -1; - private String joinMessage = "欢迎"; - private String leaveMessage = "再见"; + private String joinMessage = "欢迎来到 ${DOM_NAME}!"; + private String leaveMessage = "你正在离开 ${DOM_NAME},欢迎下次光临~"; private final Map flags = new HashMap<>(); - private String tp_location; + private String tp_location = "default"; // getters and setters public Integer getId() { diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java index f719426..e1094ae 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java @@ -38,6 +38,9 @@ public class Menu { Line link = Line.create() .append(Button.create("使用文档").setOpenURL("https://ssl.lunadeer.cn:14448/doc/23/").build()) .append("在浏览器中打开使用文档"); + Line migrate = Line.create() + .append(Button.create("迁移数据").setExecuteCommand("/dominion migrate_list").build()) + .append("把你的领地从Residence迁移到Dominion"); Line all = Line.create() .append(Button.create("所有领地").setExecuteCommand("/dominion all_dominion").build()) .append("查看所有领地"); @@ -57,7 +60,8 @@ public class Menu { .add(list) .add(template) .add(help) - .add(link); + .add(link) + .add(migrate); if (player.isOp()) { view.add(Line.create().append("")); view.add(Line.create().append(Component.text("--- 以下选项仅OP可见 ---", ViewStyles.main_color))); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java b/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java new file mode 100644 index 0000000..59ca2de --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java @@ -0,0 +1,67 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.utils.ResMigration; +import cn.lunadeer.minecraftpluginutils.stui.ListView; +import cn.lunadeer.minecraftpluginutils.stui.components.Button; +import cn.lunadeer.minecraftpluginutils.stui.components.Line; +import net.kyori.adventure.text.TextComponent; +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.playerOnly; + +public class MigrateList { + + public static void show(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + + int page = 1; + if (args.length == 2) { + try { + page = Integer.parseInt(args[1]); + } catch (Exception ignored) { + } + } + + ListView view = ListView.create(10, "/dominion migrate_list"); + + view.title("从 Residence 迁移数据"); + view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("Res数据")); + + List res_data = Cache.instance.getResidenceData(player.getUniqueId()); + + if (res_data == null) { + view.add(Line.create().append("你没有可迁移的数据")); + } else { + view.addLines(BuildTreeLines(res_data, 0)); + } + + view.showOn(player, page); + } + + public static List BuildTreeLines(List dominionTree, Integer depth) { + List lines = new ArrayList<>(); + StringBuilder prefix = new StringBuilder(); + for (int i = 0; i < depth; i++) { + prefix.append(" | "); + } + for (ResMigration.ResidenceNode node : dominionTree) { + TextComponent migrate = Button.create("迁移").setExecuteCommand("/dominion migrate " + node.name).build(); + Line line = Line.create(); + if (depth == 0) { + line.append(migrate); + } else { + line.append(" "); + } + line.append(prefix + node.name); + lines.add(line); + lines.addAll(BuildTreeLines(node.children, depth + 1)); + } + return lines; + } +} diff --git a/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java b/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java new file mode 100644 index 0000000..f44ef18 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java @@ -0,0 +1,144 @@ +package cn.lunadeer.dominion.utils; + +import cn.lunadeer.dominion.Dominion; +import cn.lunadeer.dominion.dtos.PlayerDTO; +import cn.lunadeer.dominion.utils.Residence.Residence; +import cn.lunadeer.dominion.utils.Residence.SaveFile; +import cn.lunadeer.minecraftpluginutils.XLogger; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.yaml.snakeyaml.Yaml; + +import java.io.File; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class ResMigration { + + + /* +Residences: + '03': + TPLoc: -3967.62:48.0:-1988.87:4.8:-5.08 + Messages: 1 + Permissions: + PlayerFlags: + 3244b8fb-3cf9-433e-8f4a-bb90bf6d4f54: 1 + 8075e1ae-62fc-482f-b3af-3fc5b2770a2c: 2 + 0a23b4e5-f18e-4f8b-947d-558444bb27ca: 3 + AreaFlags: 4 + OwnerUUID: 8075e1ae-62fc-482f-b3af-3fc5b2770a2c + OwnerLastKnownName: guajn + CreatedOn: 1630491137410 + Areas: + main: -3998:0:-2014:-3939:255:-1955 + '04': + TPLoc: -5640.7:189.0:-2029.38:40.35:-96.3 + Messages: 1 + Permissions: + PlayerFlags: + 8075e1ae-62fc-482f-b3af-3fc5b2770a2c: 2 + 0a23b4e5-f18e-4f8b-947d-558444bb27ca: 1 + AreaFlags: 5 + OwnerUUID: 8075e1ae-62fc-482f-b3af-3fc5b2770a2c + OwnerLastKnownName: guajn + CreatedOn: 1641656609270 + Areas: + main: -5673:0:-2055:-5609:255:-2005 + */ + public static class ResidenceNode { + public UUID owner; + public World world; + public String name; + public Location loc1; + public Location loc2; + public Location tpLoc; + public String joinMessage; + public String leaveMessage; + public List children = new ArrayList<>(); + } + + public static List extractFromResidence(JavaPlugin plugin) { + List dominions = new ArrayList<>(); + File resSave = new File(plugin.getDataFolder().getParent(), "Residence"); + resSave = new File(resSave, "Save"); + resSave = new File(resSave, "Worlds"); + if (!resSave.exists()) { + XLogger.info("Residence Save not found"); + return dominions; + } + // list .yml files + File[] files = resSave.listFiles((dir, name) -> name.endsWith(".yml")); + if (files == null || files.length == 0) { + XLogger.info("No save files found"); + return dominions; + } + for (File file : files) { + try { + dominions.addAll(processWorld(file)); + } catch (Exception e) { + XLogger.err("Failed to process file: %s, %s", file.getName(), e.getMessage()); + } + } + return dominions; + } + + private static ResidenceNode parseDominion(String name, World world, Residence res, SaveFile save) { + Player bukkitOwner = Dominion.instance.getServer().getPlayer(res.Permissions.OwnerUUID); + if (bukkitOwner == null) { + XLogger.warn("Owner not found: " + res.Permissions.OwnerUUID); + return null; + } + PlayerDTO owner = PlayerDTO.get(bukkitOwner); + String[] loc = res.Areas.get("main").split(":"); + if (loc.length != 6) { + XLogger.warn("Invalid location: " + res.Areas.get("main")); + return null; + } + ResidenceNode dominionNode = new ResidenceNode(); + dominionNode.owner = owner.getUuid(); + dominionNode.world = world; + dominionNode.name = name; + dominionNode.joinMessage = save.Messages.get(res.Messages).EnterMessage; + dominionNode.leaveMessage = save.Messages.get(res.Messages).LeaveMessage; + dominionNode.loc1 = new Location(world, Double.parseDouble(loc[0]), Double.parseDouble(loc[1]), Double.parseDouble(loc[2])); + dominionNode.loc2 = new Location(world, Double.parseDouble(loc[3]), Double.parseDouble(loc[4]), Double.parseDouble(loc[5])); + String[] tpLocStr = res.TPLoc.split(":"); + if (tpLocStr.length == 3) { + dominionNode.tpLoc = new Location(world, Double.parseDouble(tpLocStr[0]), Double.parseDouble(tpLocStr[1]), Double.parseDouble(tpLocStr[2])); + } + if (res.Subzones != null) { + for (Map.Entry entry : res.Subzones.entrySet()) { + ResidenceNode sub = parseDominion(entry.getKey(), world, entry.getValue(), save); + if (sub != null) { + dominionNode.children.add(sub); + } + } + } + return dominionNode; + } + + private static List processWorld(File saveFile) throws Exception { + String worldName = saveFile.getName().replace("res_", "").replace(".yml", ""); + World world = Dominion.instance.getServer().getWorld(worldName); + Yaml yaml = new Yaml(); + InputStream inputStream = Files.newInputStream(saveFile.toPath()); + SaveFile save = yaml.loadAs(inputStream, SaveFile.class); + inputStream.close(); + List dominions = new ArrayList<>(); + for (Map.Entry entry : save.Residences.entrySet()) { + String name = entry.getKey(); + Residence residence = entry.getValue(); + ResidenceNode dominion = parseDominion(name, world, residence, save); + dominions.add(dominion); + } + return dominions; + } + +} diff --git a/src/main/java/cn/lunadeer/dominion/utils/Residence/Message.java b/src/main/java/cn/lunadeer/dominion/utils/Residence/Message.java new file mode 100644 index 0000000..8dc1d24 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/utils/Residence/Message.java @@ -0,0 +1,24 @@ +package cn.lunadeer.dominion.utils.Residence; + +public class Message { + public String LeaveMessage; + public String EnterMessage; + + // getters and setters + + public String getLeaveMessage() { + return LeaveMessage; + } + + public void setLeaveMessage(String leaveMessage) { + LeaveMessage = leaveMessage; + } + + public String getEnterMessage() { + return EnterMessage; + } + + public void setEnterMessage(String enterMessage) { + EnterMessage = enterMessage; + } +} \ No newline at end of file diff --git a/src/main/java/cn/lunadeer/dominion/utils/Residence/Permission.java b/src/main/java/cn/lunadeer/dominion/utils/Residence/Permission.java new file mode 100644 index 0000000..71a46ae --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/utils/Residence/Permission.java @@ -0,0 +1,24 @@ +package cn.lunadeer.dominion.utils.Residence; + +public class Permission { + public String OwnerUUID; + public String OwnerLastKnownName; + + // getters and setters + + public String getOwnerUUID() { + return OwnerUUID; + } + + public void setOwnerUUID(String ownerUUID) { + OwnerUUID = ownerUUID; + } + + public String getOwnerLastKnownName() { + return OwnerLastKnownName; + } + + public void setOwnerLastKnownName(String ownerLastKnownName) { + OwnerLastKnownName = ownerLastKnownName; + } +} \ No newline at end of file diff --git a/src/main/java/cn/lunadeer/dominion/utils/Residence/Residence.java b/src/main/java/cn/lunadeer/dominion/utils/Residence/Residence.java new file mode 100644 index 0000000..3cca76f --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/utils/Residence/Residence.java @@ -0,0 +1,62 @@ +package cn.lunadeer.dominion.utils.Residence; + +import java.util.Map; + +public class Residence { + public String TPLoc; + public Map Subzones; + public int Messages; + public Permission Permissions; + public long CreatedOn; + public Map Areas; + + // getters and setters + + public String getTPLoc() { + return TPLoc; + } + + public void setTPLoc(String TPLoc) { + this.TPLoc = TPLoc; + } + + public Map getSubzones() { + return Subzones; + } + + public void setSubzones(Map subzones) { + Subzones = subzones; + } + + public int getMessages() { + return Messages; + } + + public void setMessages(int messages) { + Messages = messages; + } + + public Permission getPermissions() { + return Permissions; + } + + public void setPermissions(Permission permissions) { + Permissions = permissions; + } + + public long getCreatedOn() { + return CreatedOn; + } + + public void setCreatedOn(long createdOn) { + CreatedOn = createdOn; + } + + public Map getAreas() { + return Areas; + } + + public void setAreas(Map areas) { + Areas = areas; + } +} \ No newline at end of file diff --git a/src/main/java/cn/lunadeer/dominion/utils/Residence/SaveFile.java b/src/main/java/cn/lunadeer/dominion/utils/Residence/SaveFile.java new file mode 100644 index 0000000..6bdc34f --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/utils/Residence/SaveFile.java @@ -0,0 +1,25 @@ +package cn.lunadeer.dominion.utils.Residence; + +import java.util.Map; + +public class SaveFile { + public Map Residences; + public Map Messages; + + // getters and setters + public Map getResidences() { + return Residences; + } + + public void setResidences(Map residences) { + Residences = residences; + } + + public Map getMessages() { + return Messages; + } + + public void setMessages(Map messages) { + Messages = messages; + } +} \ No newline at end of file From 98093f2532888bd0ee294cec317e0e911e96a31b Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Tue, 25 Jun 2024 17:38:28 +0800 Subject: [PATCH 02/19] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E4=BA=86=E4=BB=8Eresidence=E8=BF=81=E7=A7=BB=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/cn/lunadeer/dominion/Cache.java | 24 ++++-- .../java/cn/lunadeer/dominion/Commands.java | 2 +- .../lunadeer/dominion/commands/Migration.java | 59 +++++++++------ .../lunadeer/dominion/dtos/DominionDTO.java | 6 +- .../cn/lunadeer/dominion/dtos/PlayerDTO.java | 13 ++++ .../lunadeer/dominion/tuis/MigrateList.java | 17 +++-- .../lunadeer/dominion/utils/ResMigration.java | 73 +++++++++++++++---- .../dominion/utils/Residence/Residence.java | 9 --- .../java/cn/lunadeer/dominion/utils/Time.java | 40 ---------- 10 files changed, 144 insertions(+), 101 deletions(-) delete mode 100644 src/main/java/cn/lunadeer/dominion/utils/Time.java diff --git a/pom.xml b/pom.xml index c80edf7..ffdaabb 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.32.0-beta + 1.32.0-res-migrate-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index b7456c6..a816f42 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -28,13 +28,6 @@ public class Cache { player_current_dominion_id = new HashMap<>(); loadDominions(); loadPlayerPrivileges(); - List residences = ResMigration.extractFromResidence(Dominion.instance); - for (ResMigration.ResidenceNode node : residences) { - if (!residence_data.containsKey(node.owner)) { - residence_data.put(node.owner, new ArrayList<>()); - } - residence_data.get(node.owner).add(node); - } } /** @@ -310,6 +303,21 @@ public class Cache { } public List getResidenceData(UUID player_uuid) { + if (residence_data == null) { + residence_data = new HashMap<>(); + List residences = ResMigration.extractFromResidence(Dominion.instance); + for (ResMigration.ResidenceNode node : residences) { + if (node == null) { + continue; + } + if (!residence_data.containsKey(node.owner)) { + XLogger.debug("residence_data put %s", node.owner); + residence_data.put(node.owner, new ArrayList<>()); + } + residence_data.get(node.owner).add(node); + } + XLogger.debug("residence_data: %d", residence_data.size()); + } return residence_data.get(player_uuid); } @@ -331,5 +339,5 @@ public class Cache { public final Map NextTimeAllowTeleport = new java.util.HashMap<>(); - private final Map> residence_data = new HashMap<>(); + private Map> residence_data = null; } diff --git a/src/main/java/cn/lunadeer/dominion/Commands.java b/src/main/java/cn/lunadeer/dominion/Commands.java index 1a4c34c..77ec964 100644 --- a/src/main/java/cn/lunadeer/dominion/Commands.java +++ b/src/main/java/cn/lunadeer/dominion/Commands.java @@ -178,7 +178,7 @@ public class Commands implements TabExecutor { case "migrate_list": MigrateList.show(sender, args); break; - case "migration": + case "migrate": Migration.migrate(sender, args); break; // ---=== CUI ===--- diff --git a/src/main/java/cn/lunadeer/dominion/commands/Migration.java b/src/main/java/cn/lunadeer/dominion/commands/Migration.java index 324a6e5..3673a1f 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Migration.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Migration.java @@ -4,6 +4,7 @@ import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.DominionController; import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.tuis.MigrateList; import cn.lunadeer.dominion.utils.ResMigration; import cn.lunadeer.minecraftpluginutils.Notification; import org.bukkit.command.CommandSender; @@ -17,28 +18,43 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly; public class Migration { public static void migrate(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length != 2) { - Notification.error(sender, "用法: /dominion migrate "); - return; + try { + Player player = playerOnly(sender); + if (player == null) return; + if (args.length < 2) { + Notification.error(sender, "用法: /dominion migrate "); + return; + } + String resName = args[1]; + List res_data = Cache.instance.getResidenceData(player.getUniqueId()); + if (res_data == null) { + Notification.error(sender, "你没有可迁移的数据"); + return; + } + ResMigration.ResidenceNode resNode = res_data.stream().filter(node -> node.name.equals(resName)).findFirst().orElse(null); + if (resNode == null) { + Notification.error(sender, "未找到指定的 Residence 领地"); + return; + } + if (!resNode.owner.equals(player.getUniqueId())) { + Notification.error(sender, "你不是该领地的所有者,无法迁移此领地"); + return; + } + create(player, resNode, ""); + if (args.length == 3 ) { + int parentId = Integer.parseInt(args[2]); + String[] newArgs = new String[2]; + newArgs[0] = "migrate_list"; + newArgs[1] = String.valueOf(parentId); + MigrateList.show(sender, newArgs); + } + } catch (Exception e) { + Notification.error(sender, "迁移失败: " + e.getMessage()); } - String resName = args[1]; - List res_data = Cache.instance.getResidenceData(player.getUniqueId()); - if (res_data == null) { - Notification.error(sender, "你没有可迁移的数据"); - return; - } - ResMigration.ResidenceNode resNode = res_data.stream().filter(node -> node.name.equals(resName)).findFirst().orElse(null); - if (resNode == null) { - Notification.error(sender, "未找到指定的 Residence 领地"); - return; - } - create(player, resNode); } - private static void create(Player player, ResMigration.ResidenceNode node) { - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + private static void create(Player player, ResMigration.ResidenceNode node, String parentName) { + BukkitPlayerOperator operator = new BukkitPlayerOperator(player); operator.getResponse().thenAccept(result -> { if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.SUCCESS)) { DominionDTO dominion = DominionDTO.select(node.name); @@ -51,9 +67,10 @@ public class Migration { for (String msg : result.getMessages()) { Notification.info(player, msg); } + Notification.info(player, "领地 " + node.name + " 已从 Residence 迁移至 Dominion"); if (node.children != null) { for (ResMigration.ResidenceNode child : node.children) { - create(player, child); + create(player, child, node.name); } } } else if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.WARNING)) { @@ -66,6 +83,6 @@ public class Migration { } } }); - DominionController.create(operator, node.name, node.loc1, node.loc2); + DominionController.create(operator, node.name, node.loc1, node.loc2, parentName); } } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java index ff34660..d68d3ac 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java @@ -411,7 +411,11 @@ public class DominionDTO { } public DominionDTO setTpLocation(Location loc) { - this.tp_location = loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ(); + if (loc != null) { + this.tp_location = loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ(); + } else { + this.tp_location = "default"; + } return update(this); } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java index 4825423..bedb5bf 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java @@ -1,8 +1,10 @@ package cn.lunadeer.dominion.dtos; import cn.lunadeer.dominion.Dominion; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; +import javax.annotation.Nullable; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; @@ -19,6 +21,17 @@ public class PlayerDTO { return re; } + public static @Nullable PlayerDTO get(OfflinePlayer player) { + if (player.getName() == null) { + return null; + } + PlayerDTO re = select(player.getUniqueId()); + if (re == null) { + re = insert(new PlayerDTO(player.getUniqueId(), player.getName(), System.currentTimeMillis())); + } + return re; + } + public static List all() { String sql = "SELECT * FROM player_name WHERE id > 0;"; return query(sql); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java b/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java index 59ca2de..55e2569 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java @@ -5,7 +5,11 @@ import cn.lunadeer.dominion.utils.ResMigration; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; import cn.lunadeer.minecraftpluginutils.stui.components.Line; +import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -38,29 +42,32 @@ public class MigrateList { if (res_data == null) { view.add(Line.create().append("你没有可迁移的数据")); } else { - view.addLines(BuildTreeLines(res_data, 0)); + view.addLines(BuildTreeLines(res_data, 0, page)); } view.showOn(player, page); } - public static List BuildTreeLines(List dominionTree, Integer depth) { + public static List BuildTreeLines(List dominionTree, Integer depth, int page) { List lines = new ArrayList<>(); StringBuilder prefix = new StringBuilder(); for (int i = 0; i < depth; i++) { prefix.append(" | "); } for (ResMigration.ResidenceNode node : dominionTree) { - TextComponent migrate = Button.create("迁移").setExecuteCommand("/dominion migrate " + node.name).build(); + TextComponent migrate = Button.create("迁移").setExecuteCommand("/dominion migrate " + node.name + " " + page).build(); Line line = Line.create(); if (depth == 0) { line.append(migrate); } else { - line.append(" "); + line.append(Component.text("[迁移]", + Style.style(TextColor.color(190, 190, 190), + TextDecoration.STRIKETHROUGH)) + .hoverEvent(Component.text("子领地无法手动迁移,会随父领地自动迁移"))); } line.append(prefix + node.name); lines.add(line); - lines.addAll(BuildTreeLines(node.children, depth + 1)); + lines.addAll(BuildTreeLines(node.children, depth + 1, page)); } return lines; } diff --git a/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java b/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java index f44ef18..5c5170d 100644 --- a/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java +++ b/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java @@ -2,22 +2,21 @@ package cn.lunadeer.dominion.utils; import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.PlayerDTO; +import cn.lunadeer.dominion.utils.Residence.Message; +import cn.lunadeer.dominion.utils.Residence.Permission; import cn.lunadeer.dominion.utils.Residence.Residence; import cn.lunadeer.dominion.utils.Residence.SaveFile; import cn.lunadeer.minecraftpluginutils.XLogger; import org.bukkit.Location; +import org.bukkit.OfflinePlayer; import org.bukkit.World; -import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.yaml.snakeyaml.Yaml; import java.io.File; import java.io.InputStream; import java.nio.file.Files; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; public class ResMigration { @@ -70,7 +69,7 @@ Residences: resSave = new File(resSave, "Save"); resSave = new File(resSave, "Worlds"); if (!resSave.exists()) { - XLogger.info("Residence Save not found"); + XLogger.info("Residence Save not found, skipping migration"); return dominions; } // list .yml files @@ -86,17 +85,18 @@ Residences: XLogger.err("Failed to process file: %s, %s", file.getName(), e.getMessage()); } } + XLogger.info("Extract %d residences", dominions.size()); return dominions; } private static ResidenceNode parseDominion(String name, World world, Residence res, SaveFile save) { - Player bukkitOwner = Dominion.instance.getServer().getPlayer(res.Permissions.OwnerUUID); - if (bukkitOwner == null) { + OfflinePlayer bukkitOwner = Dominion.instance.getServer().getOfflinePlayer(UUID.fromString(res.Permissions.OwnerUUID)); + PlayerDTO owner = PlayerDTO.get(bukkitOwner); + if (owner == null) { XLogger.warn("Owner not found: " + res.Permissions.OwnerUUID); return null; } - PlayerDTO owner = PlayerDTO.get(bukkitOwner); - String[] loc = res.Areas.get("main").split(":"); + String[] loc = res.Areas.values().toArray()[0].toString().split(":"); if (loc.length != 6) { XLogger.warn("Invalid location: " + res.Areas.get("main")); return null; @@ -109,9 +109,11 @@ Residences: dominionNode.leaveMessage = save.Messages.get(res.Messages).LeaveMessage; dominionNode.loc1 = new Location(world, Double.parseDouble(loc[0]), Double.parseDouble(loc[1]), Double.parseDouble(loc[2])); dominionNode.loc2 = new Location(world, Double.parseDouble(loc[3]), Double.parseDouble(loc[4]), Double.parseDouble(loc[5])); - String[] tpLocStr = res.TPLoc.split(":"); - if (tpLocStr.length == 3) { - dominionNode.tpLoc = new Location(world, Double.parseDouble(tpLocStr[0]), Double.parseDouble(tpLocStr[1]), Double.parseDouble(tpLocStr[2])); + if (res.TPLoc != null) { + String[] tpLocStr = res.TPLoc.split(":"); + if (tpLocStr.length == 3) { + dominionNode.tpLoc = new Location(world, Double.parseDouble(tpLocStr[0]), Double.parseDouble(tpLocStr[1]), Double.parseDouble(tpLocStr[2])); + } } if (res.Subzones != null) { for (Map.Entry entry : res.Subzones.entrySet()) { @@ -124,12 +126,53 @@ Residences: return dominionNode; } + private static Map parseResYml(Map zones) { + Map res = new HashMap<>(); + for (Map.Entry entry : zones.entrySet()) { + Map zone = (Map) entry.getValue(); + Residence residence = new Residence(); + if (zone.containsKey("TPLoc")) { + residence.setTPLoc((String) zone.get("TPLoc")); + } + residence.setMessages((int) zone.get("Messages")); + Permission permission = new Permission(); + permission.OwnerUUID = ((Map) zone.get("Permissions")).get("OwnerUUID").toString(); + permission.OwnerLastKnownName = ((Map) zone.get("Permissions")).get("OwnerLastKnownName").toString(); + residence.setPermissions(permission); + residence.setAreas((Map) zone.get("Areas")); + if (zone.containsKey("Subzones")) { + residence.setSubzones(parseResYml((Map) zone.get("Subzones"))); + } + res.put(entry.getKey(), residence); + } + return res; + } + private static List processWorld(File saveFile) throws Exception { + XLogger.debug("====================================="); + XLogger.debug("Processing file: %s", saveFile.getName()); String worldName = saveFile.getName().replace("res_", "").replace(".yml", ""); World world = Dominion.instance.getServer().getWorld(worldName); - Yaml yaml = new Yaml(); InputStream inputStream = Files.newInputStream(saveFile.toPath()); - SaveFile save = yaml.loadAs(inputStream, SaveFile.class); + + Map yaml = new Yaml().load(inputStream); + + SaveFile save = new SaveFile(); + + Map Messages = (Map) yaml.get("Messages"); + Map messages = new HashMap<>(); + for (Map.Entry entry : Messages.entrySet()) { + Map message = (Map) entry.getValue(); + Message msg = new Message(); + msg.EnterMessage = (String) message.get("EnterMessage"); + msg.LeaveMessage = (String) message.get("LeaveMessage"); + messages.put(entry.getKey(), msg); + } + save.setMessages(messages); + + Map Residences = (Map) yaml.get("Residences"); + save.Residences = parseResYml(Residences); + inputStream.close(); List dominions = new ArrayList<>(); for (Map.Entry entry : save.Residences.entrySet()) { diff --git a/src/main/java/cn/lunadeer/dominion/utils/Residence/Residence.java b/src/main/java/cn/lunadeer/dominion/utils/Residence/Residence.java index 3cca76f..0ac0004 100644 --- a/src/main/java/cn/lunadeer/dominion/utils/Residence/Residence.java +++ b/src/main/java/cn/lunadeer/dominion/utils/Residence/Residence.java @@ -7,7 +7,6 @@ public class Residence { public Map Subzones; public int Messages; public Permission Permissions; - public long CreatedOn; public Map Areas; // getters and setters @@ -44,14 +43,6 @@ public class Residence { Permissions = permissions; } - public long getCreatedOn() { - return CreatedOn; - } - - public void setCreatedOn(long createdOn) { - CreatedOn = createdOn; - } - public Map getAreas() { return Areas; } diff --git a/src/main/java/cn/lunadeer/dominion/utils/Time.java b/src/main/java/cn/lunadeer/dominion/utils/Time.java deleted file mode 100644 index 8f95b54..0000000 --- a/src/main/java/cn/lunadeer/dominion/utils/Time.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.lunadeer.dominion.utils; - -import org.bukkit.Bukkit; - -import java.text.SimpleDateFormat; -import java.util.Date; - -public class Time { - - public static String nowStr() { - // yyyy-MM-dd HH:mm:ss - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); - } - - /** - * 尝试获取folia的调度器 - * - * @return 是否成功 - */ - private static boolean tryFolia() { - try { - Bukkit.getAsyncScheduler(); - return true; - } catch (Throwable ignored) { - } - return false; - } - - private static Boolean IS_FOLIA = null; - - /** - * 判断是否是folia核心 - * - * @return 是否是folia核心 - */ - public static Boolean isFolia() { - if (IS_FOLIA == null) IS_FOLIA = tryFolia(); - return IS_FOLIA; - } -} From 2dfbae52cf18b1d6740cfdafa41fb31ee4a14770 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Tue, 25 Jun 2024 19:49:02 +0800 Subject: [PATCH 03/19] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=EF=BC=8C=E6=8E=A7=E5=88=B6=E6=98=AF=E5=90=A6=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E4=BB=8Eresidence=E8=BF=81=E7=A7=BB=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + .../lunadeer/dominion/commands/Migration.java | 9 +++++- .../lunadeer/dominion/commands/SetConfig.java | 9 ++++++ .../controllers/DominionController.java | 24 ++++++++++---- .../dominion/managers/ConfigManager.java | 13 ++++++++ .../dominion/tuis/DominionConfig.java | 9 ++++++ .../java/cn/lunadeer/dominion/tuis/Menu.java | 7 ++-- .../lunadeer/dominion/tuis/MigrateList.java | 7 ++++ .../lunadeer/dominion/utils/ResMigration.java | 32 ------------------- src/main/resources/config.yml | 3 ++ 10 files changed, 72 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 9ba3a2f..25a26c5 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ - 支持基础价格系统; - 领地区域可视化; - 管理员可在游戏内使用TUI配置领地系统; +- 支持[从 Residence 迁移](https://ssl.lunadeer.cn:14448/doc/73/)领地数据;
diff --git a/src/main/java/cn/lunadeer/dominion/commands/Migration.java b/src/main/java/cn/lunadeer/dominion/commands/Migration.java index 3673a1f..3a7df89 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Migration.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Migration.java @@ -1,6 +1,7 @@ package cn.lunadeer.dominion.commands; import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.DominionController; import cn.lunadeer.dominion.dtos.DominionDTO; @@ -21,6 +22,12 @@ public class Migration { try { Player player = playerOnly(sender); if (player == null) return; + + if (!Dominion.config.getResidenceMigration()) { + Notification.error(sender, "Residence 迁移功能没有开启"); + return; + } + if (args.length < 2) { Notification.error(sender, "用法: /dominion migrate "); return; @@ -83,6 +90,6 @@ public class Migration { } } }); - DominionController.create(operator, node.name, node.loc1, node.loc2, parentName); + DominionController.create(operator, node.name, node.loc1, node.loc2, parentName, true); } } diff --git a/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java b/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java index a8f0671..2fb88c4 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java +++ b/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java @@ -67,6 +67,9 @@ public class SetConfig { case "economy_refund": setEconomyRefund(sender, args); break; + case "residence_migration": + setResidenceMigration(sender, args); + break; default: Notification.error(sender, "未知参数"); } @@ -250,4 +253,10 @@ public class SetConfig { Dominion.config.setEconomyRefund(economyRefund); } } + + private static void setResidenceMigration(CommandSender sender, String[] args) { + boolean residenceMigration = Boolean.parseBoolean(args[2]); + Dominion.config.setResidenceMigration(residenceMigration); + refreshPageOrNot(sender, args); + } } diff --git a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java index ca0a874..c4bb435 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java @@ -38,7 +38,6 @@ public class DominionController { * @param name 领地名称 * @param loc1 位置1 * @param loc2 位置2 - * @return 创建的领地 */ public static void create(AbstractOperator operator, String name, Location loc1, Location loc2) { DominionDTO parent = getPlayerCurrentDominion(operator); @@ -57,11 +56,26 @@ public class DominionController { * @param loc1 位置1 * @param loc2 位置2 * @param parent_dominion_name 父领地名称 - * @return 创建的领地 */ public static void create(AbstractOperator operator, String name, Location loc1, Location loc2, String parent_dominion_name) { + create(operator, name, loc1, loc2, parent_dominion_name, false); + } + + /** + * 创建子领地 + * + * @param operator 拥有者 + * @param name 领地名称 + * @param loc1 位置1 + * @param loc2 位置2 + * @param parent_dominion_name 父领地名称 + * @param skipEco 是否跳过经济检查 + */ + public static void create(AbstractOperator operator, String name, + Location loc1, Location loc2, + String parent_dominion_name, boolean skipEco) { AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建领地失败"); if (name.isEmpty()) { operator.setResponse(FAIL.addMessage("领地名称不能为空")); @@ -143,7 +157,7 @@ public class DominionController { } } // 检查经济 - if (Dominion.config.getEconomyEnable()) { + if (Dominion.config.getEconomyEnable() && !skipEco) { if (!VaultConnect.instance.economyAvailable()) { operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。")); return; @@ -181,7 +195,6 @@ public class DominionController { * * @param operator 操作者 * @param size 扩展的大小 - * @return 扩展后的领地 */ public static void expand(AbstractOperator operator, Integer size) { DominionDTO dominion = getPlayerCurrentDominion(operator); @@ -198,7 +211,6 @@ public class DominionController { * @param operator 操作者 * @param size 扩展的大小 * @param dominion_name 领地名称 - * @return 扩展后的领地 */ public static void expand(AbstractOperator operator, Integer size, String dominion_name) { AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "扩展领地失败"); @@ -304,7 +316,6 @@ public class DominionController { * * @param operator 操作者 * @param size 缩小的大小 - * @return 缩小后的领地 */ public static void contract(AbstractOperator operator, Integer size) { DominionDTO dominion = getPlayerCurrentDominion(operator); @@ -321,7 +332,6 @@ public class DominionController { * @param operator 操作者 * @param size 缩小的大小 * @param dominion_name 领地名称 - * @return 缩小后的领地 */ public static void contract(AbstractOperator operator, Integer size, String dominion_name) { AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "缩小领地失败"); diff --git a/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java b/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java index a5a225a..8faa0ac 100644 --- a/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java +++ b/src/main/java/cn/lunadeer/dominion/managers/ConfigManager.java @@ -87,6 +87,7 @@ public class ConfigManager { _economy_only_xz = _file.getBoolean("Economy.OnlyXZ", false); _economy_refund = (float) _file.getDouble("Economy.Refund", 0.85); _fly_permission_nodes = _file.getStringList("FlyPermissionNodes"); + _residence_migration = _file.getBoolean("ResidenceMigration", false); saveAll(); // 回写文件 防止文件中的数据不完整 Flag.loadFromJson(); } @@ -115,6 +116,7 @@ public class ConfigManager { _file.set("Economy.OnlyXZ", _economy_only_xz); _file.set("Economy.Refund", _economy_refund); _file.set("FlyPermissionNodes", _fly_permission_nodes); + _file.set("ResidenceMigration", _residence_migration); _plugin.saveConfig(); } @@ -395,6 +397,16 @@ public class ConfigManager { _plugin.saveConfig(); } + public Boolean getResidenceMigration() { + return _residence_migration; + } + + public void setResidenceMigration(Boolean residence_migration) { + _residence_migration = residence_migration; + _file.set("ResidenceMigration", residence_migration); + _plugin.saveConfig(); + } + private final Dominion _plugin; private FileConfiguration _file; private Boolean _debug; @@ -433,4 +445,5 @@ public class ConfigManager { private Boolean _economy_only_xz; private Float _economy_refund; private List _fly_permission_nodes; + private Boolean _residence_migration; } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java index c47547f..cb30b47 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java @@ -151,6 +151,15 @@ public class DominionConfig { .append(NumChanger.create(Dominion.config.getEconomyRefund(), "/dominion set_config economy_refund", 0.01).setPageNumber(page).build()); view.add(refund); } + if (Dominion.config.getResidenceMigration()) { + view.add(Line.create() + .append("是否允许从Residence迁移数据") + .append(Button.createGreen("☑").setExecuteCommand("/dominion set_config residence_migration false " + page).build())); + } else { + view.add(Line.create() + .append("是否允许从Residence迁移数据") + .append(Button.createRed("☐").setExecuteCommand("/dominion set_config residence_migration true " + page).build())); + } 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 index e1094ae..e5ae0d8 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java @@ -1,5 +1,6 @@ package cn.lunadeer.dominion.tuis; +import cn.lunadeer.dominion.Dominion; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.ViewStyles; import cn.lunadeer.minecraftpluginutils.stui.components.Button; @@ -60,8 +61,10 @@ public class Menu { .add(list) .add(template) .add(help) - .add(link) - .add(migrate); + .add(link); + if (Dominion.config.getResidenceMigration()) { + view.add(migrate); + } if (player.isOp()) { view.add(Line.create().append("")); view.add(Line.create().append(Component.text("--- 以下选项仅OP可见 ---", ViewStyles.main_color))); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java b/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java index 55e2569..9830bf7 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java @@ -1,7 +1,9 @@ package cn.lunadeer.dominion.tuis; import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.utils.ResMigration; +import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; import cn.lunadeer.minecraftpluginutils.stui.components.Line; @@ -24,6 +26,11 @@ public class MigrateList { Player player = playerOnly(sender); if (player == null) return; + if (!Dominion.config.getResidenceMigration()) { + Notification.error(sender, "Residence 迁移功能没有开启"); + return; + } + int page = 1; if (args.length == 2) { try { diff --git a/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java b/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java index 5c5170d..9aea7c4 100644 --- a/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java +++ b/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java @@ -19,38 +19,6 @@ import java.nio.file.Files; import java.util.*; public class ResMigration { - - - /* -Residences: - '03': - TPLoc: -3967.62:48.0:-1988.87:4.8:-5.08 - Messages: 1 - Permissions: - PlayerFlags: - 3244b8fb-3cf9-433e-8f4a-bb90bf6d4f54: 1 - 8075e1ae-62fc-482f-b3af-3fc5b2770a2c: 2 - 0a23b4e5-f18e-4f8b-947d-558444bb27ca: 3 - AreaFlags: 4 - OwnerUUID: 8075e1ae-62fc-482f-b3af-3fc5b2770a2c - OwnerLastKnownName: guajn - CreatedOn: 1630491137410 - Areas: - main: -3998:0:-2014:-3939:255:-1955 - '04': - TPLoc: -5640.7:189.0:-2029.38:40.35:-96.3 - Messages: 1 - Permissions: - PlayerFlags: - 8075e1ae-62fc-482f-b3af-3fc5b2770a2c: 2 - 0a23b4e5-f18e-4f8b-947d-558444bb27ca: 1 - AreaFlags: 5 - OwnerUUID: 8075e1ae-62fc-482f-b3af-3fc5b2770a2c - OwnerLastKnownName: guajn - CreatedOn: 1641656609270 - Areas: - main: -5673:0:-2055:-5609:255:-2005 - */ public static class ResidenceNode { public UUID owner; public World world; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b99a985..bc30be3 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -49,6 +49,9 @@ FlyPermissionNodes: - essentials.fly - cmi.command.fly +# 是否允许玩家从 Residence 迁移领地数据 +ResidenceMigration: false + BlueMap: true CheckUpdate: true From 8196d6d22548c4d1df7b625a42038f82b68b2233 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Wed, 26 Jun 2024 10:03:51 +0800 Subject: [PATCH 04/19] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E4=BB=8Eresidence=E8=BF=81=E7=A7=BBtp=E7=82=B9?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/cn/lunadeer/dominion/utils/ResMigration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java b/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java index 9aea7c4..96adcc4 100644 --- a/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java +++ b/src/main/java/cn/lunadeer/dominion/utils/ResMigration.java @@ -79,7 +79,7 @@ public class ResMigration { dominionNode.loc2 = new Location(world, Double.parseDouble(loc[3]), Double.parseDouble(loc[4]), Double.parseDouble(loc[5])); if (res.TPLoc != null) { String[] tpLocStr = res.TPLoc.split(":"); - if (tpLocStr.length == 3) { + if (tpLocStr.length >= 3) { dominionNode.tpLoc = new Location(world, Double.parseDouble(tpLocStr[0]), Double.parseDouble(tpLocStr[1]), Double.parseDouble(tpLocStr[2])); } } From 13c6d59b047643b9101a0dfa63d8640f935e9709 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Wed, 26 Jun 2024 16:21:02 +0800 Subject: [PATCH 05/19] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dd9c19d..55ee011 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ - 支持经济系统(需要 Vault 前置); - 领地区域可视化; - 管理员可在游戏内使用TUI配置领地系统; -- 支持[从 Residence 迁移](https://ssl.lunadeer.cn:14448/doc/73/)领地数据; +- 支持[从 Residence 迁移](https://ssl.lunadeer.cn:14448/doc/73/)领地数据(1.33.7+);
From 27a7dea80983c3ee024280214ec56bbc469b19a9 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Fri, 28 Jun 2024 17:40:51 +0800 Subject: [PATCH 06/19] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=BB=84=E5=8A=9F=E8=83=BD=EF=BC=88=E6=9C=AA=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/cn/lunadeer/dominion/Cache.java | 58 ++++- .../java/cn/lunadeer/dominion/Commands.java | 64 +++++- .../cn/lunadeer/dominion/commands/Group.java | 157 +++++++++++++ .../cn/lunadeer/dominion/commands/Helper.java | 31 ++- .../dominion/commands/PlayerPrivilege.java | 6 +- .../dominion/controllers/GroupController.java | 214 ++++++++++++++++++ .../lunadeer/dominion/cuis/CreateGroup.java | 53 +++++ .../lunadeer/dominion/cuis/RenameGroup.java | 57 +++++ .../cn/lunadeer/dominion/dtos/GroupDTO.java | 179 +++++++++++++++ .../dominion/dtos/PlayerPrivilegeDTO.java | 74 +++--- .../cn/lunadeer/dominion/events/Apis.java | 15 +- .../dominion/managers/DatabaseTables.java | 23 ++ .../java/cn/lunadeer/dominion/tuis/Apis.java | 12 + .../dominion/tuis/DominionGroupList.java | 75 ++++++ .../dominion/tuis/DominionManage.java | 7 +- .../dominion/tuis/DominionPrivilegeList.java | 48 ++-- .../lunadeer/dominion/tuis/GroupManage.java | 86 +++++++ .../lunadeer/dominion/tuis/PrivilegeInfo.java | 14 +- .../lunadeer/dominion/tuis/SelectMember.java | 55 +++++ .../dominion/tuis/SelectTemplate.java | 7 +- 21 files changed, 1164 insertions(+), 73 deletions(-) create mode 100644 src/main/java/cn/lunadeer/dominion/commands/Group.java create mode 100644 src/main/java/cn/lunadeer/dominion/controllers/GroupController.java create mode 100644 src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java create mode 100644 src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java create mode 100644 src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/DominionGroupList.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java create mode 100644 src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java diff --git a/pom.xml b/pom.xml index 427be4f..909baf8 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.33.7-beta + 1.34.0-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index 4ab7c4e..83ecb9e 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -1,9 +1,6 @@ package cn.lunadeer.dominion; -import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.dtos.Flag; -import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.dtos.*; import cn.lunadeer.dominion.utils.ResMigration; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.ParticleRender; @@ -28,6 +25,7 @@ public class Cache { player_current_dominion_id = new HashMap<>(); loadDominions(); loadPlayerPrivileges(); + loadGroup(); } /** @@ -156,6 +154,51 @@ public class Cache { }); } + public void loadGroup() { + loadGroup(null); + } + + public void loadGroup(Integer groupId) { + if (_last_update_group.get() + UPDATE_INTERVAL < System.currentTimeMillis()) { + XLogger.debug("run loadGroupExecution directly"); + loadGroupExecution(groupId); + } else { + if (_update_group_is_scheduled.get()) return; + XLogger.debug("schedule loadGroupExecution"); + _update_group_is_scheduled.set(true); + long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_group.get())) / 1000 * 20L; + Scheduler.runTaskLaterAsync(() -> { + XLogger.debug("run loadGroupExecution scheduled"); + loadGroupExecution(groupId); + _update_group_is_scheduled.set(false); + }, + delay_tick); + } + } + + private void loadGroupExecution(Integer groupId) { + Scheduler.runTaskAsync(() -> { + long start = System.currentTimeMillis(); + if (groupId == null) { + id_groups = new ConcurrentHashMap<>(); + List groups = GroupDTO.selectAll(); + for (GroupDTO group : groups) { + id_groups.put(group.getId(), group); + } + } else { + GroupDTO group = GroupDTO.select(groupId); + if (group == null && id_groups.containsKey(groupId)) { + id_groups.remove(groupId); + } else if (group != null) { + id_groups.put(groupId, group); + } + } + recheckPlayerState = true; + _last_update_group.set(System.currentTimeMillis()); + XLogger.debug("loadGroupExecution cost: %d ms", System.currentTimeMillis() - start); + }); + } + /** * 获取玩家当前所在领地 * 此方法会先判断缓存中是否有玩家当前所在领地,如果没有则遍历所有领地判断玩家所在位置 @@ -302,6 +345,10 @@ public class Cache { return dominionTree; } + public GroupDTO getGroup(Integer id) { + return id_groups.get(id); + } + /** * 获取玩家在指定领地的特权 * 如果玩家不存在特权,则返回null @@ -371,6 +418,7 @@ public class Cache { public static Cache instance; private ConcurrentHashMap id_dominions; private ConcurrentHashMap> world_dominion_tree; + private ConcurrentHashMap id_groups; private ConcurrentHashMap> player_uuid_to_privilege; // 玩家所有的特权 private final Map player_current_dominion_id; // 玩家当前所在领地 private ConcurrentHashMap> dominion_children; @@ -378,6 +426,8 @@ public class Cache { private final AtomicBoolean _update_dominion_is_scheduled = new AtomicBoolean(false); private final AtomicLong _last_update_privilege = new AtomicLong(0); private final AtomicBoolean _update_privilege_is_scheduled = new AtomicBoolean(false); + private final AtomicLong _last_update_group = new AtomicLong(0); + private final AtomicBoolean _update_group_is_scheduled = new AtomicBoolean(false); private static final long UPDATE_INTERVAL = 1000 * 4; private boolean recheckPlayerState = false; // 是否需要重新检查玩家状态(发光、飞行) public final Map NextTimeAllowTeleport = new java.util.HashMap<>(); diff --git a/src/main/java/cn/lunadeer/dominion/Commands.java b/src/main/java/cn/lunadeer/dominion/Commands.java index 4bfbf04..ebfba02 100644 --- a/src/main/java/cn/lunadeer/dominion/Commands.java +++ b/src/main/java/cn/lunadeer/dominion/Commands.java @@ -187,6 +187,33 @@ public class Commands implements TabExecutor { case "env_info": DominionEnvInfo.show(sender, args); break; + case "create_group": + Group.createGroup(sender, args); + break; + case "delete_group": + Group.deleteGroup(sender, args); + break; + case "rename_group": + Group.renameGroup(sender, args); + break; + case "set_group_flag": + Group.setGroupFlag(sender, args); + break; + case "group_add_member": + Group.addMember(sender, args); + break; + case "group_remove_member": + Group.removeMember(sender, args); + break; + case "group_list": + DominionGroupList.show(sender, args); + break; + case "select_member_add_group": + SelectMember.show(sender, args); + break; + case "group_manage": + GroupManage.show(sender, args); + break; // ---=== CUI ===--- case "cui_rename": RenameDominion.open(sender, args); @@ -209,6 +236,12 @@ public class Commands implements TabExecutor { case "cui_set_map_color": SetMapColor.open(sender, args); break; + case "cui_create_group": + CreateGroup.open(sender, args); + break; + case "cui_rename_group": + RenameGroup.open(sender, args); + break; default: return false; } @@ -251,7 +284,8 @@ public class Commands implements TabExecutor { "template_create", "template_set_flag", "all_dominion", - "set_map_color" + "set_map_color", + "create_group", "delete_group", "rename_group", "set_group_flag", "group_add_member", "group_remove_member" ); } if (args.length == 2) { @@ -272,6 +306,12 @@ public class Commands implements TabExecutor { case "rename": case "give": case "set_tp_location": + case "create_group": + case "delete_group": + case "rename_group": + case "set_group_flag": + case "group_add_member": + case "group_remove_member": return playerDominions(sender); case "tp": return allDominions(); @@ -328,6 +368,14 @@ public class Commands implements TabExecutor { return playerNames(); case "template_manage": return Collections.singletonList("页码(可选)"); + case "create_group": + return Collections.singletonList("输入要创建的权限组名称"); + case "delete_group": + case "rename_group": + case "set_group_flag": + case "group_add_member": + case "group_remove_member": + return dominionGroups(args[1]); } } if (args.length == 4) { @@ -339,6 +387,20 @@ public class Commands implements TabExecutor { return boolOptions(); case "apply_template": return allTemplates(sender); + case "rename_group": + return Collections.singletonList("输入新的权限组名称"); + case "set_group_flag": + return playerPrivileges(); + case "group_add_member": + return playerNames(); + case "group_remove_member": + return groupPlayers(args[1], args[2]); + } + } + if (args.length == 5) { + switch (args[0]) { + case "set_group_flag": + return boolOptions(); } } return null; diff --git a/src/main/java/cn/lunadeer/dominion/commands/Group.java b/src/main/java/cn/lunadeer/dominion/commands/Group.java new file mode 100644 index 0000000..b700eee --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/commands/Group.java @@ -0,0 +1,157 @@ +package cn.lunadeer.dominion.commands; + +import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; +import cn.lunadeer.dominion.controllers.GroupController; +import cn.lunadeer.dominion.tuis.DominionGroupList; +import cn.lunadeer.dominion.tuis.GroupManage; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.tuis.Apis.getPage; + +public class Group { + + /** + * /dominion create_group <领地名称> <权限组名称> + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void createGroup(CommandSender sender, String[] args) { + if (args.length < 3) { + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[1]; + String groupName = args[2]; + GroupController.createGroup(operator, dominionName, groupName); + String[] newArgs = new String[2]; + newArgs[0] = "group_list"; + newArgs[1] = dominionName; + DominionGroupList.show(sender, newArgs); + } + + /** + * /dominion delete_group <领地名称> <权限组名称> + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void deleteGroup(CommandSender sender, String[] args) { + if (args.length < 3) { + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[1]; + String groupName = args[2]; + GroupController.deleteGroup(operator, dominionName, groupName); + String[] newArgs = new String[2]; + newArgs[0] = "group_list"; + newArgs[1] = dominionName; + DominionGroupList.show(sender, newArgs); + } + + /** + * /dominion rename_group <领地名称> <权限组旧名称> <新名称> + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void renameGroup(CommandSender sender, String[] args) { + if (args.length < 4) { + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[1]; + String oldGroupName = args[2]; + String newGroupName = args[3]; + GroupController.renameGroup(operator, dominionName, oldGroupName, newGroupName); + String[] newArgs = new String[3]; + newArgs[0] = "group_manage"; + newArgs[1] = dominionName; + newArgs[2] = newGroupName; + GroupManage.show(sender, newArgs); + } + + /** + * /dominion set_group_flag <领地名称> <权限组名称> <权限名称> + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void setGroupFlag(CommandSender sender, String[] args) { + if (args.length < 5) { + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[1]; + String groupName = args[2]; + String flag = args[3]; + boolean value = Boolean.parseBoolean(args[4]); + GroupController.setGroupFlag(operator, dominionName, groupName, flag, value); + String[] newArgs = new String[4]; + newArgs[0] = "group_manage"; + newArgs[1] = dominionName; + newArgs[2] = groupName; + newArgs[3] = String.valueOf(getPage(args, 5)); + GroupManage.show(sender, newArgs); + } + + /** + * /dominion group_add_member <领地名称> <权限组名称> <玩家名称> + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void addMember(CommandSender sender, String[] args) { + if (args.length < 4) { + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[1]; + String groupName = args[2]; + String playerName = args[3]; + GroupController.addMember(operator, dominionName, groupName, playerName); + String[] newArgs = new String[3]; + newArgs[0] = "group_list"; + newArgs[1] = dominionName; + newArgs[2] = String.valueOf(getPage(args, 4)); + DominionGroupList.show(sender, newArgs); + } + + /** + * /dominion group_remove_member <领地名称> <权限组名称> <玩家名称> + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void removeMember(CommandSender sender, String[] args) { + if (args.length < 4) { + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[1]; + String groupName = args[2]; + String playerName = args[3]; + GroupController.removeMember(operator, dominionName, groupName, playerName); + String[] newArgs = new String[3]; + newArgs[0] = "group_list"; + newArgs[1] = dominionName; + newArgs[2] = String.valueOf(getPage(args, 4)); + DominionGroupList.show(sender, newArgs); + } + +} diff --git a/src/main/java/cn/lunadeer/dominion/commands/Helper.java b/src/main/java/cn/lunadeer/dominion/commands/Helper.java index c90bafc..f077678 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Helper.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Helper.java @@ -1,10 +1,7 @@ package cn.lunadeer.dominion.commands; import cn.lunadeer.dominion.controllers.DominionController; -import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.dtos.Flag; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; -import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; +import cn.lunadeer.dominion.dtos.*; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -41,6 +38,32 @@ public class Helper { return dominions_name; } + public static List dominionGroups(String dominionName) { + List groups_name = new ArrayList<>(); + DominionDTO dominion = DominionDTO.select(dominionName); + if (dominion == null) return groups_name; + List groups = GroupDTO.selectByDominionId(dominion.getId()); + for (GroupDTO group : groups) { + groups_name.add(group.getName()); + } + return groups_name; + } + + public static List groupPlayers(String domName, String groupName) { + List players_name = new ArrayList<>(); + DominionDTO dominion = DominionDTO.select(domName); + if (dominion == null) return players_name; + GroupDTO group = GroupDTO.select(dominion.getId(), groupName); + if (group == null) return players_name; + List privileges = PlayerPrivilegeDTO.selectByGroupId(group.getId()); + for (PlayerPrivilegeDTO privilege : privileges) { + PlayerDTO player = PlayerDTO.select(privilege.getPlayerUUID()); + if (player == null) continue; + players_name.add(player.getLastKnownName()); + } + return players_name; + } + public static List playerOwnDominions(CommandSender sender) { List dominions_name = new ArrayList<>(); Player player = playerOnly(sender); diff --git a/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java b/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java index 216b4a0..a204148 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java +++ b/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java @@ -118,9 +118,9 @@ public class PlayerPrivilege { PrivilegeController.applyTemplate(operator, dominionName, playerName, templateName); if (args.length == 5) { String[] newArgs = new String[3]; - newArgs[0] = "privilege_list"; - newArgs[1] = dominionName; - newArgs[2] = args[4]; + newArgs[0] = "privilege_info"; + newArgs[1] = playerName; + newArgs[2] = dominionName; DominionPrivilegeList.show(sender, newArgs); } } diff --git a/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java b/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java new file mode 100644 index 0000000..ecae31a --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java @@ -0,0 +1,214 @@ +package cn.lunadeer.dominion.controllers; + +import cn.lunadeer.dominion.dtos.*; + +import java.util.Objects; + +import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags; +import static cn.lunadeer.dominion.controllers.Apis.notOwner; + +public class GroupController { + + public static void createGroup(AbstractOperator operator, String domName, String groupName) { + AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建权限组 %s 失败", groupName); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建权限组 %s 成功", groupName); + DominionDTO dominion = DominionDTO.select(domName); + if (dominion == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName)); + return; + } + if (notOwner(operator, dominion)) { + operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法创建权限组", domName)); + return; + } + GroupDTO group = GroupDTO.select(dominion.getId(), groupName); + if (group != null) { + operator.setResponse(FAIL.addMessage("领地 %s 已存在名为 %s 的权限组", domName, groupName)); + return; + } + group = GroupDTO.create(groupName, dominion); + if (group == null) { + operator.setResponse(FAIL.addMessage("请联系服务器管理员")); + return; + } + operator.setResponse(SUCCESS); + } + + public static void deleteGroup(AbstractOperator operator, String domName, String groupName) { + AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "删除权限组 %s 失败", groupName); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "删除权限组 %s 成功", groupName); + DominionDTO dominion = DominionDTO.select(domName); + if (dominion == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName)); + return; + } + if (notOwner(operator, dominion)) { + operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法删除权限组", domName)); + return; + } + GroupDTO group = GroupDTO.select(dominion.getId(), groupName); + if (group == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName)); + return; + } + group.delete(); + operator.setResponse(SUCCESS); + } + + public static void setGroupFlag(AbstractOperator operator, String domName, String groupName, String flag, boolean value) { + AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置权限组 %s 的权限 %s 为 %s 失败", groupName, flag, value); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置权限组 %s 的权限 %s 为 %s 成功", groupName, flag, value); + DominionDTO dominion = DominionDTO.select(domName); + if (dominion == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName)); + return; + } + if (noAuthToChangeFlags(operator, dominion)) { + return; + } + GroupDTO group = GroupDTO.select(dominion.getId(), groupName); + if (group == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName)); + return; + } + if ((flag.equals("admin") || group.getAdmin()) && notOwner(operator, dominion)) { + operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改管理员权限组权限", domName)); + return; + } + if (flag.equals("admin")) { + group = group.setAdmin(value); + } else { + if (group.getAdmin()) { + operator.setResponse(FAIL.addMessage("管理员拥有所有权限,无需单独设置权限")); + return; + } + Flag f = Flag.getFlag(flag); + if (f == null) { + operator.setResponse(FAIL.addMessage("未知的权限 %s", flag)); + return; + } + group = group.setFlagValue(f, value); + } + if (group == null) { + operator.setResponse(FAIL.addMessage("请联系服务器管理员")); + return; + } + operator.setResponse(SUCCESS); + } + + public static void renameGroup(AbstractOperator operator, String domName, String oldName, String newName) { + AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "重命名权限组 %s 为 %s 失败", oldName, newName); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "重命名权限组 %s 为 %s 成功", oldName, newName); + DominionDTO dominion = DominionDTO.select(domName); + if (dominion == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName)); + return; + } + if (notOwner(operator, dominion)) { + operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法重命名权限组", domName)); + return; + } + GroupDTO group = GroupDTO.select(dominion.getId(), oldName); + if (group == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, oldName)); + return; + } + group = group.setName(newName); + if (group == null) { + operator.setResponse(FAIL.addMessage("请联系服务器管理员")); + return; + } + operator.setResponse(SUCCESS); + } + + public static void addMember(AbstractOperator operator, String domName, String groupName, String playerName) { + AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "添加成员 %s 到权限组 %s 失败", playerName, groupName); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "添加成员 %s 到权限组 %s 成功", playerName, groupName); + DominionDTO dominion = DominionDTO.select(domName); + if (dominion == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName)); + return; + } + GroupDTO group = GroupDTO.select(dominion.getId(), groupName); + if (group == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName)); + return; + } + if (noAuthToChangeFlags(operator, dominion)) { + operator.setResponse(FAIL.addMessage("你没有权限修改领地 %s 的权限组 %s 成员", domName, groupName)); + return; + } + if (group.getAdmin() && notOwner(operator, dominion)) { + operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法添加成员到管理员权限组", domName)); + return; + } + PlayerDTO player = PlayerDTO.select(playerName); + if (player == null) { + operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName)); + return; + } + PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); + if (privilege == null) { + operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员,无法直接加入权限组", playerName, domName)); + return; + } + if (Objects.equals(privilege.getGroupId(), group.getId())) { + operator.setResponse(FAIL.addMessage("玩家 %s 已在权限组 %s 中", playerName, groupName)); + return; + } + if (notOwner(operator, dominion) && privilege.getAdmin()) { + operator.setResponse(FAIL.addMessage("%s 是管理员,你不是领地 %s 的拥有者,无法添加管理员到权限组", playerName, domName)); + return; + } + privilege = privilege.setGroupId(group.getId()); + if (privilege == null) { + operator.setResponse(FAIL.addMessage("请联系服务器管理员")); + return; + } + operator.setResponse(SUCCESS); + } + + public static void removeMember(AbstractOperator operator, String domName, String groupName, String playerName) { + AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "从权限组 %s 移除成员 %s 失败", groupName, playerName); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "从权限组 %s 移除成员 %s 成功", groupName, playerName); + DominionDTO dominion = DominionDTO.select(domName); + if (dominion == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName)); + return; + } + GroupDTO group = GroupDTO.select(dominion.getId(), groupName); + if (group == null) { + operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName)); + return; + } + if (noAuthToChangeFlags(operator, dominion)) { + operator.setResponse(FAIL.addMessage("你没有权限移除领地 %s 的权限组 %s 成员", domName, groupName)); + return; + } + if (group.getAdmin() && notOwner(operator, dominion)) { + operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法从管理员权限组移除成员", domName)); + return; + } + PlayerDTO player = PlayerDTO.select(playerName); + if (player == null) { + operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName)); + return; + } + PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); + if (privilege == null) { + operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, domName)); + return; + } + if (!Objects.equals(privilege.getGroupId(), group.getId())) { + operator.setResponse(FAIL.addMessage("玩家 %s 不在权限组 %s 中", playerName, groupName)); + return; + } + privilege = privilege.setGroupId(-1); + if (privilege == null) { + operator.setResponse(FAIL.addMessage("请联系服务器管理员")); + return; + } + operator.setResponse(SUCCESS); + } + +} diff --git a/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java b/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java new file mode 100644 index 0000000..d594c82 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java @@ -0,0 +1,53 @@ +package cn.lunadeer.dominion.cuis; + +import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; +import cn.lunadeer.dominion.controllers.GroupController; +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.tuis.DominionGroupList; +import cn.lunadeer.minecraftpluginutils.Notification; +import cn.lunadeer.minecraftpluginutils.XLogger; +import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; + +public class CreateGroup { + + private static class createGroupCB implements CuiTextInput.InputCallback { + + private final Player sender; + private final String dominionName; + + public createGroupCB(Player sender, String dominionName) { + this.sender = sender; + this.dominionName = dominionName; + } + + @Override + public void handleData(String input) { + XLogger.debug("createGroupCB.run: %s", input); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); + GroupController.createGroup(operator, dominionName, input); + String[] newArgs = new String[2]; + newArgs[0] = "group_list"; + newArgs[1] = dominionName; + DominionGroupList.show(sender, newArgs); + } + } + + public static void open(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + DominionDTO dominion = DominionDTO.select(args[1]); + if (dominion == null) { + Notification.error(sender, "领地不存在"); + return; + } + CuiTextInput.InputCallback createGroupCB = new createGroupCB(player, dominion.getName()); + CuiTextInput view = CuiTextInput.create(createGroupCB).setText("未命名权限组").title("输入要创建的权限组名称"); + view.setSuggestCommand("/dominion create_group <领地名称> <权限组名称>"); + view.open(player); + } + +} diff --git a/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java b/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java new file mode 100644 index 0000000..5c9dd86 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java @@ -0,0 +1,57 @@ +package cn.lunadeer.dominion.cuis; + +import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; +import cn.lunadeer.dominion.controllers.GroupController; +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.tuis.DominionGroupList; +import cn.lunadeer.dominion.tuis.GroupManage; +import cn.lunadeer.minecraftpluginutils.Notification; +import cn.lunadeer.minecraftpluginutils.XLogger; +import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; + +public class RenameGroup { + + private static class renameGroupCB implements CuiTextInput.InputCallback { + + private final Player sender; + private final String dominionName; + private final String oldName; + + public renameGroupCB(Player sender, String dominionName, String oldName) { + this.sender = sender; + this.dominionName = dominionName; + this.oldName = oldName; + } + + @Override + public void handleData(String input) { + XLogger.debug("renameGroupCB.run: %s", input); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); + GroupController.renameGroup(operator, dominionName, oldName, input); + String[] newArgs = new String[3]; + newArgs[0] = "group_manage"; + newArgs[1] = dominionName; + newArgs[2] = input; + GroupManage.show(sender, newArgs); + } + } + + public static void open(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + DominionDTO dominion = DominionDTO.select(args[1]); + if (dominion == null) { + Notification.error(sender, "领地不存在"); + return; + } + CuiTextInput.InputCallback renameGroupCB = new renameGroupCB(player, dominion.getName(), args[2]); + CuiTextInput view = CuiTextInput.create(renameGroupCB).setText(args[2]).title("输入新的权限组名称"); + view.setSuggestCommand("/dominion rename_group <领地名称> <权限组旧名称> <新名称>"); + view.open(player); + } + +} diff --git a/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java new file mode 100644 index 0000000..88745c4 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java @@ -0,0 +1,179 @@ +package cn.lunadeer.dominion.dtos; + +import cn.lunadeer.dominion.Cache; +import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager; +import cn.lunadeer.minecraftpluginutils.databse.Field; +import cn.lunadeer.minecraftpluginutils.databse.FieldType; +import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow; +import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow; + +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class GroupDTO { + + Field id = new Field("id", FieldType.INT); + Field domID = new Field("dom_id", FieldType.INT); + Field name = new Field("name", FieldType.STRING); + Field admin = new Field("admin", FieldType.BOOLEAN); + private final Map flags = new HashMap<>(); + + public Integer getId() { + return (Integer) id.value; + } + + public Integer getDomID() { + return (Integer) domID.value; + } + + public String getName() { + return (String) name.value; + } + + public Boolean getAdmin() { + return (Boolean) admin.value; + } + + public Boolean getFlagValue(Flag flag) { + if (!flags.containsKey(flag)) return flag.getDefaultValue(); + return flags.get(flag); + } + + public GroupDTO setName(String name) { + this.name.value = name; + UpdateRow updateRow = new UpdateRow().field(this.name); + return doUpdate(updateRow); + } + + public GroupDTO setAdmin(Boolean admin) { + this.admin.value = admin; + UpdateRow updateRow = new UpdateRow().field(this.admin); + return doUpdate(updateRow); + } + + public GroupDTO setFlagValue(Flag flag, Boolean value) { + flags.put(flag, value); + Field f = new Field(flag.getFlagName(), value); + UpdateRow updateRow = new UpdateRow().field(f); + return doUpdate(updateRow); + } + + public static GroupDTO create(String name, DominionDTO dominionDTO) { + GroupDTO group = new GroupDTO(name, dominionDTO.getId()); + InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null)); + insertRow.table("group") + .field(group.domID) + .field(group.name) + .field(group.admin); + for (Flag f : Flag.getPrivilegeFlagsEnabled()) { + insertRow.field(new Field(f.getFlagName(), dominionDTO.getFlagValue(f))); + } + try (ResultSet rs = insertRow.execute()) { + List groups = getDTOFromRS(rs); + if (groups.size() == 0) return null; + return groups.get(0); + } catch (Exception e) { + DatabaseManager.handleDatabaseError("创建权限组失败: ", e, ""); + return null; + } + } + + public void delete() { + delete(getId()); + } + + public static void delete(Integer id) { + String sql = "DELETE FROM group WHERE id = ?;"; + DatabaseManager.instance.query(sql, id); + Cache.instance.loadGroup(id); + List players = PlayerPrivilegeDTO.selectByGroupId(id); + for (PlayerPrivilegeDTO player : players) { + player.setGroupId(-1); + } + } + + public static GroupDTO select(Integer id) { + String sql = "SELECT * FROM group WHERE id = ?;"; + List groups = getDTOFromRS(DatabaseManager.instance.query(sql, id)); + if (groups.size() == 0) return null; + return groups.get(0); + } + + public static GroupDTO select(Integer domID, String name) { + String sql = "SELECT * FROM group WHERE dom_id = ? AND name = ?;"; + List groups = getDTOFromRS(DatabaseManager.instance.query(sql, domID, name)); + if (groups.size() == 0) return null; + return groups.get(0); + } + + public static List selectAll() { + String sql = "SELECT * FROM group;"; + return getDTOFromRS(DatabaseManager.instance.query(sql)); + } + + public static List selectByDominionId(Integer domID) { + String sql = "SELECT * FROM group WHERE dom_id = ?;"; + return getDTOFromRS(DatabaseManager.instance.query(sql, domID)); + } + + private GroupDTO(String name, Integer domID) { + this.domID.value = domID; + this.name.value = name; + this.admin.value = false; + for (Flag f : Flag.getPrivilegeFlagsEnabled()) { + flags.put(f, f.getDefaultValue()); + } + } + + private GroupDTO(Integer id, Integer domID, String name, Boolean admin, Map flags) { + this.id.value = id; + this.domID.value = domID; + this.name.value = name; + this.admin.value = admin; + this.flags.putAll(flags); + } + + private static List getDTOFromRS(ResultSet rs) { + List list = new ArrayList<>(); + if (rs == null) return list; + try { + while (rs.next()) { + Map flags = new HashMap<>(); + for (Flag f : Flag.getPrivilegeFlagsEnabled()) { + flags.put(f, rs.getBoolean(f.getFlagName())); + } + GroupDTO group = new GroupDTO( + rs.getInt("id"), + rs.getInt("dom_id"), + rs.getString("name"), + rs.getBoolean("admin"), + flags + ); + list.add(group); + } + } catch (Exception e) { + DatabaseManager.handleDatabaseError("查询权限组失败: ", e, ""); + } + return list; + } + + private GroupDTO doUpdate(UpdateRow updateRow) { + updateRow.returningAll(id) + .table("group") + .where("id = ?", id.value); + try (ResultSet rs = updateRow.execute()) { + List groups = getDTOFromRS(rs); + if (groups.size() == 0) return null; + Cache.instance.loadGroup((Integer) id.value); + return groups.get(0); + } catch (Exception e) { + DatabaseManager.handleDatabaseError("更新权限组失败: ", e, ""); + return null; + } + } + + +} diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java index 57d533c..2c5353e 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java @@ -3,6 +3,7 @@ package cn.lunadeer.dominion.dtos; import cn.lunadeer.dominion.Cache; import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager; import cn.lunadeer.minecraftpluginutils.databse.Field; +import cn.lunadeer.minecraftpluginutils.databse.FieldType; import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow; import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow; @@ -35,7 +36,8 @@ public class PlayerPrivilegeDTO { UUID.fromString(rs.getString("player_uuid")), rs.getBoolean("admin"), rs.getInt("dom_id"), - flags + flags, + rs.getInt("group_id") ); players.add(player); } @@ -46,14 +48,13 @@ public class PlayerPrivilegeDTO { } private PlayerPrivilegeDTO doUpdate(UpdateRow updateRow) { - Field id = new Field("id", this.id); updateRow.returningAll(id) .table("player_privilege") .where("id = ?", id.value); try (ResultSet rs = updateRow.execute()) { List players = getDTOFromRS(rs); if (players.size() == 0) return null; - Cache.instance.loadPlayerPrivileges(playerUUID); + Cache.instance.loadPlayerPrivileges(getPlayerUUID()); return players.get(0); } catch (Exception e) { DatabaseManager.handleDatabaseError("更新玩家权限失败: ", e, ""); @@ -62,14 +63,11 @@ public class PlayerPrivilegeDTO { } public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) { - Field playerUUID = new Field("player_uuid", player.getPlayerUUID().toString()); - Field admin = new Field("admin", player.getAdmin()); - Field domID = new Field("dom_id", player.getDomID()); InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null)) .table("player_privilege") - .field(playerUUID) - .field(admin) - .field(domID); + .field(player.playerUUID) + .field(player.admin) + .field(player.domID); for (Flag f : Flag.getPrivilegeFlagsEnabled()) { insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f))); } @@ -112,25 +110,35 @@ public class PlayerPrivilegeDTO { return query(sql, player.toString()); } - private final Integer id; - private final UUID playerUUID; - private Boolean admin; - private final Integer domID; + public static List selectByGroupId(Integer groupId) { + String sql = "SELECT * FROM player_privilege WHERE group_id = ?;"; + return query(sql, groupId); + } + + Field id = new Field("id", FieldType.INT); + Field playerUUID = new Field("player_uuid", FieldType.STRING); + Field admin = new Field("admin", FieldType.BOOLEAN); + Field domID = new Field("dom_id", FieldType.INT); + Field groupId = new Field("group_id", FieldType.INT); public Integer getId() { - return id; + return (Integer) id.value; } public UUID getPlayerUUID() { - return playerUUID; + return UUID.fromString((String) playerUUID.value); } public Boolean getAdmin() { - return admin; + return (Boolean) admin.value; } public Integer getDomID() { - return domID; + return (Integer) domID.value; + } + + public Integer getGroupId() { + return (Integer) groupId.value; } private final Map flags = new HashMap<>(); @@ -148,14 +156,19 @@ public class PlayerPrivilegeDTO { } public PlayerPrivilegeDTO setAdmin(Boolean admin) { - this.admin = admin; - Field f = new Field("admin", admin); - UpdateRow updateRow = new UpdateRow().field(f); + this.admin.value = admin; + UpdateRow updateRow = new UpdateRow().field(this.admin); + return doUpdate(updateRow); + } + + public PlayerPrivilegeDTO setGroupId(Integer groupId) { + this.groupId.value = groupId; + UpdateRow updateRow = new UpdateRow().field(this.groupId); return doUpdate(updateRow); } public PlayerPrivilegeDTO applyTemplate(PrivilegeTemplateDTO template) { - this.admin = template.getAdmin(); + this.admin.value = template.getAdmin(); UpdateRow updateRow = new UpdateRow().field(new Field("admin", admin)); for (Flag f : Flag.getPrivilegeFlagsEnabled()) { this.flags.put(f, template.getFlagValue(f)); @@ -164,19 +177,20 @@ public class PlayerPrivilegeDTO { return doUpdate(updateRow); } - private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map flags) { - this.id = id; - this.playerUUID = playerUUID; - this.admin = admin; - this.domID = domID; + private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map flags, Integer groupId) { + this.id.value = id; + this.playerUUID.value = playerUUID.toString(); + this.admin.value = admin; + this.domID.value = domID; + this.groupId.value = groupId; this.flags.putAll(flags); } public PlayerPrivilegeDTO(UUID playerUUID, DominionDTO dom) { - this.id = null; - this.playerUUID = playerUUID; - this.admin = false; - this.domID = dom.getId(); + this.id.value = null; + this.playerUUID.value = playerUUID.toString(); + this.admin.value = false; + this.domID.value = dom.getId(); for (Flag f : Flag.getPrivilegeFlagsEnabled()) { this.flags.put(f, dom.getFlagValue(f)); } diff --git a/src/main/java/cn/lunadeer/dominion/events/Apis.java b/src/main/java/cn/lunadeer/dominion/events/Apis.java index f4956c1..446d433 100644 --- a/src/main/java/cn/lunadeer/dominion/events/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/events/Apis.java @@ -4,6 +4,7 @@ import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; +import cn.lunadeer.dominion.dtos.GroupDTO; import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; import cn.lunadeer.minecraftpluginutils.Notification; import net.kyori.adventure.text.Component; @@ -52,8 +53,18 @@ public class Apis { return true; } if (prev != null) { - if (prev.getFlagValue(flag)) { - return true; + if (prev.getGroupId() != -1) { + if (prev.getFlagValue(flag)) { + return true; + } + } else { + GroupDTO group = Cache.instance.getGroup(prev.getGroupId()); + if (group == null) { + return false; + } + if (group.getFlagValue(flag)) { + return true; + } } } else { if (dom.getFlagValue(flag)) { diff --git a/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java b/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java index f141507..073d63c 100644 --- a/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java +++ b/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java @@ -155,5 +155,28 @@ public class DatabaseTables { // 1.31.6 TableColumn dominion_color = new TableColumn("color", FieldType.STRING, false, false, true, false, "'#00BFFF'"); new AddColumn(dominion_color).table("dominion").ifNotExists().execute(); + + // 1.34.0 + TableColumn player_privilege_group_id = new TableColumn("group_id", FieldType.INT, false, false, true, false, -1); + new AddColumn(player_privilege_group_id).table("player_privilege").ifNotExists().execute(); + + TableColumn group_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0); + TableColumn group_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1); + TableColumn group_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'"); + TableColumn group_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false); + CreateTable.ForeignKey group_dom_id_fk = new CreateTable.ForeignKey(group_dom_id, "dominion", dominion_id, true); + CreateTable group = new CreateTable().ifNotExists(); + group.table("group") + .field(group_id) + .field(group_dom_id) + .field(group_name) + .field(group_admin) + .foreignKey(group_dom_id_fk) + .unique(group_dom_id, group_name); + group.execute(); + for (Flag flag : Flag.getAllPrivilegeFlags()) { + TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue()); + new AddColumn(column).table("group").ifNotExists().execute(); + } } } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java index 5befc90..8db52ab 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java @@ -26,6 +26,18 @@ public class Apis { return page; } + public static int getPage(String[] args, int pos) { + int page = 1; + if (args.length > pos) { + try { + page = Integer.parseInt(args[pos]); + } catch (Exception e) { + return 1; + } + } + return page; + } + /** * 尝试从 arg[1] 获取领地名称 * 如果没有此参数则会尝试获取玩家当前所在位置 diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionGroupList.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionGroupList.java new file mode 100644 index 0000000..5f7fff8 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionGroupList.java @@ -0,0 +1,75 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.GroupDTO; +import cn.lunadeer.dominion.dtos.PlayerDTO; +import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.minecraftpluginutils.Notification; +import cn.lunadeer.minecraftpluginutils.stui.ListView; +import cn.lunadeer.minecraftpluginutils.stui.components.Button; +import cn.lunadeer.minecraftpluginutils.stui.components.Line; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1; +import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; + +public class DominionGroupList { + + public static void show(CommandSender sender, String[] args) { + Player player = playerOnly(sender); + if (player == null) return; + DominionDTO dominion = getDominionNameArg_1(player, args); + if (dominion == null) { + Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion group_list <领地名称>"); + return; + } + if (noAuthToManage(player, dominion)) return; + int page = Apis.getPage(args, 2); + List groups = GroupDTO.selectByDominionId(dominion.getId()); + ListView view = ListView.create(10, "/dominion group_list " + dominion.getName()); + view.title("权限组列表"); + view.navigator( + Line.create() + .append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()) + .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) + .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) + .append("权限组列表") + ); + + Button create_btn = Button.createGreen("创建权限组") + .setHoverText("创建一个新的权限组") + .setExecuteCommand("/dominion cui_create_group " + dominion.getName()); + view.add(new Line().append(create_btn.build())); + + for (GroupDTO group : groups) { + Line line = new Line(); + Button del = Button.createRed("删除") + .setHoverText("删除权限组 " + group.getName()) + .setExecuteCommand("/dominion delete_group " + dominion.getName() + " " + group.getName()); + Button edit = Button.create("编辑") + .setHoverText("编辑权限组 " + group.getName()) + .setExecuteCommand("/dominion group_manage " + dominion.getName() + " " + group.getName()); + Button add = Button.createGreen("+") + .setHoverText("添加成员到权限组 " + group.getName()) + .setExecuteCommand("/dominion select_member_add_group " + dominion.getName() + " " + group.getName() + " " + page); + line.append(del.build()).append(edit.build()).append(group.getName()).append(add.build()); + view.add(line); + List players = PlayerPrivilegeDTO.selectByGroupId(group.getId()); + for (PlayerPrivilegeDTO playerPrivilege : players) { + PlayerDTO p = PlayerDTO.select(playerPrivilege.getPlayerUUID()); + if (p == null) continue; + Button remove = Button.createRed("移出权限组") + .setHoverText("把 " + p.getLastKnownName() + " 移出权限组 " + group.getName()) + .setExecuteCommand("/dominion group_remove_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + page); + Line playerLine = new Line(); + playerLine.append(remove.build()).append(" | " + p.getLastKnownName()); + } + } + view.showOn(player, page); + } + +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java index 92d62b8..6938ecb 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java @@ -25,6 +25,7 @@ public class DominionManage { return; } if (noAuthToManage(player, dominion)) return; + int page = Apis.getPage(args, 2); Line size_info = Line.create() .append(Button.create("详细信息").setExecuteCommand("/dominion info " + dominion.getName()).build()) .append("查看领地详细信息"); @@ -37,6 +38,9 @@ public class DominionManage { Line privilege_list = Line.create() .append(Button.create("成员权限").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build()) .append("管理此领地成员的权限"); + Line group_list = Line.create() + .append(Button.create("权限组").setExecuteCommand("/dominion group_list " + dominion.getName()).build()) + .append("管理此领地的权限组"); Line set_tp = Line.create() .append(Button.create("设置传送点").setExecuteCommand("/dominion set_tp_location " + dominion.getName()).build()) .append("设置当前位置为此领地传送点"); @@ -64,6 +68,7 @@ public class DominionManage { .add(env_info) .add(flag_info) .add(privilege_list) + .add(group_list) .add(set_tp) .add(rename) .add(join_msg) @@ -71,6 +76,6 @@ public class DominionManage { if (Dominion.config.getBlueMap()) { view.add(map_color); } - view.showOn(player, 1); + view.showOn(player, page); } } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java index fc93b9e..b9dcf2d 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java @@ -1,9 +1,7 @@ package cn.lunadeer.dominion.tuis; -import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.dtos.Flag; -import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.dtos.*; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; @@ -53,9 +51,12 @@ public class DominionPrivilegeList { for (PlayerPrivilegeDTO privilege : privileges) { PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID()); if (p_player == null) continue; + GroupDTO group = Cache.instance.getGroup(privilege.getGroupId()); Line line = Line.create(); - if (privilege.getAdmin()) { + if (group != null) { + line.append(groupTag); + } else if (privilege.getAdmin()) { line.append(adminTag); } else { if (!privilege.getFlagValue(Flag.MOVE)) { @@ -65,17 +66,34 @@ public class DominionPrivilegeList { } } - line.append(Button.createGreen("权限") + Button prev = Button.createGreen("权限") .setHoverText("配置成员权限") - .setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()).build()); - if ((!player.getName().equals(p_player.getLastKnownName()) && !privilege.getAdmin()) || dominion.getOwner().equals(player.getUniqueId())) { - line.append(Button.createRed("移除") - .setHoverText("将此成员移出(变为访客)") - .setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b").build()); - line.append(Button.createGreen("模板") - .setHoverText("套用权限模板") - .setExecuteCommand("/dominion select_template " + p_player.getLastKnownName() + " " + dominion.getName() + " " + page).build()); + .setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()); + Button remove = Button.createRed("移除") + .setHoverText("将此成员移出(变为访客)") + .setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b"); + + if (!player.getUniqueId().equals(dominion.getOwner())) { + boolean disable = false; + if (group == null) { + if (privilege.getAdmin()) { + disable = true; + } + } else { + if (group.getAdmin()) { + disable = true; + } + } + if (disable) { + prev.setDisabled("你不是领地主人,无法编辑管理员权限"); + remove.setDisabled("你不是领地主人,无法移除管理员"); + } } + if (group != null) { + prev.setDisabled(String.format("此成员属于权限组 %s 无法单独编辑权限", group.getName())); + } + line.append(remove.build()); + line.append(prev.build()); line.append(p_player.getLastKnownName()); view.add(line); } @@ -88,4 +106,6 @@ public class DominionPrivilegeList { .hoverEvent(Component.text("这是一个普通成员")); private static final TextComponent banTag = Component.text("[B]", Style.style(TextColor.color(255, 67, 0))) .hoverEvent(Component.text("这是一个黑名单成员")); + private static final TextComponent groupTag = Component.text("[G]", Style.style(TextColor.color(0, 185, 153))) + .hoverEvent(Component.text("这个成员在一个权限组里")); } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java b/src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java new file mode 100644 index 0000000..78c0664 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java @@ -0,0 +1,86 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.Flag; +import cn.lunadeer.dominion.dtos.GroupDTO; +import cn.lunadeer.minecraftpluginutils.Notification; +import cn.lunadeer.minecraftpluginutils.stui.ListView; +import cn.lunadeer.minecraftpluginutils.stui.components.Button; +import cn.lunadeer.minecraftpluginutils.stui.components.Line; +import net.kyori.adventure.text.Component; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; + +public class GroupManage { + public static void show(CommandSender sender, String[] args) { + if (args.length < 3) { + return; + } + Player player = playerOnly(sender); + if (player == null) return; + DominionDTO dominion = DominionDTO.select(args[1]); + if (dominion == null) { + Notification.error(sender, "领地 %s 不存在", args[1]); + return; + } + if (noAuthToManage(player, dominion)) return; + int page = Apis.getPage(args, 3); + GroupDTO group = GroupDTO.select(dominion.getId(), args[2]); + if (group == null) { + Notification.error(sender, "权限组 %s 不存在", args[2]); + return; + } + + ListView view = ListView.create(10, "/dominion group_manage " + dominion.getName() + " " + group.getName()); + view.title("权限组 " + group.getName() + " 管理"); + view.navigator( + Line.create() + .append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()) + .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) + .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) + .append(Button.create("权限组列表").setExecuteCommand("/dominion group_list" + dominion.getName()).build()) + ); + Button rename_btn = Button.create("重命名") + .setHoverText("重命名权限组 " + group.getName()) + .setExecuteCommand("/dominion cui_rename_group " + dominion.getName() + " " + group.getName()); + view.add(Line.create().append(rename_btn.build())); + + if (group.getAdmin()) { + view.add(Line.create() + .append(Button.createGreen("☑") + .setExecuteCommand(String.format("/dominion set_group_flag %s %s admin false %s", dominion.getName(), group.getName(), page)) + .build()) + .append("管理员")); + view.add(createOption(Flag.GLOW, group.getFlagValue(Flag.GLOW), dominion.getName(), group.getName(), page)); + } else { + view.add(Line.create() + .append(Button.createGreen("☐") + .setExecuteCommand(String.format("/dominion set_group_flag %s %s admin true %s", dominion.getName(), group.getName(), page)) + .build()) + .append("管理员")); + for (Flag flag : Flag.getPrivilegeFlagsEnabled()) { + view.add(createOption(flag, group.getFlagValue(flag), dominion.getName(), group.getName(), page)); + } + } + view.showOn(player, page); + } + + private static Line createOption(Flag flag, boolean value, String DominionName, String groupName, int page) { + if (value) { + return Line.create() + .append(Button.createGreen("☑") + .setExecuteCommand(String.format("/dominion set_group_flag %s %s %s false %s", DominionName, groupName, flag.getFlagName(), page)) + .build()) + .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); + } else { + return Line.create() + .append(Button.createRed("☐") + .setExecuteCommand(String.format("/dominion set_group_flag %s %s %s true %s", DominionName, groupName, flag.getFlagName(), page)) + .build()) + .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); + } + } +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java index 1999ad8..e32f4c5 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java @@ -13,8 +13,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import static cn.lunadeer.dominion.commands.Apis.playerOnly; -import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_2; -import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; +import static cn.lunadeer.dominion.tuis.Apis.*; public class PrivilegeInfo { // /dominion privilege_info <玩家名称> [领地名称] [页码] @@ -22,13 +21,7 @@ public class PrivilegeInfo { Player player = playerOnly(sender); if (player == null) return; DominionDTO dominion = getDominionNameArg_2(player, args); - int page = 1; - if (args.length == 4) { - try { - page = Integer.parseInt(args[3]); - } catch (Exception ignored) { - } - } + int page = getPage(args, 3); String playerName = args[1]; if (dominion == null) { Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_info <玩家名称> [领地名称]"); @@ -55,6 +48,9 @@ public class PrivilegeInfo { .append(Button.create("成员列表").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build()) .append("成员权限") ); + view.add(Line.create().append(Button.createGreen("套用模板") + .setHoverText("选择一个权限模板套用") + .setExecuteCommand("/dominion select_template " + playerName + " " + dominion.getName()).build())); if (privilege.getAdmin()) { view.add(Line.create() .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " admin false " + dominion.getName() + " " + page).build()) diff --git a/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java b/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java new file mode 100644 index 0000000..f6acaa3 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java @@ -0,0 +1,55 @@ +package cn.lunadeer.dominion.tuis; + +import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.dtos.GroupDTO; +import cn.lunadeer.dominion.dtos.PlayerDTO; +import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.minecraftpluginutils.Notification; +import cn.lunadeer.minecraftpluginutils.stui.ListView; +import cn.lunadeer.minecraftpluginutils.stui.components.Button; +import cn.lunadeer.minecraftpluginutils.stui.components.Line; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.tuis.Apis.*; + +public class SelectMember { + public static void show(CommandSender sender, String[] args) { + if (args.length < 3) { + return; + } + Player player = playerOnly(sender); + if (player == null) return; + DominionDTO dominion = getDominionNameArg_1(player, args); + if (dominion == null) { + Notification.error(sender, "领地不存在"); + return; + } + if (noAuthToManage(player, dominion)) return; + GroupDTO group = GroupDTO.select(dominion.getId(), args[2]); + if (group == null) { + Notification.error(sender, "权限组不存在"); + return; + } + int backPage = getPage(args, 3); + ListView view = ListView.create(10, "/dominion select_member_add_group " + dominion.getName() + " " + group.getName() + " " + backPage); + view.title("选择成员"); + view.navigator( + Line.create() + .append("添加到权限组 " + group.getName()) + .append(Button.create("返回").setExecuteCommand("/dominion group_list " + dominion.getName() + " " + backPage).build()) + ); + List members = PlayerPrivilegeDTO.selectByGroupId(-1); + for (PlayerPrivilegeDTO member : members) { + PlayerDTO p = PlayerDTO.select(member.getPlayerUUID()); + if (p == null) continue; + view.add(Line.create() + .append(Button.create(p.getLastKnownName()) + .setExecuteCommand("/dominion group_add_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + backPage) + .build())); + } + } +} diff --git a/src/main/java/cn/lunadeer/dominion/tuis/SelectTemplate.java b/src/main/java/cn/lunadeer/dominion/tuis/SelectTemplate.java index a9a503b..94ec764 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/SelectTemplate.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/SelectTemplate.java @@ -20,7 +20,6 @@ public class SelectTemplate { String playerName = args[1]; String dominionName = args[2]; - String backPage = args[3]; int page = 1; if (args.length == 5) { @@ -32,18 +31,18 @@ public class SelectTemplate { List templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId()); - ListView view = ListView.create(10, "/dominion select_template " + playerName + " " + dominionName + " " + backPage); + ListView view = ListView.create(10, "/dominion select_template " + playerName + " " + dominionName); view.title("选择一个模板"); Line sub = Line.create() .append("套用在领地 " + dominionName + " 的成员 " + playerName + " 身上") - .append(Button.create("返回").setExecuteCommand("/dominion privilege_list " + dominionName + " " + backPage).build()); + .append(Button.create("返回").setExecuteCommand("/dominion privilege_info " + playerName + " " + dominionName).build()); view.subtitle(sub); for (PrivilegeTemplateDTO template : templates) { // /dominion apply_template <玩家名称> <领地名称> <模板名称> view.add(Line.create() .append(Button.create("选择") - .setExecuteCommand("/dominion apply_template " + playerName + " " + dominionName + " " + template.getName() + " " + backPage) + .setExecuteCommand("/dominion apply_template " + playerName + " " + dominionName + " " + template.getName()) .build()) .append(Component.text(template.getName()))); } From 146fa32480d84a6abde2e440db476c05edda8d0c Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Fri, 28 Jun 2024 17:41:12 +0800 Subject: [PATCH 07/19] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=BB=84=E5=8A=9F=E8=83=BD=EF=BC=88=E6=9C=AA=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/cn/lunadeer/dominion/events/Apis.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cn/lunadeer/dominion/events/Apis.java b/src/main/java/cn/lunadeer/dominion/events/Apis.java index 446d433..aaab174 100644 --- a/src/main/java/cn/lunadeer/dominion/events/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/events/Apis.java @@ -53,7 +53,7 @@ public class Apis { return true; } if (prev != null) { - if (prev.getGroupId() != -1) { + if (prev.getGroupId() == -1) { if (prev.getFlagValue(flag)) { return true; } From e2508904f4951f27838ca3f1924b74299f9662a9 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Sat, 29 Jun 2024 00:46:54 +0800 Subject: [PATCH 08/19] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=BB=84=E7=9B=B8=E5=85=B3bug=EF=BC=8C=E5=88=9D?= =?UTF-8?q?=E6=AD=A5=E6=B5=8B=E8=AF=95=E5=8F=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../java/cn/lunadeer/dominion/dtos/GroupDTO.java | 14 +++++++------- .../lunadeer/dominion/managers/DatabaseTables.java | 4 ++-- .../cn/lunadeer/dominion/tuis/DominionManage.java | 2 +- .../cn/lunadeer/dominion/tuis/GroupManage.java | 5 +++-- .../cn/lunadeer/dominion/tuis/SelectMember.java | 1 + 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 909baf8..9e134df 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.34.0-beta + 1.34.1-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java index 88745c4..d57a52c 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java @@ -64,7 +64,7 @@ public class GroupDTO { public static GroupDTO create(String name, DominionDTO dominionDTO) { GroupDTO group = new GroupDTO(name, dominionDTO.getId()); InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null)); - insertRow.table("group") + insertRow.table("dominion_group") .field(group.domID) .field(group.name) .field(group.admin); @@ -86,7 +86,7 @@ public class GroupDTO { } public static void delete(Integer id) { - String sql = "DELETE FROM group WHERE id = ?;"; + String sql = "DELETE FROM dominion_group WHERE id = ?;"; DatabaseManager.instance.query(sql, id); Cache.instance.loadGroup(id); List players = PlayerPrivilegeDTO.selectByGroupId(id); @@ -96,26 +96,26 @@ public class GroupDTO { } public static GroupDTO select(Integer id) { - String sql = "SELECT * FROM group WHERE id = ?;"; + String sql = "SELECT * FROM dominion_group WHERE id = ?;"; List groups = getDTOFromRS(DatabaseManager.instance.query(sql, id)); if (groups.size() == 0) return null; return groups.get(0); } public static GroupDTO select(Integer domID, String name) { - String sql = "SELECT * FROM group WHERE dom_id = ? AND name = ?;"; + String sql = "SELECT * FROM dominion_group WHERE dom_id = ? AND name = ?;"; List groups = getDTOFromRS(DatabaseManager.instance.query(sql, domID, name)); if (groups.size() == 0) return null; return groups.get(0); } public static List selectAll() { - String sql = "SELECT * FROM group;"; + String sql = "SELECT * FROM dominion_group;"; return getDTOFromRS(DatabaseManager.instance.query(sql)); } public static List selectByDominionId(Integer domID) { - String sql = "SELECT * FROM group WHERE dom_id = ?;"; + String sql = "SELECT * FROM dominion_group WHERE dom_id = ?;"; return getDTOFromRS(DatabaseManager.instance.query(sql, domID)); } @@ -162,7 +162,7 @@ public class GroupDTO { private GroupDTO doUpdate(UpdateRow updateRow) { updateRow.returningAll(id) - .table("group") + .table("dominion_group") .where("id = ?", id.value); try (ResultSet rs = updateRow.execute()) { List groups = getDTOFromRS(rs); diff --git a/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java b/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java index 073d63c..fd184be 100644 --- a/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java +++ b/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java @@ -166,7 +166,7 @@ public class DatabaseTables { TableColumn group_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false); CreateTable.ForeignKey group_dom_id_fk = new CreateTable.ForeignKey(group_dom_id, "dominion", dominion_id, true); CreateTable group = new CreateTable().ifNotExists(); - group.table("group") + group.table("dominion_group") .field(group_id) .field(group_dom_id) .field(group_name) @@ -176,7 +176,7 @@ public class DatabaseTables { group.execute(); for (Flag flag : Flag.getAllPrivilegeFlags()) { TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue()); - new AddColumn(column).table("group").ifNotExists().execute(); + new AddColumn(column).table("dominion_group").ifNotExists().execute(); } } } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java b/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java index 6938ecb..ba2d3d0 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java @@ -36,7 +36,7 @@ public class DominionManage { .append(Button.create("访客权限").setExecuteCommand("/dominion flag_info " + dominion.getName()).build()) .append("访客在此领地的权限"); Line privilege_list = Line.create() - .append(Button.create("成员权限").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build()) + .append(Button.create("成员管理").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build()) .append("管理此领地成员的权限"); Line group_list = Line.create() .append(Button.create("权限组").setExecuteCommand("/dominion group_list " + dominion.getName()).build()) diff --git a/src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java b/src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java index 78c0664..372fbb6 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java @@ -41,7 +41,8 @@ public class GroupManage { .append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()) .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) - .append(Button.create("权限组列表").setExecuteCommand("/dominion group_list" + dominion.getName()).build()) + .append(Button.create("权限组列表").setExecuteCommand("/dominion group_list " + dominion.getName()).build()) + .append("权限组管理") ); Button rename_btn = Button.create("重命名") .setHoverText("重命名权限组 " + group.getName()) @@ -57,7 +58,7 @@ public class GroupManage { view.add(createOption(Flag.GLOW, group.getFlagValue(Flag.GLOW), dominion.getName(), group.getName(), page)); } else { view.add(Line.create() - .append(Button.createGreen("☐") + .append(Button.createRed("☐") .setExecuteCommand(String.format("/dominion set_group_flag %s %s admin true %s", dominion.getName(), group.getName(), page)) .build()) .append("管理员")); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java b/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java index f6acaa3..276ff06 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java @@ -51,5 +51,6 @@ public class SelectMember { .setExecuteCommand("/dominion group_add_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + backPage) .build())); } + view.showOn(player, backPage); } } From aa30f178de4299238fa45f49cb48f84ac952e280 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Sat, 29 Jun 2024 11:19:29 +0800 Subject: [PATCH 09/19] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E6=88=90=E5=91=98=E7=95=8C=E9=9D=A2=E5=89=AF=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java b/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java index 276ff06..4eeda86 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java @@ -37,11 +37,9 @@ public class SelectMember { int backPage = getPage(args, 3); ListView view = ListView.create(10, "/dominion select_member_add_group " + dominion.getName() + " " + group.getName() + " " + backPage); view.title("选择成员"); - view.navigator( - Line.create() - .append("添加到权限组 " + group.getName()) - .append(Button.create("返回").setExecuteCommand("/dominion group_list " + dominion.getName() + " " + backPage).build()) - ); + Line sub = Line.create().append("选择成员添加到权限组 " + group.getName()) + .append(Button.create("返回").setExecuteCommand("/dominion group_list " + dominion.getName() + " " + backPage).build()); + view.subtitle(sub); List members = PlayerPrivilegeDTO.selectByGroupId(-1); for (PlayerPrivilegeDTO member : members) { PlayerDTO p = PlayerDTO.select(member.getPlayerUUID()); From f4b234928aa4d2413ca13234f78c9812aaf188db Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Sat, 29 Jun 2024 12:41:55 +0800 Subject: [PATCH 10/19] =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=83=A8=E5=88=86CUI?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../java/cn/lunadeer/dominion/Commands.java | 76 +++++++++---------- .../dominion/commands/DominionFlag.java | 8 +- .../cn/lunadeer/dominion/commands/Group.java | 16 ++-- .../dominion/commands/PlayerPrivilege.java | 22 +++--- .../lunadeer/dominion/commands/SetConfig.java | 4 +- .../lunadeer/dominion/commands/Template.java | 4 +- .../dominion/cuis/CreateDominion.java | 2 +- .../lunadeer/dominion/cuis/CreateGroup.java | 4 +- .../dominion/cuis/CreatePrivilege.java | 6 +- .../dominion/cuis/CreateTemplate.java | 2 +- .../dominion/cuis/EditJoinMessage.java | 2 +- .../dominion/cuis/EditLeaveMessage.java | 2 +- .../dominion/cuis/RenameDominion.java | 2 +- .../lunadeer/dominion/cuis/RenameGroup.java | 5 +- .../lunadeer/dominion/cuis/SetMapColor.java | 2 +- .../dominion/dtos/PlayerPrivilegeDTO.java | 2 +- .../lunadeer/dominion/tuis/AllDominion.java | 2 +- .../{DominionConfig.java => SysConfig.java} | 4 +- .../DominionList.java} | 4 +- .../tuis/{ => dominion}/DominionManage.java | 9 ++- .../manage/EnvSetting.java} | 21 ++--- .../manage/GuestSetting.java} | 21 ++--- .../manage/SizeInfo.java} | 6 +- .../manage/group/GroupList.java} | 19 +++-- .../manage/group/GroupSetting.java} | 8 +- .../manage/group}/SelectMember.java | 5 +- .../manage/member/MemberList.java} | 25 +++--- .../manage/member/MemberSetting.java} | 20 +++-- .../manage/member}/SelectPlayer.java | 18 ++--- .../manage/member}/SelectTemplate.java | 20 ++--- .../tuis/{ => template}/TemplateList.java | 2 +- .../tuis/{ => template}/TemplateManage.java | 2 +- 33 files changed, 171 insertions(+), 176 deletions(-) rename src/main/java/cn/lunadeer/dominion/tuis/{DominionConfig.java => SysConfig.java} (99%) rename src/main/java/cn/lunadeer/dominion/tuis/{ListDominion.java => dominion/DominionList.java} (97%) rename src/main/java/cn/lunadeer/dominion/tuis/{ => dominion}/DominionManage.java (94%) rename src/main/java/cn/lunadeer/dominion/tuis/{DominionEnvInfo.java => dominion/manage/EnvSetting.java} (84%) rename src/main/java/cn/lunadeer/dominion/tuis/{DominionFlagInfo.java => dominion/manage/GuestSetting.java} (84%) rename src/main/java/cn/lunadeer/dominion/tuis/{DominionSizeInfo.java => dominion/manage/SizeInfo.java} (93%) rename src/main/java/cn/lunadeer/dominion/tuis/{DominionGroupList.java => dominion/manage/group/GroupList.java} (84%) rename src/main/java/cn/lunadeer/dominion/tuis/{GroupManage.java => dominion/manage/group/GroupSetting.java} (92%) rename src/main/java/cn/lunadeer/dominion/tuis/{ => dominion/manage/group}/SelectMember.java (90%) rename src/main/java/cn/lunadeer/dominion/tuis/{DominionPrivilegeList.java => dominion/manage/member/MemberList.java} (86%) rename src/main/java/cn/lunadeer/dominion/tuis/{PrivilegeInfo.java => dominion/manage/member/MemberSetting.java} (88%) rename src/main/java/cn/lunadeer/dominion/tuis/{ => dominion/manage/member}/SelectPlayer.java (80%) rename src/main/java/cn/lunadeer/dominion/tuis/{ => dominion/manage/member}/SelectTemplate.java (76%) rename src/main/java/cn/lunadeer/dominion/tuis/{ => template}/TemplateList.java (97%) rename src/main/java/cn/lunadeer/dominion/tuis/{ => template}/TemplateManage.java (98%) diff --git a/pom.xml b/pom.xml index 9e134df..2e97c91 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.34.1-beta + 1.34.2-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Commands.java b/src/main/java/cn/lunadeer/dominion/Commands.java index ebfba02..59af761 100644 --- a/src/main/java/cn/lunadeer/dominion/Commands.java +++ b/src/main/java/cn/lunadeer/dominion/Commands.java @@ -6,6 +6,18 @@ import cn.lunadeer.dominion.cuis.*; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.dominion.tuis.*; import cn.lunadeer.dominion.tuis.MigrateList; +import cn.lunadeer.dominion.tuis.dominion.DominionManage; +import cn.lunadeer.dominion.tuis.dominion.DominionList; +import cn.lunadeer.dominion.tuis.dominion.manage.*; +import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList; +import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting; +import cn.lunadeer.dominion.tuis.dominion.manage.group.SelectMember; +import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList; +import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberSetting; +import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer; +import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectTemplate; +import cn.lunadeer.dominion.tuis.template.TemplateList; +import cn.lunadeer.dominion.tuis.template.TemplateManage; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; @@ -20,24 +32,6 @@ import java.util.List; import static cn.lunadeer.dominion.commands.Helper.*; public class Commands implements TabExecutor { - /* - 创建领地: /dominion create <领地名称> - 自动创建领地: /dominion auto_create <领地名称> - 创建子领地: /dominion create_sub <子领地名称> [父领地名称] - 自动创建子领地: /dominion auto_create_sub <子领地名称> [父领地名称] - 扩张领地: /dominion expand [大小] [领地名称] - 缩小领地: /dominion contract [大小] [领地名称] - 删除领地: /dominion delete <领地名称> [force] - 设置领地权限: /dominion set <权限名称> [领地名称] - 设置玩家权限: /dominion set_privilege <玩家名称> <权限名称> [领地名称] - 重置玩家权限: /dominion clear_privilege <玩家名称> [领地名称] - 创建权限组: /dominion create_group <权限组名称> - 删除权限组: /dominion delete_group <权限组名称> - 设置权限组权限: /dominion set_group <权限组名称> <权限名称> - 设置玩家在某个领地归属的权限组: /dominion add_player <玩家名称> <权限组名称> [领地名称] - 删除玩家在某个领地归属的权限组: /dominion remove_player <玩家名称> <权限组名称> [领地名称] - */ - /** * Executes the given command, returning its success. @@ -62,19 +56,19 @@ public class Commands implements TabExecutor { Menu.show(sender, args); break; case "list": - ListDominion.show(sender, args); + DominionList.show(sender, args); break; case "help": cn.lunadeer.dominion.tuis.Apis.printHelp(sender, args); break; case "info": - DominionSizeInfo.show(sender, args); + SizeInfo.show(sender, args); break; case "manage": DominionManage.show(sender, args); break; - case "flag_info": - DominionFlagInfo.show(sender, args); + case "guest_setting": + GuestSetting.show(sender, args); break; case "create": DominionOperate.createDominion(sender, args); @@ -109,11 +103,11 @@ public class Commands implements TabExecutor { case "clear_privilege": PlayerPrivilege.clearPlayerPrivilege(sender, args); break; - case "privilege_list": - DominionPrivilegeList.show(sender, args); + case "member_list": + MemberList.show(sender, args); break; - case "privilege_info": - PrivilegeInfo.show(sender, args); + case "member_setting": + MemberSetting.show(sender, args); break; case "select_player_create_privilege": SelectPlayer.show(sender, args); @@ -145,8 +139,8 @@ public class Commands implements TabExecutor { case "export_mca": Operator.exportMca(sender, args); break; - case "config": - DominionConfig.show(sender, args); + case "sys_config": + SysConfig.show(sender, args); break; case "set_config": SetConfig.handler(sender, args); @@ -184,8 +178,8 @@ public class Commands implements TabExecutor { case "set_map_color": DominionOperate.setMapColor(sender, args); break; - case "env_info": - DominionEnvInfo.show(sender, args); + case "env_setting": + EnvSetting.show(sender, args); break; case "create_group": Group.createGroup(sender, args); @@ -206,13 +200,13 @@ public class Commands implements TabExecutor { Group.removeMember(sender, args); break; case "group_list": - DominionGroupList.show(sender, args); + GroupList.show(sender, args); break; case "select_member_add_group": SelectMember.show(sender, args); break; - case "group_manage": - GroupManage.show(sender, args); + case "group_setting": + GroupSetting.show(sender, args); break; // ---=== CUI ===--- case "cui_rename": @@ -264,9 +258,9 @@ public class Commands implements TabExecutor { @Override public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { if (args.length == 1) { - return Arrays.asList("menu", "help", "info", "manage", "flag_info", "privilege_list", + return Arrays.asList("menu", "help", "info", "manage", "guest_setting", "member_list", "create", "auto_create", "create_sub", "auto_create_sub", "expand", "contract", "delete", "set", - "create_privilege", "set_privilege", "clear_privilege", "list", "privilege_info", + "create_privilege", "set_privilege", "clear_privilege", "list", "member_setting", "set_enter_msg", "set_leave_msg", "set_tp_location", @@ -276,7 +270,7 @@ public class Commands implements TabExecutor { "reload_cache", "reload_config", "export_mca", - "config", + "sys_config", "apply_template", "template_list", "template_manage", @@ -292,7 +286,7 @@ public class Commands implements TabExecutor { switch (args[0]) { case "help": case "list": - case "config": + case "sys_config": case "template_list": return Collections.singletonList("页码(可选)"); case "create": @@ -301,8 +295,8 @@ public class Commands implements TabExecutor { case "delete": case "info": case "manage": - case "flag_info": - case "privilege_list": + case "guest_setting": + case "member_list": case "rename": case "give": case "set_tp_location": @@ -320,7 +314,7 @@ public class Commands implements TabExecutor { case "create_privilege": case "set_privilege": case "clear_privilege": - case "privilege_info": + case "member_setting": case "apply_template": return playerNames(); case "expand": @@ -354,7 +348,7 @@ public class Commands implements TabExecutor { case "contract": case "clear_privilege": case "create_privilege": - case "privilege_info": + case "member_setting": case "auto_create_sub": case "create_sub": case "set_enter_msg": diff --git a/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java b/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java index bb53985..3b25b3c 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java +++ b/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java @@ -3,8 +3,8 @@ package cn.lunadeer.dominion.commands; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.FlagsController; import cn.lunadeer.dominion.dtos.Flag; -import cn.lunadeer.dominion.tuis.DominionEnvInfo; -import cn.lunadeer.dominion.tuis.DominionFlagInfo; +import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting; +import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting; import cn.lunadeer.minecraftpluginutils.Notification; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -35,9 +35,9 @@ public class DominionFlag { newArgs[1] = args[3]; newArgs[2] = args[4]; if (Flag.isDominionOnlyFlag(args[1])) { - DominionEnvInfo.show(sender, newArgs); + EnvSetting.show(sender, newArgs); } else { - DominionFlagInfo.show(sender, newArgs); + GuestSetting.show(sender, newArgs); } } else { diff --git a/src/main/java/cn/lunadeer/dominion/commands/Group.java b/src/main/java/cn/lunadeer/dominion/commands/Group.java index b700eee..c829e3b 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Group.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Group.java @@ -2,8 +2,8 @@ package cn.lunadeer.dominion.commands; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.GroupController; -import cn.lunadeer.dominion.tuis.DominionGroupList; -import cn.lunadeer.dominion.tuis.GroupManage; +import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList; +import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -31,7 +31,7 @@ public class Group { String[] newArgs = new String[2]; newArgs[0] = "group_list"; newArgs[1] = dominionName; - DominionGroupList.show(sender, newArgs); + GroupList.show(sender, newArgs); } /** @@ -53,7 +53,7 @@ public class Group { String[] newArgs = new String[2]; newArgs[0] = "group_list"; newArgs[1] = dominionName; - DominionGroupList.show(sender, newArgs); + GroupList.show(sender, newArgs); } /** @@ -77,7 +77,7 @@ public class Group { newArgs[0] = "group_manage"; newArgs[1] = dominionName; newArgs[2] = newGroupName; - GroupManage.show(sender, newArgs); + GroupSetting.show(sender, newArgs); } /** @@ -103,7 +103,7 @@ public class Group { newArgs[1] = dominionName; newArgs[2] = groupName; newArgs[3] = String.valueOf(getPage(args, 5)); - GroupManage.show(sender, newArgs); + GroupSetting.show(sender, newArgs); } /** @@ -127,7 +127,7 @@ public class Group { newArgs[0] = "group_list"; newArgs[1] = dominionName; newArgs[2] = String.valueOf(getPage(args, 4)); - DominionGroupList.show(sender, newArgs); + GroupList.show(sender, newArgs); } /** @@ -151,7 +151,7 @@ public class Group { newArgs[0] = "group_list"; newArgs[1] = dominionName; newArgs[2] = String.valueOf(getPage(args, 4)); - DominionGroupList.show(sender, newArgs); + GroupList.show(sender, newArgs); } } diff --git a/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java b/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java index a204148..38e4bcd 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java +++ b/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java @@ -2,8 +2,8 @@ package cn.lunadeer.dominion.commands; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.PrivilegeController; -import cn.lunadeer.dominion.tuis.DominionPrivilegeList; -import cn.lunadeer.dominion.tuis.PrivilegeInfo; +import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList; +import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberSetting; import cn.lunadeer.minecraftpluginutils.Notification; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -37,7 +37,7 @@ public class PlayerPrivilege { String[] newArgs = new String[2]; newArgs[0] = "privilege_list"; newArgs[1] = args[2]; - DominionPrivilegeList.show(sender, newArgs); + MemberList.show(sender, newArgs); } } @@ -63,7 +63,7 @@ public class PlayerPrivilege { newArgs[1] = args[1]; newArgs[2] = args[4]; newArgs[3] = args[5]; - PrivilegeInfo.show(sender, newArgs); + MemberSetting.show(sender, newArgs); } else { Notification.error(sender, "用法: /dominion set_privilege <玩家名称> <权限名称> [领地名称]"); } @@ -93,7 +93,7 @@ public class PlayerPrivilege { String[] newArgs = new String[3]; newArgs[0] = "privilege_list"; newArgs[1] = args[2]; - DominionPrivilegeList.show(sender, newArgs); + MemberList.show(sender, newArgs); } } @@ -116,13 +116,11 @@ public class PlayerPrivilege { String dominionName = args[2]; String templateName = args[3]; PrivilegeController.applyTemplate(operator, dominionName, playerName, templateName); - if (args.length == 5) { - String[] newArgs = new String[3]; - newArgs[0] = "privilege_info"; - newArgs[1] = playerName; - newArgs[2] = dominionName; - DominionPrivilegeList.show(sender, newArgs); - } + String[] newArgs = new String[3]; + newArgs[0] = "member_setting"; + newArgs[1] = playerName; + newArgs[2] = dominionName; + MemberSetting.show(sender, newArgs); } } diff --git a/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java b/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java index 2fb88c4..08d2619 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java +++ b/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java @@ -1,7 +1,7 @@ package cn.lunadeer.dominion.commands; import cn.lunadeer.dominion.Dominion; -import cn.lunadeer.dominion.tuis.DominionConfig; +import cn.lunadeer.dominion.tuis.SysConfig; import cn.lunadeer.minecraftpluginutils.Notification; import org.bukkit.command.CommandSender; @@ -81,7 +81,7 @@ public class SetConfig { String[] newArgs = new String[2]; newArgs[0] = "config"; newArgs[1] = String.valueOf(page); - DominionConfig.show(sender, newArgs); + SysConfig.show(sender, newArgs); } } diff --git a/src/main/java/cn/lunadeer/dominion/commands/Template.java b/src/main/java/cn/lunadeer/dominion/commands/Template.java index 453b1e4..61daf91 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Template.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Template.java @@ -2,8 +2,8 @@ package cn.lunadeer.dominion.commands; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.TemplateController; -import cn.lunadeer.dominion.tuis.TemplateList; -import cn.lunadeer.dominion.tuis.TemplateManage; +import cn.lunadeer.dominion.tuis.template.TemplateList; +import cn.lunadeer.dominion.tuis.template.TemplateManage; import cn.lunadeer.minecraftpluginutils.Notification; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/main/java/cn/lunadeer/dominion/cuis/CreateDominion.java b/src/main/java/cn/lunadeer/dominion/cuis/CreateDominion.java index a998666..a1560cd 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/CreateDominion.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/CreateDominion.java @@ -4,7 +4,7 @@ import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.controllers.AbstractOperator; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.DominionController; -import cn.lunadeer.dominion.tuis.DominionManage; +import cn.lunadeer.dominion.tuis.dominion.DominionManage; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; diff --git a/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java b/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java index d594c82..4ec7ce3 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java @@ -3,7 +3,7 @@ package cn.lunadeer.dominion.cuis; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.GroupController; import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.tuis.DominionGroupList; +import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; @@ -32,7 +32,7 @@ public class CreateGroup { String[] newArgs = new String[2]; newArgs[0] = "group_list"; newArgs[1] = dominionName; - DominionGroupList.show(sender, newArgs); + GroupList.show(sender, newArgs); } } diff --git a/src/main/java/cn/lunadeer/dominion/cuis/CreatePrivilege.java b/src/main/java/cn/lunadeer/dominion/cuis/CreatePrivilege.java index 9b21d2c..77755ca 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/CreatePrivilege.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/CreatePrivilege.java @@ -4,8 +4,8 @@ import cn.lunadeer.dominion.controllers.AbstractOperator; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.PrivilegeController; import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.tuis.DominionPrivilegeList; -import cn.lunadeer.dominion.tuis.SelectPlayer; +import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList; +import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; @@ -33,7 +33,7 @@ public class CreatePrivilege { BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); operator.getResponse().thenAccept(result -> { if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)){ - DominionPrivilegeList.show(sender, new String[]{"privilege_list", dominionName}); + MemberList.show(sender, new String[]{"privilege_list", dominionName}); } else { SelectPlayer.show(sender, new String[]{"select_player_create_privilege", dominionName}); } diff --git a/src/main/java/cn/lunadeer/dominion/cuis/CreateTemplate.java b/src/main/java/cn/lunadeer/dominion/cuis/CreateTemplate.java index 558438a..b0bc4bd 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/CreateTemplate.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/CreateTemplate.java @@ -2,7 +2,7 @@ package cn.lunadeer.dominion.cuis; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.TemplateController; -import cn.lunadeer.dominion.tuis.TemplateList; +import cn.lunadeer.dominion.tuis.template.TemplateList; import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; import org.bukkit.command.CommandSender; diff --git a/src/main/java/cn/lunadeer/dominion/cuis/EditJoinMessage.java b/src/main/java/cn/lunadeer/dominion/cuis/EditJoinMessage.java index 068cf88..ffebd43 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/EditJoinMessage.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/EditJoinMessage.java @@ -3,7 +3,7 @@ package cn.lunadeer.dominion.cuis; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.DominionController; import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.tuis.DominionManage; +import cn.lunadeer.dominion.tuis.dominion.DominionManage; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; diff --git a/src/main/java/cn/lunadeer/dominion/cuis/EditLeaveMessage.java b/src/main/java/cn/lunadeer/dominion/cuis/EditLeaveMessage.java index b3d972c..cac667c 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/EditLeaveMessage.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/EditLeaveMessage.java @@ -3,7 +3,7 @@ package cn.lunadeer.dominion.cuis; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.DominionController; import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.tuis.DominionManage; +import cn.lunadeer.dominion.tuis.dominion.DominionManage; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; diff --git a/src/main/java/cn/lunadeer/dominion/cuis/RenameDominion.java b/src/main/java/cn/lunadeer/dominion/cuis/RenameDominion.java index ba5e95f..e82f567 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/RenameDominion.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/RenameDominion.java @@ -2,7 +2,7 @@ package cn.lunadeer.dominion.cuis; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.DominionController; -import cn.lunadeer.dominion.tuis.DominionManage; +import cn.lunadeer.dominion.tuis.dominion.DominionManage; import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; import org.bukkit.command.CommandSender; diff --git a/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java b/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java index 5c9dd86..0d69b31 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java @@ -3,8 +3,7 @@ package cn.lunadeer.dominion.cuis; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.GroupController; import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.tuis.DominionGroupList; -import cn.lunadeer.dominion.tuis.GroupManage; +import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; @@ -36,7 +35,7 @@ public class RenameGroup { newArgs[0] = "group_manage"; newArgs[1] = dominionName; newArgs[2] = input; - GroupManage.show(sender, newArgs); + GroupSetting.show(sender, newArgs); } } diff --git a/src/main/java/cn/lunadeer/dominion/cuis/SetMapColor.java b/src/main/java/cn/lunadeer/dominion/cuis/SetMapColor.java index c177bc5..ff921d7 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/SetMapColor.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/SetMapColor.java @@ -3,7 +3,7 @@ package cn.lunadeer.dominion.cuis; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.DominionController; import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.tuis.DominionManage; +import cn.lunadeer.dominion.tuis.dominion.DominionManage; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput; diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java index 2c5353e..a7b223b 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java @@ -169,7 +169,7 @@ public class PlayerPrivilegeDTO { public PlayerPrivilegeDTO applyTemplate(PrivilegeTemplateDTO template) { this.admin.value = template.getAdmin(); - UpdateRow updateRow = new UpdateRow().field(new Field("admin", admin)); + UpdateRow updateRow = new UpdateRow().field(admin); for (Flag f : Flag.getPrivilegeFlagsEnabled()) { this.flags.put(f, template.getFlagValue(f)); updateRow.field(new Field(f.getFlagName(), template.getFlagValue(f))); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java b/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java index 187e025..7e93277 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java @@ -13,7 +13,7 @@ import java.util.List; import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.tuis.Apis.getPage; import static cn.lunadeer.dominion.tuis.Apis.notOp; -import static cn.lunadeer.dominion.tuis.ListDominion.BuildTreeLines; +import static cn.lunadeer.dominion.tuis.dominion.DominionList.BuildTreeLines; public class AllDominion { diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java b/src/main/java/cn/lunadeer/dominion/tuis/SysConfig.java similarity index 99% rename from src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java rename to src/main/java/cn/lunadeer/dominion/tuis/SysConfig.java index cb30b47..f79bfb7 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionConfig.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/SysConfig.java @@ -15,13 +15,13 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.tuis.Apis.getPage; import static cn.lunadeer.dominion.tuis.Apis.notOp; -public class DominionConfig { +public class SysConfig { public static void show(CommandSender sender, String[] args) { Player player = playerOnly(sender); if (player == null) return; if (notOp(player)) return; int page = getPage(args); - ListView view = ListView.create(10, "/dominion config"); + ListView view = ListView.create(10, "/dominion sys_config"); view.title("系统配置"); view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("系统配置")); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionList.java similarity index 97% rename from src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionList.java index ebf0138..0c022f9 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/ListDominion.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionList.java @@ -1,4 +1,4 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion; import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.DominionNode; @@ -18,7 +18,7 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.commands.Helper.playerAdminDominions; import static cn.lunadeer.dominion.tuis.Apis.getPage; -public class ListDominion { +public class DominionList { public static void show(CommandSender sender, String[] args) { Player player = playerOnly(sender); if (player == null) return; diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionManage.java similarity index 94% rename from src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionManage.java index ba2d3d0..cedec9c 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionManage.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionManage.java @@ -1,7 +1,8 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion; import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.DominionDTO; +import cn.lunadeer.dominion.tuis.Apis; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; @@ -30,13 +31,13 @@ public class DominionManage { .append(Button.create("详细信息").setExecuteCommand("/dominion info " + dominion.getName()).build()) .append("查看领地详细信息"); Line env_info = Line.create() - .append(Button.create("环境设置").setExecuteCommand("/dominion env_info " + dominion.getName()).build()) + .append(Button.create("环境设置").setExecuteCommand("/dominion env_setting " + dominion.getName()).build()) .append("设置领地内的一些非玩家相关效果"); Line flag_info = Line.create() - .append(Button.create("访客权限").setExecuteCommand("/dominion flag_info " + dominion.getName()).build()) + .append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build()) .append("访客在此领地的权限"); Line privilege_list = Line.create() - .append(Button.create("成员管理").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build()) + .append(Button.create("成员管理").setExecuteCommand("/dominion member_list " + dominion.getName()).build()) .append("管理此领地成员的权限"); Line group_list = Line.create() .append(Button.create("权限组").setExecuteCommand("/dominion group_list " + dominion.getName()).build()) diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionEnvInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/EnvSetting.java similarity index 84% rename from src/main/java/cn/lunadeer/dominion/tuis/DominionEnvInfo.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/EnvSetting.java index 50c909e..17516aa 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionEnvInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/EnvSetting.java @@ -1,4 +1,4 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion.manage; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; @@ -11,29 +11,24 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.tuis.Apis.getPage; -public class DominionEnvInfo { +public class EnvSetting { public static void show(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; if (args.length < 2) { - Notification.error(sender, "用法: /dominion env_info <领地名称> [页码]"); + Notification.error(sender, "用法: /dominion env_setting <领地名称> [页码]"); return; } + Player player = playerOnly(sender); + if (player == null) return; DominionDTO dominion = DominionDTO.select(args[1]); if (dominion == null) { Notification.error(sender, "领地 %s 不存在", args[1]); return; } - int page = 1; - if (args.length == 3) { - try { - page = Integer.parseInt(args[2]); - } catch (Exception ignored) { - } - } - ListView view = ListView.create(10, "/dominion env_info " + dominion.getName()); + int page = getPage(args, 2); + ListView view = ListView.create(10, "/dominion env_setting " + dominion.getName()); view.title("领地 " + dominion.getName() + " 环境设置") .navigator(Line.create() .append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()) diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/GuestSetting.java similarity index 84% rename from src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/GuestSetting.java index 4a9eb91..f825d1a 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionFlagInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/GuestSetting.java @@ -1,4 +1,4 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion.manage; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; @@ -11,29 +11,24 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.tuis.Apis.getPage; -public class DominionFlagInfo { +public class GuestSetting { public static void show(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; if (args.length < 2) { - Notification.error(sender, "用法: /dominion flag_info <领地名称> [页码]"); + Notification.error(sender, "用法: /dominion guest_setting <领地名称> [页码]"); return; } + Player player = playerOnly(sender); + if (player == null) return; DominionDTO dominion = DominionDTO.select(args[1]); if (dominion == null) { Notification.error(sender, "领地 %s 不存在", args[1]); return; } - int page = 1; - if (args.length == 3) { - try { - page = Integer.parseInt(args[2]); - } catch (Exception ignored) { - } - } - ListView view = ListView.create(10, "/dominion flag_info " + dominion.getName()); + int page = getPage(args, 2); + ListView view = ListView.create(10, "/dominion guest_setting " + dominion.getName()); view.title("领地 " + dominion.getName() + " 访客权限") .navigator(Line.create() .append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()) diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionSizeInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/SizeInfo.java similarity index 93% rename from src/main/java/cn/lunadeer/dominion/tuis/DominionSizeInfo.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/SizeInfo.java index 86878ad..3d28b2a 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionSizeInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/SizeInfo.java @@ -1,4 +1,4 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion.manage; import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.controllers.PlayerController; @@ -15,7 +15,7 @@ import org.bukkit.entity.Player; import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1; -public class DominionSizeInfo { +public class SizeInfo { public static void show(CommandSender sender, String[] args) { Player player = playerOnly(sender); if (player == null) return; @@ -47,7 +47,7 @@ public class DominionSizeInfo { )) .actionBar(Line.create() .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) - .append(Button.create("权限列表").setExecuteCommand("/dominion flag_info " + dominion.getName()).build())) + .append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build())) .showOn(player); ParticleRender.showBoxFace(Dominion.instance, player, dominion.getLocation1(), diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionGroupList.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java similarity index 84% rename from src/main/java/cn/lunadeer/dominion/tuis/DominionGroupList.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java index 5f7fff8..53d69b0 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionGroupList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java @@ -1,10 +1,12 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion.manage.group; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.GroupDTO; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.tuis.Apis; import cn.lunadeer.minecraftpluginutils.Notification; +import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; import cn.lunadeer.minecraftpluginutils.stui.components.Line; @@ -14,17 +16,20 @@ import org.bukkit.entity.Player; import java.util.List; import static cn.lunadeer.dominion.commands.Apis.playerOnly; -import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1; import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; -public class DominionGroupList { +public class GroupList { public static void show(CommandSender sender, String[] args) { + if (args.length < 2) { + Notification.error(sender, "用法: /dominion group_list <领地名称> [页码]"); + return; + } Player player = playerOnly(sender); if (player == null) return; - DominionDTO dominion = getDominionNameArg_1(player, args); + DominionDTO dominion = DominionDTO.select(args[1]); if (dominion == null) { - Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion group_list <领地名称>"); + Notification.error(sender, "领地 %s 不存在", args[1]); return; } if (noAuthToManage(player, dominion)) return; @@ -52,13 +57,14 @@ public class DominionGroupList { .setExecuteCommand("/dominion delete_group " + dominion.getName() + " " + group.getName()); Button edit = Button.create("编辑") .setHoverText("编辑权限组 " + group.getName()) - .setExecuteCommand("/dominion group_manage " + dominion.getName() + " " + group.getName()); + .setExecuteCommand("/dominion group_setting " + dominion.getName() + " " + group.getName()); Button add = Button.createGreen("+") .setHoverText("添加成员到权限组 " + group.getName()) .setExecuteCommand("/dominion select_member_add_group " + dominion.getName() + " " + group.getName() + " " + page); line.append(del.build()).append(edit.build()).append(group.getName()).append(add.build()); view.add(line); List players = PlayerPrivilegeDTO.selectByGroupId(group.getId()); + XLogger.debug("players: " + players.size()); for (PlayerPrivilegeDTO playerPrivilege : players) { PlayerDTO p = PlayerDTO.select(playerPrivilege.getPlayerUUID()); if (p == null) continue; @@ -67,6 +73,7 @@ public class DominionGroupList { .setExecuteCommand("/dominion group_remove_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + page); Line playerLine = new Line(); playerLine.append(remove.build()).append(" | " + p.getLastKnownName()); + view.add(playerLine); } } view.showOn(player, page); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java similarity index 92% rename from src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java index 372fbb6..656a903 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/GroupManage.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java @@ -1,8 +1,9 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion.manage.group; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.GroupDTO; +import cn.lunadeer.dominion.tuis.Apis; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; @@ -14,9 +15,10 @@ import org.bukkit.entity.Player; import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; -public class GroupManage { +public class GroupSetting { public static void show(CommandSender sender, String[] args) { if (args.length < 3) { + Notification.error(sender, "用法: /dominion group_setting <领地名称> <权限组名称> [页码]"); return; } Player player = playerOnly(sender); @@ -34,7 +36,7 @@ public class GroupManage { return; } - ListView view = ListView.create(10, "/dominion group_manage " + dominion.getName() + " " + group.getName()); + ListView view = ListView.create(10, "/dominion group_setting " + dominion.getName() + " " + group.getName()); view.title("权限组 " + group.getName() + " 管理"); view.navigator( Line.create() diff --git a/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java similarity index 90% rename from src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java index 4eeda86..f70b83d 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/SelectMember.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java @@ -1,4 +1,4 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion.manage.group; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.GroupDTO; @@ -19,11 +19,12 @@ import static cn.lunadeer.dominion.tuis.Apis.*; public class SelectMember { public static void show(CommandSender sender, String[] args) { if (args.length < 3) { + Notification.error(sender, "用法: /dominion select_member_add_group <领地名称> <权限组名称> [页码]"); return; } Player player = playerOnly(sender); if (player == null) return; - DominionDTO dominion = getDominionNameArg_1(player, args); + DominionDTO dominion = DominionDTO.select(args[1]); if (dominion == null) { Notification.error(sender, "领地不存在"); return; diff --git a/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java similarity index 86% rename from src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java index b9dcf2d..341aa8e 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/DominionPrivilegeList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java @@ -1,4 +1,4 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion.manage.member; import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.dtos.*; @@ -16,27 +16,24 @@ import org.bukkit.entity.Player; import java.util.List; import static cn.lunadeer.dominion.commands.Apis.playerOnly; -import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1; -import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; +import static cn.lunadeer.dominion.tuis.Apis.*; -public class DominionPrivilegeList { +public class MemberList { public static void show(CommandSender sender, String[] args) { - int page = 1; - if (args.length == 3) { - try { - page = Integer.parseInt(args[2]); - } catch (Exception ignored) { - } + if (args.length < 2) { + Notification.error(sender, "用法: /dominion member_list <领地名称> [页码]"); + return; } Player player = playerOnly(sender); if (player == null) return; - DominionDTO dominion = getDominionNameArg_1(player, args); + DominionDTO dominion = DominionDTO.select(args[1]); if (dominion == null) { - Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_list <领地名称>"); + Notification.error(sender, "领地 %s 不存在", args[1]); return; } - ListView view = ListView.create(10, "/dominion privilege_list " + dominion.getName()); + int page = getPage(args, 2); + ListView view = ListView.create(10, "/dominion member_list " + dominion.getName()); if (noAuthToManage(player, dominion)) return; List privileges = PlayerPrivilegeDTO.select(dominion.getId()); view.title("领地 " + dominion.getName() + " 成员列表"); @@ -68,7 +65,7 @@ public class DominionPrivilegeList { Button prev = Button.createGreen("权限") .setHoverText("配置成员权限") - .setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()); + .setExecuteCommand("/dominion member_setting " + p_player.getLastKnownName() + " " + dominion.getName()); Button remove = Button.createRed("移除") .setHoverText("将此成员移出(变为访客)") .setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b"); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java similarity index 88% rename from src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java index e32f4c5..167e1bf 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/PrivilegeInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java @@ -1,4 +1,4 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion.manage.member; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; @@ -15,19 +15,23 @@ import org.bukkit.entity.Player; import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.tuis.Apis.*; -public class PrivilegeInfo { - // /dominion privilege_info <玩家名称> [领地名称] [页码] +public class MemberSetting { + // /dominion member_setting <玩家名称> [领地名称] [页码] public static void show(CommandSender sender, String[] args) { + if (args.length < 2) { + Notification.error(sender, "用法: /dominion member_setting <玩家名称> [领地名称] [页码]"); + return; + } Player player = playerOnly(sender); if (player == null) return; DominionDTO dominion = getDominionNameArg_2(player, args); - int page = getPage(args, 3); - String playerName = args[1]; if (dominion == null) { - Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_info <玩家名称> [领地名称]"); + Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion member_setting <玩家名称> [领地名称]"); return; } - ListView view = ListView.create(10, "/dominion privilege_info " + playerName + " " + dominion.getName()); + int page = getPage(args, 3); + String playerName = args[1]; + ListView view = ListView.create(10, "/dominion member_setting " + playerName + " " + dominion.getName()); if (noAuthToManage(player, dominion)) return; PlayerDTO playerDTO = PlayerDTO.select(playerName); if (playerDTO == null) { @@ -45,7 +49,7 @@ public class PrivilegeInfo { .append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()) .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) - .append(Button.create("成员列表").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build()) + .append(Button.create("成员列表").setExecuteCommand("/dominion member_list " + dominion.getName()).build()) .append("成员权限") ); view.add(Line.create().append(Button.createGreen("套用模板") diff --git a/src/main/java/cn/lunadeer/dominion/tuis/SelectPlayer.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectPlayer.java similarity index 80% rename from src/main/java/cn/lunadeer/dominion/tuis/SelectPlayer.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectPlayer.java index 480003f..fbe2a52 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/SelectPlayer.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectPlayer.java @@ -1,7 +1,8 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion.manage.member; import cn.lunadeer.dominion.controllers.PlayerController; import cn.lunadeer.dominion.dtos.PlayerDTO; +import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; import cn.lunadeer.minecraftpluginutils.stui.components.Line; @@ -11,25 +12,24 @@ import org.bukkit.entity.Player; import java.util.List; import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.tuis.Apis.getPage; public class SelectPlayer { // /dominion select_player_create_privilege <领地名称> [页码] public static void show(CommandSender sender, String[] args) { + if (args.length < 2) { + Notification.error(sender, "用法: /dominion select_player_create_privilege <领地名称> [页码]"); + return; + } Player player = playerOnly(sender); if (player == null) return; - int page = 1; - if (args.length == 3) { - try { - page = Integer.parseInt(args[2]); - } catch (Exception ignored) { - } - } + int page = getPage(args, 2); String dominion_name = args[1]; ListView view = ListView.create(10, "/dominion select_player_create_privilege " + dominion_name); Line sub = Line.create() .append("只能选择已经登录过的玩家") .append(Button.create("搜索").setExecuteCommand("/dominion cui_create_privilege " + dominion_name).build()) - .append(Button.create("返回").setExecuteCommand("/dominion privilege_list " + dominion_name).build()); + .append(Button.create("返回").setExecuteCommand("/dominion member_list " + dominion_name).build()); view.title("选择玩家添加为成员").subtitle(sub); List players = PlayerController.allPlayers(); for (PlayerDTO p : players) { diff --git a/src/main/java/cn/lunadeer/dominion/tuis/SelectTemplate.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectTemplate.java similarity index 76% rename from src/main/java/cn/lunadeer/dominion/tuis/SelectTemplate.java rename to src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectTemplate.java index 94ec764..de94fbf 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/SelectTemplate.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectTemplate.java @@ -1,6 +1,7 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.dominion.manage.member; import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; +import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; import cn.lunadeer.minecraftpluginutils.stui.components.Line; @@ -11,23 +12,24 @@ import org.bukkit.entity.Player; import java.util.List; import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.tuis.Apis.getPage; public class SelectTemplate { public static void show(CommandSender sender, String[] args) { + if (args.length < 3) { + // /dominion select_template <玩家名称> <领地名称> [页码] + Notification.error(sender, "用法: /dominion select_template <玩家名称> <领地名称> [页码]"); + return; + } + Player player = playerOnly(sender); if (player == null) return; String playerName = args[1]; String dominionName = args[2]; - int page = 1; - if (args.length == 5) { - try { - page = Integer.parseInt(args[4]); - } catch (Exception ignored) { - } - } + int page = getPage(args, 3); List templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId()); @@ -35,7 +37,7 @@ public class SelectTemplate { view.title("选择一个模板"); Line sub = Line.create() .append("套用在领地 " + dominionName + " 的成员 " + playerName + " 身上") - .append(Button.create("返回").setExecuteCommand("/dominion privilege_info " + playerName + " " + dominionName).build()); + .append(Button.create("返回").setExecuteCommand("/dominion member_setting " + playerName + " " + dominionName).build()); view.subtitle(sub); for (PrivilegeTemplateDTO template : templates) { diff --git a/src/main/java/cn/lunadeer/dominion/tuis/TemplateList.java b/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateList.java similarity index 97% rename from src/main/java/cn/lunadeer/dominion/tuis/TemplateList.java rename to src/main/java/cn/lunadeer/dominion/tuis/template/TemplateList.java index 62603c6..7e36ec7 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/TemplateList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateList.java @@ -1,4 +1,4 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.template; import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; import cn.lunadeer.minecraftpluginutils.stui.ListView; diff --git a/src/main/java/cn/lunadeer/dominion/tuis/TemplateManage.java b/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateManage.java similarity index 98% rename from src/main/java/cn/lunadeer/dominion/tuis/TemplateManage.java rename to src/main/java/cn/lunadeer/dominion/tuis/template/TemplateManage.java index 3a8d46c..e2f2894 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/TemplateManage.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateManage.java @@ -1,4 +1,4 @@ -package cn.lunadeer.dominion.tuis; +package cn.lunadeer.dominion.tuis.template; import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; From 68c6ccd5d0b8146079131cda61b62c944eb49c2e Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Sun, 30 Jun 2024 00:01:39 +0800 Subject: [PATCH 11/19] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=BB=84=E5=88=97=E8=A1=A8=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tuis/dominion/manage/group/GroupList.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java index 53d69b0..c98322d 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java @@ -10,6 +10,9 @@ import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; import cn.lunadeer.minecraftpluginutils.stui.components.Line; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -68,13 +71,15 @@ public class GroupList { for (PlayerPrivilegeDTO playerPrivilege : players) { PlayerDTO p = PlayerDTO.select(playerPrivilege.getPlayerUUID()); if (p == null) continue; - Button remove = Button.createRed("移出权限组") + Button remove = Button.createRed("-") .setHoverText("把 " + p.getLastKnownName() + " 移出权限组 " + group.getName()) .setExecuteCommand("/dominion group_remove_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + page); - Line playerLine = new Line(); - playerLine.append(remove.build()).append(" | " + p.getLastKnownName()); + Line playerLine = new Line().setDivider(""); + playerLine.append(Component.text(" ")); + playerLine.append(remove.build()).append(" | " + p.getLastKnownName()); view.add(playerLine); } + view.add(new Line().append("")); } view.showOn(player, page); } From 2f8a0f2e231392d4b7b99c853acfea93f7bf9267 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Sun, 30 Jun 2024 00:40:45 +0800 Subject: [PATCH 12/19] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E5=90=88=E6=B3=95=E6=80=A7=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/lunadeer/dominion/controllers/GroupController.java | 8 ++++++++ .../lunadeer/dominion/controllers/TemplateController.java | 8 ++++++-- .../dominion/tuis/dominion/manage/group/GroupSetting.java | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java b/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java index ecae31a..1e65e9f 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java @@ -12,6 +12,10 @@ public class GroupController { public static void createGroup(AbstractOperator operator, String domName, String groupName) { AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建权限组 %s 失败", groupName); AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建权限组 %s 成功", groupName); + if (groupName.contains(" ")) { + operator.setResponse(FAIL.addMessage("权限组名称不能包含空格")); + return; + } DominionDTO dominion = DominionDTO.select(domName); if (dominion == null) { operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName)); @@ -99,6 +103,10 @@ public class GroupController { public static void renameGroup(AbstractOperator operator, String domName, String oldName, String newName) { AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "重命名权限组 %s 为 %s 失败", oldName, newName); AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "重命名权限组 %s 为 %s 成功", oldName, newName); + if (newName.contains(" ")) { + operator.setResponse(FAIL.addMessage("权限组名称不能包含空格")); + return; + } DominionDTO dominion = DominionDTO.select(domName); if (dominion == null) { operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName)); diff --git a/src/main/java/cn/lunadeer/dominion/controllers/TemplateController.java b/src/main/java/cn/lunadeer/dominion/controllers/TemplateController.java index 49a5b8b..306ed17 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/TemplateController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/TemplateController.java @@ -10,10 +10,14 @@ public class TemplateController { public static void createTemplate(AbstractOperator operator, String templateName) { AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建成功"); AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建失败"); + if (templateName.contains(" ")) { + operator.setResponse(FAIL.addMessage("模板名称不能包含空格")); + return; + } List templates = PrivilegeTemplateDTO.selectAll(operator.getUniqueId()); for (PrivilegeTemplateDTO template : templates) { if (template.getName().equals(templateName)) { - operator.setResponse(FAIL.addMessage("已经存在名为" + templateName + "的权限模板")); + operator.setResponse(FAIL.addMessage("已经存在名为 %s 的权限模板", templateName)); return; } } @@ -22,7 +26,7 @@ public class TemplateController { operator.setResponse(FAIL.addMessage("可能是数据库错误,请联系管理员")); return; } - operator.setResponse(SUCCESS.addMessage("成功创建名为" + templateName + "的权限模板")); + operator.setResponse(SUCCESS.addMessage("成功创建名为 %s 的权限模板", templateName)); } public static void deleteTemplate(AbstractOperator operator, String templateName) { diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java index 656a903..515d155 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java @@ -46,7 +46,7 @@ public class GroupSetting { .append(Button.create("权限组列表").setExecuteCommand("/dominion group_list " + dominion.getName()).build()) .append("权限组管理") ); - Button rename_btn = Button.create("重命名") + Button rename_btn = Button.create("重命名此权限组") .setHoverText("重命名权限组 " + group.getName()) .setExecuteCommand("/dominion cui_rename_group " + dominion.getName() + " " + group.getName()); view.add(Line.create().append(rename_btn.build())); From 73fe76c3c75e8e37aa9877a37f9f07669bc1b90f Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Sun, 30 Jun 2024 09:48:28 +0800 Subject: [PATCH 13/19] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=BB=84=E9=A3=9E=E8=A1=8C=E5=8F=91=E5=85=89=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=8D=E7=94=9F=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/cn/lunadeer/dominion/Cache.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index 83ecb9e..6ab256c 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -285,7 +285,16 @@ public class Cache { } PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion); if (privilege != null) { - player.setGlowing(privilege.getFlagValue(Flag.GLOW)); + if (privilege.getGroupId() == -1) { + player.setGlowing(privilege.getFlagValue(Flag.GLOW)); + } else { + GroupDTO group = getGroup(privilege.getGroupId()); + if (group != null) { + player.setGlowing(group.getFlagValue(Flag.GLOW)); + } else { + player.setGlowing(dominion.getFlagValue(Flag.GLOW)); + } + } } else { player.setGlowing(dominion.getFlagValue(Flag.GLOW)); } @@ -313,7 +322,16 @@ public class Cache { } PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion); if (privilege != null) { - player.setAllowFlight(privilege.getFlagValue(Flag.FLY)); + if (privilege.getGroupId() == -1) { + player.setAllowFlight(privilege.getFlagValue(Flag.FLY)); + } else { + GroupDTO group = getGroup(privilege.getGroupId()); + if (group != null) { + player.setAllowFlight(group.getFlagValue(Flag.FLY)); + } else { + player.setAllowFlight(dominion.getFlagValue(Flag.FLY)); + } + } } else { player.setAllowFlight(dominion.getFlagValue(Flag.FLY)); } From bf9aa8414c9cc3b97e181012bcae6576ee99d291 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Sun, 30 Jun 2024 21:25:25 +0800 Subject: [PATCH 14/19] =?UTF-8?q?=E9=87=8D=E6=9E=84=E4=BA=86tui=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E9=A1=B5=E9=9D=A2=E9=80=BB=E8=BE=91=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../java/cn/lunadeer/dominion/Commands.java | 176 ++--------- .../cn/lunadeer/dominion/commands/Apis.java | 4 + .../cn/lunadeer/dominion/commands/Group.java | 280 ++++++++++++------ .../cn/lunadeer/dominion/commands/Member.java | 210 +++++++++++++ .../lunadeer/dominion/commands/Operator.java | 5 + .../dominion/commands/PlayerPrivilege.java | 126 -------- .../lunadeer/dominion/commands/Template.java | 176 +++++++---- ...eController.java => MemberController.java} | 96 ++---- .../lunadeer/dominion/cuis/CreateGroup.java | 7 +- .../dominion/cuis/CreateTemplate.java | 6 +- .../{CreatePrivilege.java => MemberAdd.java} | 20 +- .../lunadeer/dominion/cuis/RenameGroup.java | 8 +- .../cn/lunadeer/dominion/dtos/GroupDTO.java | 1 + .../cn/lunadeer/dominion/dtos/PlayerDTO.java | 1 - .../lunadeer/dominion/tuis/AllDominion.java | 2 +- .../java/cn/lunadeer/dominion/tuis/Apis.java | 46 +-- .../java/cn/lunadeer/dominion/tuis/Menu.java | 2 +- .../lunadeer/dominion/tuis/MigrateList.java | 8 +- .../cn/lunadeer/dominion/tuis/SysConfig.java | 2 +- .../dominion/tuis/dominion/DominionList.java | 2 +- .../tuis/dominion/DominionManage.java | 10 +- .../tuis/dominion/manage/group/GroupList.java | 30 +- .../dominion/manage/group/GroupSetting.java | 38 ++- .../dominion/manage/group/SelectMember.java | 21 +- .../dominion/manage/member/MemberList.java | 31 +- .../dominion/manage/member/MemberSetting.java | 50 +++- .../dominion/manage/member/SelectPlayer.java | 22 +- .../manage/member/SelectTemplate.java | 20 +- .../dominion/tuis/template/TemplateList.java | 16 +- ...mplateManage.java => TemplateSetting.java} | 37 +-- 31 files changed, 771 insertions(+), 684 deletions(-) create mode 100644 src/main/java/cn/lunadeer/dominion/commands/Member.java delete mode 100644 src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java rename src/main/java/cn/lunadeer/dominion/controllers/{PrivilegeController.java => MemberController.java} (55%) rename src/main/java/cn/lunadeer/dominion/cuis/{CreatePrivilege.java => MemberAdd.java} (69%) rename src/main/java/cn/lunadeer/dominion/tuis/template/{TemplateManage.java => TemplateSetting.java} (74%) diff --git a/pom.xml b/pom.xml index 2e97c91..113d130 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.34.2-beta + 1.34.4-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Commands.java b/src/main/java/cn/lunadeer/dominion/Commands.java index 59af761..4dc2d19 100644 --- a/src/main/java/cn/lunadeer/dominion/Commands.java +++ b/src/main/java/cn/lunadeer/dominion/Commands.java @@ -4,20 +4,15 @@ import cn.lunadeer.dominion.commands.*; import cn.lunadeer.dominion.controllers.PlayerController; import cn.lunadeer.dominion.cuis.*; import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.tuis.*; +import cn.lunadeer.dominion.tuis.AllDominion; +import cn.lunadeer.dominion.tuis.Menu; import cn.lunadeer.dominion.tuis.MigrateList; -import cn.lunadeer.dominion.tuis.dominion.DominionManage; +import cn.lunadeer.dominion.tuis.SysConfig; import cn.lunadeer.dominion.tuis.dominion.DominionList; -import cn.lunadeer.dominion.tuis.dominion.manage.*; -import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList; -import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting; -import cn.lunadeer.dominion.tuis.dominion.manage.group.SelectMember; -import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList; -import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberSetting; -import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer; -import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectTemplate; -import cn.lunadeer.dominion.tuis.template.TemplateList; -import cn.lunadeer.dominion.tuis.template.TemplateManage; +import cn.lunadeer.dominion.tuis.dominion.DominionManage; +import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting; +import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting; +import cn.lunadeer.dominion.tuis.dominion.manage.SizeInfo; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; @@ -94,24 +89,6 @@ public class Commands implements TabExecutor { case "set": DominionFlag.setDominionFlag(sender, args); break; - case "create_privilege": - PlayerPrivilege.createPlayerPrivilege(sender, args); - break; - case "set_privilege": - PlayerPrivilege.setPlayerPrivilege(sender, args); - break; - case "clear_privilege": - PlayerPrivilege.clearPlayerPrivilege(sender, args); - break; - case "member_list": - MemberList.show(sender, args); - break; - case "member_setting": - MemberSetting.show(sender, args); - break; - case "select_player_create_privilege": - SelectPlayer.show(sender, args); - break; case "set_enter_msg": DominionOperate.setEnterMessage(sender, args); break; @@ -148,27 +125,6 @@ public class Commands implements TabExecutor { case "all_dominion": AllDominion.show(sender, args); break; - case "template_list": - TemplateList.show(sender, args); - break; - case "template_manage": - TemplateManage.show(sender, args); - break; - case "template_delete": - Template.deleteTemplate(sender, args); - break; - case "template_create": - Template.createTemplate(sender, args); - break; - case "template_set_flag": - Template.setTemplateFlag(sender, args); - break; - case "apply_template": - PlayerPrivilege.applyTemplate(sender, args); - break; - case "select_template": - SelectTemplate.show(sender, args); - break; case "migrate_list": MigrateList.show(sender, args); break; @@ -181,32 +137,15 @@ public class Commands implements TabExecutor { case "env_setting": EnvSetting.show(sender, args); break; - case "create_group": - Group.createGroup(sender, args); + // ---=== Sub Command ===--- + case "member": + Member.handle(sender, args); break; - case "delete_group": - Group.deleteGroup(sender, args); + case "group": + Group.handle(sender, args); break; - case "rename_group": - Group.renameGroup(sender, args); - break; - case "set_group_flag": - Group.setGroupFlag(sender, args); - break; - case "group_add_member": - Group.addMember(sender, args); - break; - case "group_remove_member": - Group.removeMember(sender, args); - break; - case "group_list": - GroupList.show(sender, args); - break; - case "select_member_add_group": - SelectMember.show(sender, args); - break; - case "group_setting": - GroupSetting.show(sender, args); + case "template": + Template.handle(sender, args); break; // ---=== CUI ===--- case "cui_rename": @@ -221,8 +160,8 @@ public class Commands implements TabExecutor { case "cui_create": CreateDominion.open(sender, args); break; - case "cui_create_privilege": - CreatePrivilege.open(sender, args); + case "cui_member_add": + MemberAdd.open(sender, args); break; case "cui_template_create": CreateTemplate.open(sender, args); @@ -258,9 +197,8 @@ public class Commands implements TabExecutor { @Override public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { if (args.length == 1) { - return Arrays.asList("menu", "help", "info", "manage", "guest_setting", "member_list", + return Arrays.asList("menu", "help", "info", "manage", "guest_setting", "create", "auto_create", "create_sub", "auto_create_sub", "expand", "contract", "delete", "set", - "create_privilege", "set_privilege", "clear_privilege", "list", "member_setting", "set_enter_msg", "set_leave_msg", "set_tp_location", @@ -271,24 +209,27 @@ public class Commands implements TabExecutor { "reload_config", "export_mca", "sys_config", - "apply_template", - "template_list", - "template_manage", - "template_delete", - "template_create", - "template_set_flag", "all_dominion", "set_map_color", - "create_group", "delete_group", "rename_group", "set_group_flag", "group_add_member", "group_remove_member" + "member", + "group", + "template" ); } + if (args.length > 1 && args[0].equals("member")) { + return Member.handleTab(sender, args); + } + if (args.length > 1 && args[0].equals("group")) { + return Group.handleTab(sender, args); + } + if (args.length > 1 && args[0].equals("template")) { + return Template.handleTab(sender, args); + } if (args.length == 2) { switch (args[0]) { case "help": case "list": case "sys_config": - case "template_list": - return Collections.singletonList("页码(可选)"); case "create": case "auto_create": return Collections.singletonList("输入领地名称"); @@ -296,27 +237,14 @@ public class Commands implements TabExecutor { case "info": case "manage": case "guest_setting": - case "member_list": case "rename": case "give": case "set_tp_location": - case "create_group": - case "delete_group": - case "rename_group": - case "set_group_flag": - case "group_add_member": - case "group_remove_member": return playerDominions(sender); case "tp": return allDominions(); case "set": return dominionFlags(); - case "create_privilege": - case "set_privilege": - case "clear_privilege": - case "member_setting": - case "apply_template": - return playerNames(); case "expand": case "contract": return Collections.singletonList("大小(整数)"); @@ -327,12 +255,6 @@ public class Commands implements TabExecutor { return Collections.singletonList("进入提示语内容"); case "set_leave_msg": return Collections.singletonList("离开提示语内容"); - case "template_manage": - case "template_delete": - case "template_set_flag": - return allTemplates(sender); - case "template_create": - return Collections.singletonList("输入模板名称"); case "set_map_color": return Collections.singletonList("输入颜色(16进制)"); } @@ -341,70 +263,34 @@ public class Commands implements TabExecutor { switch (args[0]) { case "set": return boolOptions(); - case "set_privilege": - case "template_set_flag": - return playerPrivileges(); case "expand": case "contract": - case "clear_privilege": - case "create_privilege": - case "member_setting": case "auto_create_sub": case "create_sub": case "set_enter_msg": case "set_leave_msg": - case "apply_template": case "set_map_color": return playerDominions(sender); case "rename": return Collections.singletonList("输入新领地名称"); case "give": return playerNames(); - case "template_manage": - return Collections.singletonList("页码(可选)"); - case "create_group": - return Collections.singletonList("输入要创建的权限组名称"); - case "delete_group": - case "rename_group": - case "set_group_flag": - case "group_add_member": - case "group_remove_member": - return dominionGroups(args[1]); } } if (args.length == 4) { switch (args[0]) { case "set": return playerDominions(sender); - case "set_privilege": - case "template_set_flag": - return boolOptions(); - case "apply_template": - return allTemplates(sender); - case "rename_group": - return Collections.singletonList("输入新的权限组名称"); - case "set_group_flag": - return playerPrivileges(); - case "group_add_member": - return playerNames(); - case "group_remove_member": - return groupPlayers(args[1], args[2]); - } - } - if (args.length == 5) { - switch (args[0]) { - case "set_group_flag": - return boolOptions(); } } return null; } - private static List boolOptions() { + public static List boolOptions() { return Arrays.asList("true", "false"); } - private static List playerNames() { + public static List playerNames() { List players = PlayerController.allPlayers(); List names = new ArrayList<>(); for (PlayerDTO player : players) { diff --git a/src/main/java/cn/lunadeer/dominion/commands/Apis.java b/src/main/java/cn/lunadeer/dominion/commands/Apis.java index 7d70562..cd94657 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Apis.java @@ -62,4 +62,8 @@ public class Apis { return false; } + public static String CommandParser(String command, Object... args) { + return String.format(command, args); + } + } diff --git a/src/main/java/cn/lunadeer/dominion/commands/Group.java b/src/main/java/cn/lunadeer/dominion/commands/Group.java index c829e3b..f8110d0 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Group.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Group.java @@ -4,154 +4,258 @@ import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.GroupController; import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList; import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting; +import cn.lunadeer.dominion.tuis.dominion.manage.group.SelectMember; +import cn.lunadeer.minecraftpluginutils.Notification; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static cn.lunadeer.dominion.Commands.boolOptions; import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.commands.Helper.*; import static cn.lunadeer.dominion.tuis.Apis.getPage; public class Group { /** - * /dominion create_group <领地名称> <权限组名称> + * /dominion group create <领地名称> <权限组名称> * * @param sender 命令发送者 * @param args 命令参数 */ public static void createGroup(CommandSender sender, String[] args) { - if (args.length < 3) { - return; + try { + if (args.length < 4) { + Notification.error(sender, "用法: /dominion group create <领地名称> <权限组名称>"); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[2]; + String groupName = args[3]; + GroupController.createGroup(operator, dominionName, groupName); + GroupList.show(sender, dominionName); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - String dominionName = args[1]; - String groupName = args[2]; - GroupController.createGroup(operator, dominionName, groupName); - String[] newArgs = new String[2]; - newArgs[0] = "group_list"; - newArgs[1] = dominionName; - GroupList.show(sender, newArgs); } /** - * /dominion delete_group <领地名称> <权限组名称> + * /dominion group delete <领地名称> <权限组名称> * * @param sender 命令发送者 * @param args 命令参数 */ public static void deleteGroup(CommandSender sender, String[] args) { - if (args.length < 3) { - return; + try { + if (args.length < 4) { + Notification.error(sender, "用法: /dominion group delete <领地名称> <权限组名称>"); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[2]; + String groupName = args[3]; + GroupController.deleteGroup(operator, dominionName, groupName); + GroupList.show(sender, dominionName); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - String dominionName = args[1]; - String groupName = args[2]; - GroupController.deleteGroup(operator, dominionName, groupName); - String[] newArgs = new String[2]; - newArgs[0] = "group_list"; - newArgs[1] = dominionName; - GroupList.show(sender, newArgs); } /** - * /dominion rename_group <领地名称> <权限组旧名称> <新名称> + * /dominion group rename <领地名称> <权限组旧名称> <新名称> * * @param sender 命令发送者 * @param args 命令参数 */ public static void renameGroup(CommandSender sender, String[] args) { - if (args.length < 4) { - return; + try { + if (args.length < 5) { + Notification.error(sender, "用法: /dominion group rename <领地名称> <权限组旧名称> <新名称>"); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[2]; + String oldGroupName = args[3]; + String newGroupName = args[4]; + GroupController.renameGroup(operator, dominionName, oldGroupName, newGroupName); + GroupSetting.show(sender, dominionName, newGroupName); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - String dominionName = args[1]; - String oldGroupName = args[2]; - String newGroupName = args[3]; - GroupController.renameGroup(operator, dominionName, oldGroupName, newGroupName); - String[] newArgs = new String[3]; - newArgs[0] = "group_manage"; - newArgs[1] = dominionName; - newArgs[2] = newGroupName; - GroupSetting.show(sender, newArgs); } /** - * /dominion set_group_flag <领地名称> <权限组名称> <权限名称> + * /dominion group set_flag <领地名称> <权限组名称> <权限名称> * * @param sender 命令发送者 * @param args 命令参数 */ public static void setGroupFlag(CommandSender sender, String[] args) { - if (args.length < 5) { - return; + try { + if (args.length < 6) { + Notification.error(sender, "用法: /dominion group set_flag <领地名称> <权限组名称> <权限名称> "); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[2]; + String groupName = args[3]; + String flag = args[4]; + boolean value = Boolean.parseBoolean(args[5]); + int page = getPage(args, 6); + GroupController.setGroupFlag(operator, dominionName, groupName, flag, value); + GroupSetting.show(sender, dominionName, groupName, page); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - String dominionName = args[1]; - String groupName = args[2]; - String flag = args[3]; - boolean value = Boolean.parseBoolean(args[4]); - GroupController.setGroupFlag(operator, dominionName, groupName, flag, value); - String[] newArgs = new String[4]; - newArgs[0] = "group_manage"; - newArgs[1] = dominionName; - newArgs[2] = groupName; - newArgs[3] = String.valueOf(getPage(args, 5)); - GroupSetting.show(sender, newArgs); } /** - * /dominion group_add_member <领地名称> <权限组名称> <玩家名称> + * /dominion group add_member <领地名称> <权限组名称> <玩家名称> * * @param sender 命令发送者 * @param args 命令参数 */ public static void addMember(CommandSender sender, String[] args) { - if (args.length < 4) { - return; + try { + if (args.length < 5) { + Notification.error(sender, "用法: /dominion group add_member <领地名称> <权限组名称> <玩家名称>"); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[2]; + String groupName = args[3]; + String playerName = args[4]; + int page = getPage(args, 5); + GroupController.addMember(operator, dominionName, groupName, playerName); + GroupList.show(sender, dominionName, page); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - String dominionName = args[1]; - String groupName = args[2]; - String playerName = args[3]; - GroupController.addMember(operator, dominionName, groupName, playerName); - String[] newArgs = new String[3]; - newArgs[0] = "group_list"; - newArgs[1] = dominionName; - newArgs[2] = String.valueOf(getPage(args, 4)); - GroupList.show(sender, newArgs); } /** - * /dominion group_remove_member <领地名称> <权限组名称> <玩家名称> + * /dominion group remove_member <领地名称> <权限组名称> <玩家名称> * * @param sender 命令发送者 * @param args 命令参数 */ public static void removeMember(CommandSender sender, String[] args) { - if (args.length < 4) { - return; + try { + if (args.length < 5) { + Notification.error(sender, "用法: /dominion group remove_member <领地名称> <权限组名称> <玩家名称>"); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[2]; + String groupName = args[3]; + String playerName = args[4]; + int page = getPage(args, 5); + GroupController.removeMember(operator, dominionName, groupName, playerName); + GroupList.show(sender, dominionName, page); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - String dominionName = args[1]; - String groupName = args[2]; - String playerName = args[3]; - GroupController.removeMember(operator, dominionName, groupName, playerName); - String[] newArgs = new String[3]; - newArgs[0] = "group_list"; - newArgs[1] = dominionName; - newArgs[2] = String.valueOf(getPage(args, 4)); - GroupList.show(sender, newArgs); + } + + public static void handle(@NotNull CommandSender sender, @NotNull String[] args) { + switch (args[1]) { + case "create": + createGroup(sender, args); + break; + case "delete": + deleteGroup(sender, args); + break; + case "rename": + renameGroup(sender, args); + break; + case "set_flag": + setGroupFlag(sender, args); + break; + case "add_member": + addMember(sender, args); + break; + case "remove_member": + removeMember(sender, args); + break; + case "select_member": + SelectMember.show(sender, args); + break; + case "setting": + GroupSetting.show(sender, args); + break; + case "list": + GroupList.show(sender, args); + break; + } + } + + public static @Nullable List handleTab(@NotNull CommandSender sender, @NotNull String[] args) { + if (args.length == 2) { + return Arrays.asList("create", "delete", "rename", "set_flag", "add_member", "remove_member", + "select_member", "list"); + } + if (args.length == 3) { + switch (args[1]) { + case "create": + case "delete": + case "rename": + case "set_flag": + case "add_member": + case "remove_member": + case "select_member": + case "setting": + case "list": + return playerDominions(sender); + } + } + if (args.length == 4) { + switch (args[1]) { + case "create": + return Collections.singletonList("新权限组名称"); + case "delete": + case "rename": + case "set_flag": + case "add_member": + case "remove_member": + case "select_member": + case "setting": + return dominionGroups(args[2]); + } + } + if (args.length == 5) { + switch (args[1]) { + case "rename": + return Collections.singletonList("权限组新名称"); + case "set_flag": + return playerPrivileges(); + case "remove_member": + return groupPlayers(args[2], args[3]); + } + } + if (args.length == 6) { + switch (args[1]) { + case "set_flag": + return boolOptions(); + } + } + return null; } } diff --git a/src/main/java/cn/lunadeer/dominion/commands/Member.java b/src/main/java/cn/lunadeer/dominion/commands/Member.java new file mode 100644 index 0000000..a6e9136 --- /dev/null +++ b/src/main/java/cn/lunadeer/dominion/commands/Member.java @@ -0,0 +1,210 @@ +package cn.lunadeer.dominion.commands; + +import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; +import cn.lunadeer.dominion.controllers.MemberController; +import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList; +import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberSetting; +import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer; +import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectTemplate; +import cn.lunadeer.minecraftpluginutils.Notification; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static cn.lunadeer.dominion.Commands.boolOptions; +import static cn.lunadeer.dominion.Commands.playerNames; +import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.commands.Helper.*; + +public class Member { + + /** + * 创建玩家特权 + * /dominion member add <领地名称> <玩家名称> + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void member_add(CommandSender sender, String[] args) { + try { + if (args.length < 4) { + Notification.error(sender, "用法: /dominion member add <领地名称> <玩家名称>"); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[2]; + String playerName = args[3]; + MemberController.memberAdd(operator, dominionName, playerName); + MemberList.show(sender, dominionName); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); + } + } + + /** + * 设置玩家权限 + * /dominion member set_flag <领地名称> <玩家名称> <权限名称> + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void member_set_flag(CommandSender sender, String[] args) { + try { + if (args.length < 6) { + Notification.error(sender, "用法: /dominion member set_flag <领地名称> <玩家名称> <权限名称> "); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[2]; + String playerName = args[3]; + String flagName = args[4]; + boolean flagValue = Boolean.parseBoolean(args[5]); + Integer page = args.length == 7 ? Integer.parseInt(args[6]) : 1; + MemberController.setMemberFlag(operator, dominionName, playerName, flagName, flagValue); + MemberSetting.show(sender, dominionName, playerName, page); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); + } + } + + /** + * 重置玩家权限 + * /dominion member remove <领地名称> <玩家名称> + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void member_remove(CommandSender sender, String[] args) { + try { + if (args.length < 4) { + Notification.error(sender, "用法: /dominion member remove <领地名称> <玩家名称>"); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[2]; + String playerName = args[3]; + MemberController.memberRemove(operator, dominionName, playerName); + MemberList.show(sender, dominionName); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); + } + } + + /** + * 应用权限模板 + * /dominion member apply_template <领地名称> <玩家名称> <模板名称> + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void member_apply_template(CommandSender sender, String[] args) { + try { + if (args.length < 5) { + Notification.error(sender, "用法: /dominion member apply_template <领地名称> <玩家名称> <模板名称>"); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String dominionName = args[2]; + String playerName = args[3]; + String templateName = args[4]; + MemberController.applyTemplate(operator, dominionName, playerName, templateName); + MemberSetting.show(sender, dominionName, playerName); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); + } + } + + public static void handle(@NotNull CommandSender sender, @NotNull String[] args) { + switch (args[1]) { + case "add": + Member.member_add(sender, args); + break; + case "set_flag": + Member.member_set_flag(sender, args); + break; + case "remove": + Member.member_remove(sender, args); + break; + case "apply_template": + Member.member_apply_template(sender, args); + break; + case "list": + MemberList.show(sender, args); + break; + case "setting": + MemberSetting.show(sender, args); + break; + case "select_player": + SelectPlayer.show(sender, args); + break; + case "select_template": + SelectTemplate.show(sender, args); + break; + } + } + + public static @Nullable List handleTab(@NotNull CommandSender sender, @NotNull String[] args) { + if (args.length == 2) { + return Arrays.asList("add", "set_flag", "remove", "apply_template", "list", "setting", "select_player", "select_template"); + } + if (args.length == 3) { + switch (args[1]) { + case "add": + case "remove": + case "list": + case "setting": + case "set_flag": + case "apply_template": + case "select_player": + case "select_template": + return playerDominions(sender); + } + } + if (args.length == 4) { + switch (args[1]) { + case "add": + case "remove": + case "set_flag": + case "apply_template": + case "setting": + case "select_template": + case "select_player": + return playerNames(); + case "list": + return Collections.singletonList("页码(可选)"); + } + } + if (args.length == 5) { + switch (args[1]) { + case "set_flag": + return playerPrivileges(); + case "apply_template": + return allTemplates(sender); + case "setting": + case "select_template": + return Collections.singletonList("页码(可选)"); + } + } + if (args.length == 6) { + switch (args[1]) { + case "set_flag": + return boolOptions(); + } + } + return null; + } + +} diff --git a/src/main/java/cn/lunadeer/dominion/commands/Operator.java b/src/main/java/cn/lunadeer/dominion/commands/Operator.java index 455a126..8ea0af4 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Operator.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Operator.java @@ -31,6 +31,11 @@ public class Operator { Cache.instance.loadPlayerPrivileges(); Notification.info(sender, "玩家权限缓存已重新加载"); }); + Scheduler.runTaskAsync(() -> { + Notification.info(sender, "正在从数据库重新加载权限组缓存..."); + Cache.instance.loadGroup(); + Notification.info(sender, "权限组缓存已重新加载"); + }); } public static void exportMca(CommandSender sender, String[] args) { diff --git a/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java b/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java deleted file mode 100644 index 38e4bcd..0000000 --- a/src/main/java/cn/lunadeer/dominion/commands/PlayerPrivilege.java +++ /dev/null @@ -1,126 +0,0 @@ -package cn.lunadeer.dominion.commands; - -import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; -import cn.lunadeer.dominion.controllers.PrivilegeController; -import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList; -import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberSetting; -import cn.lunadeer.minecraftpluginutils.Notification; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import static cn.lunadeer.dominion.commands.Apis.playerOnly; -import static cn.lunadeer.dominion.controllers.PrivilegeController.*; - -public class PlayerPrivilege { - - /** - * 创建玩家特权 - * /dominion create_privilege <玩家名称> [领地名称] - * - * @param sender 命令发送者 - * @param args 命令参数 - */ - public static void createPlayerPrivilege(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - if (args.length != 2 && args.length != 3 && args.length != 4) { - Notification.error(sender, "用法: /dominion create_privilege <玩家名称> [领地名称]"); - return; - } - if (args.length == 2) { - createPrivilege(operator, args[1]); - } else { - createPrivilege(operator, args[1], args[2]); - } - if (args.length == 4) { - String[] newArgs = new String[2]; - newArgs[0] = "privilege_list"; - newArgs[1] = args[2]; - MemberList.show(sender, newArgs); - } - } - - /** - * 设置玩家权限 - * /dominion set_privilege <玩家名称> <权限名称> [领地名称] - * - * @param sender 命令发送者 - * @param args 命令参数 - */ - public static void setPlayerPrivilege(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - if (args.length == 4) { - setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3])); - } else if (args.length == 5) { - setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]), args[4]); - } else if (args.length == 6) { - setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]), args[4]); - String[] newArgs = new String[4]; - newArgs[0] = "privilege_info"; - newArgs[1] = args[1]; - newArgs[2] = args[4]; - newArgs[3] = args[5]; - MemberSetting.show(sender, newArgs); - } else { - Notification.error(sender, "用法: /dominion set_privilege <玩家名称> <权限名称> [领地名称]"); - } - } - - /** - * 重置玩家权限 - * /dominion clear_privilege <玩家名称> [领地名称] - * - * @param sender 命令发送者 - * @param args 命令参数 - */ - public static void clearPlayerPrivilege(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - if (args.length != 2 && args.length != 3 && args.length != 4) { - Notification.error(sender, "用法: /dominion clear_privilege <玩家名称> [领地名称]"); - return; - } - if (args.length == 2) { - clearPrivilege(operator, args[1]); - } else { - clearPrivilege(operator, args[1], args[2]); - } - if (args.length == 4) { - String[] newArgs = new String[3]; - newArgs[0] = "privilege_list"; - newArgs[1] = args[2]; - MemberList.show(sender, newArgs); - } - } - - /** - * 应用权限模板 - * /dominion apply_template <玩家名称> <领地名称> <模板名称> - * - * @param sender 命令发送者 - * @param args 命令参数 - */ - public static void applyTemplate(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - if (args.length < 4) { - Notification.error(sender, "用法: /dominion apply_template <玩家名称> <领地名称> <模板名称>"); - return; - } - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - String playerName = args[1]; - String dominionName = args[2]; - String templateName = args[3]; - PrivilegeController.applyTemplate(operator, dominionName, playerName, templateName); - String[] newArgs = new String[3]; - newArgs[0] = "member_setting"; - newArgs[1] = playerName; - newArgs[2] = dominionName; - MemberSetting.show(sender, newArgs); - } - -} diff --git a/src/main/java/cn/lunadeer/dominion/commands/Template.java b/src/main/java/cn/lunadeer/dominion/commands/Template.java index 61daf91..a844ad5 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Template.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Template.java @@ -3,97 +3,149 @@ package cn.lunadeer.dominion.commands; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.TemplateController; import cn.lunadeer.dominion.tuis.template.TemplateList; -import cn.lunadeer.dominion.tuis.template.TemplateManage; +import cn.lunadeer.dominion.tuis.template.TemplateSetting; import cn.lunadeer.minecraftpluginutils.Notification; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static cn.lunadeer.dominion.Commands.boolOptions; import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.commands.Helper.allTemplates; +import static cn.lunadeer.dominion.commands.Helper.playerPrivileges; +import static cn.lunadeer.dominion.tuis.Apis.getPage; public class Template { - /** - * 删除权限模板 - * /dominion template_delete <模板名称> [页码] - * - * @param sender 命令发送者 - * @param args 命令参数 - */ - public static void deleteTemplate(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - if (args.length < 2) { - Notification.error(sender, "用法: /dominion template_delete <模板名称>"); - return; - } - TemplateController.deleteTemplate(operator, args[1]); - String[] newArgs = new String[2]; - newArgs[0] = "template_list"; - if (args.length == 3) { - newArgs[1] = args[2]; - } else { - newArgs[1] = "1"; - } - TemplateList.show(sender, newArgs); - } - /** * 创建权限模板 - * /dominion template_create <模板名称> [页码] + * /dominion template create <模板名称> [页码] * * @param sender 命令发送者 * @param args 命令参数 */ public static void createTemplate(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - if (args.length < 2) { - Notification.error(sender, "用法: /dominion template_create <模板名称>"); - return; + try { + if (args.length < 3) { + Notification.error(sender, "用法: /dominion template create <模板名称>"); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + TemplateController.createTemplate(operator, args[2]); + TemplateList.show(sender); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); + } + } + + /** + * 删除权限模板 + * /dominion template delete <模板名称> [页码] + * + * @param sender 命令发送者 + * @param args 命令参数 + */ + public static void deleteTemplate(CommandSender sender, String[] args) { + try { + if (args.length < 3) { + Notification.error(sender, "用法: /dominion template delete <模板名称>"); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + TemplateController.deleteTemplate(operator, args[2]); + TemplateList.show(sender, getPage(args, 3)); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); } - TemplateController.createTemplate(operator, args[1]); - String[] newArgs = new String[2]; - newArgs[0] = "template_list"; - newArgs[1] = "1"; - TemplateList.show(sender, newArgs); } /** * 编辑模板 - * /dominion template_set_flag <模板名称> <权限名称> [页码] + * /dominion template set_flag <模板名称> <权限名称> [页码] * * @param sender 命令发送者 * @param args 命令参数 */ public static void setTemplateFlag(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); - if (args.length < 4) { - Notification.error(sender, "用法: /dominion template_set_flag <模板名称> <权限名称> "); - return; + try { + if (args.length < 5) { + Notification.error(sender, "用法: /dominion template set_flag <模板名称> <权限名称> "); + return; + } + Player player = playerOnly(sender); + if (player == null) return; + BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + String templateName = args[2]; + String flagName = args[3]; + boolean value = Boolean.parseBoolean(args[4]); + TemplateController.setTemplateFlag(operator, templateName, flagName, value); + TemplateSetting.show(sender, templateName, getPage(args, 5)); + } catch (Exception e) { + Notification.error(sender, e.getMessage()); } - boolean value; - if (args[3].equalsIgnoreCase("true")) { - value = true; - } else if (args[3].equalsIgnoreCase("false")) { - value = false; - } else { - Notification.error(sender, "权限值必须是true或false"); - return; + } + + + public static void handle(@NotNull CommandSender sender, @NotNull String[] args) { + switch (args[1]) { + case "list": + TemplateList.show(sender, args); + break; + case "setting": + TemplateSetting.show(sender, args); + break; + case "delete": + Template.deleteTemplate(sender, args); + break; + case "create": + Template.createTemplate(sender, args); + break; + case "set_flag": + Template.setTemplateFlag(sender, args); + break; + } + } + + public static @Nullable List handleTab(@NotNull CommandSender sender, @NotNull String[] args) { + if (args.length == 2) { + return Arrays.asList("list", "setting", "delete", "create", "set_flag"); + } + if (args.length == 3) { + switch (args[1]) { + case "create": + return Collections.singletonList("输入模板名称"); + case "delete": + case "set_flag": + case "setting": + return allTemplates(sender); + case "list": + return Collections.singletonList("页码(可选)"); + } + } + if (args.length == 4) { + switch (args[1]) { + case "set_flag": + return playerPrivileges(); + case "setting": + return Collections.singletonList("页码(可选)"); + } } - TemplateController.setTemplateFlag(operator, args[1], args[2], value); - String[] newArgs = new String[3]; - newArgs[0] = "template_manage"; - newArgs[1] = args[1]; if (args.length == 5) { - newArgs[2] = args[4]; - } else { - newArgs[2] = "1"; + switch (args[1]) { + case "set_flag": + return boolOptions(); + } } - TemplateManage.show(sender, newArgs); + return null; } } diff --git a/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java b/src/main/java/cn/lunadeer/dominion/controllers/MemberController.java similarity index 55% rename from src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java rename to src/main/java/cn/lunadeer/dominion/controllers/MemberController.java index 5ea74c7..207795d 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/PrivilegeController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/MemberController.java @@ -1,30 +1,11 @@ package cn.lunadeer.dominion.controllers; -import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.dtos.*; -import cn.lunadeer.minecraftpluginutils.XLogger; - -import java.util.UUID; import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags; import static cn.lunadeer.dominion.controllers.Apis.notOwner; -public class PrivilegeController { - - /** - * 清空玩家成员权限 - * - * @param operator 操作者 - * @param player_name 玩家 - */ - public static void clearPrivilege(AbstractOperator operator, String player_name) { - DominionDTO dominion = Apis.getPlayerCurrentDominion(operator); - if (dominion == null) { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion clear_privilege <玩家名称> <领地名称>")); - return; - } - clearPrivilege(operator, player_name, dominion.getName()); - } +public class MemberController { /** * 清空玩家成员权限 @@ -33,8 +14,9 @@ public class PrivilegeController { * @param player_name 玩家 * @param dominionName 领地名称 */ - public static void clearPrivilege(AbstractOperator operator, String player_name, String dominionName) { - AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "清空玩家 %s 在领地 %s 的权限失败", player_name, dominionName); + public static void memberRemove(AbstractOperator operator, String dominionName, String player_name) { + AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "将玩家 %s 从领地 %s 移除失败", player_name, dominionName); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "将玩家 %s 从领地 %s 移除成功", player_name, dominionName); DominionDTO dominion = DominionDTO.select(dominionName); if (dominion == null) { operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName)); @@ -56,24 +38,7 @@ public class PrivilegeController { return; } PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId()); - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "清空玩家 %s 在领地 %s 的权限成功", player_name, dominionName)); - } - - /** - * 设置玩家成员权限 - * - * @param operator 操作者 - * @param player_name 玩家 - * @param flag 权限名称 - * @param value 权限值 - */ - public static void setPrivilege(AbstractOperator operator, String player_name, String flag, boolean value) { - DominionDTO dominion = Apis.getPlayerCurrentDominion(operator); - if (dominion == null) { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion set_privilege <玩家名称> <权限名称> [领地名称]")); - return; - } - setPrivilege(operator, player_name, flag, value, dominion.getName()); + operator.setResponse(SUCCESS); } /** @@ -85,8 +50,9 @@ public class PrivilegeController { * @param value 权限值 * @param dominionName 领地名称 */ - public static void setPrivilege(AbstractOperator operator, String player_name, String flag, boolean value, String dominionName) { + public static void setMemberFlag(AbstractOperator operator, String dominionName, String player_name, String flag, boolean value) { AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 失败", player_name, dominionName, flag, value); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 成功", player_name, dominionName, flag, value); DominionDTO dominion = DominionDTO.select(dominionName); if (dominion == null) { operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName)); @@ -100,8 +66,8 @@ public class PrivilegeController { } PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); if (privilege == null) { - privilege = createPlayerPrivilege(operator, player.getUuid(), dominion); - if (privilege == null) return; + operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName)); + return; } if ((flag.equals("admin") || privilege.getAdmin()) && notOwner(operator, dominion)) { operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他玩家管理员的权限", dominionName)); @@ -121,53 +87,29 @@ public class PrivilegeController { } privilege.setFlagValue(f, value); } - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 成功", player_name, dominionName, flag, value)); + operator.setResponse(SUCCESS); } - public static void createPrivilege(AbstractOperator operator, String player_name) { - DominionDTO dominion = Apis.getPlayerCurrentDominion(operator); - if (dominion == null) { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion create_privilege <玩家名称> <领地名称>")); - return; - } - createPrivilege(operator, player_name, dominion.getName()); - } - - public static void createPrivilege(AbstractOperator operator, String player_name, String dominionName) { + public static void memberAdd(AbstractOperator operator, String dominionName, String player_name) { + AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "将玩家 %s 添加到领地成员 %s 失败", player_name, dominionName); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "将玩家 %s 添加到领地成员 %s 成功", player_name, dominionName); DominionDTO dominion = DominionDTO.select(dominionName); if (dominion == null) { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在,无法创建成员权限", dominionName)); + operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName)); return; } if (noAuthToChangeFlags(operator, dominion)) return; PlayerDTO player = PlayerController.getPlayerDTO(player_name); if (player == null) { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "玩家 %s 不存在或没有登录过", player_name)); + operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name)); return; } - if (createPlayerPrivilege(operator, player.getUuid(), dominion) != null) { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建玩家 %s 在领地 %s 的成员权限成功", player_name, dominionName)); - } - } - - private static PlayerPrivilegeDTO createPlayerPrivilege(AbstractOperator operator, UUID player, DominionDTO dom) { - XLogger.debug("operator: " + operator.getUniqueId() + " player: " + player); - if (operator.getUniqueId().equals(player)) { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不能给自己设置成员权限")); - return null; - } - PlayerDTO playerDTO = PlayerDTO.select(player); - PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom); - if (privilege != null) { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建玩家成员权限失败,玩家 %s 已经是领地 %s 的成员", playerDTO.getLastKnownName(), dom.getName())); - return null; - } - privilege = PlayerPrivilegeDTO.insert(new PlayerPrivilegeDTO(player, dom)); + PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.insert(new PlayerPrivilegeDTO(player.getUuid(), dominion)); if (privilege == null) { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建玩家成员权限失败,请联系管理员")); - return null; + operator.setResponse(FAIL); + } else { + operator.setResponse(SUCCESS); } - return privilege; } public static void applyTemplate(AbstractOperator operator, String dominionName, String playerName, String templateName) { diff --git a/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java b/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java index 4ec7ce3..f16fd0c 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/CreateGroup.java @@ -29,10 +29,7 @@ public class CreateGroup { XLogger.debug("createGroupCB.run: %s", input); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); GroupController.createGroup(operator, dominionName, input); - String[] newArgs = new String[2]; - newArgs[0] = "group_list"; - newArgs[1] = dominionName; - GroupList.show(sender, newArgs); + GroupList.show(sender, dominionName); } } @@ -46,7 +43,7 @@ public class CreateGroup { } CuiTextInput.InputCallback createGroupCB = new createGroupCB(player, dominion.getName()); CuiTextInput view = CuiTextInput.create(createGroupCB).setText("未命名权限组").title("输入要创建的权限组名称"); - view.setSuggestCommand("/dominion create_group <领地名称> <权限组名称>"); + view.setSuggestCommand("/dominion group create <领地名称> <权限组名称>"); view.open(player); } diff --git a/src/main/java/cn/lunadeer/dominion/cuis/CreateTemplate.java b/src/main/java/cn/lunadeer/dominion/cuis/CreateTemplate.java index b0bc4bd..552ecf3 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/CreateTemplate.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/CreateTemplate.java @@ -23,10 +23,8 @@ public class CreateTemplate { public void handleData(String input) { XLogger.debug("createTemplateCB.run: %s", input); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); - operator.getResponse().thenAccept(result -> { - TemplateList.show(sender, new String[]{"template_list"}); - }); TemplateController.createTemplate(operator, input); + TemplateList.show(sender); } } @@ -35,7 +33,7 @@ public class CreateTemplate { if (player == null) return; CuiTextInput.InputCallback createTemplateCB = new createTemplateCB(player); CuiTextInput view = CuiTextInput.create(createTemplateCB).setText("未命名模板").title("输入模板名称"); - view.setSuggestCommand("/dominion template_create <模板名称>"); + view.setSuggestCommand("/dominion template create <模板名称>"); view.open(player); } diff --git a/src/main/java/cn/lunadeer/dominion/cuis/CreatePrivilege.java b/src/main/java/cn/lunadeer/dominion/cuis/MemberAdd.java similarity index 69% rename from src/main/java/cn/lunadeer/dominion/cuis/CreatePrivilege.java rename to src/main/java/cn/lunadeer/dominion/cuis/MemberAdd.java index 77755ca..f99a0e9 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/CreatePrivilege.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/MemberAdd.java @@ -2,7 +2,7 @@ package cn.lunadeer.dominion.cuis; import cn.lunadeer.dominion.controllers.AbstractOperator; import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; -import cn.lunadeer.dominion.controllers.PrivilegeController; +import cn.lunadeer.dominion.controllers.MemberController; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList; import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer; @@ -16,13 +16,13 @@ import java.util.Objects; import static cn.lunadeer.dominion.commands.Apis.playerOnly; -public class CreatePrivilege { +public class MemberAdd { - private static class createPrivilegeCB implements CuiTextInput.InputCallback { + private static class memberAddCB implements CuiTextInput.InputCallback { private final Player sender; private final String dominionName; - public createPrivilegeCB(Player sender, String dominionName) { + public memberAddCB(Player sender, String dominionName) { this.sender = sender; this.dominionName = dominionName; } @@ -32,13 +32,13 @@ public class CreatePrivilege { XLogger.debug("createPrivilegeCB.run: %s", input); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); operator.getResponse().thenAccept(result -> { - if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)){ - MemberList.show(sender, new String[]{"privilege_list", dominionName}); + if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)) { + MemberList.show(sender, dominionName); } else { - SelectPlayer.show(sender, new String[]{"select_player_create_privilege", dominionName}); + SelectPlayer.show(sender, dominionName, 1); } }); - PrivilegeController.createPrivilege(operator, input, dominionName); + MemberController.memberAdd(operator, dominionName, input); } } @@ -50,9 +50,9 @@ public class CreatePrivilege { Notification.error(sender, "领地不存在"); return; } - CuiTextInput.InputCallback createPrivilegeCB = new createPrivilegeCB(player, dominion.getName()); + CuiTextInput.InputCallback createPrivilegeCB = new memberAddCB(player, dominion.getName()); CuiTextInput view = CuiTextInput.create(createPrivilegeCB).setText("Steve").title("输入玩家名称以添加为成员"); - view.setSuggestCommand("/dominion create_privilege <玩家名称> [领地名称]"); + view.setSuggestCommand("/dominion member add <领地名称> <玩家名称>"); view.open(player); } diff --git a/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java b/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java index 0d69b31..f2a396c 100644 --- a/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java +++ b/src/main/java/cn/lunadeer/dominion/cuis/RenameGroup.java @@ -31,11 +31,7 @@ public class RenameGroup { XLogger.debug("renameGroupCB.run: %s", input); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); GroupController.renameGroup(operator, dominionName, oldName, input); - String[] newArgs = new String[3]; - newArgs[0] = "group_manage"; - newArgs[1] = dominionName; - newArgs[2] = input; - GroupSetting.show(sender, newArgs); + GroupSetting.show(sender, dominionName, input); } } @@ -49,7 +45,7 @@ public class RenameGroup { } CuiTextInput.InputCallback renameGroupCB = new renameGroupCB(player, dominion.getName(), args[2]); CuiTextInput view = CuiTextInput.create(renameGroupCB).setText(args[2]).title("输入新的权限组名称"); - view.setSuggestCommand("/dominion rename_group <领地名称> <权限组旧名称> <新名称>"); + view.setSuggestCommand("/dominion group rename <领地名称> <权限组旧名称> <新名称>"); view.open(player); } diff --git a/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java index d57a52c..c6a81e1 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java @@ -74,6 +74,7 @@ public class GroupDTO { try (ResultSet rs = insertRow.execute()) { List groups = getDTOFromRS(rs); if (groups.size() == 0) return null; + Cache.instance.loadGroup(groups.get(0).getId()); return groups.get(0); } catch (Exception e) { DatabaseManager.handleDatabaseError("创建权限组失败: ", e, ""); diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java index 156bc88..2daaf8f 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java @@ -4,7 +4,6 @@ import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager; import cn.lunadeer.minecraftpluginutils.databse.Field; import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow; import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow; -import cn.lunadeer.dominion.Dominion; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; diff --git a/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java b/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java index 7e93277..137cf9f 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/AllDominion.java @@ -21,7 +21,7 @@ public class AllDominion { Player player = playerOnly(sender); if (player == null) return; if (notOp(player)) return; - int page = getPage(args); + int page = getPage(args, 1); List allDominions = Cache.instance.getAllDominionTree(); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java index 8db52ab..5cfee19 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java @@ -14,18 +14,6 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly; 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 int getPage(String[] args, int pos) { int page = 1; if (args.length > pos) { @@ -54,22 +42,6 @@ public class Apis { } } - /** - * 尝试从 arg[2] 获取领地名称 - * 如果没有此参数则会尝试获取玩家当前所在位置 - * - * @param player 玩家 - * @param args 参数 - * @return 领地信息 - */ - public static DominionDTO getDominionNameArg_2(Player player, String[] args) { - if (args.length >= 3) { - return DominionDTO.select(args[2]); - } else { - return Cache.instance.getPlayerCurrentDominion(player); - } - } - public static boolean noAuthToManage(Player player, DominionDTO dominion) { if (player.isOp()) return false; if (!dominion.getOwner().equals(player.getUniqueId())) { @@ -93,11 +65,11 @@ public class Apis { public static void printHelp(CommandSender sender, String[] args) { Player player = playerOnly(sender); if (player == null) return; - int page = getPage(args); + int page = getPage(args, 1); ListView view = ListView.create(10, "/dominion help"); view.title("领地插件命令帮助 <>表示必填参数 []表示可选参数") - .add(Line.create().append("打开交互菜单").append(Button.create("/dominion menu").setExecuteCommand("/dominion menu").build())) - .add(Line.create().append("查看帮助").append(Button.create("/dominion help [页码]").setExecuteCommand("/dominion help 1").build())) + .add(Line.create().append("打开交互菜单").append("/dominion menu")) + .add(Line.create().append("查看帮助").append("/dominion help [页码]")) .add(Line.create().append("创建领地").append("/dominion create <领地名称>")) .add(Line.create().append("自动创建领地").append("/dominion auto_create <领地名称>")) .add(Line.create().append("创建子领地").append("/dominion create_sub <子领地名称> [父领地名称]")) @@ -116,18 +88,6 @@ public class Apis { .add(Line.create().append("---[管理员指令]---")) .add(Line.create().append("刷新缓存").append(Button.create("/dominion reload_cache").setExecuteCommand("/dominion reload_cache").build())) .add(Line.create().append("重载配置").append(Button.create("/dominion reload_config").setExecuteCommand("/dominion reload_config").build())) - // 以下指令主要被用于 ui 触发 - .add(Line.create().append("---[以下主要用于UI触发]---")) - .add(Line.create().append("列出所有领地").append(Button.create("/dominion list [页码]").setExecuteCommand("/dominion list").build())) - .add(Line.create().append("查看领地信息").append(Button.create("/dominion info [领地名称]").setExecuteCommand("/dominion info").build())) - .add(Line.create().append("查看领地权限信息").append(Button.create("/dominion flag_info <领地名称> [页码]").setExecuteCommand("/dominion flag_info").build())) - .add(Line.create().append("设置领地权限").append("/dominion set <权限名称> [领地名称]")) - .add(Line.create().append("创建玩家特权").append("/dominion create_privilege <玩家名称> [领地名称]")) - .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 <玩家名称> [领地名称] [页码]")) - .add(Line.create().append("系统配置").append(Button.create("/dominion config [页码]").setExecuteCommand("/dominion config").build())) .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 index 1543042..5499939 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java @@ -31,7 +31,7 @@ public class Menu { .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) .append("查看我的领地"); Line template = Line.create() - .append(Button.create("模板列表").setExecuteCommand("/dominion template_list").build()) + .append(Button.create("模板列表").setExecuteCommand("/dominion template list").build()) .append("成员权限模板列表"); Line help = Line.create() .append(Button.create("指令帮助").setExecuteCommand("/dominion help").build()) diff --git a/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java b/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java index 9830bf7..475f2b7 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/MigrateList.java @@ -31,13 +31,7 @@ public class MigrateList { return; } - int page = 1; - if (args.length == 2) { - try { - page = Integer.parseInt(args[1]); - } catch (Exception ignored) { - } - } + int page = Apis.getPage(args, 1); ListView view = ListView.create(10, "/dominion migrate_list"); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/SysConfig.java b/src/main/java/cn/lunadeer/dominion/tuis/SysConfig.java index f79bfb7..0059fc8 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/SysConfig.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/SysConfig.java @@ -20,7 +20,7 @@ public class SysConfig { Player player = playerOnly(sender); if (player == null) return; if (notOp(player)) return; - int page = getPage(args); + int page = getPage(args, 1); ListView view = ListView.create(10, "/dominion sys_config"); view.title("系统配置"); view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("系统配置")); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionList.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionList.java index 0c022f9..f666452 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionList.java @@ -22,7 +22,7 @@ public class DominionList { public static void show(CommandSender sender, String[] args) { Player player = playerOnly(sender); if (player == null) return; - int page = getPage(args); + int page = getPage(args, 1); ListView view = ListView.create(10, "/dominion list"); view.title("我的领地列表"); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionManage.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionManage.java index cedec9c..807144d 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionManage.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/DominionManage.java @@ -2,7 +2,6 @@ package cn.lunadeer.dominion.tuis.dominion; import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.tuis.Apis; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; @@ -13,8 +12,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import static cn.lunadeer.dominion.commands.Apis.playerOnly; -import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1; -import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; +import static cn.lunadeer.dominion.tuis.Apis.*; public class DominionManage { public static void show(CommandSender sender, String[] args) { @@ -26,7 +24,7 @@ public class DominionManage { return; } if (noAuthToManage(player, dominion)) return; - int page = Apis.getPage(args, 2); + int page = getPage(args, 2); Line size_info = Line.create() .append(Button.create("详细信息").setExecuteCommand("/dominion info " + dominion.getName()).build()) .append("查看领地详细信息"); @@ -37,10 +35,10 @@ public class DominionManage { .append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build()) .append("访客在此领地的权限"); Line privilege_list = Line.create() - .append(Button.create("成员管理").setExecuteCommand("/dominion member_list " + dominion.getName()).build()) + .append(Button.create("成员管理").setExecuteCommand("/dominion member list " + dominion.getName()).build()) .append("管理此领地成员的权限"); Line group_list = Line.create() - .append(Button.create("权限组").setExecuteCommand("/dominion group_list " + dominion.getName()).build()) + .append(Button.create("权限组").setExecuteCommand("/dominion group list " + dominion.getName()).build()) .append("管理此领地的权限组"); Line set_tp = Line.create() .append(Button.create("设置传送点").setExecuteCommand("/dominion set_tp_location " + dominion.getName()).build()) diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java index c98322d..84f08d8 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java @@ -11,8 +11,6 @@ import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; import cn.lunadeer.minecraftpluginutils.stui.components.Line; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.Style; -import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -23,22 +21,30 @@ import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; public class GroupList { + public static void show(CommandSender sender, String dominionName) { + show(sender, new String[]{"", "", dominionName}); + } + + public static void show(CommandSender sender, String dominionName, int page) { + show(sender, new String[]{"", "", dominionName, String.valueOf(page)}); + } + public static void show(CommandSender sender, String[] args) { - if (args.length < 2) { - Notification.error(sender, "用法: /dominion group_list <领地名称> [页码]"); + if (args.length < 3) { + Notification.error(sender, "用法: /dominion group list <领地名称> [页码]"); return; } Player player = playerOnly(sender); if (player == null) return; - DominionDTO dominion = DominionDTO.select(args[1]); + DominionDTO dominion = DominionDTO.select(args[2]); if (dominion == null) { - Notification.error(sender, "领地 %s 不存在", args[1]); + Notification.error(sender, "领地 %s 不存在", args[2]); return; } if (noAuthToManage(player, dominion)) return; - int page = Apis.getPage(args, 2); + int page = Apis.getPage(args, 3); List groups = GroupDTO.selectByDominionId(dominion.getId()); - ListView view = ListView.create(10, "/dominion group_list " + dominion.getName()); + ListView view = ListView.create(10, "/dominion group list " + dominion.getName()); view.title("权限组列表"); view.navigator( Line.create() @@ -57,13 +63,13 @@ public class GroupList { Line line = new Line(); Button del = Button.createRed("删除") .setHoverText("删除权限组 " + group.getName()) - .setExecuteCommand("/dominion delete_group " + dominion.getName() + " " + group.getName()); + .setExecuteCommand("/dominion group delete " + dominion.getName() + " " + group.getName()); Button edit = Button.create("编辑") .setHoverText("编辑权限组 " + group.getName()) - .setExecuteCommand("/dominion group_setting " + dominion.getName() + " " + group.getName()); + .setExecuteCommand("/dominion group setting " + dominion.getName() + " " + group.getName()); Button add = Button.createGreen("+") .setHoverText("添加成员到权限组 " + group.getName()) - .setExecuteCommand("/dominion select_member_add_group " + dominion.getName() + " " + group.getName() + " " + page); + .setExecuteCommand("/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + page); line.append(del.build()).append(edit.build()).append(group.getName()).append(add.build()); view.add(line); List players = PlayerPrivilegeDTO.selectByGroupId(group.getId()); @@ -73,7 +79,7 @@ public class GroupList { if (p == null) continue; Button remove = Button.createRed("-") .setHoverText("把 " + p.getLastKnownName() + " 移出权限组 " + group.getName()) - .setExecuteCommand("/dominion group_remove_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + page); + .setExecuteCommand("/dominion group remove_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + page); Line playerLine = new Line().setDivider(""); playerLine.append(Component.text(" ")); playerLine.append(remove.build()).append(" | " + p.getLastKnownName()); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java index 515d155..c0fdd2e 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupSetting.java @@ -16,34 +16,42 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; public class GroupSetting { + public static void show(CommandSender sender, String dominionName, String groupName) { + show(sender, new String[]{"", "", dominionName, groupName}); + } + + public static void show(CommandSender sender, String dominionName, String groupName, Integer page) { + show(sender, new String[]{"", "", dominionName, groupName, page.toString()}); + } + public static void show(CommandSender sender, String[] args) { - if (args.length < 3) { - Notification.error(sender, "用法: /dominion group_setting <领地名称> <权限组名称> [页码]"); + if (args.length < 4) { + Notification.error(sender, "用法: /dominion group setting <领地名称> <权限组名称> [页码]"); return; } Player player = playerOnly(sender); if (player == null) return; - DominionDTO dominion = DominionDTO.select(args[1]); + DominionDTO dominion = DominionDTO.select(args[2]); if (dominion == null) { - Notification.error(sender, "领地 %s 不存在", args[1]); + Notification.error(sender, "领地 %s 不存在", args[2]); return; } if (noAuthToManage(player, dominion)) return; - int page = Apis.getPage(args, 3); - GroupDTO group = GroupDTO.select(dominion.getId(), args[2]); + int page = Apis.getPage(args, 4); + GroupDTO group = GroupDTO.select(dominion.getId(), args[3]); if (group == null) { - Notification.error(sender, "权限组 %s 不存在", args[2]); + Notification.error(sender, "权限组 %s 不存在", args[3]); return; } - ListView view = ListView.create(10, "/dominion group_setting " + dominion.getName() + " " + group.getName()); + ListView view = ListView.create(10, "/dominion group setting " + dominion.getName() + " " + group.getName()); view.title("权限组 " + group.getName() + " 管理"); view.navigator( Line.create() .append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()) .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) - .append(Button.create("权限组列表").setExecuteCommand("/dominion group_list " + dominion.getName()).build()) + .append(Button.create("权限组列表").setExecuteCommand("/dominion group list " + dominion.getName()).build()) .append("权限组管理") ); Button rename_btn = Button.create("重命名此权限组") @@ -54,14 +62,14 @@ public class GroupSetting { if (group.getAdmin()) { view.add(Line.create() .append(Button.createGreen("☑") - .setExecuteCommand(String.format("/dominion set_group_flag %s %s admin false %s", dominion.getName(), group.getName(), page)) + .setExecuteCommand(parseCommand(dominion.getName(), group.getName(), "admin", false, page)) .build()) .append("管理员")); view.add(createOption(Flag.GLOW, group.getFlagValue(Flag.GLOW), dominion.getName(), group.getName(), page)); } else { view.add(Line.create() .append(Button.createRed("☐") - .setExecuteCommand(String.format("/dominion set_group_flag %s %s admin true %s", dominion.getName(), group.getName(), page)) + .setExecuteCommand(parseCommand(dominion.getName(), group.getName(), "admin", true, page)) .build()) .append("管理员")); for (Flag flag : Flag.getPrivilegeFlagsEnabled()) { @@ -75,15 +83,19 @@ public class GroupSetting { if (value) { return Line.create() .append(Button.createGreen("☑") - .setExecuteCommand(String.format("/dominion set_group_flag %s %s %s false %s", DominionName, groupName, flag.getFlagName(), page)) + .setExecuteCommand(parseCommand(DominionName, groupName, flag.getFlagName(), false, page)) .build()) .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); } else { return Line.create() .append(Button.createRed("☐") - .setExecuteCommand(String.format("/dominion set_group_flag %s %s %s true %s", DominionName, groupName, flag.getFlagName(), page)) + .setExecuteCommand(parseCommand(DominionName, groupName, flag.getFlagName(), true, page)) .build()) .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); } } + + private static String parseCommand(String dominionName, String groupName, String flagName, boolean value, int page) { + return String.format("/dominion group set_flag %s %s %s %s %d", dominionName, groupName, flagName, value, page); + } } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java index f70b83d..9b35343 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java @@ -14,32 +14,33 @@ import org.bukkit.entity.Player; import java.util.List; import static cn.lunadeer.dominion.commands.Apis.playerOnly; -import static cn.lunadeer.dominion.tuis.Apis.*; +import static cn.lunadeer.dominion.tuis.Apis.getPage; +import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; public class SelectMember { public static void show(CommandSender sender, String[] args) { - if (args.length < 3) { - Notification.error(sender, "用法: /dominion select_member_add_group <领地名称> <权限组名称> [页码]"); + if (args.length < 4) { + Notification.error(sender, "用法: /dominion group select_member <领地名称> <权限组名称> [页码]"); return; } Player player = playerOnly(sender); if (player == null) return; - DominionDTO dominion = DominionDTO.select(args[1]); + DominionDTO dominion = DominionDTO.select(args[2]); if (dominion == null) { - Notification.error(sender, "领地不存在"); + Notification.error(sender, "领地 %s 不存在", args[2]); return; } if (noAuthToManage(player, dominion)) return; - GroupDTO group = GroupDTO.select(dominion.getId(), args[2]); + GroupDTO group = GroupDTO.select(dominion.getId(), args[3]); if (group == null) { Notification.error(sender, "权限组不存在"); return; } - int backPage = getPage(args, 3); - ListView view = ListView.create(10, "/dominion select_member_add_group " + dominion.getName() + " " + group.getName() + " " + backPage); + int backPage = getPage(args, 4); + ListView view = ListView.create(10, "/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + backPage); view.title("选择成员"); Line sub = Line.create().append("选择成员添加到权限组 " + group.getName()) - .append(Button.create("返回").setExecuteCommand("/dominion group_list " + dominion.getName() + " " + backPage).build()); + .append(Button.create("返回").setExecuteCommand("/dominion group list " + dominion.getName() + " " + backPage).build()); view.subtitle(sub); List members = PlayerPrivilegeDTO.selectByGroupId(-1); for (PlayerPrivilegeDTO member : members) { @@ -47,7 +48,7 @@ public class SelectMember { if (p == null) continue; view.add(Line.create() .append(Button.create(p.getLastKnownName()) - .setExecuteCommand("/dominion group_add_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + backPage) + .setExecuteCommand("/dominion group add_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + backPage) .build())); } view.showOn(player, backPage); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java index 341aa8e..d266bd5 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java @@ -15,25 +15,35 @@ import org.bukkit.entity.Player; import java.util.List; +import static cn.lunadeer.dominion.commands.Apis.CommandParser; import static cn.lunadeer.dominion.commands.Apis.playerOnly; -import static cn.lunadeer.dominion.tuis.Apis.*; +import static cn.lunadeer.dominion.tuis.Apis.getPage; +import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; public class MemberList { + public static void show(CommandSender sender, String dominionName, Integer page) { + show(sender, new String[]{"", "", dominionName, page.toString()}); + } + + public static void show(CommandSender sender, String dominionName) { + show(sender, new String[]{"", "", dominionName}); + } + public static void show(CommandSender sender, String[] args) { - if (args.length < 2) { - Notification.error(sender, "用法: /dominion member_list <领地名称> [页码]"); + if (args.length < 3) { + Notification.error(sender, "用法: /dominion member list <领地名称> [页码]"); return; } Player player = playerOnly(sender); if (player == null) return; - DominionDTO dominion = DominionDTO.select(args[1]); + DominionDTO dominion = DominionDTO.select(args[2]); if (dominion == null) { - Notification.error(sender, "领地 %s 不存在", args[1]); + Notification.error(sender, "领地 %s 不存在", args[2]); return; } - int page = getPage(args, 2); - ListView view = ListView.create(10, "/dominion member_list " + dominion.getName()); + int page = getPage(args, 3); + ListView view = ListView.create(10, "/dominion member list " + dominion.getName()); if (noAuthToManage(player, dominion)) return; List privileges = PlayerPrivilegeDTO.select(dominion.getId()); view.title("领地 " + dominion.getName() + " 成员列表"); @@ -44,7 +54,8 @@ public class MemberList { .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) .append("成员列表") ); - view.add(Line.create().append(Button.create("添加成员").setExecuteCommand("/dominion select_player_create_privilege " + dominion.getName()).build())); + view.add(Line.create().append(Button.create("添加成员") + .setExecuteCommand(CommandParser("/dominion member select_player %s", dominion.getName())).build())); for (PlayerPrivilegeDTO privilege : privileges) { PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID()); if (p_player == null) continue; @@ -65,10 +76,10 @@ public class MemberList { Button prev = Button.createGreen("权限") .setHoverText("配置成员权限") - .setExecuteCommand("/dominion member_setting " + p_player.getLastKnownName() + " " + dominion.getName()); + .setExecuteCommand(CommandParser("/dominion member setting %s %s", dominion.getName(), p_player.getLastKnownName())); Button remove = Button.createRed("移除") .setHoverText("将此成员移出(变为访客)") - .setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b"); + .setExecuteCommand(CommandParser("/dominion member remove %s %s", dominion.getName(), p_player.getLastKnownName())); if (!player.getUniqueId().equals(dominion.getOwner())) { boolean disable = false; diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java index 167e1bf..0a0ac8a 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java @@ -13,26 +13,34 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import static cn.lunadeer.dominion.commands.Apis.playerOnly; -import static cn.lunadeer.dominion.tuis.Apis.*; +import static cn.lunadeer.dominion.tuis.Apis.getPage; +import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; public class MemberSetting { - // /dominion member_setting <玩家名称> [领地名称] [页码] + public static void show(CommandSender sender, String dominionName, String playerName, Integer page) { + show(sender, new String[]{"", "", dominionName, playerName, page.toString()}); + } + + public static void show(CommandSender sender, String dominionName, String playerName) { + show(sender, new String[]{"", "", dominionName, playerName}); + } + public static void show(CommandSender sender, String[] args) { - if (args.length < 2) { - Notification.error(sender, "用法: /dominion member_setting <玩家名称> [领地名称] [页码]"); + if (args.length < 3) { + Notification.error(sender, "用法: /dominion member setting <领地名称> <玩家名称> [页码]"); return; } Player player = playerOnly(sender); if (player == null) return; - DominionDTO dominion = getDominionNameArg_2(player, args); + DominionDTO dominion = DominionDTO.select(args[2]); if (dominion == null) { - Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion member_setting <玩家名称> [领地名称]"); + Notification.error(sender, "领地 %s 不存在", args[2]); return; } - int page = getPage(args, 3); - String playerName = args[1]; - ListView view = ListView.create(10, "/dominion member_setting " + playerName + " " + dominion.getName()); if (noAuthToManage(player, dominion)) return; + int page = getPage(args, 4); + String playerName = args[3]; + ListView view = ListView.create(10, "/dominion member setting " + dominion.getName() + " " + playerName); PlayerDTO playerDTO = PlayerDTO.select(playerName); if (playerDTO == null) { Notification.error(sender, "玩家 %s 不存在", playerName); @@ -49,20 +57,24 @@ public class MemberSetting { .append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()) .append(Button.create("我的领地").setExecuteCommand("/dominion list").build()) .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) - .append(Button.create("成员列表").setExecuteCommand("/dominion member_list " + dominion.getName()).build()) + .append(Button.create("成员列表").setExecuteCommand("/dominion member list " + dominion.getName()).build()) .append("成员权限") ); view.add(Line.create().append(Button.createGreen("套用模板") .setHoverText("选择一个权限模板套用") - .setExecuteCommand("/dominion select_template " + playerName + " " + dominion.getName()).build())); + .setExecuteCommand("/dominion member select_template " + dominion.getName() + " " + playerName).build())); if (privilege.getAdmin()) { view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " admin false " + dominion.getName() + " " + page).build()) + .append(Button.createGreen("☑").setExecuteCommand( + parseCommand(dominion.getName(), playerName, "admin", false, page) + ).build()) .append("管理员")); view.add(createOption(Flag.GLOW, privilege.getFlagValue(Flag.GLOW), playerName, dominion.getName(), page)); } else { view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " admin true " + dominion.getName() + " " + page).build()) + .append(Button.createRed("☐").setExecuteCommand( + parseCommand(dominion.getName(), playerName, "admin", true, page) + ).build()) .append("管理员")); for (Flag flag : Flag.getPrivilegeFlagsEnabled()) { view.add(createOption(flag, privilege.getFlagValue(flag), playerName, dominion.getName(), page)); @@ -74,12 +86,20 @@ public class MemberSetting { private static Line createOption(Flag flag, boolean value, String player_name, String dominion_name, int page) { if (value) { return Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + player_name + " " + flag.getFlagName() + " false " + dominion_name + " " + page).build()) + .append(Button.createGreen("☑").setExecuteCommand( + parseCommand(dominion_name, player_name, flag.getFlagName(), false, page) + ).build()) .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); } else { return Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + player_name + " " + flag.getFlagName() + " true " + dominion_name + " " + page).build()) + .append(Button.createRed("☐").setExecuteCommand( + parseCommand(dominion_name, player_name, flag.getFlagName(), true, page) + ).build()) .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); } } + + private static String parseCommand(String dominionName, String playerName, String flagName, boolean value, int page) { + return String.format("/dominion member set_flag %s %s %s %s %d", dominionName, playerName, flagName, value, page); + } } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectPlayer.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectPlayer.java index fbe2a52..b0be8cb 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectPlayer.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectPlayer.java @@ -11,25 +11,29 @@ import org.bukkit.entity.Player; import java.util.List; +import static cn.lunadeer.dominion.commands.Apis.CommandParser; import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.tuis.Apis.getPage; public class SelectPlayer { - // /dominion select_player_create_privilege <领地名称> [页码] + public static void show(CommandSender sender, String dominionName, Integer page) { + show(sender, new String[]{"", "", dominionName, page.toString()}); + } + public static void show(CommandSender sender, String[] args) { - if (args.length < 2) { - Notification.error(sender, "用法: /dominion select_player_create_privilege <领地名称> [页码]"); + if (args.length < 3) { + Notification.error(sender, "用法: /dominion member select_player <领地名称> [页码]"); return; } Player player = playerOnly(sender); if (player == null) return; - int page = getPage(args, 2); - String dominion_name = args[1]; - ListView view = ListView.create(10, "/dominion select_player_create_privilege " + dominion_name); + int page = getPage(args, 3); + String dominion_name = args[2]; + ListView view = ListView.create(10, "/dominion member select_player " + dominion_name); Line sub = Line.create() .append("只能选择已经登录过的玩家") - .append(Button.create("搜索").setExecuteCommand("/dominion cui_create_privilege " + dominion_name).build()) - .append(Button.create("返回").setExecuteCommand("/dominion member_list " + dominion_name).build()); + .append(Button.create("搜索").setExecuteCommand("/dominion cui_member_add " + dominion_name).build()) + .append(Button.create("返回").setExecuteCommand("/dominion member list " + dominion_name).build()); view.title("选择玩家添加为成员").subtitle(sub); List players = PlayerController.allPlayers(); for (PlayerDTO p : players) { @@ -38,7 +42,7 @@ public class SelectPlayer { } view.add(Line.create(). append(Button.create(p.getLastKnownName()) - .setExecuteCommand("/dominion create_privilege " + p.getLastKnownName() + " " + dominion_name + " b") + .setExecuteCommand(CommandParser("/dominion member add %s %s", dominion_name, p.getLastKnownName())) .build())); } view.showOn(player, page); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectTemplate.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectTemplate.java index de94fbf..38cb431 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectTemplate.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/SelectTemplate.java @@ -11,40 +11,42 @@ import org.bukkit.entity.Player; import java.util.List; +import static cn.lunadeer.dominion.commands.Apis.CommandParser; import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.tuis.Apis.getPage; public class SelectTemplate { public static void show(CommandSender sender, String[] args) { - if (args.length < 3) { - // /dominion select_template <玩家名称> <领地名称> [页码] - Notification.error(sender, "用法: /dominion select_template <玩家名称> <领地名称> [页码]"); + if (args.length < 4) { + // /dominion member select_template <领地名称> <玩家名称> [页码] + Notification.error(sender, "用法: /dominion member select_template <领地名称> <玩家名称> [页码]"); return; } Player player = playerOnly(sender); if (player == null) return; - String playerName = args[1]; String dominionName = args[2]; + String playerName = args[3]; - int page = getPage(args, 3); + + int page = getPage(args, 4); List templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId()); - ListView view = ListView.create(10, "/dominion select_template " + playerName + " " + dominionName); + ListView view = ListView.create(10, "/dominion member select_template " + dominionName + " " + playerName); view.title("选择一个模板"); Line sub = Line.create() .append("套用在领地 " + dominionName + " 的成员 " + playerName + " 身上") - .append(Button.create("返回").setExecuteCommand("/dominion member_setting " + playerName + " " + dominionName).build()); + .append(Button.create("返回").setExecuteCommand("/dominion member setting " + dominionName + " " + playerName).build()); view.subtitle(sub); for (PrivilegeTemplateDTO template : templates) { - // /dominion apply_template <玩家名称> <领地名称> <模板名称> + // /dominion member apply_template <领地名称> <成员名称> <模板名称> view.add(Line.create() .append(Button.create("选择") - .setExecuteCommand("/dominion apply_template " + playerName + " " + dominionName + " " + template.getName()) + .setExecuteCommand(CommandParser("/dominion member apply_template %s %s %s", dominionName, playerName, template.getName())) .build()) .append(Component.text(template.getName()))); } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateList.java b/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateList.java index 7e36ec7..61e0f0e 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateList.java @@ -14,11 +14,19 @@ import static cn.lunadeer.dominion.tuis.Apis.getPage; public class TemplateList { + public static void show(CommandSender sender) { + show(sender, 1); + } + + public static void show(CommandSender sender, int page) { + show(sender, new String[]{"", "", String.valueOf(page)}); + } + public static void show(CommandSender sender, String[] args) { Player player = playerOnly(sender); if (player == null) return; - int page = getPage(args); - ListView view = ListView.create(10, "/dominion template_list"); + int page = getPage(args, 2); + ListView view = ListView.create(10, "/dominion template list"); List templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId()); view.title("成员权限模板列表"); @@ -30,8 +38,8 @@ public class TemplateList { view.add(Line.create().append(create.build())); for (PrivilegeTemplateDTO template : templates) { - Button manage = Button.createGreen("配置").setExecuteCommand("/dominion template_manage " + template.getName()); - Button delete = Button.createRed("删除").setExecuteCommand("/dominion template_delete " + template.getName()); + Button manage = Button.createGreen("配置").setExecuteCommand("/dominion template setting " + template.getName()); + Button delete = Button.createRed("删除").setExecuteCommand("/dominion template delete " + template.getName()); Line line = Line.create() .append(delete.build()) .append(manage.build()) diff --git a/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateManage.java b/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateSetting.java similarity index 74% rename from src/main/java/cn/lunadeer/dominion/tuis/template/TemplateManage.java rename to src/main/java/cn/lunadeer/dominion/tuis/template/TemplateSetting.java index e2f2894..d1ab2be 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateManage.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/template/TemplateSetting.java @@ -11,31 +11,34 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.tuis.Apis.getPage; -public class TemplateManage { +public class TemplateSetting { + + // /dominion template setting <模板名称> [页码] + public static void show(CommandSender sender, String templateName, int page) { + show(sender, new String[]{"", "", templateName, String.valueOf(page)}); + } + + public static void show(CommandSender sender, String templateName) { + show(sender, new String[]{"", "", templateName}); + } - // /dominion template_manage <模板名称> [页码] public static void show(CommandSender sender, String[] args) { Player player = playerOnly(sender); if (player == null) return; - int page = 1; - if (args.length == 3) { - try { - page = Integer.parseInt(args[2]); - } catch (Exception ignored) { - } - } - PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(player.getUniqueId(), args[1]); + int page = getPage(args, 3); + PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(player.getUniqueId(), args[2]); if (template == null) { - Notification.error(sender, "模板 %s 不存在", args[1]); + Notification.error(sender, "模板 %s 不存在", args[2]); return; } - ListView view = ListView.create(10, "/dominion template_manage " + template.getName()); + ListView view = ListView.create(10, "/dominion template manage " + template.getName()); view.title("模板 " + args[1] + " 权限管理"); view.navigator(Line.create() .append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()) - .append(Button.create("模板列表").setExecuteCommand("/dominion template_list").build()) + .append(Button.create("模板列表").setExecuteCommand("/dominion template list").build()) .append("模板管理") ); @@ -43,11 +46,11 @@ public class TemplateManage { if (template.getAdmin()) { view.add(Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion template_set_flag " + template.getName() + " admin false " + page).build()) + .append(Button.createGreen("☑").setExecuteCommand("/dominion template set_flag " + template.getName() + " admin false " + page).build()) .append("管理员")); } else { view.add(Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion template_set_flag " + template.getName() + " admin true " + page).build()) + .append(Button.createRed("☐").setExecuteCommand("/dominion template set_flag " + template.getName() + " admin true " + page).build()) .append("管理员")); } for (Flag flag : Flag.getPrivilegeFlagsEnabled()) { @@ -59,11 +62,11 @@ public class TemplateManage { private static Line createOption(Flag flag, boolean value, String templateName, int page) { if (value) { return Line.create() - .append(Button.createGreen("☑").setExecuteCommand("/dominion template_set_flag " + templateName + " " + flag.getFlagName() + " false " + page).build()) + .append(Button.createGreen("☑").setExecuteCommand("/dominion template set_flag " + templateName + " " + flag.getFlagName() + " false " + page).build()) .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); } else { return Line.create() - .append(Button.createRed("☐").setExecuteCommand("/dominion template_set_flag " + templateName + " " + flag.getFlagName() + " true " + page).build()) + .append(Button.createRed("☐").setExecuteCommand("/dominion template set_flag " + templateName + " " + flag.getFlagName() + " true " + page).build()) .append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription()))); } } From 2f7ae111a9d4e09d5f2e3cde0c3be8db29a5f493 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Mon, 1 Jul 2024 01:41:08 +0800 Subject: [PATCH 15/19] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E6=9D=83=E9=99=90=E7=BB=84=E6=88=90=E5=91=98=E6=97=B6?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E7=BF=BB=E9=A1=B5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../dominion/tuis/dominion/manage/group/SelectMember.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 113d130..48d3766 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.34.4-beta + 1.34.5-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java index 9b35343..1ca3898 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java @@ -20,7 +20,7 @@ import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage; public class SelectMember { public static void show(CommandSender sender, String[] args) { if (args.length < 4) { - Notification.error(sender, "用法: /dominion group select_member <领地名称> <权限组名称> [页码]"); + Notification.error(sender, "用法: /dominion group select_member <领地名称> <权限组名称> [回显页码] [页码]"); return; } Player player = playerOnly(sender); @@ -37,6 +37,7 @@ public class SelectMember { return; } int backPage = getPage(args, 4); + int page = getPage(args, 5); ListView view = ListView.create(10, "/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + backPage); view.title("选择成员"); Line sub = Line.create().append("选择成员添加到权限组 " + group.getName()) @@ -51,6 +52,6 @@ public class SelectMember { .setExecuteCommand("/dominion group add_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + backPage) .build())); } - view.showOn(player, backPage); + view.showOn(player, page); } } From 9a36ddbc0666f118ea0e32a7aed8259331101a9e Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Mon, 1 Jul 2024 21:05:36 +0800 Subject: [PATCH 16/19] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E6=9D=83=E9=99=90=E7=BB=84=E6=88=90=E5=91=98=E6=97=B6?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E5=A4=9A=E4=B8=AA=E9=87=8D=E5=A4=8D=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/cn/lunadeer/dominion/commands/Helper.java | 2 +- .../java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java | 5 +++++ .../dominion/tuis/dominion/manage/group/SelectMember.java | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 48d3766..d91e4c1 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.34.5-beta + 1.34.6-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/commands/Helper.java b/src/main/java/cn/lunadeer/dominion/commands/Helper.java index f077678..e291c14 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Helper.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Helper.java @@ -55,7 +55,7 @@ public class Helper { if (dominion == null) return players_name; GroupDTO group = GroupDTO.select(dominion.getId(), groupName); if (group == null) return players_name; - List privileges = PlayerPrivilegeDTO.selectByGroupId(group.getId()); + List privileges = PlayerPrivilegeDTO.selectByDomGroupId(dominion.getId(), group.getId()); for (PlayerPrivilegeDTO privilege : privileges) { PlayerDTO player = PlayerDTO.select(privilege.getPlayerUUID()); if (player == null) continue; diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java index a7b223b..8d8830f 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java @@ -115,6 +115,11 @@ public class PlayerPrivilegeDTO { return query(sql, groupId); } + public static List selectByDomGroupId(Integer domId, Integer groupId) { + String sql = "SELECT * FROM player_privilege WHERE group_id = ? AND dom_id = ?;"; + return query(sql, groupId, domId); + } + Field id = new Field("id", FieldType.INT); Field playerUUID = new Field("player_uuid", FieldType.STRING); Field admin = new Field("admin", FieldType.BOOLEAN); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java index 1ca3898..000dd75 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java @@ -43,7 +43,7 @@ public class SelectMember { Line sub = Line.create().append("选择成员添加到权限组 " + group.getName()) .append(Button.create("返回").setExecuteCommand("/dominion group list " + dominion.getName() + " " + backPage).build()); view.subtitle(sub); - List members = PlayerPrivilegeDTO.selectByGroupId(-1); + List members = PlayerPrivilegeDTO.selectByDomGroupId(dominion.getId(), -1); for (PlayerPrivilegeDTO member : members) { PlayerDTO p = PlayerDTO.select(member.getPlayerUUID()); if (p == null) continue; From 9b94a2c5a684f1621d40a95e77ce50b94f4006f5 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Mon, 1 Jul 2024 21:08:46 +0800 Subject: [PATCH 17/19] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E6=9D=83?= =?UTF-8?q?=E9=99=90=E8=AE=BE=E7=BD=AE=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/lunadeer/dominion/controllers/GroupController.java | 4 ---- .../cn/lunadeer/dominion/controllers/MemberController.java | 4 ---- 2 files changed, 8 deletions(-) diff --git a/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java b/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java index 1e65e9f..2bf1bfc 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java @@ -82,10 +82,6 @@ public class GroupController { if (flag.equals("admin")) { group = group.setAdmin(value); } else { - if (group.getAdmin()) { - operator.setResponse(FAIL.addMessage("管理员拥有所有权限,无需单独设置权限")); - return; - } Flag f = Flag.getFlag(flag); if (f == null) { operator.setResponse(FAIL.addMessage("未知的权限 %s", flag)); diff --git a/src/main/java/cn/lunadeer/dominion/controllers/MemberController.java b/src/main/java/cn/lunadeer/dominion/controllers/MemberController.java index 207795d..872cff5 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/MemberController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/MemberController.java @@ -76,10 +76,6 @@ public class MemberController { if (flag.equals("admin")) { privilege.setAdmin(value); } else { - if (privilege.getAdmin()) { - operator.setResponse(FAIL.addMessage("管理员拥有所有权限,无需单独设置权限")); - return; - } Flag f = Flag.getFlag(flag); if (f == null) { operator.setResponse(FAIL.addMessage("未知的领地权限 %s", flag)); From e690b3f66aa47c55ee433a2872eb917f4eb62944 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Wed, 3 Jul 2024 11:19:16 +0800 Subject: [PATCH 18/19] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=BE=99=E8=9B=8B?= =?UTF-8?q?=E4=BF=9D=E6=8A=A4=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/cn/lunadeer/dominion/dtos/Flag.java | 1 + .../cn/lunadeer/dominion/events/PlayerEvents.java | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d91e4c1..5d56f5a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.34.6-beta + 1.34.7-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java index 974150b..3e5d1ae 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java @@ -28,6 +28,7 @@ public enum Flag { CREEPER_EXPLODE("creeper_explode", "实体爆炸", "包含:苦力怕/凋零头颅/水晶爆炸", false, true, true), COMPARER("comparer", "比较器交互", "是否可以修改比较器状态", false, false, true), DOOR("door", "门交互", "是否可以使用各种材质的门(包括活板门)", false, false, true), + DRAGON_EGG("dragon_egg", "触碰龙蛋", "是否可以触碰龙蛋", false, false, true), DYE("dye", "染色", "是否可以使用染料(对羊、狗项圈、猫项圈)染色", false, false, true), EDIT_SIGN("edit_sign", "编辑告示牌", "是否可以编辑告示牌", false, false, true), EGG("egg", "扔鸡蛋", "是否可以扔鸡蛋", false, false, true), diff --git a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java index 351b884..898d46c 100644 --- a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java @@ -6,6 +6,7 @@ import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.Teleport; +import io.papermc.paper.event.block.DragonEggFormEvent; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Tag; @@ -313,6 +314,20 @@ public class PlayerEvents implements Listener { checkFlag(dom, Flag.DOOR, player, event); } + @EventHandler(priority = EventPriority.HIGHEST) // dragon_egg + public void touchDragonEdd(PlayerInteractEvent event) { + Block block = event.getClickedBlock(); + if (block == null) { + return; + } + if (block.getType() != Material.DRAGON_EGG) { + return; + } + Player player = event.getPlayer(); + DominionDTO dom = Cache.instance.getDominion(block.getLocation()); + checkFlag(dom, Flag.DRAGON_EGG, player, event); + } + @EventHandler(priority = EventPriority.HIGHEST) // dye public void dyeEvent(PlayerInteractEntityEvent event) { Player player = event.getPlayer(); From 21a5b10a97b134d2f2b57706b35870d851c9915a Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Wed, 3 Jul 2024 14:51:40 +0800 Subject: [PATCH 19/19] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=A1=A8=E5=90=8D?= =?UTF-8?q?=E3=80=81=E5=86=85=E9=83=A8=E5=8F=98=E9=87=8F=E5=90=8D=EF=BC=8C?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E9=A1=B9=E7=9B=AE=E5=86=85=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/cn/lunadeer/dominion/Cache.java | 94 ++++++------ .../dominion/commands/DominionOperate.java | 4 +- .../cn/lunadeer/dominion/commands/Helper.java | 8 +- .../lunadeer/dominion/commands/Operator.java | 4 +- .../lunadeer/dominion/controllers/Apis.java | 4 +- .../dominion/controllers/GroupController.java | 4 +- .../controllers/MemberController.java | 15 +- .../cn/lunadeer/dominion/dtos/GroupDTO.java | 10 +- ...PlayerPrivilegeDTO.java => MemberDTO.java} | 70 ++++----- .../cn/lunadeer/dominion/events/Apis.java | 6 +- .../dominion/events/PlayerEvents.java | 1 - .../dominion/managers/DatabaseTables.java | 143 ++++++++++++------ .../java/cn/lunadeer/dominion/tuis/Apis.java | 4 +- .../tuis/dominion/manage/group/GroupList.java | 6 +- .../dominion/manage/group/SelectMember.java | 6 +- .../dominion/manage/member/MemberList.java | 4 +- .../dominion/manage/member/MemberSetting.java | 4 +- 18 files changed, 223 insertions(+), 166 deletions(-) rename src/main/java/cn/lunadeer/dominion/dtos/{PlayerPrivilegeDTO.java => MemberDTO.java} (67%) diff --git a/pom.xml b/pom.xml index 5d56f5a..a2befe2 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.34.7-beta + 1.35.0-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index 6ab256c..7c63635 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -24,8 +24,8 @@ public class Cache { public Cache() { player_current_dominion_id = new HashMap<>(); loadDominions(); - loadPlayerPrivileges(); - loadGroup(); + loadMembers(); + loadGroups(); } /** @@ -104,71 +104,71 @@ public class Cache { * * @param player_uuid 玩家UUID */ - public void loadPlayerPrivileges(UUID player_uuid) { - if (_last_update_privilege.get() + UPDATE_INTERVAL < System.currentTimeMillis()) { - XLogger.debug("run loadPlayerPrivilegesExecution directly"); - loadPlayerPrivilegesExecution(player_uuid); + public void loadMembers(UUID player_uuid) { + if (_last_update_member.get() + UPDATE_INTERVAL < System.currentTimeMillis()) { + XLogger.debug("run loadMembersExecution directly"); + loadMembersExecution(player_uuid); } else { - if (_update_privilege_is_scheduled.get()) return; - XLogger.debug("schedule loadPlayerPrivilegesExecution"); - _update_privilege_is_scheduled.set(true); - long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_privilege.get())) / 1000 * 20L; + if (_update_member_is_scheduled.get()) return; + XLogger.debug("schedule loadMembersExecution"); + _update_member_is_scheduled.set(true); + long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_member.get())) / 1000 * 20L; Scheduler.runTaskLaterAsync(() -> { - XLogger.debug("run loadPlayerPrivilegesExecution scheduled"); - loadPlayerPrivilegesExecution(player_uuid); - _update_privilege_is_scheduled.set(false); + XLogger.debug("run loadMembersExecution scheduled"); + loadMembersExecution(player_uuid); + _update_member_is_scheduled.set(false); }, delay_tick); } } - public void loadPlayerPrivileges() { - loadPlayerPrivileges(null); + public void loadMembers() { + loadMembers(null); } - private void loadPlayerPrivilegesExecution(UUID player_to_update) { + private void loadMembersExecution(UUID player_to_update) { Scheduler.runTaskAsync(() -> { long start = System.currentTimeMillis(); - List all_privileges; + List all_privileges; if (player_to_update == null) { - all_privileges = PlayerPrivilegeDTO.selectAll(); - player_uuid_to_privilege = new ConcurrentHashMap<>(); + all_privileges = MemberDTO.selectAll(); + player_uuid_to_member = new ConcurrentHashMap<>(); } else { - all_privileges = PlayerPrivilegeDTO.selectAll(player_to_update); - if (!player_uuid_to_privilege.containsKey(player_to_update)) { - player_uuid_to_privilege.put(player_to_update, new ConcurrentHashMap<>()); + all_privileges = MemberDTO.selectAll(player_to_update); + if (!player_uuid_to_member.containsKey(player_to_update)) { + player_uuid_to_member.put(player_to_update, new ConcurrentHashMap<>()); } - player_uuid_to_privilege.get(player_to_update).clear(); + player_uuid_to_member.get(player_to_update).clear(); } - for (PlayerPrivilegeDTO privilege : all_privileges) { + for (MemberDTO privilege : all_privileges) { UUID player_uuid = privilege.getPlayerUUID(); - if (!player_uuid_to_privilege.containsKey(player_uuid)) { - player_uuid_to_privilege.put(player_uuid, new ConcurrentHashMap<>()); + if (!player_uuid_to_member.containsKey(player_uuid)) { + player_uuid_to_member.put(player_uuid, new ConcurrentHashMap<>()); } - player_uuid_to_privilege.get(player_uuid).put(privilege.getDomID(), privilege); + player_uuid_to_member.get(player_uuid).put(privilege.getDomID(), privilege); } recheckPlayerState = true; - _last_update_privilege.set(System.currentTimeMillis()); - XLogger.debug("loadPlayerPrivilegesExecution cost: %d ms for %d privileges" + _last_update_member.set(System.currentTimeMillis()); + XLogger.debug("loadMembersExecution cost: %d ms for %d privileges" , System.currentTimeMillis() - start, all_privileges.size()); }); } - public void loadGroup() { - loadGroup(null); + public void loadGroups() { + loadGroups(null); } - public void loadGroup(Integer groupId) { + public void loadGroups(Integer groupId) { if (_last_update_group.get() + UPDATE_INTERVAL < System.currentTimeMillis()) { - XLogger.debug("run loadGroupExecution directly"); + XLogger.debug("run loadGroupsExecution directly"); loadGroupExecution(groupId); } else { if (_update_group_is_scheduled.get()) return; - XLogger.debug("schedule loadGroupExecution"); + XLogger.debug("schedule loadGroupsExecution"); _update_group_is_scheduled.set(true); long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_group.get())) / 1000 * 20L; Scheduler.runTaskLaterAsync(() -> { - XLogger.debug("run loadGroupExecution scheduled"); + XLogger.debug("run loadGroupsExecution scheduled"); loadGroupExecution(groupId); _update_group_is_scheduled.set(false); }, @@ -195,7 +195,7 @@ public class Cache { } recheckPlayerState = true; _last_update_group.set(System.currentTimeMillis()); - XLogger.debug("loadGroupExecution cost: %d ms", System.currentTimeMillis() - start); + XLogger.debug("loadGroupsExecution cost: %d ms", System.currentTimeMillis() - start); }); } @@ -283,7 +283,7 @@ public class Cache { player.setGlowing(false); return; } - PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion); + MemberDTO privilege = getMember(player, dominion); if (privilege != null) { if (privilege.getGroupId() == -1) { player.setGlowing(privilege.getFlagValue(Flag.GLOW)); @@ -320,7 +320,7 @@ public class Cache { player.setAllowFlight(false); return; } - PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion); + MemberDTO privilege = getMember(player, dominion); if (privilege != null) { if (privilege.getGroupId() == -1) { player.setAllowFlight(privilege.getFlagValue(Flag.FLY)); @@ -375,14 +375,14 @@ public class Cache { * @param dominion 领地 * @return 特权表 */ - public PlayerPrivilegeDTO getPlayerPrivilege(Player player, DominionDTO dominion) { - if (!player_uuid_to_privilege.containsKey(player.getUniqueId())) return null; - return player_uuid_to_privilege.get(player.getUniqueId()).get(dominion.getId()); + public MemberDTO getMember(Player player, DominionDTO dominion) { + if (!player_uuid_to_member.containsKey(player.getUniqueId())) return null; + return player_uuid_to_member.get(player.getUniqueId()).get(dominion.getId()); } - public PlayerPrivilegeDTO getPlayerPrivilege(UUID player_uuid, DominionDTO dominion) { - if (!player_uuid_to_privilege.containsKey(player_uuid)) return null; - return player_uuid_to_privilege.get(player_uuid).get(dominion.getId()); + public MemberDTO getMember(UUID player_uuid, DominionDTO dominion) { + if (!player_uuid_to_member.containsKey(player_uuid)) return null; + return player_uuid_to_member.get(player_uuid).get(dominion.getId()); } private static boolean isInDominion(@Nullable DominionDTO dominion, Player player) { @@ -437,13 +437,13 @@ public class Cache { private ConcurrentHashMap id_dominions; private ConcurrentHashMap> world_dominion_tree; private ConcurrentHashMap id_groups; - private ConcurrentHashMap> player_uuid_to_privilege; // 玩家所有的特权 + private ConcurrentHashMap> player_uuid_to_member; // 玩家所有的特权 private final Map player_current_dominion_id; // 玩家当前所在领地 private ConcurrentHashMap> dominion_children; private final AtomicLong _last_update_dominion = new AtomicLong(0); private final AtomicBoolean _update_dominion_is_scheduled = new AtomicBoolean(false); - private final AtomicLong _last_update_privilege = new AtomicLong(0); - private final AtomicBoolean _update_privilege_is_scheduled = new AtomicBoolean(false); + private final AtomicLong _last_update_member = new AtomicLong(0); + private final AtomicBoolean _update_member_is_scheduled = new AtomicBoolean(false); private final AtomicLong _last_update_group = new AtomicLong(0); private final AtomicBoolean _update_group_is_scheduled = new AtomicBoolean(false); private static final long UPDATE_INTERVAL = 1000 * 4; diff --git a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java index b63ad5f..9489e44 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java +++ b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java @@ -6,7 +6,7 @@ import cn.lunadeer.dominion.controllers.BukkitPlayerOperator; import cn.lunadeer.dominion.controllers.DominionController; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.dtos.MemberDTO; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.Scheduler; import cn.lunadeer.minecraftpluginutils.Teleport; @@ -374,7 +374,7 @@ public class DominionOperate { return; } - PlayerPrivilegeDTO privilegeDTO = PlayerPrivilegeDTO.select(player.getUniqueId(), dominionDTO.getId()); + MemberDTO privilegeDTO = MemberDTO.select(player.getUniqueId(), dominionDTO.getId()); if (!player.getUniqueId().equals(dominionDTO.getOwner())) { // 领地所有人可以传送到自己的领地 if (privilegeDTO == null) { if (!dominionDTO.getFlagValue(Flag.TELEPORT)) { diff --git a/src/main/java/cn/lunadeer/dominion/commands/Helper.java b/src/main/java/cn/lunadeer/dominion/commands/Helper.java index e291c14..862f5e0 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Helper.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Helper.java @@ -55,8 +55,8 @@ public class Helper { if (dominion == null) return players_name; GroupDTO group = GroupDTO.select(dominion.getId(), groupName); if (group == null) return players_name; - List privileges = PlayerPrivilegeDTO.selectByDomGroupId(dominion.getId(), group.getId()); - for (PlayerPrivilegeDTO privilege : privileges) { + List privileges = MemberDTO.selectByDomGroupId(dominion.getId(), group.getId()); + for (MemberDTO privilege : privileges) { PlayerDTO player = PlayerDTO.select(privilege.getPlayerUUID()); if (player == null) continue; players_name.add(player.getLastKnownName()); @@ -79,8 +79,8 @@ public class Helper { List dominions_name = new ArrayList<>(); Player player = playerOnly(sender); if (player == null) return dominions_name; - List dominions_admin = PlayerPrivilegeDTO.selectAll(player.getUniqueId()); - for (PlayerPrivilegeDTO privilege : dominions_admin) { + List dominions_admin = MemberDTO.selectAll(player.getUniqueId()); + for (MemberDTO privilege : dominions_admin) { if (privilege.getAdmin()) { DominionDTO dom = DominionDTO.select(privilege.getDomID()); if (dom == null) continue; diff --git a/src/main/java/cn/lunadeer/dominion/commands/Operator.java b/src/main/java/cn/lunadeer/dominion/commands/Operator.java index 8ea0af4..52650d5 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Operator.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Operator.java @@ -28,12 +28,12 @@ public class Operator { }); Scheduler.runTaskAsync(() -> { Notification.info(sender, "正在从数据库重新加载玩家权限缓存..."); - Cache.instance.loadPlayerPrivileges(); + Cache.instance.loadMembers(); Notification.info(sender, "玩家权限缓存已重新加载"); }); Scheduler.runTaskAsync(() -> { Notification.info(sender, "正在从数据库重新加载权限组缓存..."); - Cache.instance.loadGroup(); + Cache.instance.loadGroups(); Notification.info(sender, "权限组缓存已重新加载"); }); } diff --git a/src/main/java/cn/lunadeer/dominion/controllers/Apis.java b/src/main/java/cn/lunadeer/dominion/controllers/Apis.java index 4e8f27a..0fa63eb 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/Apis.java @@ -2,7 +2,7 @@ package cn.lunadeer.dominion.controllers; import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.dtos.MemberDTO; import org.bukkit.Location; public class Apis { @@ -15,7 +15,7 @@ public class Apis { public static boolean noAuthToChangeFlags(AbstractOperator player, DominionDTO dominion) { if (player.isOp()) return false; if (!dominion.getOwner().equals(player.getUniqueId())) { - PlayerPrivilegeDTO privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId()); + MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId()); if (privileges == null || !privileges.getAdmin()) { player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不是领地 %s 的拥有者或管理员,无权修改权限", dominion.getName())); return true; diff --git a/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java b/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java index 2bf1bfc..a43a556 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/GroupController.java @@ -151,7 +151,7 @@ public class GroupController { operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName)); return; } - PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); + MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId()); if (privilege == null) { operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员,无法直接加入权限组", playerName, domName)); return; @@ -198,7 +198,7 @@ public class GroupController { operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName)); return; } - PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); + MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId()); if (privilege == null) { operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, domName)); return; diff --git a/src/main/java/cn/lunadeer/dominion/controllers/MemberController.java b/src/main/java/cn/lunadeer/dominion/controllers/MemberController.java index 872cff5..b83d9a9 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/MemberController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/MemberController.java @@ -28,7 +28,7 @@ public class MemberController { operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name)); return; } - PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); + MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId()); if (privilege == null) { operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName)); return; @@ -37,7 +37,7 @@ public class MemberController { operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法移除一个领地管理员", dominionName)); return; } - PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId()); + MemberDTO.delete(player.getUuid(), dominion.getId()); operator.setResponse(SUCCESS); } @@ -64,7 +64,7 @@ public class MemberController { operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name)); return; } - PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); + MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId()); if (privilege == null) { operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName)); return; @@ -100,7 +100,12 @@ public class MemberController { operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name)); return; } - PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.insert(new PlayerPrivilegeDTO(player.getUuid(), dominion)); + MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId()); + if (privilege != null) { + operator.setResponse(FAIL.addMessage("玩家 %s 已经是领地 %s 的成员", player_name, dominionName)); + return; + } + privilege = MemberDTO.insert(new MemberDTO(player.getUuid(), dominion)); if (privilege == null) { operator.setResponse(FAIL); } else { @@ -122,7 +127,7 @@ public class MemberController { operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", playerName)); return; } - PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId()); + MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId()); if (privilege == null) { operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, dominionName)); return; diff --git a/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java index c6a81e1..8b4060d 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/GroupDTO.java @@ -74,7 +74,7 @@ public class GroupDTO { try (ResultSet rs = insertRow.execute()) { List groups = getDTOFromRS(rs); if (groups.size() == 0) return null; - Cache.instance.loadGroup(groups.get(0).getId()); + Cache.instance.loadGroups(groups.get(0).getId()); return groups.get(0); } catch (Exception e) { DatabaseManager.handleDatabaseError("创建权限组失败: ", e, ""); @@ -89,9 +89,9 @@ public class GroupDTO { public static void delete(Integer id) { String sql = "DELETE FROM dominion_group WHERE id = ?;"; DatabaseManager.instance.query(sql, id); - Cache.instance.loadGroup(id); - List players = PlayerPrivilegeDTO.selectByGroupId(id); - for (PlayerPrivilegeDTO player : players) { + Cache.instance.loadGroups(id); + List players = MemberDTO.selectByGroupId(id); + for (MemberDTO player : players) { player.setGroupId(-1); } } @@ -168,7 +168,7 @@ public class GroupDTO { try (ResultSet rs = updateRow.execute()) { List groups = getDTOFromRS(rs); if (groups.size() == 0) return null; - Cache.instance.loadGroup((Integer) id.value); + Cache.instance.loadGroups((Integer) id.value); return groups.get(0); } catch (Exception e) { DatabaseManager.handleDatabaseError("更新权限组失败: ", e, ""); diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/MemberDTO.java similarity index 67% rename from src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java rename to src/main/java/cn/lunadeer/dominion/dtos/MemberDTO.java index 8d8830f..6a0814f 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/MemberDTO.java @@ -10,10 +10,10 @@ import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow; import java.sql.ResultSet; import java.util.*; -public class PlayerPrivilegeDTO { +public class MemberDTO { - private static List query(String sql, Object... params) { - List players = new ArrayList<>(); + private static List query(String sql, Object... params) { + List players = new ArrayList<>(); try (ResultSet rs = DatabaseManager.instance.query(sql, params)) { return getDTOFromRS(rs); } catch (Exception e) { @@ -22,8 +22,8 @@ public class PlayerPrivilegeDTO { return players; } - private static List getDTOFromRS(ResultSet rs) { - List players = new ArrayList<>(); + private static List getDTOFromRS(ResultSet rs) { + List players = new ArrayList<>(); if (rs == null) return players; try { while (rs.next()) { @@ -31,7 +31,7 @@ public class PlayerPrivilegeDTO { for (Flag f : Flag.getPrivilegeFlagsEnabled()) { flags.put(f, rs.getBoolean(f.getFlagName())); } - PlayerPrivilegeDTO player = new PlayerPrivilegeDTO( + MemberDTO player = new MemberDTO( rs.getInt("id"), UUID.fromString(rs.getString("player_uuid")), rs.getBoolean("admin"), @@ -47,14 +47,14 @@ public class PlayerPrivilegeDTO { return players; } - private PlayerPrivilegeDTO doUpdate(UpdateRow updateRow) { + private MemberDTO doUpdate(UpdateRow updateRow) { updateRow.returningAll(id) - .table("player_privilege") + .table("dominion_member") .where("id = ?", id.value); try (ResultSet rs = updateRow.execute()) { - List players = getDTOFromRS(rs); + List players = getDTOFromRS(rs); if (players.size() == 0) return null; - Cache.instance.loadPlayerPrivileges(getPlayerUUID()); + Cache.instance.loadMembers(getPlayerUUID()); return players.get(0); } catch (Exception e) { DatabaseManager.handleDatabaseError("更新玩家权限失败: ", e, ""); @@ -62,9 +62,9 @@ public class PlayerPrivilegeDTO { } } - public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) { + public static MemberDTO insert(MemberDTO player) { InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null)) - .table("player_privilege") + .table("dominion_member") .field(player.playerUUID) .field(player.admin) .field(player.domID); @@ -72,8 +72,8 @@ public class PlayerPrivilegeDTO { insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f))); } try (ResultSet rs = insertRow.execute()) { - Cache.instance.loadPlayerPrivileges(player.getPlayerUUID()); - List players = getDTOFromRS(rs); + Cache.instance.loadMembers(player.getPlayerUUID()); + List players = getDTOFromRS(rs); if (players.size() == 0) return null; return players.get(0); } catch (Exception e) { @@ -82,41 +82,41 @@ public class PlayerPrivilegeDTO { } } - public static PlayerPrivilegeDTO select(UUID playerUUID, Integer dom_id) { - String sql = "SELECT * FROM player_privilege WHERE player_uuid = ? AND dom_id = ?;"; - List p = query(sql, playerUUID.toString(), dom_id); + public static MemberDTO select(UUID playerUUID, Integer dom_id) { + String sql = "SELECT * FROM dominion_member WHERE player_uuid = ? AND dom_id = ?;"; + List p = query(sql, playerUUID.toString(), dom_id); if (p.size() == 0) return null; return p.get(0); } - public static List select(Integer dom_id) { - String sql = "SELECT * FROM player_privilege WHERE dom_id = ?;"; + public static List select(Integer dom_id) { + String sql = "SELECT * FROM dominion_member WHERE dom_id = ?;"; return query(sql, dom_id); } public static void delete(UUID player, Integer domID) { - String sql = "DELETE FROM player_privilege WHERE player_uuid = ? AND dom_id = ?;"; + String sql = "DELETE FROM dominion_member WHERE player_uuid = ? AND dom_id = ?;"; query(sql, player.toString(), domID); - Cache.instance.loadPlayerPrivileges(player); + Cache.instance.loadMembers(player); } - public static List selectAll() { - String sql = "SELECT * FROM player_privilege;"; + public static List selectAll() { + String sql = "SELECT * FROM dominion_member;"; return query(sql); } - public static List selectAll(UUID player) { - String sql = "SELECT * FROM player_privilege WHERE player_uuid = ?;"; + public static List selectAll(UUID player) { + String sql = "SELECT * FROM dominion_member WHERE player_uuid = ?;"; return query(sql, player.toString()); } - public static List selectByGroupId(Integer groupId) { - String sql = "SELECT * FROM player_privilege WHERE group_id = ?;"; + public static List selectByGroupId(Integer groupId) { + String sql = "SELECT * FROM dominion_member WHERE group_id = ?;"; return query(sql, groupId); } - public static List selectByDomGroupId(Integer domId, Integer groupId) { - String sql = "SELECT * FROM player_privilege WHERE group_id = ? AND dom_id = ?;"; + public static List selectByDomGroupId(Integer domId, Integer groupId) { + String sql = "SELECT * FROM dominion_member WHERE group_id = ? AND dom_id = ?;"; return query(sql, groupId, domId); } @@ -153,26 +153,26 @@ public class PlayerPrivilegeDTO { return flags.get(flag); } - public PlayerPrivilegeDTO setFlagValue(Flag flag, Boolean value) { + public MemberDTO setFlagValue(Flag flag, Boolean value) { flags.put(flag, value); Field f = new Field(flag.getFlagName(), value); UpdateRow updateRow = new UpdateRow().field(f); return doUpdate(updateRow); } - public PlayerPrivilegeDTO setAdmin(Boolean admin) { + public MemberDTO setAdmin(Boolean admin) { this.admin.value = admin; UpdateRow updateRow = new UpdateRow().field(this.admin); return doUpdate(updateRow); } - public PlayerPrivilegeDTO setGroupId(Integer groupId) { + public MemberDTO setGroupId(Integer groupId) { this.groupId.value = groupId; UpdateRow updateRow = new UpdateRow().field(this.groupId); return doUpdate(updateRow); } - public PlayerPrivilegeDTO applyTemplate(PrivilegeTemplateDTO template) { + public MemberDTO applyTemplate(PrivilegeTemplateDTO template) { this.admin.value = template.getAdmin(); UpdateRow updateRow = new UpdateRow().field(admin); for (Flag f : Flag.getPrivilegeFlagsEnabled()) { @@ -182,7 +182,7 @@ public class PlayerPrivilegeDTO { return doUpdate(updateRow); } - private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map flags, Integer groupId) { + private MemberDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map flags, Integer groupId) { this.id.value = id; this.playerUUID.value = playerUUID.toString(); this.admin.value = admin; @@ -191,7 +191,7 @@ public class PlayerPrivilegeDTO { this.flags.putAll(flags); } - public PlayerPrivilegeDTO(UUID playerUUID, DominionDTO dom) { + public MemberDTO(UUID playerUUID, DominionDTO dom) { this.id.value = null; this.playerUUID.value = playerUUID.toString(); this.admin.value = false; diff --git a/src/main/java/cn/lunadeer/dominion/events/Apis.java b/src/main/java/cn/lunadeer/dominion/events/Apis.java index aaab174..35bbcc9 100644 --- a/src/main/java/cn/lunadeer/dominion/events/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/events/Apis.java @@ -5,7 +5,7 @@ import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.GroupDTO; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.dtos.MemberDTO; import cn.lunadeer.minecraftpluginutils.Notification; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; @@ -17,7 +17,7 @@ import org.bukkit.event.Cancellable; import org.bukkit.inventory.Inventory; public class Apis { - public static boolean canByPass(Player player, DominionDTO dom, PlayerPrivilegeDTO prev) { + public static boolean canByPass(Player player, DominionDTO dom, MemberDTO prev) { if (player.isOp() && Dominion.config.getLimitOpBypass()) { return true; } @@ -48,7 +48,7 @@ public class Apis { if (dom == null) { return true; } - PlayerPrivilegeDTO prev = Cache.instance.getPlayerPrivilege(player, dom); + MemberDTO prev = Cache.instance.getMember(player, dom); if (canByPass(player, dom, prev)) { return true; } diff --git a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java index 898d46c..3d21d3d 100644 --- a/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/PlayerEvents.java @@ -6,7 +6,6 @@ import cn.lunadeer.dominion.dtos.Flag; import cn.lunadeer.dominion.dtos.PlayerDTO; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.Teleport; -import io.papermc.paper.event.block.DragonEggFormEvent; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Tag; diff --git a/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java b/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java index fd184be..ae8f391 100644 --- a/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java +++ b/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java @@ -1,13 +1,13 @@ package cn.lunadeer.dominion.managers; import cn.lunadeer.dominion.dtos.Flag; -import cn.lunadeer.minecraftpluginutils.databse.Field; -import cn.lunadeer.minecraftpluginutils.databse.FieldType; -import cn.lunadeer.minecraftpluginutils.databse.TableColumn; +import cn.lunadeer.minecraftpluginutils.databse.*; import cn.lunadeer.minecraftpluginutils.databse.syntax.AddColumn; import cn.lunadeer.minecraftpluginutils.databse.syntax.CreateTable; import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow; +import java.sql.ResultSet; + public class DatabaseTables { public static void migrate() { // player name @@ -58,23 +58,35 @@ public class DatabaseTables { .foreignKey(dominion_parent_dom_id_fk); dominion.execute(); + for (Flag flag : Flag.getAllDominionFlags()) { + TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue()); + new AddColumn(column).table("dominion").ifNotExists().execute(); + } + // player privilege - TableColumn player_privilege_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0); - TableColumn player_privilege_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, false, "''"); - TableColumn player_privilege_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1); - TableColumn player_privilege_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false); - CreateTable.ForeignKey player_privilege_player_uuid_fk = new CreateTable.ForeignKey(player_privilege_player_uuid, "player_name", player_name_uuid, true); - CreateTable.ForeignKey player_privilege_dom_id_fk = new CreateTable.ForeignKey(player_privilege_dom_id, "dominion", dominion_id, true); - CreateTable player_privilege = new CreateTable().ifNotExists(); - player_privilege.table("player_privilege") - .field(player_privilege_id) - .field(player_privilege_player_uuid) - .field(player_privilege_dom_id) - .field(player_privilege_admin) - .foreignKey(player_privilege_player_uuid_fk) - .foreignKey(player_privilege_dom_id_fk) - .unique(player_privilege_player_uuid, player_privilege_dom_id); - player_privilege.execute(); + if (!Common.IsTableExist("dominion_member")) { + TableColumn player_privilege_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0); + TableColumn player_privilege_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, false, "''"); + TableColumn player_privilege_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1); + TableColumn player_privilege_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false); + CreateTable.ForeignKey player_privilege_player_uuid_fk = new CreateTable.ForeignKey(player_privilege_player_uuid, "player_name", player_name_uuid, true); + CreateTable.ForeignKey player_privilege_dom_id_fk = new CreateTable.ForeignKey(player_privilege_dom_id, "dominion", dominion_id, true); + CreateTable player_privilege = new CreateTable().ifNotExists(); + player_privilege.table("player_privilege") + .field(player_privilege_id) + .field(player_privilege_player_uuid) + .field(player_privilege_dom_id) + .field(player_privilege_admin) + .foreignKey(player_privilege_player_uuid_fk) + .foreignKey(player_privilege_dom_id_fk) + .unique(player_privilege_player_uuid, player_privilege_dom_id); + player_privilege.execute(); + + for (Flag flag : Flag.getAllPrivilegeFlags()) { + TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue()); + new AddColumn(column).table("player_privilege").ifNotExists().execute(); + } + } // server root player name Field server_player_name_id_field = new Field("id", -1); @@ -116,21 +128,11 @@ public class DatabaseTables { .field(server_dom_leave_message_field); insert_server_dom.execute(); - for (Flag flag : Flag.getAllDominionFlags()) { - TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue()); - new AddColumn(column).table("dominion").ifNotExists().execute(); - } - - for (Flag flag : Flag.getAllPrivilegeFlags()) { - TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue()); - new AddColumn(column).table("player_privilege").ifNotExists().execute(); - } - - // 1.18.0 + // 1.18.0 dominion add tp_location TableColumn dominion_tp_location = new TableColumn("tp_location", FieldType.STRING, false, false, true, false, "'default'"); new AddColumn(dominion_tp_location).table("dominion").ifNotExists().execute(); - // 1.31.0 + // 1.31.0 add privilege_template TableColumn privilege_template_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0); TableColumn privilege_template_creator = new TableColumn("creator", FieldType.STRING, false, false, true, false, "''"); TableColumn privilege_template_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'"); @@ -152,31 +154,82 @@ public class DatabaseTables { new AddColumn(column).table("privilege_template").ifNotExists().execute(); } - // 1.31.6 + // 1.31.6 dominion add blue-map tile color TableColumn dominion_color = new TableColumn("color", FieldType.STRING, false, false, true, false, "'#00BFFF'"); new AddColumn(dominion_color).table("dominion").ifNotExists().execute(); - // 1.34.0 - TableColumn player_privilege_group_id = new TableColumn("group_id", FieldType.INT, false, false, true, false, -1); - new AddColumn(player_privilege_group_id).table("player_privilege").ifNotExists().execute(); + // 1.34.0 add dominion_group + if (!Common.IsTableExist("dominion_member")) { + TableColumn player_privilege_group_id = new TableColumn("group_id", FieldType.INT, false, false, true, false, -1); + new AddColumn(player_privilege_group_id).table("player_privilege").ifNotExists().execute(); + } - TableColumn group_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0); - TableColumn group_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1); - TableColumn group_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'"); - TableColumn group_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false); - CreateTable.ForeignKey group_dom_id_fk = new CreateTable.ForeignKey(group_dom_id, "dominion", dominion_id, true); + TableColumn dominion_group_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0); + TableColumn dominion_group_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1); + TableColumn dominion_group_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'"); + TableColumn dominion_group_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false); + CreateTable.ForeignKey group_dom_id_fk = new CreateTable.ForeignKey(dominion_group_dom_id, "dominion", dominion_id, true); CreateTable group = new CreateTable().ifNotExists(); group.table("dominion_group") - .field(group_id) - .field(group_dom_id) - .field(group_name) - .field(group_admin) + .field(dominion_group_id) + .field(dominion_group_dom_id) + .field(dominion_group_name) + .field(dominion_group_admin) .foreignKey(group_dom_id_fk) - .unique(group_dom_id, group_name); + .unique(dominion_group_dom_id, dominion_group_name); group.execute(); for (Flag flag : Flag.getAllPrivilegeFlags()) { TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue()); new AddColumn(column).table("dominion_group").ifNotExists().execute(); } + + // 1.35.0 migrate player_privilege -> dominion_member + TableColumn dominion_member_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0); + TableColumn dominion_member_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, false, "''"); + TableColumn dominion_member_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1); + TableColumn dominion_member_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false); + TableColumn dominion_member_group_id = new TableColumn("group_id", FieldType.INT, false, false, true, false, -1); + CreateTable.ForeignKey dominion_member_player_uuid_fk = new CreateTable.ForeignKey(dominion_member_player_uuid, "player_name", player_name_uuid, true); + CreateTable.ForeignKey dominion_member_dom_id_fk = new CreateTable.ForeignKey(dominion_member_dom_id, "dominion", dominion_id, true); + CreateTable dominion_member = new CreateTable().ifNotExists(); + dominion_member.table("dominion_member") + .field(dominion_member_id) + .field(dominion_member_player_uuid) + .field(dominion_member_dom_id) + .field(dominion_member_admin) + .field(dominion_member_group_id) + .foreignKey(dominion_member_player_uuid_fk) + .foreignKey(dominion_member_dom_id_fk) + .unique(dominion_member_player_uuid, dominion_member_dom_id); + dominion_member.execute(); + for (Flag flag : Flag.getAllPrivilegeFlags()) { + TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue()); + new AddColumn(column).table("dominion_member").ifNotExists().execute(); + } + if (Common.IsTableExist("player_privilege")) { + // migrate from player_privilege to dominion_member + String sql = "SELECT * FROM player_privilege;"; + try (ResultSet rs = DatabaseManager.instance.query(sql)) { + while (rs.next()) { + String player_uuid = rs.getString("player_uuid"); + int dom_id = rs.getInt("dom_id"); + boolean admin = rs.getBoolean("admin"); + int group_id = rs.getInt("group_id"); + InsertRow insert = new InsertRow().table("dominion_member") + .field(new Field("player_uuid", player_uuid)) + .field(new Field("dom_id", dom_id)) + .field(new Field("group_id", group_id)) + .field(new Field("admin", admin)); + for (Flag flag : Flag.getAllPrivilegeFlags()) { + insert.field(new Field(flag.getFlagName(), rs.getBoolean(flag.getFlagName()))); + } + insert.execute(); + } + sql = "DROP TABLE player_privilege;"; + DatabaseManager.instance.query(sql); + } catch (Exception e) { + DatabaseManager.handleDatabaseError("迁移 player_privilege 到 dominion_member 失败", e, sql); + } + } } } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java index 5cfee19..77f028a 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/Apis.java @@ -2,7 +2,7 @@ package cn.lunadeer.dominion.tuis; import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.dtos.DominionDTO; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; +import cn.lunadeer.dominion.dtos.MemberDTO; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; @@ -45,7 +45,7 @@ public class Apis { 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()); + MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId()); if (privileges == null || !privileges.getAdmin()) { Notification.error(player, "你不是领地 %s 的拥有者或管理员,无权访问此页面", dominion.getName()); return true; diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java index 84f08d8..99047bb 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/GroupList.java @@ -2,8 +2,8 @@ package cn.lunadeer.dominion.tuis.dominion.manage.group; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.GroupDTO; +import cn.lunadeer.dominion.dtos.MemberDTO; import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; import cn.lunadeer.dominion.tuis.Apis; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.XLogger; @@ -72,9 +72,9 @@ public class GroupList { .setExecuteCommand("/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + page); line.append(del.build()).append(edit.build()).append(group.getName()).append(add.build()); view.add(line); - List players = PlayerPrivilegeDTO.selectByGroupId(group.getId()); + List players = MemberDTO.selectByGroupId(group.getId()); XLogger.debug("players: " + players.size()); - for (PlayerPrivilegeDTO playerPrivilege : players) { + for (MemberDTO playerPrivilege : players) { PlayerDTO p = PlayerDTO.select(playerPrivilege.getPlayerUUID()); if (p == null) continue; Button remove = Button.createRed("-") diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java index 000dd75..2575148 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/group/SelectMember.java @@ -2,8 +2,8 @@ package cn.lunadeer.dominion.tuis.dominion.manage.group; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.GroupDTO; +import cn.lunadeer.dominion.dtos.MemberDTO; import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; @@ -43,8 +43,8 @@ public class SelectMember { Line sub = Line.create().append("选择成员添加到权限组 " + group.getName()) .append(Button.create("返回").setExecuteCommand("/dominion group list " + dominion.getName() + " " + backPage).build()); view.subtitle(sub); - List members = PlayerPrivilegeDTO.selectByDomGroupId(dominion.getId(), -1); - for (PlayerPrivilegeDTO member : members) { + List members = MemberDTO.selectByDomGroupId(dominion.getId(), -1); + for (MemberDTO member : members) { PlayerDTO p = PlayerDTO.select(member.getPlayerUUID()); if (p == null) continue; view.add(Line.create() diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java index d266bd5..9646fbc 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberList.java @@ -45,7 +45,7 @@ public class MemberList { int page = getPage(args, 3); ListView view = ListView.create(10, "/dominion member list " + dominion.getName()); if (noAuthToManage(player, dominion)) return; - List privileges = PlayerPrivilegeDTO.select(dominion.getId()); + List privileges = MemberDTO.select(dominion.getId()); view.title("领地 " + dominion.getName() + " 成员列表"); view.navigator( Line.create() @@ -56,7 +56,7 @@ public class MemberList { ); view.add(Line.create().append(Button.create("添加成员") .setExecuteCommand(CommandParser("/dominion member select_player %s", dominion.getName())).build())); - for (PlayerPrivilegeDTO privilege : privileges) { + for (MemberDTO privilege : privileges) { PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID()); if (p_player == null) continue; GroupDTO group = Cache.instance.getGroup(privilege.getGroupId()); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java index 0a0ac8a..938787a 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/member/MemberSetting.java @@ -2,8 +2,8 @@ package cn.lunadeer.dominion.tuis.dominion.manage.member; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.Flag; +import cn.lunadeer.dominion.dtos.MemberDTO; import cn.lunadeer.dominion.dtos.PlayerDTO; -import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; @@ -46,7 +46,7 @@ public class MemberSetting { Notification.error(sender, "玩家 %s 不存在", playerName); return; } - PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(playerDTO.getUuid(), dominion.getId()); + MemberDTO privilege = MemberDTO.select(playerDTO.getUuid(), dominion.getId()); if (privilege == null) { Notification.warn(sender, "玩家 %s 不是领地 %s 的成员", playerName, dominion.getName()); return;