diff --git a/pom.xml b/pom.xml index 8a0777c..f22091e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.41.0-beta + 1.42.0-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/commands/Apis.java b/src/main/java/cn/lunadeer/dominion/commands/Apis.java index c166312..01f52b4 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Apis.java @@ -19,6 +19,14 @@ public class Apis { return (Player) sender; } + public static boolean hasPermission(CommandSender sender, String permission) { + if (!sender.hasPermission(permission)) { + Notification.error(sender, "你没有 %s 权限执行此命令", permission); + return false; + } + return true; + } + public static void sizeInfo(CommandSender sender, DominionDTO dominionDTO) { Integer x1 = dominionDTO.getX1(); Integer y1 = dominionDTO.getY1(); @@ -52,17 +60,6 @@ public class Apis { return points; } - public static boolean notOpOrConsole(CommandSender sender) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (!player.isOp()) { - Notification.warn(player, "你没有权限使用此命令"); - return true; - } - } - 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/DominionFlag.java b/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java index 3b25b3c..f2122d7 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java +++ b/src/main/java/cn/lunadeer/dominion/commands/DominionFlag.java @@ -7,9 +7,8 @@ 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; -import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.commands.Apis.hasPermission; public class DominionFlag { @@ -21,9 +20,10 @@ public class DominionFlag { * @param args 命令参数 */ public static void setDominionFlag(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + if (!hasPermission(sender, "dominion.default")) { + return; + } + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); if (args.length == 3) { FlagsController.setFlag(operator, args[1], Boolean.parseBoolean(args[2])); } else if (args.length == 4) { diff --git a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java index 22b3a4a..63ac695 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java +++ b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java @@ -21,8 +21,7 @@ import java.time.LocalDateTime; import java.util.Map; import static cn.lunadeer.dominion.DominionNode.isInDominion; -import static cn.lunadeer.dominion.commands.Apis.autoPoints; -import static cn.lunadeer.dominion.commands.Apis.playerOnly; +import static cn.lunadeer.dominion.commands.Apis.*; public class DominionOperate { /** @@ -33,6 +32,9 @@ public class DominionOperate { * @param args 命令参数 */ public static void createDominion(CommandSender sender, String[] args) { + if (!hasPermission(sender, "dominion.default")) { + return; + } Player player = playerOnly(sender); if (player == null) return; if (args.length != 2) { @@ -57,6 +59,9 @@ public class DominionOperate { * @param args 命令参数 */ public static void createSubDominion(CommandSender sender, String[] args) { + if (!hasPermission(sender, "dominion.default")) { + return; + } Player player = playerOnly(sender); if (player == null) return; if (args.length != 2 && args.length != 3) { @@ -85,6 +90,9 @@ public class DominionOperate { * @param args 命令参数 */ public static void autoCreateDominion(CommandSender sender, String[] args) { + if (!hasPermission(sender, "dominion.default")) { + return; + } Player player = playerOnly(sender); if (player == null) return; if (args.length != 2) { @@ -108,6 +116,9 @@ public class DominionOperate { * @param args 命令参数 */ public static void autoCreateSubDominion(CommandSender sender, String[] args) { + if (!hasPermission(sender, "dominion.default")) { + return; + } Player player = playerOnly(sender); if (player == null) return; if (args.length != 2 && args.length != 3) { @@ -130,6 +141,9 @@ public class DominionOperate { * @param args 命令参数 */ public static void expandDominion(CommandSender sender, String[] args) { + if (!hasPermission(sender, "dominion.default")) { + return; + } Player player = playerOnly(sender); if (player == null) return; if (args.length != 2 && args.length != 3) { @@ -167,6 +181,9 @@ public class DominionOperate { * @param args 命令参数 */ public static void contractDominion(CommandSender sender, String[] args) { + if (!hasPermission(sender, "dominion.default")) { + return; + } Player player = playerOnly(sender); if (player == null) return; if (args.length != 2 && args.length != 3) { @@ -204,9 +221,10 @@ public class DominionOperate { * @param args 命令参数 */ public static void deleteDominion(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + if (!hasPermission(sender, "dominion.default")) { + return; + } + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); if (args.length == 2) { String name = args[1]; DominionController.delete(operator, name, false); @@ -230,9 +248,10 @@ public class DominionOperate { * @param args 命令参数 */ public static void setEnterMessage(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + if (!hasPermission(sender, "dominion.default")) { + return; + } + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); if (args.length == 2) { DominionController.setJoinMessage(operator, args[1]); return; @@ -252,9 +271,10 @@ public class DominionOperate { * @param args 命令参数 */ public static void setLeaveMessage(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + if (!hasPermission(sender, "dominion.default")) { + return; + } + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); if (args.length == 2) { DominionController.setLeaveMessage(operator, args[1]); return; @@ -274,6 +294,9 @@ public class DominionOperate { * @param args 命令参数 */ public static void setTpLocation(CommandSender sender, String[] args) { + if (!hasPermission(sender, "dominion.default")) { + return; + } Player player = playerOnly(sender); if (player == null) return; BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); @@ -299,9 +322,10 @@ public class DominionOperate { * @param args 命令参数 */ public static void renameDominion(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + if (!hasPermission(sender, "dominion.default")) { + return; + } + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); if (args.length != 3) { Notification.error(sender, "用法: /dominion rename <原领地名称> <新领地名称>"); return; @@ -317,9 +341,10 @@ public class DominionOperate { * @param args 命令参数 */ public static void giveDominion(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + if (!hasPermission(sender, "dominion.default")) { + return; + } + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); if (args.length == 3) { String dom_name = args[1]; String player_name = args[2]; @@ -345,6 +370,9 @@ public class DominionOperate { * @param args 命令参数 */ public static void teleportToDominion(CommandSender sender, String[] args) { + if (!hasPermission(sender, "dominion.default")) { + return; + } Player player = playerOnly(sender); if (player == null) return; if (args.length != 2) { @@ -457,13 +485,14 @@ public class DominionOperate { * @param args 命令参数 */ public static void setMapColor(CommandSender sender, String[] args) { - Player player = playerOnly(sender); - if (player == null) return; + if (!hasPermission(sender, "dominion.default")) { + return; + } if (args.length < 2) { Notification.error(sender, "用法: /dominion set_map_color <颜色> [领地名称]"); return; } - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); if (args.length == 2) { DominionController.setMapColor(operator, args[1]); } else { diff --git a/src/main/java/cn/lunadeer/dominion/commands/Group.java b/src/main/java/cn/lunadeer/dominion/commands/Group.java index f8110d0..d3f558f 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Group.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Group.java @@ -7,7 +7,6 @@ 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; @@ -16,7 +15,7 @@ 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.Apis.hasPermission; import static cn.lunadeer.dominion.commands.Helper.*; import static cn.lunadeer.dominion.tuis.Apis.getPage; @@ -30,13 +29,14 @@ public class Group { */ public static void createGroup(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } if (args.length < 4) { Notification.error(sender, "用法: /dominion group create <领地名称> <权限组名称>"); return; } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); String dominionName = args[2]; String groupName = args[3]; GroupController.createGroup(operator, dominionName, groupName); @@ -54,13 +54,14 @@ public class Group { */ public static void deleteGroup(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } if (args.length < 4) { Notification.error(sender, "用法: /dominion group delete <领地名称> <权限组名称>"); return; } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); String dominionName = args[2]; String groupName = args[3]; GroupController.deleteGroup(operator, dominionName, groupName); @@ -78,13 +79,14 @@ public class Group { */ public static void renameGroup(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } if (args.length < 5) { Notification.error(sender, "用法: /dominion group rename <领地名称> <权限组旧名称> <新名称>"); return; } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); String dominionName = args[2]; String oldGroupName = args[3]; String newGroupName = args[4]; @@ -103,13 +105,14 @@ public class Group { */ public static void setGroupFlag(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } 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); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); String dominionName = args[2]; String groupName = args[3]; String flag = args[4]; @@ -130,13 +133,14 @@ public class Group { */ public static void addMember(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } 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); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); String dominionName = args[2]; String groupName = args[3]; String playerName = args[4]; @@ -156,13 +160,14 @@ public class Group { */ public static void removeMember(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } 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); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); String dominionName = args[2]; String groupName = args[3]; String playerName = args[4]; diff --git a/src/main/java/cn/lunadeer/dominion/commands/Member.java b/src/main/java/cn/lunadeer/dominion/commands/Member.java index a6e9136..d39a3fd 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Member.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Member.java @@ -8,7 +8,6 @@ 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; @@ -18,7 +17,7 @@ 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.Apis.hasPermission; import static cn.lunadeer.dominion.commands.Helper.*; public class Member { @@ -32,13 +31,14 @@ public class Member { */ public static void member_add(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } if (args.length < 4) { Notification.error(sender, "用法: /dominion member add <领地名称> <玩家名称>"); return; } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); String dominionName = args[2]; String playerName = args[3]; MemberController.memberAdd(operator, dominionName, playerName); @@ -57,13 +57,14 @@ public class Member { */ public static void member_set_flag(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } 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); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); String dominionName = args[2]; String playerName = args[3]; String flagName = args[4]; @@ -85,13 +86,14 @@ public class Member { */ public static void member_remove(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } if (args.length < 4) { Notification.error(sender, "用法: /dominion member remove <领地名称> <玩家名称>"); return; } - Player player = playerOnly(sender); - if (player == null) return; - BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); String dominionName = args[2]; String playerName = args[3]; MemberController.memberRemove(operator, dominionName, playerName); @@ -110,13 +112,14 @@ public class Member { */ public static void member_apply_template(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } 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); + BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender); String dominionName = args[2]; String playerName = args[3]; String templateName = args[4]; diff --git a/src/main/java/cn/lunadeer/dominion/commands/Migration.java b/src/main/java/cn/lunadeer/dominion/commands/Migration.java index 3a7df89..226e51a 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Migration.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Migration.java @@ -14,12 +14,16 @@ import org.bukkit.entity.Player; import java.util.List; import java.util.Objects; +import static cn.lunadeer.dominion.commands.Apis.hasPermission; import static cn.lunadeer.dominion.commands.Apis.playerOnly; public class Migration { public static void migrate(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } Player player = playerOnly(sender); if (player == null) return; diff --git a/src/main/java/cn/lunadeer/dominion/commands/Operator.java b/src/main/java/cn/lunadeer/dominion/commands/Operator.java index 1a0b538..69fd9bf 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Operator.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Operator.java @@ -15,12 +15,15 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static cn.lunadeer.dominion.commands.Apis.notOpOrConsole; +import static cn.lunadeer.dominion.commands.Apis.hasPermission; + public class Operator { public static void reloadCache(CommandSender sender, String[] args) { - if (notOpOrConsole(sender)) return; + if (!hasPermission(sender, "dominion.admin")) { + return; + } Scheduler.runTaskAsync(() -> { Notification.info(sender, "正在从数据库重新加载领地缓存..."); Cache.instance.loadDominions(); @@ -39,7 +42,9 @@ public class Operator { } public static void exportMca(CommandSender sender, String[] args) { - if (notOpOrConsole(sender)) return; + if (!hasPermission(sender, "dominion.admin")) { + return; + } Scheduler.runTaskAsync(() -> { Notification.info(sender, "正在导出拥有领地的MCA文件列表..."); Map> mca_cords = new HashMap<>(); @@ -110,7 +115,9 @@ public class Operator { } public static void reloadConfig(CommandSender sender, String[] args) { - if (notOpOrConsole(sender)) return; + if (!hasPermission(sender, "dominion.admin")) { + return; + } Scheduler.runTaskAsync(() -> { Notification.info(sender, "正在重新加载配置文件..."); Dominion.config.reload(); diff --git a/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java b/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java index 127736d..3556cfe 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java +++ b/src/main/java/cn/lunadeer/dominion/commands/SetConfig.java @@ -5,12 +5,14 @@ import cn.lunadeer.dominion.tuis.SysConfig; import cn.lunadeer.minecraftpluginutils.Notification; import org.bukkit.command.CommandSender; -import static cn.lunadeer.dominion.commands.Apis.notOpOrConsole; +import static cn.lunadeer.dominion.commands.Apis.hasPermission; public class SetConfig { public static void handler(CommandSender sender, String[] args) { - if (notOpOrConsole(sender)) return; + if (!hasPermission(sender, "dominion.admin")) { + return; + } if (args.length < 2) { Notification.error(sender, "参数错误"); return; diff --git a/src/main/java/cn/lunadeer/dominion/commands/Template.java b/src/main/java/cn/lunadeer/dominion/commands/Template.java index a844ad5..fe5e05b 100644 --- a/src/main/java/cn/lunadeer/dominion/commands/Template.java +++ b/src/main/java/cn/lunadeer/dominion/commands/Template.java @@ -15,6 +15,7 @@ import java.util.Collections; import java.util.List; import static cn.lunadeer.dominion.Commands.boolOptions; +import static cn.lunadeer.dominion.commands.Apis.hasPermission; import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.commands.Helper.allTemplates; import static cn.lunadeer.dominion.commands.Helper.playerPrivileges; @@ -31,6 +32,9 @@ public class Template { */ public static void createTemplate(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } if (args.length < 3) { Notification.error(sender, "用法: /dominion template create <模板名称>"); return; @@ -54,6 +58,9 @@ public class Template { */ public static void deleteTemplate(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } if (args.length < 3) { Notification.error(sender, "用法: /dominion template delete <模板名称>"); return; @@ -77,6 +84,9 @@ public class Template { */ public static void setTemplateFlag(CommandSender sender, String[] args) { try { + if (!hasPermission(sender, "dominion.default")) { + return; + } if (args.length < 5) { Notification.error(sender, "用法: /dominion template set_flag <模板名称> <权限名称> "); return; diff --git a/src/main/java/cn/lunadeer/dominion/controllers/AbstractOperator.java b/src/main/java/cn/lunadeer/dominion/controllers/AbstractOperator.java index c66d81c..ea486b7 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/AbstractOperator.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/AbstractOperator.java @@ -48,9 +48,9 @@ public interface AbstractOperator { public @Nullable Location getLocation(); - public Player getPlayer(); + public @Nullable Player getPlayer(); - public BlockFace getDirection(); + public @Nullable BlockFace getDirection(); public CompletableFuture getResponse(); } diff --git a/src/main/java/cn/lunadeer/dominion/controllers/Apis.java b/src/main/java/cn/lunadeer/dominion/controllers/Apis.java index 082f700..71e00f4 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/Apis.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/Apis.java @@ -1,6 +1,7 @@ package cn.lunadeer.dominion.controllers; import cn.lunadeer.dominion.Cache; +import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.MemberDTO; import org.bukkit.Location; @@ -8,12 +9,12 @@ import org.bukkit.Location; public class Apis { public static boolean notOwner(AbstractOperator player, DominionDTO dominion) { - if (player.isOp()) return false; + if (player.isOp() && Dominion.config.getLimitOpBypass()) return false; return !dominion.getOwner().equals(player.getUniqueId()); } public static boolean noAuthToChangeFlags(AbstractOperator player, DominionDTO dominion) { - if (player.isOp()) return false; + if (player.isOp() && Dominion.config.getLimitOpBypass()) return false; if (!dominion.getOwner().equals(player.getUniqueId())) { MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId()); if (privileges == null || !privileges.getAdmin()) { diff --git a/src/main/java/cn/lunadeer/dominion/controllers/BukkitPlayerOperator.java b/src/main/java/cn/lunadeer/dominion/controllers/BukkitPlayerOperator.java index ef88d6f..c06e3ad 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/BukkitPlayerOperator.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/BukkitPlayerOperator.java @@ -3,29 +3,43 @@ package cn.lunadeer.dominion.controllers; import cn.lunadeer.minecraftpluginutils.Notification; import org.bukkit.Location; import org.bukkit.block.BlockFace; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import javax.annotation.Nullable; import java.util.Objects; import java.util.UUID; import java.util.concurrent.CompletableFuture; public class BukkitPlayerOperator implements AbstractOperator { - private final org.bukkit.entity.Player player; + private final CommandSender player; private final CompletableFuture response = new CompletableFuture<>(); - public BukkitPlayerOperator(org.bukkit.entity.Player player) { + public BukkitPlayerOperator(CommandSender player) { this.player = player; } + public boolean isConsole() { + return !(player instanceof Player); + } + @Override public UUID getUniqueId() { - return player.getUniqueId(); + if (isConsole()) { + return UUID.randomUUID(); + } else { + return ((Player) player).getUniqueId(); + } } @Override public boolean isOp() { - return player.isOp(); + if (isConsole()) { + return true; + } else { + return ((Player) player).isOp(); + } } @Override @@ -34,19 +48,30 @@ public class BukkitPlayerOperator implements AbstractOperator { } @Override - public Location getLocation() { - return player.getLocation(); + public @Nullable Location getLocation() { + if (isConsole()) { + return null; + } else { + return ((Player) player).getLocation(); + } } @Override - public Player getPlayer() { - return player; + public @Nullable Player getPlayer() { + if (isConsole()) { + return null; + } else { + return (Player) player; + } } @Override - public BlockFace getDirection() { - float yaw = player.getLocation().getYaw(); - float pitch = player.getLocation().getPitch(); + public @Nullable BlockFace getDirection() { + if (isConsole() || getLocation() == null) { + return null; + } + float yaw = getLocation().getYaw(); + float pitch = getLocation().getPitch(); if (pitch > -45 && pitch < 45) { if (yaw > -45 && yaw < 45) { return BlockFace.SOUTH; @@ -69,7 +94,7 @@ public class BukkitPlayerOperator implements AbstractOperator { return response; } - public static BukkitPlayerOperator create(org.bukkit.entity.Player player) { + public static BukkitPlayerOperator create(CommandSender player) { BukkitPlayerOperator operator = new BukkitPlayerOperator(player); operator.getResponse().thenAccept(result -> { if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.SUCCESS)) { diff --git a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java index 4de6033..9c86c69 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java @@ -859,6 +859,10 @@ public class DominionController { private static int[] expandContractSizeChange(AbstractOperator operator, @NotNull DominionDTO dominion, boolean expand, int size, AbstractOperator.Result FAIL) { BlockFace face = operator.getDirection(); + if (face == null) { + operator.setResponse(FAIL.addMessage("无法获取你的方向")); + return null; + } int[] result = new int[6]; result[0] = dominion.getX1(); result[1] = dominion.getY1(); diff --git a/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java b/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java index 1788651..7ed6463 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/FlagsController.java @@ -13,7 +13,6 @@ public class FlagsController { * @param operator 操作者 * @param flag 权限名称 * @param value 权限值 - * @return 设置后的领地信息 */ public static void setFlag(AbstractOperator operator, String flag, boolean value) { DominionDTO dominion = Apis.getPlayerCurrentDominion(operator); @@ -29,7 +28,6 @@ public class FlagsController { * @param flag 权限名称 * @param value 权限值 * @param dominionName 领地名称 - * @return 设置后的领地信息 */ public static void setFlag(AbstractOperator operator, String flag, boolean value, String dominionName) { DominionDTO dominion = DominionDTO.select(dominionName); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0ac2024..88d991c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -11,4 +11,11 @@ commands: Dominion: description: 领地插件命令 usage: /dominion - aliases: [dominion, dom] \ No newline at end of file + aliases: [ dominion, dom ] +permission: + dominion.admin: + description: 领地插件管理员权限 + default: op + dominion.default: + description: 领地插件用户权限 + default: true