add AbstractOperator.java
This commit is contained in:
parent
da10ce05e2
commit
27a8fff7a2
@ -2,6 +2,7 @@ package cn.lunadeer.dominion.commands;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.DominionController;
|
import cn.lunadeer.dominion.controllers.DominionController;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
@ -41,11 +42,15 @@ public class DominionOperate {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String name = args[1];
|
String name = args[1];
|
||||||
if (DominionController.create(player, name, points.get(0), points.get(1)) == null) {
|
BukkitPlayerOperator operator = new BukkitPlayerOperator(player);
|
||||||
Notification.error(sender, "创建领地失败");
|
operator.getResponse().thenAccept(result -> {
|
||||||
return;
|
if (result.getStatus() == BukkitPlayerOperator.Result.SUCCESS) {
|
||||||
}
|
|
||||||
Notification.info(sender, "成功创建: %s", name);
|
Notification.info(sender, "成功创建: %s", name);
|
||||||
|
} else {
|
||||||
|
Notification.error(sender, result.getMessage());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
DominionController.create(operator, name, points.get(0), points.get(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,18 +72,19 @@ public class DominionOperate {
|
|||||||
Notification.error(sender, "请先使用工具选择子领地的对角线两点,或使用 /dominion auto_create_sub <子领地名称> [父领地名称] 创建自动子领地");
|
Notification.error(sender, "请先使用工具选择子领地的对角线两点,或使用 /dominion auto_create_sub <子领地名称> [父领地名称] 创建自动子领地");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length == 2) {
|
BukkitPlayerOperator operator = new BukkitPlayerOperator(player);
|
||||||
if (DominionController.create(player, args[1], points.get(0), points.get(1)) != null) {
|
operator.getResponse().thenAccept(result -> {
|
||||||
|
if (result.getStatus() == BukkitPlayerOperator.Result.SUCCESS) {
|
||||||
Notification.info(sender, "成功创建子领地: %s", args[1]);
|
Notification.info(sender, "成功创建子领地: %s", args[1]);
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (DominionController.create(player, args[1], points.get(0), points.get(1), args[2]) != null) {
|
Notification.error(sender, "创建子领地失败:%s", result.getMessage());
|
||||||
Notification.info(sender, "成功创建子领地: %s", args[1]);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
if (args.length == 2) {
|
||||||
|
DominionController.create(operator, args[1], points.get(0), points.get(1));
|
||||||
|
} else {
|
||||||
|
DominionController.create(operator, args[1], points.get(0), points.get(1), args[2]);
|
||||||
}
|
}
|
||||||
Notification.error(sender, "创建子领地失败");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public interface AbstractOperator {
|
||||||
|
|
||||||
|
public static class Result {
|
||||||
|
public static final boolean SUCCESS = true;
|
||||||
|
public static final boolean FAILURE = false;
|
||||||
|
|
||||||
|
private boolean success;
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
public Result(boolean success, String message, Object... args) {
|
||||||
|
this.success = success;
|
||||||
|
this.message = String.format(message, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getStatus() {
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public UUID getUniqueId();
|
||||||
|
|
||||||
|
public boolean isOp();
|
||||||
|
|
||||||
|
public void setResponse(Result result);
|
||||||
|
|
||||||
|
public CompletableFuture<Result> getResponse();
|
||||||
|
}
|
@ -11,10 +11,10 @@ import java.util.List;
|
|||||||
|
|
||||||
public class Apis {
|
public class Apis {
|
||||||
|
|
||||||
public static boolean notOwner(Player player, DominionDTO dominion) {
|
public static boolean notOwner(AbstractOperator player, DominionDTO dominion) throws Exception {
|
||||||
if (player.isOp()) return false;
|
if (player.isOp()) return false;
|
||||||
if (dominion.getOwner().equals(player.getUniqueId())) return false;
|
if (dominion.getOwner().equals(player.getUniqueId())) return false;
|
||||||
Notification.error(player, "你不是领地 %s 的拥有者,无法执行此操作", dominion.getName());
|
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不是领地 %s 的拥有者,无法执行此操作", dominion.getName()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
|
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 CompletableFuture<Result> getResponse() {
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
@ -31,69 +31,69 @@ public class DominionController {
|
|||||||
/**
|
/**
|
||||||
* 创建领地
|
* 创建领地
|
||||||
*
|
*
|
||||||
* @param owner 拥有者
|
* @param operator 拥有者
|
||||||
* @param name 领地名称
|
* @param name 领地名称
|
||||||
* @param loc1 位置1
|
* @param loc1 位置1
|
||||||
* @param loc2 位置2
|
* @param loc2 位置2
|
||||||
* @return 创建的领地
|
* @return 创建的领地
|
||||||
*/
|
*/
|
||||||
public static DominionDTO create(Player owner, String name, Location loc1, Location loc2) {
|
public static void create(AbstractOperator operator, String name, Location loc1, Location loc2) {
|
||||||
DominionDTO parent = getPlayerCurrentDominion(owner, false);
|
DominionDTO parent = getPlayerCurrentDominion(operator, false);
|
||||||
if (parent == null) {
|
if (parent == null) {
|
||||||
return create(owner, name, loc1, loc2, "");
|
create(operator, name, loc1, loc2, "");
|
||||||
} else {
|
} else {
|
||||||
return create(owner, name, loc1, loc2, parent.getName());
|
create(operator, name, loc1, loc2, parent.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建子领地
|
* 创建子领地
|
||||||
*
|
*
|
||||||
* @param owner 拥有者
|
* @param operator 拥有者
|
||||||
* @param name 领地名称
|
* @param name 领地名称
|
||||||
* @param loc1 位置1
|
* @param loc1 位置1
|
||||||
* @param loc2 位置2
|
* @param loc2 位置2
|
||||||
* @param parent_dominion_name 父领地名称
|
* @param parent_dominion_name 父领地名称
|
||||||
* @return 创建的领地
|
* @return 创建的领地
|
||||||
*/
|
*/
|
||||||
public static DominionDTO create(Player owner, String name,
|
public static void create(AbstractOperator operator, String name,
|
||||||
Location loc1, Location loc2,
|
Location loc1, Location loc2,
|
||||||
String parent_dominion_name) {
|
String parent_dominion_name) {
|
||||||
if (name.isEmpty()) {
|
if (name.isEmpty()) {
|
||||||
Notification.error(owner, "领地名称不能为空");
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地名称不能为空"));
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
if (name.contains(" ")) {
|
if (name.contains(" ")) {
|
||||||
Notification.error(owner, "领地名称不能包含空格");
|
Notification.error(operator, "领地名称不能包含空格");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (DominionDTO.select(name) != null) {
|
if (DominionDTO.select(name) != null) {
|
||||||
Notification.error(owner, "已经存在名称为 %s 的领地", name);
|
Notification.error(operator, "已经存在名称为 %s 的领地", name);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!loc1.getWorld().equals(loc2.getWorld())) {
|
if (!loc1.getWorld().equals(loc2.getWorld())) {
|
||||||
Notification.error(owner, "禁止跨世界操作");
|
Notification.error(operator, "禁止跨世界操作");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!owner.getWorld().equals(loc1.getWorld())) {
|
if (!operator.getWorld().equals(loc1.getWorld())) {
|
||||||
Notification.error(owner, "禁止跨世界操作");
|
Notification.error(operator, "禁止跨世界操作");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 检查世界是否可以创建
|
// 检查世界是否可以创建
|
||||||
if (worldNotValid(owner)) {
|
if (worldNotValid(operator)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 检查领地数量是否达到上限
|
// 检查领地数量是否达到上限
|
||||||
if (amountNotValid(owner)) {
|
if (amountNotValid(operator)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 检查领地大小是否合法
|
// 检查领地大小是否合法
|
||||||
if (sizeNotValid(owner,
|
if (sizeNotValid(operator,
|
||||||
loc1.getBlockX(), loc1.getBlockY(), loc1.getBlockZ(),
|
loc1.getBlockX(), loc1.getBlockY(), loc1.getBlockZ(),
|
||||||
loc2.getBlockX(), loc2.getBlockY(), loc2.getBlockZ())) {
|
loc2.getBlockX(), loc2.getBlockY(), loc2.getBlockZ())) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
DominionDTO dominion = new DominionDTO(owner.getUniqueId(), name, owner.getWorld().getName(),
|
DominionDTO dominion = new DominionDTO(operator.getUniqueId(), name, operator.getWorld().getName(),
|
||||||
(int) Math.min(loc1.getX(), loc2.getX()), (int) Math.min(loc1.getY(), loc2.getY()),
|
(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.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()));
|
(int) Math.max(loc1.getY(), loc2.getY()), (int) Math.max(loc1.getZ(), loc2.getZ()));
|
||||||
@ -104,7 +104,7 @@ public class DominionController {
|
|||||||
parent_dominion = DominionDTO.select(parent_dominion_name);
|
parent_dominion = DominionDTO.select(parent_dominion_name);
|
||||||
}
|
}
|
||||||
if (parent_dominion == null) {
|
if (parent_dominion == null) {
|
||||||
Notification.error(owner, "父领地 %s 不存在", parent_dominion_name);
|
Notification.error(operator, "父领地 %s 不存在", parent_dominion_name);
|
||||||
if (parent_dominion_name.isEmpty()) {
|
if (parent_dominion_name.isEmpty()) {
|
||||||
XLogger.err("根领地丢失!");
|
XLogger.err("根领地丢失!");
|
||||||
}
|
}
|
||||||
@ -112,22 +112,22 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
// 是否是父领地的拥有者
|
// 是否是父领地的拥有者
|
||||||
if (parent_dominion.getId() != -1) {
|
if (parent_dominion.getId() != -1) {
|
||||||
if (notOwner(owner, parent_dominion)) {
|
if (notOwner(operator, parent_dominion)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 如果parent_dominion不为-1 检查是否在同一世界
|
// 如果parent_dominion不为-1 检查是否在同一世界
|
||||||
if (parent_dominion.getId() != -1 && !parent_dominion.getWorld().equals(dominion.getWorld())) {
|
if (parent_dominion.getId() != -1 && !parent_dominion.getWorld().equals(dominion.getWorld())) {
|
||||||
Notification.error(owner, "禁止跨世界操作");
|
Notification.error(operator, "禁止跨世界操作");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 检查深度是否达到上限
|
// 检查深度是否达到上限
|
||||||
if (depthNotValid(owner, parent_dominion)) {
|
if (depthNotValid(operator, parent_dominion)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 检查是否超出父领地范围
|
// 检查是否超出父领地范围
|
||||||
if (!isContained(dominion, parent_dominion)) {
|
if (!isContained(dominion, parent_dominion)) {
|
||||||
Notification.error(owner, "超出父领地 %s 范围", parent_dominion.getName());
|
Notification.error(operator, "超出父领地 %s 范围", parent_dominion.getName());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 获取此领地的所有同级领地
|
// 获取此领地的所有同级领地
|
||||||
@ -135,7 +135,7 @@ public class DominionController {
|
|||||||
// 检查是否与其他子领地冲突
|
// 检查是否与其他子领地冲突
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
if (isIntersect(sub_dominion, dominion)) {
|
if (isIntersect(sub_dominion, dominion)) {
|
||||||
Notification.error(owner, "与领地 %s 冲突", sub_dominion.getName());
|
Notification.error(operator, "与领地 %s 冲突", sub_dominion.getName());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,19 +148,19 @@ public class DominionController {
|
|||||||
count = (loc2.getBlockX() - loc1.getBlockX() + 1) * (loc2.getBlockY() - loc1.getBlockY() + 1) * (loc2.getBlockZ() - loc1.getBlockZ() + 1);
|
count = (loc2.getBlockX() - loc1.getBlockX() + 1) * (loc2.getBlockY() - loc1.getBlockY() + 1) * (loc2.getBlockZ() - loc1.getBlockZ() + 1);
|
||||||
}
|
}
|
||||||
float price = count * Dominion.config.getEconomyPrice();
|
float price = count * Dominion.config.getEconomyPrice();
|
||||||
if (Dominion.vault.getEconomy().getBalance(owner) < price) {
|
if (Dominion.vault.getEconomy().getBalance(operator) < price) {
|
||||||
Notification.error(owner, "你的余额不足,创建此领地需要 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural());
|
Notification.error(operator, "你的余额不足,创建此领地需要 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Notification.info(owner, "已扣除 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural());
|
Notification.info(operator, "已扣除 %.2f %s", price, Dominion.vault.getEconomy().currencyNamePlural());
|
||||||
Dominion.vault.getEconomy().withdrawPlayer(owner, price);
|
Dominion.vault.getEconomy().withdrawPlayer(operator, price);
|
||||||
}
|
}
|
||||||
dominion = DominionDTO.insert(dominion);
|
dominion = DominionDTO.insert(dominion);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(owner, "创建失败,详细错误请联系管理员查询日志(当前时间:%s)", Time.nowStr());
|
Notification.error(operator, "创建失败,详细错误请联系管理员查询日志(当前时间:%s)", Time.nowStr());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
ParticleRender.showBoxFace(Dominion.instance, owner, loc1, loc2);
|
ParticleRender.showBoxFace(Dominion.instance, operator, loc1, loc2);
|
||||||
return dominion.setParentDomId(parent_dominion.getId());
|
return dominion.setParentDomId(parent_dominion.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user