新增权限节点功能

This commit is contained in:
zhangyuheng 2024-07-25 00:08:49 +08:00
parent d348ee76f9
commit ee2cc157d0
16 changed files with 188 additions and 96 deletions

View File

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

View File

@ -19,6 +19,14 @@ public class Apis {
return (Player) sender; 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) { public static void sizeInfo(CommandSender sender, DominionDTO dominionDTO) {
Integer x1 = dominionDTO.getX1(); Integer x1 = dominionDTO.getX1();
Integer y1 = dominionDTO.getY1(); Integer y1 = dominionDTO.getY1();
@ -52,17 +60,6 @@ public class Apis {
return points; 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) { public static String CommandParser(String command, Object... args) {
return String.format(command, args); return String.format(command, args);
} }

View File

@ -7,9 +7,8 @@ import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting;
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting; import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender; 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 { public class DominionFlag {
@ -21,9 +20,10 @@ public class DominionFlag {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void setDominionFlag(CommandSender sender, String[] args) { public static void setDominionFlag(CommandSender sender, String[] args) {
Player player = playerOnly(sender); if (!hasPermission(sender, "dominion.default")) {
if (player == null) return; return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); }
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (args.length == 3) { if (args.length == 3) {
FlagsController.setFlag(operator, args[1], Boolean.parseBoolean(args[2])); FlagsController.setFlag(operator, args[1], Boolean.parseBoolean(args[2]));
} else if (args.length == 4) { } else if (args.length == 4) {

View File

@ -21,8 +21,7 @@ import java.time.LocalDateTime;
import java.util.Map; import java.util.Map;
import static cn.lunadeer.dominion.DominionNode.isInDominion; import static cn.lunadeer.dominion.DominionNode.isInDominion;
import static cn.lunadeer.dominion.commands.Apis.autoPoints; import static cn.lunadeer.dominion.commands.Apis.*;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
public class DominionOperate { public class DominionOperate {
/** /**
@ -33,6 +32,9 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void createDominion(CommandSender sender, String[] args) { public static void createDominion(CommandSender sender, String[] args) {
if (!hasPermission(sender, "dominion.default")) {
return;
}
Player player = playerOnly(sender); Player player = playerOnly(sender);
if (player == null) return; if (player == null) return;
if (args.length != 2) { if (args.length != 2) {
@ -57,6 +59,9 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void createSubDominion(CommandSender sender, String[] args) { public static void createSubDominion(CommandSender sender, String[] args) {
if (!hasPermission(sender, "dominion.default")) {
return;
}
Player player = playerOnly(sender); Player player = playerOnly(sender);
if (player == null) return; if (player == null) return;
if (args.length != 2 && args.length != 3) { if (args.length != 2 && args.length != 3) {
@ -85,6 +90,9 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void autoCreateDominion(CommandSender sender, String[] args) { public static void autoCreateDominion(CommandSender sender, String[] args) {
if (!hasPermission(sender, "dominion.default")) {
return;
}
Player player = playerOnly(sender); Player player = playerOnly(sender);
if (player == null) return; if (player == null) return;
if (args.length != 2) { if (args.length != 2) {
@ -108,6 +116,9 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void autoCreateSubDominion(CommandSender sender, String[] args) { public static void autoCreateSubDominion(CommandSender sender, String[] args) {
if (!hasPermission(sender, "dominion.default")) {
return;
}
Player player = playerOnly(sender); Player player = playerOnly(sender);
if (player == null) return; if (player == null) return;
if (args.length != 2 && args.length != 3) { if (args.length != 2 && args.length != 3) {
@ -130,6 +141,9 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void expandDominion(CommandSender sender, String[] args) { public static void expandDominion(CommandSender sender, String[] args) {
if (!hasPermission(sender, "dominion.default")) {
return;
}
Player player = playerOnly(sender); Player player = playerOnly(sender);
if (player == null) return; if (player == null) return;
if (args.length != 2 && args.length != 3) { if (args.length != 2 && args.length != 3) {
@ -167,6 +181,9 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void contractDominion(CommandSender sender, String[] args) { public static void contractDominion(CommandSender sender, String[] args) {
if (!hasPermission(sender, "dominion.default")) {
return;
}
Player player = playerOnly(sender); Player player = playerOnly(sender);
if (player == null) return; if (player == null) return;
if (args.length != 2 && args.length != 3) { if (args.length != 2 && args.length != 3) {
@ -204,9 +221,10 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void deleteDominion(CommandSender sender, String[] args) { public static void deleteDominion(CommandSender sender, String[] args) {
Player player = playerOnly(sender); if (!hasPermission(sender, "dominion.default")) {
if (player == null) return; return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); }
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (args.length == 2) { if (args.length == 2) {
String name = args[1]; String name = args[1];
DominionController.delete(operator, name, false); DominionController.delete(operator, name, false);
@ -230,9 +248,10 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void setEnterMessage(CommandSender sender, String[] args) { public static void setEnterMessage(CommandSender sender, String[] args) {
Player player = playerOnly(sender); if (!hasPermission(sender, "dominion.default")) {
if (player == null) return; return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); }
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (args.length == 2) { if (args.length == 2) {
DominionController.setJoinMessage(operator, args[1]); DominionController.setJoinMessage(operator, args[1]);
return; return;
@ -252,9 +271,10 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void setLeaveMessage(CommandSender sender, String[] args) { public static void setLeaveMessage(CommandSender sender, String[] args) {
Player player = playerOnly(sender); if (!hasPermission(sender, "dominion.default")) {
if (player == null) return; return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); }
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (args.length == 2) { if (args.length == 2) {
DominionController.setLeaveMessage(operator, args[1]); DominionController.setLeaveMessage(operator, args[1]);
return; return;
@ -274,6 +294,9 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void setTpLocation(CommandSender sender, String[] args) { public static void setTpLocation(CommandSender sender, String[] args) {
if (!hasPermission(sender, "dominion.default")) {
return;
}
Player player = playerOnly(sender); Player player = playerOnly(sender);
if (player == null) return; if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
@ -299,9 +322,10 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void renameDominion(CommandSender sender, String[] args) { public static void renameDominion(CommandSender sender, String[] args) {
Player player = playerOnly(sender); if (!hasPermission(sender, "dominion.default")) {
if (player == null) return; return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); }
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (args.length != 3) { if (args.length != 3) {
Notification.error(sender, "用法: /dominion rename <原领地名称> <新领地名称>"); Notification.error(sender, "用法: /dominion rename <原领地名称> <新领地名称>");
return; return;
@ -317,9 +341,10 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void giveDominion(CommandSender sender, String[] args) { public static void giveDominion(CommandSender sender, String[] args) {
Player player = playerOnly(sender); if (!hasPermission(sender, "dominion.default")) {
if (player == null) return; return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); }
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (args.length == 3) { if (args.length == 3) {
String dom_name = args[1]; String dom_name = args[1];
String player_name = args[2]; String player_name = args[2];
@ -345,6 +370,9 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void teleportToDominion(CommandSender sender, String[] args) { public static void teleportToDominion(CommandSender sender, String[] args) {
if (!hasPermission(sender, "dominion.default")) {
return;
}
Player player = playerOnly(sender); Player player = playerOnly(sender);
if (player == null) return; if (player == null) return;
if (args.length != 2) { if (args.length != 2) {
@ -457,13 +485,14 @@ public class DominionOperate {
* @param args 命令参数 * @param args 命令参数
*/ */
public static void setMapColor(CommandSender sender, String[] args) { public static void setMapColor(CommandSender sender, String[] args) {
Player player = playerOnly(sender); if (!hasPermission(sender, "dominion.default")) {
if (player == null) return; return;
}
if (args.length < 2) { if (args.length < 2) {
Notification.error(sender, "用法: /dominion set_map_color <颜色> [领地名称]"); Notification.error(sender, "用法: /dominion set_map_color <颜色> [领地名称]");
return; return;
} }
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (args.length == 2) { if (args.length == 2) {
DominionController.setMapColor(operator, args[1]); DominionController.setMapColor(operator, args[1]);
} else { } else {

View File

@ -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.dominion.tuis.dominion.manage.group.SelectMember;
import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -16,7 +15,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import static cn.lunadeer.dominion.Commands.boolOptions; 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.commands.Helper.*;
import static cn.lunadeer.dominion.tuis.Apis.getPage; import static cn.lunadeer.dominion.tuis.Apis.getPage;
@ -30,13 +29,14 @@ public class Group {
*/ */
public static void createGroup(CommandSender sender, String[] args) { public static void createGroup(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 4) { if (args.length < 4) {
Notification.error(sender, "用法: /dominion group create <领地名称> <权限组名称>"); Notification.error(sender, "用法: /dominion group create <领地名称> <权限组名称>");
return; return;
} }
Player player = playerOnly(sender); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2]; String dominionName = args[2];
String groupName = args[3]; String groupName = args[3];
GroupController.createGroup(operator, dominionName, groupName); GroupController.createGroup(operator, dominionName, groupName);
@ -54,13 +54,14 @@ public class Group {
*/ */
public static void deleteGroup(CommandSender sender, String[] args) { public static void deleteGroup(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 4) { if (args.length < 4) {
Notification.error(sender, "用法: /dominion group delete <领地名称> <权限组名称>"); Notification.error(sender, "用法: /dominion group delete <领地名称> <权限组名称>");
return; return;
} }
Player player = playerOnly(sender); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2]; String dominionName = args[2];
String groupName = args[3]; String groupName = args[3];
GroupController.deleteGroup(operator, dominionName, groupName); GroupController.deleteGroup(operator, dominionName, groupName);
@ -78,13 +79,14 @@ public class Group {
*/ */
public static void renameGroup(CommandSender sender, String[] args) { public static void renameGroup(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 5) { if (args.length < 5) {
Notification.error(sender, "用法: /dominion group rename <领地名称> <权限组旧名称> <新名称>"); Notification.error(sender, "用法: /dominion group rename <领地名称> <权限组旧名称> <新名称>");
return; return;
} }
Player player = playerOnly(sender); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2]; String dominionName = args[2];
String oldGroupName = args[3]; String oldGroupName = args[3];
String newGroupName = args[4]; String newGroupName = args[4];
@ -103,13 +105,14 @@ public class Group {
*/ */
public static void setGroupFlag(CommandSender sender, String[] args) { public static void setGroupFlag(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 6) { if (args.length < 6) {
Notification.error(sender, "用法: /dominion group set_flag <领地名称> <权限组名称> <权限名称> <true|false>"); Notification.error(sender, "用法: /dominion group set_flag <领地名称> <权限组名称> <权限名称> <true|false>");
return; return;
} }
Player player = playerOnly(sender); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2]; String dominionName = args[2];
String groupName = args[3]; String groupName = args[3];
String flag = args[4]; String flag = args[4];
@ -130,13 +133,14 @@ public class Group {
*/ */
public static void addMember(CommandSender sender, String[] args) { public static void addMember(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 5) { if (args.length < 5) {
Notification.error(sender, "用法: /dominion group add_member <领地名称> <权限组名称> <玩家名称>"); Notification.error(sender, "用法: /dominion group add_member <领地名称> <权限组名称> <玩家名称>");
return; return;
} }
Player player = playerOnly(sender); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2]; String dominionName = args[2];
String groupName = args[3]; String groupName = args[3];
String playerName = args[4]; String playerName = args[4];
@ -156,13 +160,14 @@ public class Group {
*/ */
public static void removeMember(CommandSender sender, String[] args) { public static void removeMember(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 5) { if (args.length < 5) {
Notification.error(sender, "用法: /dominion group remove_member <领地名称> <权限组名称> <玩家名称>"); Notification.error(sender, "用法: /dominion group remove_member <领地名称> <权限组名称> <玩家名称>");
return; return;
} }
Player player = playerOnly(sender); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2]; String dominionName = args[2];
String groupName = args[3]; String groupName = args[3];
String playerName = args[4]; String playerName = args[4];

View File

@ -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.dominion.tuis.dominion.manage.member.SelectTemplate;
import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; 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.boolOptions;
import static cn.lunadeer.dominion.Commands.playerNames; 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.*; import static cn.lunadeer.dominion.commands.Helper.*;
public class Member { public class Member {
@ -32,13 +31,14 @@ public class Member {
*/ */
public static void member_add(CommandSender sender, String[] args) { public static void member_add(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 4) { if (args.length < 4) {
Notification.error(sender, "用法: /dominion member add <领地名称> <玩家名称>"); Notification.error(sender, "用法: /dominion member add <领地名称> <玩家名称>");
return; return;
} }
Player player = playerOnly(sender); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2]; String dominionName = args[2];
String playerName = args[3]; String playerName = args[3];
MemberController.memberAdd(operator, dominionName, playerName); MemberController.memberAdd(operator, dominionName, playerName);
@ -57,13 +57,14 @@ public class Member {
*/ */
public static void member_set_flag(CommandSender sender, String[] args) { public static void member_set_flag(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 6) { if (args.length < 6) {
Notification.error(sender, "用法: /dominion member set_flag <领地名称> <玩家名称> <权限名称> <true/false>"); Notification.error(sender, "用法: /dominion member set_flag <领地名称> <玩家名称> <权限名称> <true/false>");
return; return;
} }
Player player = playerOnly(sender); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2]; String dominionName = args[2];
String playerName = args[3]; String playerName = args[3];
String flagName = args[4]; String flagName = args[4];
@ -85,13 +86,14 @@ public class Member {
*/ */
public static void member_remove(CommandSender sender, String[] args) { public static void member_remove(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 4) { if (args.length < 4) {
Notification.error(sender, "用法: /dominion member remove <领地名称> <玩家名称>"); Notification.error(sender, "用法: /dominion member remove <领地名称> <玩家名称>");
return; return;
} }
Player player = playerOnly(sender); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2]; String dominionName = args[2];
String playerName = args[3]; String playerName = args[3];
MemberController.memberRemove(operator, dominionName, playerName); MemberController.memberRemove(operator, dominionName, playerName);
@ -110,13 +112,14 @@ public class Member {
*/ */
public static void member_apply_template(CommandSender sender, String[] args) { public static void member_apply_template(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 5) { if (args.length < 5) {
Notification.error(sender, "用法: /dominion member apply_template <领地名称> <玩家名称> <模板名称>"); Notification.error(sender, "用法: /dominion member apply_template <领地名称> <玩家名称> <模板名称>");
return; return;
} }
Player player = playerOnly(sender); BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
String dominionName = args[2]; String dominionName = args[2];
String playerName = args[3]; String playerName = args[3];
String templateName = args[4]; String templateName = args[4];

View File

@ -14,12 +14,16 @@ import org.bukkit.entity.Player;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import static cn.lunadeer.dominion.commands.Apis.hasPermission;
import static cn.lunadeer.dominion.commands.Apis.playerOnly; import static cn.lunadeer.dominion.commands.Apis.playerOnly;
public class Migration { public class Migration {
public static void migrate(CommandSender sender, String[] args) { public static void migrate(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
Player player = playerOnly(sender); Player player = playerOnly(sender);
if (player == null) return; if (player == null) return;

View File

@ -15,12 +15,15 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static cn.lunadeer.dominion.commands.Apis.notOpOrConsole; import static cn.lunadeer.dominion.commands.Apis.hasPermission;
public class Operator { public class Operator {
public static void reloadCache(CommandSender sender, String[] args) { public static void reloadCache(CommandSender sender, String[] args) {
if (notOpOrConsole(sender)) return; if (!hasPermission(sender, "dominion.admin")) {
return;
}
Scheduler.runTaskAsync(() -> { Scheduler.runTaskAsync(() -> {
Notification.info(sender, "正在从数据库重新加载领地缓存..."); Notification.info(sender, "正在从数据库重新加载领地缓存...");
Cache.instance.loadDominions(); Cache.instance.loadDominions();
@ -39,7 +42,9 @@ public class Operator {
} }
public static void exportMca(CommandSender sender, String[] args) { public static void exportMca(CommandSender sender, String[] args) {
if (notOpOrConsole(sender)) return; if (!hasPermission(sender, "dominion.admin")) {
return;
}
Scheduler.runTaskAsync(() -> { Scheduler.runTaskAsync(() -> {
Notification.info(sender, "正在导出拥有领地的MCA文件列表..."); Notification.info(sender, "正在导出拥有领地的MCA文件列表...");
Map<String, List<String>> mca_cords = new HashMap<>(); Map<String, List<String>> mca_cords = new HashMap<>();
@ -110,7 +115,9 @@ public class Operator {
} }
public static void reloadConfig(CommandSender sender, String[] args) { public static void reloadConfig(CommandSender sender, String[] args) {
if (notOpOrConsole(sender)) return; if (!hasPermission(sender, "dominion.admin")) {
return;
}
Scheduler.runTaskAsync(() -> { Scheduler.runTaskAsync(() -> {
Notification.info(sender, "正在重新加载配置文件..."); Notification.info(sender, "正在重新加载配置文件...");
Dominion.config.reload(); Dominion.config.reload();

View File

@ -5,12 +5,14 @@ import cn.lunadeer.dominion.tuis.SysConfig;
import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender; 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 class SetConfig {
public static void handler(CommandSender sender, String[] args) { public static void handler(CommandSender sender, String[] args) {
if (notOpOrConsole(sender)) return; if (!hasPermission(sender, "dominion.admin")) {
return;
}
if (args.length < 2) { if (args.length < 2) {
Notification.error(sender, "参数错误"); Notification.error(sender, "参数错误");
return; return;

View File

@ -15,6 +15,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import static cn.lunadeer.dominion.Commands.boolOptions; 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.Apis.playerOnly;
import static cn.lunadeer.dominion.commands.Helper.allTemplates; import static cn.lunadeer.dominion.commands.Helper.allTemplates;
import static cn.lunadeer.dominion.commands.Helper.playerPrivileges; import static cn.lunadeer.dominion.commands.Helper.playerPrivileges;
@ -31,6 +32,9 @@ public class Template {
*/ */
public static void createTemplate(CommandSender sender, String[] args) { public static void createTemplate(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 3) { if (args.length < 3) {
Notification.error(sender, "用法: /dominion template create <模板名称>"); Notification.error(sender, "用法: /dominion template create <模板名称>");
return; return;
@ -54,6 +58,9 @@ public class Template {
*/ */
public static void deleteTemplate(CommandSender sender, String[] args) { public static void deleteTemplate(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 3) { if (args.length < 3) {
Notification.error(sender, "用法: /dominion template delete <模板名称>"); Notification.error(sender, "用法: /dominion template delete <模板名称>");
return; return;
@ -77,6 +84,9 @@ public class Template {
*/ */
public static void setTemplateFlag(CommandSender sender, String[] args) { public static void setTemplateFlag(CommandSender sender, String[] args) {
try { try {
if (!hasPermission(sender, "dominion.default")) {
return;
}
if (args.length < 5) { if (args.length < 5) {
Notification.error(sender, "用法: /dominion template set_flag <模板名称> <权限名称> <true/false>"); Notification.error(sender, "用法: /dominion template set_flag <模板名称> <权限名称> <true/false>");
return; return;

View File

@ -48,9 +48,9 @@ public interface AbstractOperator {
public @Nullable Location getLocation(); public @Nullable Location getLocation();
public Player getPlayer(); public @Nullable Player getPlayer();
public BlockFace getDirection(); public @Nullable BlockFace getDirection();
public CompletableFuture<Result> getResponse(); public CompletableFuture<Result> getResponse();
} }

View File

@ -1,6 +1,7 @@
package cn.lunadeer.dominion.controllers; package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.MemberDTO; import cn.lunadeer.dominion.dtos.MemberDTO;
import org.bukkit.Location; import org.bukkit.Location;
@ -8,12 +9,12 @@ import org.bukkit.Location;
public class Apis { public class Apis {
public static boolean notOwner(AbstractOperator player, DominionDTO dominion) { 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()); return !dominion.getOwner().equals(player.getUniqueId());
} }
public static boolean noAuthToChangeFlags(AbstractOperator player, DominionDTO dominion) { 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())) { if (!dominion.getOwner().equals(player.getUniqueId())) {
MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId()); MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId());
if (privileges == null || !privileges.getAdmin()) { if (privileges == null || !privileges.getAdmin()) {

View File

@ -3,29 +3,43 @@ package cn.lunadeer.dominion.controllers;
import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.annotation.Nullable;
import java.util.Objects; import java.util.Objects;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public class BukkitPlayerOperator implements AbstractOperator { public class BukkitPlayerOperator implements AbstractOperator {
private final org.bukkit.entity.Player player; private final CommandSender player;
private final CompletableFuture<Result> response = new CompletableFuture<>(); private final CompletableFuture<Result> response = new CompletableFuture<>();
public BukkitPlayerOperator(org.bukkit.entity.Player player) { public BukkitPlayerOperator(CommandSender player) {
this.player = player; this.player = player;
} }
public boolean isConsole() {
return !(player instanceof Player);
}
@Override @Override
public UUID getUniqueId() { public UUID getUniqueId() {
return player.getUniqueId(); if (isConsole()) {
return UUID.randomUUID();
} else {
return ((Player) player).getUniqueId();
}
} }
@Override @Override
public boolean isOp() { public boolean isOp() {
return player.isOp(); if (isConsole()) {
return true;
} else {
return ((Player) player).isOp();
}
} }
@Override @Override
@ -34,19 +48,30 @@ public class BukkitPlayerOperator implements AbstractOperator {
} }
@Override @Override
public Location getLocation() { public @Nullable Location getLocation() {
return player.getLocation(); if (isConsole()) {
return null;
} else {
return ((Player) player).getLocation();
}
} }
@Override @Override
public Player getPlayer() { public @Nullable Player getPlayer() {
return player; if (isConsole()) {
return null;
} else {
return (Player) player;
}
} }
@Override @Override
public BlockFace getDirection() { public @Nullable BlockFace getDirection() {
float yaw = player.getLocation().getYaw(); if (isConsole() || getLocation() == null) {
float pitch = player.getLocation().getPitch(); return null;
}
float yaw = getLocation().getYaw();
float pitch = getLocation().getPitch();
if (pitch > -45 && pitch < 45) { if (pitch > -45 && pitch < 45) {
if (yaw > -45 && yaw < 45) { if (yaw > -45 && yaw < 45) {
return BlockFace.SOUTH; return BlockFace.SOUTH;
@ -69,7 +94,7 @@ public class BukkitPlayerOperator implements AbstractOperator {
return response; return response;
} }
public static BukkitPlayerOperator create(org.bukkit.entity.Player player) { public static BukkitPlayerOperator create(CommandSender player) {
BukkitPlayerOperator operator = new BukkitPlayerOperator(player); BukkitPlayerOperator operator = new BukkitPlayerOperator(player);
operator.getResponse().thenAccept(result -> { operator.getResponse().thenAccept(result -> {
if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.SUCCESS)) { if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.SUCCESS)) {

View File

@ -859,6 +859,10 @@ public class DominionController {
private static int[] expandContractSizeChange(AbstractOperator operator, @NotNull DominionDTO dominion, boolean expand, int size, AbstractOperator.Result FAIL) { private static int[] expandContractSizeChange(AbstractOperator operator, @NotNull DominionDTO dominion, boolean expand, int size, AbstractOperator.Result FAIL) {
BlockFace face = operator.getDirection(); BlockFace face = operator.getDirection();
if (face == null) {
operator.setResponse(FAIL.addMessage("无法获取你的方向"));
return null;
}
int[] result = new int[6]; int[] result = new int[6];
result[0] = dominion.getX1(); result[0] = dominion.getX1();
result[1] = dominion.getY1(); result[1] = dominion.getY1();

View File

@ -13,7 +13,6 @@ public class FlagsController {
* @param operator 操作者 * @param operator 操作者
* @param flag 权限名称 * @param flag 权限名称
* @param value 权限值 * @param value 权限值
* @return 设置后的领地信息
*/ */
public static void setFlag(AbstractOperator operator, String flag, boolean value) { public static void setFlag(AbstractOperator operator, String flag, boolean value) {
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator); DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
@ -29,7 +28,6 @@ public class FlagsController {
* @param flag 权限名称 * @param flag 权限名称
* @param value 权限值 * @param value 权限值
* @param dominionName 领地名称 * @param dominionName 领地名称
* @return 设置后的领地信息
*/ */
public static void setFlag(AbstractOperator operator, String flag, boolean value, String dominionName) { public static void setFlag(AbstractOperator operator, String flag, boolean value, String dominionName) {
DominionDTO dominion = DominionDTO.select(dominionName); DominionDTO dominion = DominionDTO.select(dominionName);

View File

@ -12,3 +12,10 @@ commands:
description: 领地插件命令 description: 领地插件命令
usage: /dominion <cmd> usage: /dominion <cmd>
aliases: [ dominion, dom ] aliases: [ dominion, dom ]
permission:
dominion.admin:
description: 领地插件管理员权限
default: op
dominion.default:
description: 领地插件用户权限
default: true