Merge branch 'abstractOperatprImpl'

# Conflicts:
#	pom.xml
This commit is contained in:
zhangyuheng 2024-05-29 16:54:26 +08:00
commit 7a2842333f
16 changed files with 532 additions and 378 deletions

View File

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

View File

@ -250,6 +250,11 @@ public class Cache {
return player_uuid_to_privilege.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());
}
private static boolean isInDominion(@Nullable DominionDTO dominion, Player player) {
if (dominion == null) return false;
if (!Objects.equals(dominion.getWorld(), player.getWorld().getName())) return false;
@ -265,8 +270,7 @@ public class Cache {
return id_dominions.get(id);
}
public int getPlayerDominionCount(Player player) {
UUID player_uuid = player.getUniqueId();
public int getPlayerDominionCount(UUID player_uuid) {
int count = 0;
for (DominionDTO dominion : id_dominions.values()) {
if (dominion.getOwner().equals(player_uuid)) {

View File

@ -49,7 +49,7 @@ public class DominionNode {
return dominionNode == null ? null : dominionNode.dominion;
}
private static boolean isInDominion(@Nullable DominionDTO dominion, Location location) {
public static boolean isInDominion(@Nullable DominionDTO dominion, Location location) {
if (dominion == null) return false;
if (!Objects.equals(dominion.getWorld(), location.getWorld().getName())) return false;
double x = location.getX();

View File

@ -1,5 +1,6 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.FlagsController;
import cn.lunadeer.dominion.tuis.DominionFlagInfo;
import cn.lunadeer.minecraftpluginutils.Notification;
@ -20,29 +21,21 @@ public class DominionFlag {
public static void setDominionFlag(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length == 3) {
if (FlagsController.setFlag(player, args[1], Boolean.parseBoolean(args[2])) == null) {
Notification.error(sender, "设置领地权限失败");
}
FlagsController.setFlag(operator, args[1], Boolean.parseBoolean(args[2]));
} else if (args.length == 4) {
if (FlagsController.setFlag(player, args[1], Boolean.parseBoolean(args[2]), args[3]) == null) {
Notification.error(sender, "设置领地权限失败");
}
FlagsController.setFlag(operator, args[1], Boolean.parseBoolean(args[2]), args[3]);
} else if (args.length == 5) {
if (FlagsController.setFlag(player, args[1], Boolean.parseBoolean(args[2]), args[3]) == null) {
Notification.error(sender, "设置领地权限失败");
}
FlagsController.setFlag(operator, args[1], Boolean.parseBoolean(args[2]), args[3]);
String[] newArgs = new String[3];
newArgs[0] = "flag_info";
newArgs[1] = args[3];
newArgs[2] = args[4];
DominionFlagInfo.show(sender, newArgs);
return;
} else {
Notification.error(sender, "用法: /dominion set <权限名称> <true/false> [领地名称]");
return;
}
Notification.info(sender, "设置领地权限 %s 为 %s", args[1], args[2]);
}
}

View File

@ -2,6 +2,8 @@ package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.Cache;
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.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
@ -17,6 +19,7 @@ import org.bukkit.entity.Player;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.Objects;
import static cn.lunadeer.dominion.commands.Apis.*;
@ -41,11 +44,8 @@ public class DominionOperate {
return;
}
String name = args[1];
if (DominionController.create(player, name, points.get(0), points.get(1)) == null) {
Notification.error(sender, "创建领地失败");
return;
}
Notification.info(sender, "成功创建: %s", name);
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
DominionController.create(operator, name, points.get(0), points.get(1));
}
/**
@ -67,18 +67,12 @@ public class DominionOperate {
Notification.error(sender, "请先使用工具选择子领地的对角线两点,或使用 /dominion auto_create_sub <子领地名称> [父领地名称] 创建自动子领地");
return;
}
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length == 2) {
if (DominionController.create(player, args[1], points.get(0), points.get(1)) != null) {
Notification.info(sender, "成功创建子领地: %s", args[1]);
return;
}
DominionController.create(operator, args[1], points.get(0), points.get(1));
} else {
if (DominionController.create(player, args[1], points.get(0), points.get(1), args[2]) != null) {
Notification.info(sender, "成功创建子领地: %s", args[1]);
return;
}
DominionController.create(operator, args[1], points.get(0), points.get(1), args[2]);
}
Notification.error(sender, "创建子领地失败");
}
/**
@ -156,17 +150,11 @@ public class DominionOperate {
if (args.length == 3) {
name = args[2];
}
DominionDTO dominionDTO;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (name.isEmpty()) {
dominionDTO = DominionController.expand(player, size);
DominionController.expand(operator, size);
} else {
dominionDTO = DominionController.expand(player, size, name);
}
if (dominionDTO == null) {
Notification.error(sender, "扩展领地失败");
} else {
Notification.info(sender, "成功扩展领地: %s %d", dominionDTO.getName(), size);
sizeInfo(sender, dominionDTO);
DominionController.expand(operator, size, name);
}
}
@ -199,17 +187,11 @@ public class DominionOperate {
if (args.length == 3) {
name = args[2];
}
DominionDTO dominionDTO;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (name.isEmpty()) {
dominionDTO = DominionController.contract(player, size);
DominionController.contract(operator, size);
} else {
dominionDTO = DominionController.contract(player, size, name);
}
if (dominionDTO == null) {
Notification.error(sender, "缩小领地失败");
} else {
Notification.info(sender, "成功缩小领地: %s %d", dominionDTO.getName(), size);
sizeInfo(sender, dominionDTO);
DominionController.contract(operator, size, name);
}
}
@ -223,15 +205,16 @@ public class DominionOperate {
public static void deleteDominion(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length == 2) {
String name = args[1];
DominionController.delete(player, name, false);
DominionController.delete(operator, name, false);
return;
}
if (args.length == 3) {
String name = args[1];
if (args[2].equals("force")) {
DominionController.delete(player, name, true);
DominionController.delete(operator, name, true);
return;
}
}
@ -248,12 +231,13 @@ public class DominionOperate {
public static void setEnterMessage(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length == 2) {
DominionController.setJoinMessage(player, args[1]);
DominionController.setJoinMessage(operator, args[1]);
return;
}
if (args.length == 3) {
DominionController.setJoinMessage(player, args[1], args[2]);
DominionController.setJoinMessage(operator, args[1], args[2]);
return;
}
Notification.error(sender, "用法: /dominion set_enter_msg <提示语> [领地名称]");
@ -269,12 +253,13 @@ public class DominionOperate {
public static void setLeaveMessage(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length == 2) {
DominionController.setLeaveMessage(player, args[1]);
DominionController.setLeaveMessage(operator, args[1]);
return;
}
if (args.length == 3) {
DominionController.setLeaveMessage(player, args[1], args[2]);
DominionController.setLeaveMessage(operator, args[1], args[2]);
return;
}
Notification.error(sender, "用法: /dominion set_leave_msg <提示语> [领地名称]");
@ -290,12 +275,16 @@ public class DominionOperate {
public static void setTpLocation(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length == 1) {
DominionController.setTpLocation(player);
DominionController.setTpLocation(operator,
player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ());
return;
}
if (args.length == 2) {
DominionController.setTpLocation(player, args[1]);
DominionController.setTpLocation(operator,
player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ(),
args[1]);
return;
}
Notification.error(sender, "用法: /dominion set_tp_location [领地名称]");
@ -311,11 +300,12 @@ public class DominionOperate {
public static void renameDominion(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length != 3) {
Notification.error(sender, "用法: /dominion rename <原领地名称> <新领地名称>");
return;
}
DominionController.rename(player, args[1], args[2]);
DominionController.rename(operator, args[1], args[2]);
}
/**
@ -328,17 +318,18 @@ public class DominionOperate {
public static void giveDominion(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
if (args.length == 3) {
String dom_name = args[1];
String player_name = args[2];
DominionController.give(player, dom_name, player_name, false);
DominionController.give(operator, dom_name, player_name, false);
return;
}
if (args.length == 4) {
String dom_name = args[1];
String player_name = args[2];
if (args[3].equals("force")) {
DominionController.give(player, dom_name, player_name, true);
DominionController.give(operator, dom_name, player_name, true);
return;
}
}

View File

@ -1,6 +1,8 @@
package cn.lunadeer.dominion.commands;
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.controllers.PrivilegeController;
import cn.lunadeer.dominion.dtos.DominionDTO;
@ -15,6 +17,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Map;
import java.util.Objects;
import static cn.lunadeer.dominion.commands.Apis.autoPoints;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
@ -32,7 +35,8 @@ public class OpenCUI {
@Override
public void handleData(String input) {
XLogger.debug("renameDominionCB.run: %s", input);
DominionController.rename(sender, oldName, input);
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
DominionController.rename(operator, oldName, input);
DominionManage.show(sender, new String[]{"manage", input});
}
}
@ -49,7 +53,8 @@ public class OpenCUI {
@Override
public void handleData(String input) {
XLogger.debug("editJoinMessageCB.run: %s", input);
DominionController.setJoinMessage(sender, input, dominionName);
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
DominionController.setJoinMessage(operator, input, dominionName);
DominionManage.show(sender, new String[]{"manage", dominionName});
}
}
@ -66,7 +71,8 @@ public class OpenCUI {
@Override
public void handleData(String input) {
XLogger.debug("editLeaveMessageCB.run: %s", input);
DominionController.setLeaveMessage(sender, input, dominionName);
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
DominionController.setLeaveMessage(operator, input, dominionName);
DominionManage.show(sender, new String[]{"manage", dominionName});
}
}
@ -82,17 +88,18 @@ public class OpenCUI {
public void handleData(String input) {
XLogger.debug("createDominionCB.run: %s", input);
autoPoints(sender);
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
Map<Integer, Location> points = Dominion.pointsSelect.get(sender.getUniqueId());
if (points == null || points.get(0) == null || points.get(1) == null) {
Notification.error(sender, "自动选点失败");
return;
}
if (DominionController.create(sender, input, points.get(0), points.get(1)) != null) {
Notification.info(sender, "成功创建: %s", input);
DominionManage.show(sender, new String[]{"list"});
} else {
Notification.error(sender, "创建领地失败");
}
operator.getResponse().thenAccept(result -> {
if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)){
DominionManage.show(sender, new String[]{"list"});
}
});
DominionController.create(operator, input, points.get(0), points.get(1));
}
}
@ -108,11 +115,15 @@ public class OpenCUI {
@Override
public void handleData(String input) {
XLogger.debug("createPrivilegeCB.run: %s", input);
if (PrivilegeController.createPrivilege(sender, input, dominionName)) {
DominionPrivilegeList.show(sender, new String[]{"privilege_list", dominionName});
} else {
SelectPlayer.show(sender, new String[]{"select_player_create_privilege", dominionName});
}
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
PrivilegeController.createPrivilege(operator, input, dominionName);
operator.getResponse().thenAccept(result -> {
if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)){
DominionPrivilegeList.show(sender, new String[]{"privilege_list", dominionName});
} else {
SelectPlayer.show(sender, new String[]{"select_player_create_privilege", dominionName});
}
});
}
}

View File

@ -1,5 +1,6 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.tuis.DominionPrivilegeList;
import cn.lunadeer.dominion.tuis.PrivilegeInfo;
import cn.lunadeer.minecraftpluginutils.Notification;
@ -21,22 +22,16 @@ public class PlayerPrivilege {
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) {
if (!createPrivilege(player, args[1])) {
Notification.error(sender, "创建玩家特权失败");
return;
}
createPrivilege(operator, args[1]);
} else {
if (!createPrivilege(player, args[1], args[2])) {
Notification.error(sender, "创建玩家特权失败");
return;
}
createPrivilege(operator, args[1], args[2]);
}
Notification.info(sender, "成功创建玩家特权 %s", args[1]);
if (args.length == 4) {
String[] newArgs = new String[2];
newArgs[0] = "privilege_list";
@ -55,34 +50,22 @@ public class PlayerPrivilege {
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) {
if (!setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]))) {
Notification.error(sender, "设置玩家权限失败");
return;
}
setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]));
} else if (args.length == 5) {
if (!setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]), args[4])) {
Notification.error(sender, "设置玩家权限失败");
return;
}
setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]), args[4]);
} else if (args.length == 6) {
if (!setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]), args[4])) {
Notification.error(sender, "设置玩家权限失败");
return;
}
setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]), args[4]);
String[] newArgs = new String[4];
newArgs[0] = "privilege_info";
newArgs[1] = args[1];
newArgs[2] = args[4];
newArgs[3] = args[5];
PrivilegeInfo.show(sender, newArgs);
return;
} else {
Notification.error(sender, "用法: /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]");
return;
}
Notification.info(sender, "设置玩家的 %s 权限为 %s", args[2], args[3]);
}
/**
@ -95,22 +78,16 @@ public class PlayerPrivilege {
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) {
if (!clearPrivilege(player, args[1])) {
Notification.error(sender, "重置玩家权限失败");
return;
}
clearPrivilege(operator, args[1]);
} else {
if (!clearPrivilege(player, args[1], args[2])) {
Notification.error(sender, "重置玩家权限失败");
return;
}
clearPrivilege(operator, args[1], args[2]);
}
Notification.info(sender, "成功清除玩家 %s 的权限", args[1]);
if (args.length == 4) {
String[] newArgs = new String[3];
newArgs[0] = "privilege_list";

View File

@ -0,0 +1,59 @@
package cn.lunadeer.dominion.controllers;
import org.bukkit.Location;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import javax.annotation.Nullable;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
public interface AbstractOperator {
public static class Result {
public static final Integer SUCCESS = 0;
public static final Integer WARNING = 1;
public static final Integer FAILURE = 2;
private Integer success;
private String message;
public Result(Integer success, String message, Object... args) {
this.success = success;
this.message = String.format(message, args);
}
public Result setMessage(String message, Object... args) {
this.message = String.format(message, args);
return this;
}
public Result appendMessage(String message, Object... args) {
this.message += " ";
this.message += String.format(message, args);
return this;
}
public Integer getStatus() {
return success;
}
public String getMessage() {
return message;
}
}
public UUID getUniqueId();
public boolean isOp();
public void setResponse(Result result);
public @Nullable Location getLocation();
public Player getPlayer();
public BlockFace getDirection();
public CompletableFuture<Result> getResponse();
}

View File

@ -1,5 +1,6 @@
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.minecraftpluginutils.Notification;
@ -11,19 +12,17 @@ import java.util.List;
public class Apis {
public static boolean notOwner(Player player, DominionDTO dominion) {
public static boolean notOwner(AbstractOperator player, DominionDTO dominion) {
if (player.isOp()) return false;
if (dominion.getOwner().equals(player.getUniqueId())) return false;
Notification.error(player, "你不是领地 %s 的拥有者,无法执行此操作", dominion.getName());
return true;
return !dominion.getOwner().equals(player.getUniqueId());
}
public static boolean noAuthToChangeFlags(Player player, DominionDTO dominion) {
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());
if (privileges == null || !privileges.getAdmin()) {
Notification.error(player, "你不是领地 %s 的拥有者或管理员,无权修改权限", dominion.getName());
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不是领地 %s 的拥有者或管理员,无权修改权限", dominion.getName()));
return true;
}
}
@ -37,40 +36,19 @@ public class Apis {
* @param player 玩家
* @return 当前所在的领地
*/
public static DominionDTO getPlayerCurrentDominion(Player player, boolean show_warning) {
public static DominionDTO getPlayerCurrentDominion(AbstractOperator player) {
Location location = player.getLocation();
List<DominionDTO> dominions = DominionDTO.selectByLocation(location.getWorld().getName(),
(int) location.getX(), (int) location.getY(), (int) location.getZ());
if (dominions.size() != 1) {
if (show_warning) {
Notification.error(player, "你不在一个领地内或在子领地内,无法确定你要操作的领地,请手动指定要操作的领地名称");
}
if (location == null) {
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "无法获取你的位置信息"));
return null;
}
return dominions.get(0);
}
public static DominionDTO getPlayerCurrentDominion(Player player) {
return getPlayerCurrentDominion(player, true);
}
public static BlockFace getFace(Player player) {
float yaw = player.getYaw();
float pitch = player.getPitch();
if (pitch > -45 && pitch < 45) {
if (yaw > -45 && yaw < 45) {
return BlockFace.SOUTH;
} else if (yaw > 135 || yaw < -135) {
return BlockFace.NORTH;
} else if (yaw > 45 && yaw < 135) {
return BlockFace.WEST;
} else {
return BlockFace.EAST;
}
} else if (pitch > 45) {
return BlockFace.DOWN;
DominionDTO dominion = Cache.instance.getDominion(location);
if (dominion == null || dominion.getParentDomId() != -1) {
return dominion;
} else {
return BlockFace.UP;
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你当前在子领地内,请指定要操作的领地名称"));
return null;
}
}
}

View File

@ -0,0 +1,85 @@
package cn.lunadeer.dominion.controllers;
import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.Location;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
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 CompletableFuture<Result> response = new CompletableFuture<>();
public BukkitPlayerOperator(org.bukkit.entity.Player player) {
this.player = player;
}
@Override
public UUID getUniqueId() {
return player.getUniqueId();
}
@Override
public boolean isOp() {
return player.isOp();
}
@Override
public void setResponse(Result result) {
response.complete(result);
}
@Override
public Location getLocation() {
return player.getLocation();
}
@Override
public Player getPlayer() {
return player;
}
@Override
public BlockFace getDirection() {
float yaw = player.getYaw();
float pitch = player.getPitch();
if (pitch > -45 && pitch < 45) {
if (yaw > -45 && yaw < 45) {
return BlockFace.SOUTH;
} else if (yaw > 135 || yaw < -135) {
return BlockFace.NORTH;
} else if (yaw > 45 && yaw < 135) {
return BlockFace.WEST;
} else {
return BlockFace.EAST;
}
} else if (pitch > 45) {
return BlockFace.DOWN;
} else {
return BlockFace.UP;
}
}
@Override
public CompletableFuture<Result> getResponse() {
return response;
}
public static BukkitPlayerOperator create(org.bukkit.entity.Player player) {
BukkitPlayerOperator operator = new BukkitPlayerOperator(player);
operator.getResponse().thenAccept(result -> {
if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.SUCCESS)) {
Notification.info(player, result.getMessage());
} else if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.WARNING)) {
Notification.warn(player, result.getMessage());
} else {
Notification.error(player, result.getMessage());
}
});
return operator;
}
}

View File

@ -2,13 +2,15 @@ package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.DominionNode;
import cn.lunadeer.dominion.commands.OpenCUI;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.utils.Time;
import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.ParticleRender;
import cn.lunadeer.minecraftpluginutils.XLogger;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
@ -16,6 +18,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import static cn.lunadeer.dominion.DominionNode.isInDominion;
import static cn.lunadeer.dominion.controllers.Apis.*;
public class DominionController {
@ -31,69 +34,68 @@ public class DominionController {
/**
* 创建领地
*
* @param owner 拥有者
* @param name 领地名称
* @param loc1 位置1
* @param loc2 位置2
* @param operator 拥有者
* @param name 领地名称
* @param loc1 位置1
* @param loc2 位置2
* @return 创建的领地
*/
public static DominionDTO create(Player owner, String name, Location loc1, Location loc2) {
DominionDTO parent = getPlayerCurrentDominion(owner, false);
public static void create(AbstractOperator operator, String name, Location loc1, Location loc2) {
DominionDTO parent = getPlayerCurrentDominion(operator);
if (parent == null) {
return create(owner, name, loc1, loc2, "");
create(operator, name, loc1, loc2, "");
} else {
return create(owner, name, loc1, loc2, parent.getName());
create(operator, name, loc1, loc2, parent.getName());
}
}
/**
* 创建子领地
*
* @param owner 拥有者
* @param operator 拥有者
* @param name 领地名称
* @param loc1 位置1
* @param loc2 位置2
* @param parent_dominion_name 父领地名称
* @return 创建的领地
*/
public static DominionDTO create(Player owner, String name,
Location loc1, Location loc2,
String parent_dominion_name) {
public static void create(AbstractOperator operator, String name,
Location loc1, Location loc2,
String parent_dominion_name) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建领地失败");
if (name.isEmpty()) {
Notification.error(owner, "领地名称不能为空");
return null;
operator.setResponse(FAIL.appendMessage("领地名称不能为空"));
return;
}
if (name.contains(" ")) {
Notification.error(owner, "领地名称不能包含空格");
return null;
operator.setResponse(FAIL.appendMessage("领地名称不能包含空格"));
return;
}
if (DominionDTO.select(name) != null) {
Notification.error(owner, "已经存在名称为 %s 的领地", name);
return null;
operator.setResponse(FAIL.appendMessage("已经存在名称为 %s 的领地", name));
return;
}
if (!loc1.getWorld().equals(loc2.getWorld())) {
Notification.error(owner, "禁止跨世界操作");
return null;
}
if (!owner.getWorld().equals(loc1.getWorld())) {
Notification.error(owner, "禁止跨世界操作");
return null;
operator.setResponse(FAIL.appendMessage("选点世界不一致"));
return;
}
// 检查世界是否可以创建
if (worldNotValid(owner)) {
return null;
if (worldNotValid(operator, loc1.getWorld().getName())) {
operator.setResponse(FAIL.appendMessage("禁止在世界 %s 创建领地", loc1.getWorld().getName()));
return;
}
// 检查领地数量是否达到上限
if (amountNotValid(owner)) {
return null;
if (amountNotValid(operator)) {
operator.setResponse(FAIL.appendMessage("你的领地数量已达上限(%d个)", Dominion.config.getLimitAmount()));
return;
}
// 检查领地大小是否合法
if (sizeNotValid(owner,
if (sizeNotValid(operator,
loc1.getBlockX(), loc1.getBlockY(), loc1.getBlockZ(),
loc2.getBlockX(), loc2.getBlockY(), loc2.getBlockZ())) {
return null;
return;
}
DominionDTO dominion = new DominionDTO(owner.getUniqueId(), name, owner.getWorld().getName(),
DominionDTO dominion = new DominionDTO(operator.getUniqueId(), name, loc1.getWorld().getName(),
(int) Math.min(loc1.getX(), loc2.getX()), (int) Math.min(loc1.getY(), loc2.getY()),
(int) Math.min(loc1.getZ(), loc2.getZ()), (int) Math.max(loc1.getX(), loc2.getX()),
(int) Math.max(loc1.getY(), loc2.getY()), (int) Math.max(loc1.getZ(), loc2.getZ()));
@ -104,39 +106,40 @@ public class DominionController {
parent_dominion = DominionDTO.select(parent_dominion_name);
}
if (parent_dominion == null) {
Notification.error(owner, "父领地 %s 不存在", parent_dominion_name);
operator.setResponse(FAIL.appendMessage("父领地 %s 不存在", parent_dominion_name));
if (parent_dominion_name.isEmpty()) {
XLogger.err("根领地丢失!");
}
return null;
return;
}
// 是否是父领地的拥有者
if (parent_dominion.getId() != -1) {
if (notOwner(owner, parent_dominion)) {
return null;
if (notOwner(operator, parent_dominion)) {
operator.setResponse(FAIL.appendMessage("你不是父领地 %s 的拥有者,无法创建子领地", parent_dominion_name));
return;
}
}
// 如果parent_dominion不为-1 检查是否在同一世界
if (parent_dominion.getId() != -1 && !parent_dominion.getWorld().equals(dominion.getWorld())) {
Notification.error(owner, "禁止跨世界操作");
return null;
operator.setResponse(FAIL.appendMessage("父领地与子领地不在同一世界。"));
return;
}
// 检查深度是否达到上限
if (depthNotValid(owner, parent_dominion)) {
return null;
if (depthNotValid(operator, parent_dominion)) {
return;
}
// 检查是否超出父领地范围
if (!isContained(dominion, parent_dominion)) {
Notification.error(owner, "超出父领地 %s 范围", parent_dominion.getName());
return null;
operator.setResponse(FAIL.appendMessage("超出父领地 %s 范围", parent_dominion.getName()));
return;
}
// 获取此领地的所有同级领地
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), parent_dominion.getId());
// 检查是否与其他子领地冲突
for (DominionDTO sub_dominion : sub_dominions) {
if (isIntersect(sub_dominion, dominion)) {
Notification.error(owner, "与领地 %s 冲突", sub_dominion.getName());
return null;
operator.setResponse(FAIL.appendMessage("与领地 %s 冲突", sub_dominion.getName()));
return;
}
}
// 检查经济
@ -148,20 +151,23 @@ public class DominionController {
count = (loc2.getBlockX() - loc1.getBlockX() + 1) * (loc2.getBlockY() - loc1.getBlockY() + 1) * (loc2.getBlockZ() - loc1.getBlockZ() + 1);
}
float price = count * Dominion.config.getEconomyPrice();
if (Dominion.vault.getEconomy().getBalance(owner) < price) {
Notification.error(owner, "你的余额不足,创建此领地需要 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural());
return null;
if (Dominion.vault.getEconomy().getBalance(operator.getPlayer()) < price) {
operator.setResponse(FAIL.appendMessage("你的余额不足,创建此领地需要 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural()));
return;
}
Notification.info(owner, "已扣除 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural());
Dominion.vault.getEconomy().withdrawPlayer(owner, price);
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "已扣除 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural()));
Dominion.vault.getEconomy().withdrawPlayer(operator.getPlayer(), price);
}
dominion = DominionDTO.insert(dominion);
if (dominion == null) {
Notification.error(owner, "创建失败,详细错误请联系管理员查询日志(当前时间:%s", Time.nowStr());
return null;
operator.setResponse(FAIL.appendMessage("创建领地失败,数据库错误,请联系管理员"));
return;
}
ParticleRender.showBoxFace(Dominion.instance, owner, loc1, loc2);
return dominion.setParentDomId(parent_dominion.getId());
if (operator instanceof BukkitPlayerOperator) {
ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(), loc1, loc2);
}
dominion.setParentDomId(parent_dominion.getId());
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功创建领地 %s", name));
}
/**
@ -173,12 +179,13 @@ public class DominionController {
* @param size 扩展的大小
* @return 扩展后的领地
*/
public static DominionDTO expand(Player operator, Integer size) {
public static void expand(AbstractOperator operator, Integer size) {
DominionDTO dominion = getPlayerCurrentDominion(operator);
if (dominion == null) {
return null;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "无法获取你所处的领地,请指定名称"));
return;
}
return expand(operator, size, dominion.getName());
expand(operator, size, dominion.getName());
}
/**
@ -189,16 +196,19 @@ public class DominionController {
* @param dominion_name 领地名称
* @return 扩展后的领地
*/
public static DominionDTO expand(Player operator, Integer size, String dominion_name) {
public static void expand(AbstractOperator operator, Integer size, String dominion_name) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "扩展领地失败");
Location location = operator.getLocation();
BlockFace face = getFace(operator);
BlockFace face = operator.getDirection();
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
if (dominion == null) {
return null;
return;
}
if (!location.getWorld().getName().equals(dominion.getWorld())) {
Notification.error(operator, "禁止跨世界操作");
return null;
if (location != null) {
if (!location.getWorld().getName().equals(dominion.getWorld())) {
operator.setResponse(FAIL.appendMessage("禁止跨世界操作"));
return;
}
}
Integer x1 = dominion.getX1();
Integer y1 = dominion.getY1();
@ -226,21 +236,21 @@ public class DominionController {
y1 -= size;
break;
default:
Notification.error(operator, "无效的方向");
return null;
operator.setResponse(FAIL.appendMessage("无效的方向"));
return;
}
if (sizeNotValid(operator, x1, y1, z1, x2, y2, z2)) {
return null;
return;
}
// 校验是否超出父领地范围
DominionDTO parent_dominion = DominionDTO.select(dominion.getParentDomId());
if (parent_dominion == null) {
Notification.error(operator, "父领地丢失");
return null;
operator.setResponse(FAIL.appendMessage("父领地丢失"));
return;
}
if (!isContained(x1, y1, z1, x2, y2, z2, parent_dominion)) {
Notification.error(operator, "超出父领地 %s 范围", parent_dominion.getName());
return null;
operator.setResponse(FAIL.appendMessage("超出父领地 %s 范围", parent_dominion.getName()));
return;
}
// 获取同世界下的所有同级领地
List<DominionDTO> exist_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getParentDomId());
@ -248,10 +258,11 @@ public class DominionController {
if (isIntersect(exist_dominion, x1, y1, z1, x2, y2, z2)) {
// 如果是自己跳过
if (exist_dominion.getId().equals(dominion.getId())) continue;
Notification.error(operator, " %s 冲突", exist_dominion.getName());
return null;
operator.setResponse(FAIL.appendMessage("与领地 %s 冲突", exist_dominion.getName()));
return;
}
}
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功扩展领地 %s %d格", dominion_name, size);
// 检查经济
if (Dominion.config.getEconomyEnable()) {
int count;
@ -261,17 +272,21 @@ public class DominionController {
count = (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1) - dominion.getVolume();
}
float price = count * Dominion.config.getEconomyPrice();
if (Dominion.vault.getEconomy().getBalance(operator) < price) {
Notification.error(operator, "你的余额不足,扩展此领地需要 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural());
return null;
if (Dominion.vault.getEconomy().getBalance(operator.getPlayer()) < price) {
operator.setResponse(FAIL.appendMessage("你的余额不足,扩展此领地需要 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural()));
return;
}
Notification.info(operator, "已扣除 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural());
Dominion.vault.getEconomy().withdrawPlayer(operator, price);
SUCCESS.appendMessage("已扣除 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural());
Dominion.vault.getEconomy().withdrawPlayer(operator.getPlayer(), price);
}
ParticleRender.showBoxFace(Dominion.instance, operator,
new Location(location.getWorld(), x1, y1, z1),
new Location(location.getWorld(), x2, y2, z2));
return dominion.setXYZ(x1, y1, z1, x2, y2, z2);
if (operator instanceof BukkitPlayerOperator) {
World world = Dominion.instance.getServer().getWorld(dominion.getWorld());
ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(),
new Location(world, x1, y1, z1),
new Location(world, x2, y2, z2));
}
dominion.setXYZ(x1, y1, z1, x2, y2, z2);
operator.setResponse(SUCCESS);
}
/**
@ -283,12 +298,13 @@ public class DominionController {
* @param size 缩小的大小
* @return 缩小后的领地
*/
public static DominionDTO contract(Player operator, Integer size) {
public static void contract(AbstractOperator operator, Integer size) {
DominionDTO dominion = getPlayerCurrentDominion(operator);
if (dominion == null) {
return null;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "无法获取你所处的领地,请指定名称"));
return;
}
return contract(operator, size, dominion.getName());
contract(operator, size, dominion.getName());
}
/**
@ -299,16 +315,19 @@ public class DominionController {
* @param dominion_name 领地名称
* @return 缩小后的领地
*/
public static DominionDTO contract(Player operator, Integer size, String dominion_name) {
public static void contract(AbstractOperator operator, Integer size, String dominion_name) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "缩小领地失败");
Location location = operator.getLocation();
BlockFace face = getFace(operator);
BlockFace face = operator.getDirection();
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
if (dominion == null) {
return null;
return;
}
if (!location.getWorld().getName().equals(dominion.getWorld())) {
Notification.error(operator, "禁止跨世界操作");
return null;
if (location != null) {
if (!location.getWorld().getName().equals(dominion.getWorld())) {
operator.setResponse(FAIL.appendMessage("禁止跨世界操作"));
return;
}
}
Integer x1 = dominion.getX1();
Integer y1 = dominion.getY1();
@ -336,25 +355,26 @@ public class DominionController {
y1 += size;
break;
default:
Notification.error(operator, "无效的方向");
return null;
operator.setResponse(FAIL.appendMessage("无效的方向"));
return;
}
// 校验第二组坐标是否小于第一组坐标
if (x1 >= x2 || y1 >= y2 || z1 >= z2) {
Notification.error(operator, "缩小后的领地无效");
return null;
operator.setResponse(FAIL.appendMessage("缩小后的领地大小无效"));
return;
}
if (sizeNotValid(operator, x1, y1, z1, x2, y2, z2)) {
return null;
return;
}
// 获取所有的子领地
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId());
for (DominionDTO sub_dominion : sub_dominions) {
if (!isContained(sub_dominion, x1, y1, z1, x2, y2, z2)) {
Notification.error(operator, "缩小后的领地 %s 无法包含子领地 %s", dominion_name, sub_dominion.getName());
return null;
operator.setResponse(FAIL.appendMessage("缩小后的领地无法包含子领地 %s", sub_dominion.getName()));
return;
}
}
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功缩小领地 %s %d格", dominion_name, size);
// 退还经济
if (Dominion.config.getEconomyEnable()) {
int count;
@ -364,13 +384,17 @@ public class DominionController {
count = dominion.getVolume() - (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1);
}
float refund = count * Dominion.config.getEconomyPrice() * Dominion.config.getEconomyRefund();
Dominion.vault.getEconomy().depositPlayer(operator, refund);
Notification.info(operator, "已经退还 %.2f %s", refund, Dominion.vault.getEconomy().currencyNamePlural());
Dominion.vault.getEconomy().depositPlayer(operator.getPlayer(), refund);
SUCCESS.appendMessage("退还 %.2f %s", refund, Dominion.vault.getEconomy().currencyNamePlural());
}
ParticleRender.showBoxFace(Dominion.instance, operator,
new Location(location.getWorld(), x1, y1, z1),
new Location(location.getWorld(), x2, y2, z2));
return dominion.setXYZ(x1, y1, z1, x2, y2, z2);
if (operator instanceof BukkitPlayerOperator) {
World world = Dominion.instance.getServer().getWorld(dominion.getWorld());
ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(),
new Location(world, x1, y1, z1),
new Location(world, x2, y2, z2));
}
dominion.setXYZ(x1, y1, z1, x2, y2, z2);
operator.setResponse(SUCCESS);
}
/**
@ -380,26 +404,30 @@ public class DominionController {
* @param dominion_name 领地名称
* @param force 是否强制删除
*/
public static void delete(Player operator, String dominion_name, boolean force) {
public static void delete(AbstractOperator operator, String dominion_name, boolean force) {
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
if (dominion == null) {
return;
}
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
if (!force) {
Notification.warn(operator, "删除领地 %s 会同时删除其所有子领地,是否继续?", dominion_name);
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, "删除领地 %s 会同时删除其所有子领地,是否继续?", dominion_name);
String sub_names = "";
for (DominionDTO sub_dominion : sub_dominions) {
sub_names = sub_dominion.getName() + ", ";
}
if (sub_dominions.size() > 0) {
sub_names = sub_names.substring(0, sub_names.length() - 2);
Notification.warn(operator, "当前子领地:" + sub_names);
WARNING.appendMessage("(子领地:%s)", sub_names);
}
Notification.warn(operator, "输入 /dominion delete %s force 确认删除", dominion_name);
if (operator instanceof BukkitPlayerOperator) {
Notification.warn(operator.getPlayer(), "输入 /dominion delete %s force 确认删除", dominion_name);
}
operator.setResponse(WARNING);
return;
}
DominionDTO.delete(dominion);
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "领地 %s 及其所有子领地已删除", dominion_name);
// 退还经济
if (Dominion.config.getEconomyEnable()) {
int count = 0;
@ -413,10 +441,10 @@ public class DominionController {
}
}
float refund = count * Dominion.config.getEconomyPrice() * Dominion.config.getEconomyRefund();
Dominion.vault.getEconomy().depositPlayer(operator, refund);
Notification.info(operator, "已经退还 %.2f %s", refund, Dominion.vault.getEconomy().currencyNamePlural());
Dominion.vault.getEconomy().depositPlayer(operator.getPlayer(), refund);
SUCCESS.appendMessage("退还 %.2f %s", refund, Dominion.vault.getEconomy().currencyNamePlural());
}
Notification.info(operator, "领地 %s 及其所有子领地已删除", dominion_name);
operator.setResponse(SUCCESS);
}
/**
@ -425,7 +453,7 @@ public class DominionController {
* @param operator 操作者
* @param message 消息
*/
public static void setJoinMessage(Player operator, String message) {
public static void setJoinMessage(AbstractOperator operator, String message) {
DominionDTO dominion = getPlayerCurrentDominion(operator);
if (dominion == null) {
return;
@ -440,13 +468,13 @@ public class DominionController {
* @param dominion_name 领地名称
* @param message 消息
*/
public static void setJoinMessage(Player operator, String message, String dominion_name) {
public static void setJoinMessage(AbstractOperator operator, String message, String dominion_name) {
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
if (dominion == null) {
return;
}
dominion.setJoinMessage(message);
Notification.info(operator, "成功设置领地 %s 的进入消息", dominion_name);
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功设置领地 %s 的进入消息", dominion_name));
}
/**
@ -455,7 +483,7 @@ public class DominionController {
* @param operator 操作者
* @param message 消息
*/
public static void setLeaveMessage(Player operator, String message) {
public static void setLeaveMessage(AbstractOperator operator, String message) {
DominionDTO dominion = getPlayerCurrentDominion(operator);
if (dominion == null) {
return;
@ -470,13 +498,13 @@ public class DominionController {
* @param dominion_name 领地名称
* @param message 消息
*/
public static void setLeaveMessage(Player operator, String message, String dominion_name) {
public static void setLeaveMessage(AbstractOperator operator, String message, String dominion_name) {
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
if (dominion == null) {
return;
}
dominion.setLeaveMessage(message);
Notification.info(operator, "成功设置领地 %s 的离开消息", dominion_name);
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功设置领地 %s 的离开消息", dominion_name));
}
/**
@ -484,12 +512,12 @@ public class DominionController {
*
* @param operator 操作者
*/
public static void setTpLocation(Player operator) {
public static void setTpLocation(AbstractOperator operator, int x, int y, int z) {
DominionDTO dominion = getPlayerCurrentDominion(operator);
if (dominion == null) {
return;
}
setTpLocation(operator, dominion.getName());
setTpLocation(operator, x, y, z, dominion.getName());
}
/**
@ -498,26 +526,27 @@ public class DominionController {
* @param operator 操作者
* @param dominion_name 领地名称
*/
public static void setTpLocation(Player operator, String dominion_name) {
public static void setTpLocation(AbstractOperator operator, int x, int y, int z, String dominion_name) {
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
if (dominion == null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在", dominion_name));
return;
}
World world = Dominion.instance.getServer().getWorld(dominion.getWorld());
if (world == null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "世界 %s 不存在", dominion.getWorld()));
return;
}
Location loc = new Location(world, x, y, z);
// 检查是否在领地内
if (operator.getWorld().getName().equals(dominion.getWorld()) &&
operator.getLocation().getBlockX() >= dominion.getX1() &&
operator.getLocation().getBlockX() <= dominion.getX2() &&
operator.getLocation().getBlockY() >= dominion.getY1() &&
operator.getLocation().getBlockY() <= dominion.getY2() &&
operator.getLocation().getBlockZ() >= dominion.getZ1() &&
operator.getLocation().getBlockZ() <= dominion.getZ2()) {
Location loc = operator.getLocation();
if (isInDominion(dominion, loc)) {
loc.setY(loc.getY() + 1.5);
dominion.setTpLocation(loc);
Notification.info(operator, "成功设置领地 %s 的传送点,坐标:%d %d %d",
dominion_name, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS,
"成功设置领地 %s 的传送点 %d %d %d", dominion_name
, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
} else {
Notification.error(operator, "你不在领地 %s 内,无法设置传送点", dominion_name);
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "传送点不在领地 %s 内", dominion_name));
}
}
@ -528,17 +557,18 @@ public class DominionController {
* @param old_name 旧名称
* @param new_name 新名称
*/
public static void rename(Player operator, String old_name, String new_name) {
public static void rename(AbstractOperator operator, String old_name, String new_name) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "重命名领地失败");
if (new_name.isEmpty()) {
Notification.error(operator, "新名称不能为空");
operator.setResponse(FAIL.appendMessage("新名称不能为空"));
return;
}
if (new_name.contains(" ")) {
Notification.error(operator, "领地名称不能包含空格");
operator.setResponse(FAIL.appendMessage("领地名称不能包含空格"));
return;
}
if (Objects.equals(old_name, new_name)) {
Notification.error(operator, "新名称与旧名称相同");
operator.setResponse(FAIL.appendMessage("新名称与旧名称相同"));
return;
}
DominionDTO dominion = getExistDomAndIsOwner(operator, old_name);
@ -546,11 +576,11 @@ public class DominionController {
return;
}
if (DominionDTO.select(new_name) != null) {
Notification.error(operator, "已经存在名称为 %s 的领地", new_name);
operator.setResponse(FAIL.appendMessage("已经存在名称为 %s 的领地", new_name));
return;
}
dominion.setName(new_name);
Notification.info(operator, "成功将领地 %s 重命名为 %s", old_name, new_name);
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功将领地 %s 重命名为 %s", old_name, new_name));
}
/**
@ -561,9 +591,15 @@ public class DominionController {
* @param player_name 玩家名称
* @param force 是否强制转让
*/
public static void give(Player operator, String dom_name, String player_name, boolean force) {
if (Objects.equals(player_name, operator.getName())) {
Notification.error(operator, "你不能将领地转让给自己");
public static void give(AbstractOperator operator, String dom_name, String player_name, boolean force) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "转让领地失败");
PlayerDTO operatorDTO = PlayerDTO.select(operator.getUniqueId());
if (operatorDTO == null) {
operator.setResponse(FAIL.appendMessage("操作者信息丢失,请联系管理员"));
return;
}
if (Objects.equals(player_name, operatorDTO.getLastKnownName())) {
operator.setResponse(FAIL.appendMessage("不能将领地转让给自己"));
return;
}
DominionDTO dominion = getExistDomAndIsOwner(operator, dom_name);
@ -572,32 +608,35 @@ public class DominionController {
}
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
if (player == null) {
Notification.error(operator, "玩家 %s 不存在", player_name);
operator.setResponse(FAIL.appendMessage("玩家 %s 不存在", player_name));
return;
}
if (dominion.getParentDomId() != -1) {
Notification.error(operator, "子领地无法转让,你可以通过将玩家设置为管理员来让其管理子领地");
operator.setResponse(FAIL.appendMessage("子领地无法转让,你可以通过将 %s 设置为管理员来让其管理领地 %s ", player_name, dom_name));
return;
}
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
if (!force) {
Notification.warn(operator, "转让领地 %s 给 %s 会同时转让其所有子领地,是否继续?", dom_name, player_name);
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, "转让领地 %s 给 %s 会同时转让其所有子领地,是否继续?", dom_name, player_name);
String sub_names = "";
for (DominionDTO sub_dominion : sub_dominions) {
sub_names = sub_dominion.getName() + ", ";
}
if (sub_dominions.size() > 0) {
sub_names = sub_names.substring(0, sub_names.length() - 2);
Notification.warn(operator, "当前子领地:%s", sub_names);
WARNING.appendMessage("(子领地:%s)", sub_names);
}
Notification.warn(operator, "输入 /dominion give %s %s force 确认转让", dom_name, player_name);
if (operator instanceof BukkitPlayerOperator) {
Notification.warn(operator.getPlayer(), "输入 /dominion give %s %s force 确认转让", dom_name, player_name);
}
operator.setResponse(WARNING);
return;
}
dominion.setOwner(player.getUuid());
for (DominionDTO sub_dominion : sub_dominions) {
sub_dominion.setOwner(player.getUuid());
}
Notification.info(operator, "成功将领地 %s 及其所有子领地转让给 %s", dom_name, player_name);
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功将领地 %s 及其所有子领地转让给 %s", dom_name, player_name));
}
/**
@ -652,7 +691,8 @@ public class DominionController {
return sub_dominions;
}
private static boolean sizeNotValid(Player operator, int x1, int y1, int z1, int x2, int y2, int z2) {
private static boolean sizeNotValid(AbstractOperator operator, int x1, int y1, int z1, int x2, int y2, int z2) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "尺寸不合法");
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
return false;
}
@ -676,33 +716,34 @@ public class DominionController {
int y_length = y2 - y1;
int z_length = z2 - z1;
if (x_length < 4 || y_length < 4 || z_length < 4) {
Notification.error(operator, "领地的任意一边长度不得小于4");
operator.setResponse(FAIL.appendMessage("领地的任意一边长度不得小于4"));
return true;
}
if (x_length > Dominion.config.getLimitSizeX() && Dominion.config.getLimitSizeX() > 0) {
Notification.error(operator, "领地X方向长度不能超过 %s", Dominion.config.getLimitSizeX());
operator.setResponse(FAIL.appendMessage("领地X方向长度不能超过 %s", Dominion.config.getLimitSizeX()));
return true;
}
if (y_length > Dominion.config.getLimitSizeY() && Dominion.config.getLimitSizeY() > 0) {
Notification.error(operator, "领地Y方向高度不能超过 %s", Dominion.config.getLimitSizeY());
operator.setResponse(FAIL.appendMessage("领地Y方向高度不能超过 %s", Dominion.config.getLimitSizeY()));
return true;
}
if (z_length > Dominion.config.getLimitSizeZ() && Dominion.config.getLimitSizeZ() > 0) {
Notification.error(operator, "领地Z方向长度不能超过 %s", Dominion.config.getLimitSizeZ());
operator.setResponse(FAIL.appendMessage("领地Z方向长度不能超过 %s", Dominion.config.getLimitSizeZ()));
return true;
}
if (y2 > Dominion.config.getLimitMaxY()) {
Notification.error(operator, "领地Y坐标不能超过 %s", Dominion.config.getLimitMaxY());
operator.setResponse(FAIL.appendMessage("领地Y坐标不能超过 %s", Dominion.config.getLimitMaxY()));
return true;
}
if (y1 < Dominion.config.getLimitMinY()) {
Notification.error(operator, "领地Y坐标不能低于 %s", Dominion.config.getLimitMinY());
operator.setResponse(FAIL.appendMessage("领地Y坐标不能低于 %s", Dominion.config.getLimitMinY()));
return true;
}
return false;
}
private static boolean depthNotValid(Player operator, DominionDTO parent_dom) {
private static boolean depthNotValid(AbstractOperator operator, DominionDTO parent_dom) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "子领地深度不合法");
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
return false;
}
@ -710,7 +751,7 @@ public class DominionController {
return false;
}
if (parent_dom.getId() != -1 && Dominion.config.getLimitDepth() == 0) {
Notification.error(operator, "不允许创建子领地");
operator.setResponse(FAIL.appendMessage("不允许创建子领地"));
return true;
}
if (parent_dom.getId() == -1) {
@ -722,42 +763,35 @@ public class DominionController {
level++;
}
if (level >= Dominion.config.getLimitDepth()) {
Notification.error(operator, "子领地嵌套深度不能超过 %s", Dominion.config.getLimitDepth());
operator.setResponse(FAIL.appendMessage("子领地嵌套深度不能超过 %s", Dominion.config.getLimitDepth()));
return true;
}
return false;
}
private static boolean amountNotValid(Player operator) {
private static boolean amountNotValid(AbstractOperator operator) {
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
return false;
}
if (Cache.instance.getPlayerDominionCount(operator) >= Dominion.config.getLimitAmount() && Dominion.config.getLimitAmount() != -1) {
Notification.error(operator, "你的领地数量已达上限,当前上限为 %s", Dominion.config.getLimitAmount());
return true;
}
return false;
return Cache.instance.getPlayerDominionCount(operator.getUniqueId()) >= Dominion.config.getLimitAmount() && Dominion.config.getLimitAmount() != -1;
}
private static boolean worldNotValid(Player operator) {
private static boolean worldNotValid(AbstractOperator operator, String world) {
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
return false;
}
if (Dominion.config.getWorldBlackList().contains(operator.getWorld().getName())) {
Notification.error(operator, "禁止在世界 %s 创建领地", operator.getWorld().getName());
return true;
}
return false;
return Dominion.config.getWorldBlackList().contains(world);
}
private static DominionDTO getExistDomAndIsOwner(Player operator, String dominion_name) {
private static DominionDTO getExistDomAndIsOwner(AbstractOperator operator, String dominion_name) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "");
DominionDTO dominion = DominionDTO.select(dominion_name);
if (dominion == null) {
Notification.error(operator, "领地 %s 不存在", dominion_name);
operator.setResponse(FAIL.setMessage("领地 %s 不存在", dominion_name));
return null;
}
if (notOwner(operator, dominion)) {
Notification.error(operator, "你不是领地 %s 的拥有者,无法执行此操作", dominion_name);
operator.setResponse(FAIL.setMessage("你不是领地 %s 的拥有者", dominion_name));
return null;
}
return dominion;

View File

@ -17,10 +17,11 @@ public class FlagsController {
* @param value 权限值
* @return 设置后的领地信息
*/
public static DominionDTO setFlag(Player operator, String flag, boolean value) {
public static void setFlag(AbstractOperator operator, String flag, boolean value) {
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
if (dominion == null) return null;
return setFlag(operator, flag, value, dominion.getName());
if (dominion == null) return;
setFlag(operator, flag, value, dominion.getName());
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置领地权限 %s 为 %s", flag, value));
}
/**
@ -32,18 +33,19 @@ public class FlagsController {
* @param dominionName 领地名称
* @return 设置后的领地信息
*/
public static DominionDTO setFlag(Player operator, String flag, boolean value, String dominionName) {
public static void setFlag(AbstractOperator operator, String flag, boolean value, String dominionName) {
DominionDTO dominion = DominionDTO.select(dominionName);
if (dominion == null) {
Notification.error(operator, "领地 %s 不存在", dominionName);
return null;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在", dominionName));
return;
}
if (noAuthToChangeFlags(operator, dominion)) return null;
if (noAuthToChangeFlags(operator, dominion)) return;
Flag f = Flag.getFlag(flag);
if (f == null) {
Notification.error(operator, "未知的领地权限 %s", flag);
return null;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "未知的领地权限 %s", flag));
return;
}
return dominion.setFlagValue(f, value);
dominion.setFlagValue(f, value);
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置领地权限 %s 为 %s", flag, value));
}
}

View File

@ -1,5 +1,6 @@
package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerDTO;
@ -16,47 +17,57 @@ import static cn.lunadeer.dominion.controllers.Apis.notOwner;
public class PrivilegeController {
/**
* 清空玩家特权
* 清空玩家成员权限
*
* @param operator 操作者
* @param player_name 玩家
* @return 是否清空成功
*/
public static boolean clearPrivilege(Player operator, String player_name) {
public static void clearPrivilege(AbstractOperator operator, String player_name) {
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
if (dominion == null) {
Notification.error(operator, "你不在任何领地内,请指定领地名称 /dominion clear_privilege <玩家名称> <领地名称>");
return false;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion clear_privilege <玩家名称> <领地名称>"));
return;
}
return clearPrivilege(operator, player_name, dominion.getName());
clearPrivilege(operator, player_name, dominion.getName());
}
/**
* 清空玩家特权
* 清空玩家成员权限
*
* @param operator 操作者
* @param player_name 玩家
* @param dominionName 领地名称
* @return 是否清空成功
*/
public static boolean clearPrivilege(Player operator, String player_name, String 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);
DominionDTO dominion = DominionDTO.select(dominionName);
if (dominion == null) {
Notification.error(operator, "领地 %s 不存在", dominionName);
return false;
operator.setResponse(FAIL.appendMessage("领地 %s 不存在", dominionName));
return;
}
if (noAuthToChangeFlags(operator, dominion)) return false;
if (noAuthToChangeFlags(operator, dominion)) return;
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
if (player == null) {
Notification.error(operator, "玩家 %s 不存在或没有登录过", player_name);
return false;
operator.setResponse(FAIL.appendMessage("玩家 %s 不存在或没有登录过", player_name));
return;
}
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
if (privilege == null) {
operator.setResponse(FAIL.appendMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
return;
}
if (privilege.getAdmin() && notOwner(operator, dominion)) {
operator.setResponse(FAIL.appendMessage("你不是领地 %s 的拥有者,无法移除一个领地管理员", dominionName));
return;
}
PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId());
return true;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "清空玩家 %s 在领地 %s 的权限成功", player_name, dominionName));
}
/**
* 设置玩家特权
* 设置玩家成员权限
*
* @param operator 操作者
* @param player_name 玩家
@ -64,17 +75,17 @@ public class PrivilegeController {
* @param value 权限值
* @return 是否设置成功
*/
public static boolean setPrivilege(Player operator, String player_name, String flag, boolean value) {
public static void setPrivilege(AbstractOperator operator, String player_name, String flag, boolean value) {
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
if (dominion == null) {
Notification.error(operator, "你不在任何领地内,请指定领地名称 /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]");
return false;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]"));
return;
}
return setPrivilege(operator, player_name, flag, value, dominion.getName());
setPrivilege(operator, player_name, flag, value, dominion.getName());
}
/**
* 设置玩家特权
* 设置玩家成员权限
*
* @param operator 操作者
* @param player_name 玩家
@ -83,75 +94,82 @@ public class PrivilegeController {
* @param dominionName 领地名称
* @return 是否设置成功
*/
public static boolean setPrivilege(Player operator, String player_name, String flag, boolean value, String dominionName) {
public static void setPrivilege(AbstractOperator operator, String player_name, String flag, boolean value, String dominionName) {
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 失败", player_name, dominionName, flag, value);
DominionDTO dominion = DominionDTO.select(dominionName);
if (dominion == null) {
Notification.error(operator, "领地 %s 不存在,无法设置特权", dominionName);
return false;
operator.setResponse(FAIL.appendMessage("领地 %s 不存在", dominionName));
return;
}
if (noAuthToChangeFlags(operator, dominion)) return false;
if (noAuthToChangeFlags(operator, dominion)) return;
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
if (player == null) {
Notification.error(operator, "玩家 %s 不存在或没有登录过", player_name);
return false;
operator.setResponse(FAIL.appendMessage("玩家 %s 不存在或没有登录过", player_name));
return;
}
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
if (privilege == null) {
privilege = createPlayerPrivilege(operator, player.getUuid(), dominion);
if (privilege == null) return false;
if (privilege == null) return;
}
if (flag.equals("admin")) {
if (notOwner(operator, dominion)) {
Notification.error(operator, "你不是领地 %s 的拥有者,无法设置其他玩家为管理员", dominionName);
return false;
operator.setResponse(FAIL.appendMessage("你不是领地 %s 的拥有者,无法设置/取消其他玩家为管理员", dominionName));
return;
}
privilege.setAdmin(value);
} else {
Flag f = Flag.getFlag(flag);
if (f == null) {
Notification.error(operator, "未知的领地权限 %s", flag);
return false;
operator.setResponse(FAIL.appendMessage("未知的领地权限 %s", flag));
return;
}
privilege.setFlagValue(f, value);
}
Notification.info(operator, "设置玩家在领地 %s 的权限 %s 为 %s", dominionName, flag, value);
return true;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 成功", player_name, dominionName, flag, value));
}
public static boolean createPrivilege(Player operator, String player_name) {
public static void createPrivilege(AbstractOperator operator, String player_name) {
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
if (dominion == null) {
Notification.error(operator, "你不在任何领地内,请指定领地名称 /dominion create_privilege <玩家名称> <领地名称>");
return false;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion create_privilege <玩家名称> <领地名称>"));
return;
}
return createPrivilege(operator, player_name, dominion.getName());
createPrivilege(operator, player_name, dominion.getName());
}
public static boolean createPrivilege(Player operator, String player_name, String dominionName) {
public static void createPrivilege(AbstractOperator operator, String player_name, String dominionName) {
DominionDTO dominion = DominionDTO.select(dominionName);
if (dominion == null) {
Notification.error(operator, "领地 %s 不存在,无法创建特权", dominionName);
return false;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在,无法创建成员权限", dominionName));
return;
}
if (noAuthToChangeFlags(operator, dominion)) return false;
if (noAuthToChangeFlags(operator, dominion)) return;
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
if (player == null) {
Notification.error(operator, "玩家 %s 不存在或没有登录过", player_name);
return false;
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "玩家 %s 不存在或没有登录过", player_name));
return;
}
if (createPlayerPrivilege(operator, player.getUuid(), dominion) != null) {
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建玩家 %s 在领地 %s 的成员权限成功", player_name, dominionName));
}
return createPlayerPrivilege(operator, player.getUuid(), dominion) != null;
}
private static PlayerPrivilegeDTO createPlayerPrivilege(Player operator, UUID player, DominionDTO dom) {
private static PlayerPrivilegeDTO createPlayerPrivilege(AbstractOperator operator, UUID player, DominionDTO dom) {
XLogger.debug("operator: " + operator.getUniqueId() + " player: " + player);
if (operator.getUniqueId().equals(player)) {
Notification.error(operator, "你不能给自己设置特权");
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不能给自己设置成员权限"));
return null;
}
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, dom);
privilege = PlayerPrivilegeDTO.insert(privilege);
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));
if (privilege == null) {
Notification.error(operator, "创建玩家特权失败,可能是此玩家已存在特权");
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建玩家成员权限失败,请联系管理员"));
return null;
}
return privilege;

View File

@ -1,5 +1,6 @@
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.minecraftpluginutils.Notification;
@ -38,7 +39,7 @@ public class Apis {
if (args.length >= 2) {
return DominionDTO.select(args[1]);
} else {
return getPlayerCurrentDominion(player);
return Cache.instance.getPlayerCurrentDominion(player);
}
}
@ -54,7 +55,7 @@ public class Apis {
if (args.length >= 3) {
return DominionDTO.select(args[2]);
} else {
return getPlayerCurrentDominion(player);
return Cache.instance.getPlayerCurrentDominion(player);
}
}

View File

@ -48,11 +48,12 @@ public class DominionPrivilegeList {
for (PlayerPrivilegeDTO privilege : privileges) {
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
if (p_player == null) continue;
view.add(Line.create()
Line line = Line.create()
.append(p_player.getLastKnownName())
.append(Button.createGreen("配置权限").setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()).build())
.append(Button.createRed("移除成员").setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b").build())
);
.append(Button.createGreen("配置权限").setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()).build());
if (!player.getName().equals(p_player.getLastKnownName()) && !privilege.getAdmin())
line.append(Button.createRed("移除成员").setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b").build());
view.add(line);
}
view.showOn(player, page);
}

View File

@ -33,7 +33,7 @@ public class ListDominion {
view.add(Line.create().append(Component.text("-= 以下为你拥有管理员权限的领地 =-", ViewStyles.main_color)));
for (String dominion : admin_dominions) {
TextComponent manage = Button.createGreen("管理").setExecuteCommand("/dominion manage " + dominion).build();
view.add(Line.create().append(dominion).append(manage));
view.add(Line.create().append(manage).append(dominion));
}
view.showOn(player, page);
}
@ -47,7 +47,7 @@ public class ListDominion {
for (DominionNode node : dominionTree) {
TextComponent manage = Button.createGreen("管理").setExecuteCommand("/dominion manage " + node.dominion.getName()).build();
TextComponent delete = Button.createRed("删除").setExecuteCommand("/dominion delete " + node.dominion.getName()).build();
Line line = Line.create().append(prefix + node.dominion.getName()).append(manage).append(delete);
Line line = Line.create().append(delete).append(manage).append(prefix + node.dominion.getName());
lines.add(line);
lines.addAll(BuildTreeLines(node.children, depth + 1));
}