From 9997fc12a9eff231cf96a24aae8d3674bece1400 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Mon, 8 Jul 2024 01:23:09 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E4=BC=98=E5=8C=96DominionController?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/DominionController.java | 439 +++++++++--------- 1 file changed, 231 insertions(+), 208 deletions(-) diff --git a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java index e12c20c..cdc69f1 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java @@ -14,6 +14,7 @@ import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -28,10 +29,6 @@ public class DominionController { return DominionDTO.selectAll(owner.getUniqueId()); } - public static List all() { - return DominionDTO.selectAll(); - } - /** * 创建领地 * @@ -78,12 +75,13 @@ public class DominionController { Location loc1, Location loc2, @NotNull String parent_dominion_name, boolean skipEco) { AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建领地失败"); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功创建领地 %s", name); if (name.isEmpty()) { operator.setResponse(FAIL.addMessage("领地名称不能为空")); return; } - if (name.contains(" ")) { - operator.setResponse(FAIL.addMessage("领地名称不能包含空格")); + if (name.contains(" ") || name.contains(".")) { + operator.setResponse(FAIL.addMessage("领地名称不能包含空格或点")); return; } if (DominionDTO.select(name) != null) { @@ -159,34 +157,16 @@ public class DominionController { } } // 检查经济 - if (Dominion.config.getEconomyEnable() && !skipEco) { - if (!VaultConnect.instance.economyAvailable()) { - operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。")); - return; - } - int count; - if (Dominion.config.getEconomyOnlyXZ()) { - count = dominion.getSquare(); - } else { - count = dominion.getVolume(); - } - float price = count * Dominion.config.getEconomyPrice(); - if (VaultConnect.instance.getBalance(operator.getPlayer()) < price) { - operator.setResponse(FAIL.addMessage("你的余额不足,创建此领地需要 %.2f %s", price, VaultConnect.instance.currencyNamePlural())); - return; - } - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "已扣除 %.2f %s", price, VaultConnect.instance.currencyNamePlural())); - VaultConnect.instance.withdrawPlayer(operator.getPlayer(), price); - } - dominion = DominionDTO.insert(dominion); // 写入数据 + if (!skipEco) + handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? dominion.getSquare() : dominion.getVolume(), true, FAIL, SUCCESS); + dominion = DominionDTO.insert(dominion); if (dominion == null) { operator.setResponse(FAIL.addMessage("创建领地失败,数据库错误,请联系管理员")); return; } - if (operator instanceof BukkitPlayerOperator) { - ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(), loc1, loc2); - } - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功创建领地 %s", name)); + // 显示粒子效果 + handleParticle(operator, dominion.getWorld(), dominion.getX1(), dominion.getY1(), dominion.getZ1(), dominion.getX2(), dominion.getY2(), dominion.getZ2(), FAIL); + operator.setResponse(SUCCESS); } /** @@ -215,48 +195,12 @@ public class DominionController { */ 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 = operator.getDirection(); - DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name); + DominionDTO dominion = expandContractPreCheck(operator, getExistDomAndIsOwner(operator, dominion_name), FAIL); if (dominion == null) { return; } - if (location != null) { - if (!location.getWorld().getName().equals(dominion.getWorld())) { - operator.setResponse(FAIL.addMessage("禁止跨世界操作")); - return; - } - } - Integer x1 = dominion.getX1(); - Integer y1 = dominion.getY1(); - Integer z1 = dominion.getZ1(); - Integer x2 = dominion.getX2(); - Integer y2 = dominion.getY2(); - Integer z2 = dominion.getZ2(); - switch (face) { - case NORTH: - z1 -= size; - break; - case SOUTH: - z2 += size; - break; - case WEST: - x1 -= size; - break; - case EAST: - x2 += size; - break; - case UP: - y2 += size; - break; - case DOWN: - y1 -= size; - break; - default: - operator.setResponse(FAIL.addMessage("无效的方向")); - return; - } - if (sizeNotValid(operator, x1, y1, z1, x2, y2, z2)) { + int[] newCords = expandContractSizeChange(operator, dominion, true, size, FAIL); + if (newCords == null) { return; } // 校验是否超出父领地范围 @@ -265,14 +209,14 @@ public class DominionController { operator.setResponse(FAIL.addMessage("父领地丢失")); return; } - if (!isContained(x1, y1, z1, x2, y2, z2, parent_dominion)) { + if (!isContained(newCords, parent_dominion)) { operator.setResponse(FAIL.addMessage("超出父领地 %s 范围", parent_dominion.getName())); return; } // 获取同世界下的所有同级领地 List exist_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getParentDomId()); for (DominionDTO exist_dominion : exist_dominions) { - if (isIntersect(exist_dominion, x1, y1, z1, x2, y2, z2)) { + if (isIntersect(exist_dominion, newCords)) { // 如果是自己,跳过 if (exist_dominion.getId().equals(dominion.getId())) continue; operator.setResponse(FAIL.addMessage("与领地 %s 冲突", exist_dominion.getName())); @@ -281,32 +225,11 @@ public class DominionController { } AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功扩展领地 %s %d格", dominion_name, size); // 检查经济 - if (Dominion.config.getEconomyEnable()) { - if (!VaultConnect.instance.economyAvailable()) { - operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。")); - return; - } - int count; - if (Dominion.config.getEconomyOnlyXZ()) { - count = (x2 - x1 + 1) * (z2 - z1 + 1) - dominion.getSquare(); - } else { - count = (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1) - dominion.getVolume(); - } - float price = count * Dominion.config.getEconomyPrice(); - if (VaultConnect.instance.getBalance(operator.getPlayer()) < price) { - operator.setResponse(FAIL.addMessage("你的余额不足,扩展此领地需要 %.2f %s", price, VaultConnect.instance.currencyNamePlural())); - return; - } - SUCCESS.addMessage("已扣除 %.2f %s", price, VaultConnect.instance.currencyNamePlural()); - VaultConnect.instance.withdrawPlayer(operator.getPlayer(), price); - } - 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); + handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? sqr(newCords) - dominion.getSquare() : vol(newCords) - dominion.getVolume() + , false, FAIL, SUCCESS); + // 显示粒子效果 + handleParticle(operator, dominion.getWorld(), newCords, FAIL); + dominion.setXYZ(newCords); operator.setResponse(SUCCESS); } @@ -336,90 +259,48 @@ public class DominionController { */ 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 = operator.getDirection(); - DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name); + DominionDTO dominion = expandContractPreCheck(operator, getExistDomAndIsOwner(operator, dominion_name), FAIL); if (dominion == null) { return; } - if (location != null) { - if (!location.getWorld().getName().equals(dominion.getWorld())) { - operator.setResponse(FAIL.addMessage("禁止跨世界操作")); - return; - } - } - Integer x1 = dominion.getX1(); - Integer y1 = dominion.getY1(); - Integer z1 = dominion.getZ1(); - Integer x2 = dominion.getX2(); - Integer y2 = dominion.getY2(); - Integer z2 = dominion.getZ2(); - switch (face) { - case SOUTH: - z2 -= size; - break; - case NORTH: - z1 += size; - break; - case EAST: - x2 -= size; - break; - case WEST: - x1 += size; - break; - case UP: - y2 -= size; - break; - case DOWN: - y1 += size; - break; - default: - operator.setResponse(FAIL.addMessage("无效的方向")); - return; - } - // 校验第二组坐标是否小于第一组坐标 - if (x1 >= x2 || y1 >= y2 || z1 >= z2) { - operator.setResponse(FAIL.addMessage("缩小后的领地大小无效")); - return; - } - if (sizeNotValid(operator, x1, y1, z1, x2, y2, z2)) { + int[] newCords = expandContractSizeChange(operator, dominion, false, size, FAIL); + if (newCords == null) { return; } // 获取所有的子领地 List sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId()); for (DominionDTO sub_dominion : sub_dominions) { - if (!isContained(sub_dominion, x1, y1, z1, x2, y2, z2)) { + if (!isContained(sub_dominion, newCords)) { operator.setResponse(FAIL.addMessage("缩小后的领地无法包含子领地 %s", sub_dominion.getName())); return; } } AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功缩小领地 %s %d格", dominion_name, size); // 退还经济 - if (Dominion.config.getEconomyEnable()) { - if (!VaultConnect.instance.economyAvailable()) { - operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。")); - return; - } - int count; - if (Dominion.config.getEconomyOnlyXZ()) { - count = dominion.getSquare() - (x2 - x1 + 1) * (z2 - z1 + 1); - } else { - count = dominion.getVolume() - (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1); - } - float refund = count * Dominion.config.getEconomyPrice() * Dominion.config.getEconomyRefund(); - VaultConnect.instance.depositPlayer(operator.getPlayer(), refund); - SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural()); - } - 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); + handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? dominion.getSquare() - sqr(newCords) : dominion.getVolume() - vol(newCords) + , false, FAIL, SUCCESS); + // 显示粒子效果 + handleParticle(operator, dominion.getWorld(), newCords, FAIL); + dominion.setXYZ(newCords); operator.setResponse(SUCCESS); } + private static int vol(int x1, int y1, int z1, int x2, int y2, int z2) { + return (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1); + } + + private static int vol(int[] cords) { + return vol(cords[0], cords[1], cords[2], cords[3], cords[4], cords[5]); + } + + private static int sqr(int x1, int z1, int x2, int z2) { + return (x2 - x1 + 1) * (z2 - z1 + 1); + } + + private static int sqr(int[] cords) { + return sqr(cords[0], cords[2], cords[3], cords[5]); + } + /** * 删除领地 会同时删除其所有子领地 * @@ -428,6 +309,8 @@ public class DominionController { * @param force 是否强制删除 */ public static void delete(AbstractOperator operator, String dominion_name, boolean force) { + AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "删除领地失败"); + AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "领地 %s 及其所有子领地已删除", dominion_name); DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name); if (dominion == null) { return; @@ -435,14 +318,7 @@ public class DominionController { List sub_dominions = getSubDominionsRecursive(dominion); if (!force) { 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); - WARNING.addMessage("(子领地:%s)", sub_names); - } + showSubNamesWarning(sub_dominions, WARNING); if (operator instanceof BukkitPlayerOperator) { Notification.warn(operator.getPlayer(), "输入 /dominion delete %s force 确认删除", dominion_name); } @@ -450,27 +326,18 @@ public class DominionController { return; } DominionDTO.delete(dominion); - AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "领地 %s 及其所有子领地已删除", dominion_name); // 退还经济 - if (Dominion.config.getEconomyEnable()) { - if (!VaultConnect.instance.economyAvailable()) { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "退款失败,没有可用的经济插件系统,请联系服主。")); - return; + int count = 0; + if (Dominion.config.getEconomyOnlyXZ()) { + for (DominionDTO sub_dominion : sub_dominions) { + count += sub_dominion.getSquare(); } - int count = 0; - if (Dominion.config.getEconomyOnlyXZ()) { - for (DominionDTO sub_dominion : sub_dominions) { - count += sub_dominion.getSquare(); - } - } else { - for (DominionDTO sub_dominion : sub_dominions) { - count += sub_dominion.getVolume(); - } + } else { + for (DominionDTO sub_dominion : sub_dominions) { + count += sub_dominion.getVolume(); } - float refund = count * Dominion.config.getEconomyPrice() * Dominion.config.getEconomyRefund(); - VaultConnect.instance.depositPlayer(operator.getPlayer(), refund); - SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural()); } + handleEconomy(operator, count, false, FAIL, SUCCESS); operator.setResponse(SUCCESS); } @@ -554,6 +421,7 @@ public class DominionController { * @param dominion_name 领地名称 */ public static void setTpLocation(AbstractOperator operator, int x, int y, int z, String dominion_name) { + AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置领地传送点失败"); DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name); if (dominion == null) { operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在", dominion_name)); @@ -590,8 +458,8 @@ public class DominionController { operator.setResponse(FAIL.addMessage("新名称不能为空")); return; } - if (new_name.contains(" ")) { - operator.setResponse(FAIL.addMessage("领地名称不能包含空格")); + if (new_name.contains(" ") || new_name.contains(".")) { + operator.setResponse(FAIL.addMessage("领地名称不能包含空格或点")); return; } if (Objects.equals(old_name, new_name)) { @@ -645,14 +513,7 @@ public class DominionController { List sub_dominions = getSubDominionsRecursive(dominion); if (!force) { 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); - WARNING.addMessage("(子领地:%s)", sub_names); - } + showSubNamesWarning(sub_dominions, WARNING); if (operator instanceof BukkitPlayerOperator) { Notification.warn(operator.getPlayer(), "输入 /dominion give %s %s force 确认转让", dom_name, player_name); } @@ -723,6 +584,10 @@ public class DominionController { a.getZ1() < z2 && a.getZ2() > z1; } + private static boolean isIntersect(DominionDTO a, int[] cord) { + return isIntersect(a, cord[0], cord[1], cord[2], cord[3], cord[4], cord[5]); + } + /** * 判断 sub 是否完全被 parent 包裹 */ @@ -730,24 +595,32 @@ public class DominionController { if (parent.getId() == -1) { return true; } - return sub.getX1() >= parent.getX1() && sub.getX2() <= parent.getX2() && - sub.getY1() >= parent.getY1() && sub.getY2() <= parent.getY2() && - sub.getZ1() >= parent.getZ1() && sub.getZ2() <= parent.getZ2(); + return isContained(sub.getX1(), sub.getY1(), sub.getZ1(), sub.getX2(), sub.getY2(), sub.getZ2(), parent.getX1(), parent.getY1(), parent.getZ1(), parent.getX2(), parent.getY2(), parent.getZ2()); + } + + private static boolean isContained(int[] cords, DominionDTO parent) { + return isContained(cords[0], cords[1], cords[2], cords[3], cords[4], cords[5], parent); + } + + private static boolean isContained(DominionDTO sub, int[] cords) { + return isContained(sub, cords[0], cords[1], cords[2], cords[3], cords[4], cords[5]); } private static boolean isContained(Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, DominionDTO parent) { if (parent.getId() == -1) { return true; } - return x1 >= parent.getX1() && x2 <= parent.getX2() && - y1 >= parent.getY1() && y2 <= parent.getY2() && - z1 >= parent.getZ1() && z2 <= parent.getZ2(); + return isContained(x1, y1, z1, x2, y2, z2, parent.getX1(), parent.getY1(), parent.getZ1(), parent.getX2(), parent.getY2(), parent.getZ2()); } private static boolean isContained(DominionDTO sub, Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2) { - return sub.getX1() >= x1 && sub.getX2() <= x2 && - sub.getY1() >= y1 && sub.getY2() <= y2 && - sub.getZ1() >= z1 && sub.getZ2() <= z2; + return isContained(sub.getX1(), sub.getY1(), sub.getZ1(), sub.getX2(), sub.getY2(), sub.getZ2(), x1, y1, z1, x2, y2, z2); + } + + private static boolean isContained(int sub_x1, int sub_y1, int sub_z1, int sub_x2, int sub_y2, int sub_z2, int parent_x1, int parent_y1, int parent_z1, int parent_x2, int parent_y2, int parent_z2) { + return sub_x1 >= parent_x1 && sub_x2 <= parent_x2 && + sub_y1 >= parent_y1 && sub_y2 <= parent_y2 && + sub_z1 >= parent_z1 && sub_z2 <= parent_z2; } private static List getSubDominionsRecursive(DominionDTO dominion) { @@ -760,6 +633,10 @@ public class DominionController { return sub_dominions; } + private static boolean sizeNotValid(AbstractOperator operator, int[] cords) { + return sizeNotValid(operator, cords[0], cords[1], cords[2], cords[3], cords[4], cords[5]); + } + 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()) { @@ -866,4 +743,150 @@ public class DominionController { return dominion; } + /** + * 处理经济系统 + * + * @param operator 操作者 + * @param count 数量 + * @param paid 操作类型 true 为扣费 false 为退费 + * @param FAIL 失败消息 + * @param SUCCESS 成功消息 + */ + private static void handleEconomy(AbstractOperator operator, Integer count, boolean paid, AbstractOperator.Result FAIL, AbstractOperator.Result SUCCESS) { + if (Dominion.config.getEconomyEnable()) { + if (!VaultConnect.instance.economyAvailable()) { + operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。")); + return; + } + float priceOrRefund = count * Dominion.config.getEconomyPrice(); + if (paid) { + if (VaultConnect.instance.getBalance(operator.getPlayer()) < priceOrRefund) { + operator.setResponse(FAIL.addMessage("你的余额不足,需要 %.2f %s", priceOrRefund, VaultConnect.instance.currencyNamePlural())); + return; + } + SUCCESS.addMessage("已扣除 %.2f %s", priceOrRefund, VaultConnect.instance.currencyNamePlural()); + VaultConnect.instance.withdrawPlayer(operator.getPlayer(), priceOrRefund); + } else { + float refund = priceOrRefund * Dominion.config.getEconomyRefund(); + VaultConnect.instance.depositPlayer(operator.getPlayer(), refund); + SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural()); + } + } + } + + /** + * 显示粒子效果 + * + * @param operator 操作者 + * @param worldName 世界名称 + * @param x1 x1 + * @param y1 y1 + * @param z1 z1 + * @param x2 x2 + * @param y2 y2 + * @param z2 z2 + * @param FAIL 失败消息 + */ + private static void handleParticle(AbstractOperator operator, String worldName, Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, AbstractOperator.Result FAIL) { + if (operator instanceof BukkitPlayerOperator) { + World world = Dominion.instance.getServer().getWorld(worldName); + if (world == null) { + operator.setResponse(FAIL.addMessage("世界 %s 不存在", worldName)); + return; + } + ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(), + new Location(world, x1, y1, z1), + new Location(world, x2, y2, z2)); + } + } + + private static void handleParticle(AbstractOperator operator, String worldName, int[] cords, AbstractOperator.Result FAIL) { + handleParticle(operator, worldName, cords[0], cords[1], cords[2], cords[3], cords[4], cords[5], FAIL); + } + + private static @Nullable DominionDTO expandContractPreCheck(AbstractOperator operator, @Nullable DominionDTO dominion, AbstractOperator.Result FAIL) { + if (dominion == null) { + return null; + } + if (operator.getLocation() == null) { + operator.setResponse(FAIL.addMessage("无法获取你的位置")); + return null; + } + if (!operator.getLocation().getWorld().getName().equals(dominion.getWorld())) { + operator.setResponse(FAIL.addMessage("禁止跨世界操作")); + return null; + } + if (!isInDominion(dominion, operator.getLocation())) { + operator.setResponse(FAIL.addMessage("你不在领地 %s 内,无法执行此操作", dominion.getName())); + return null; + } + return dominion; + } + + private static int[] expandContractSizeChange(AbstractOperator operator, @NotNull DominionDTO dominion, boolean expand, int size, AbstractOperator.Result FAIL) { + BlockFace face = operator.getDirection(); + int[] result = new int[6]; + result[0] = dominion.getX1(); + result[1] = dominion.getY1(); + result[2] = dominion.getZ1(); + result[3] = dominion.getX2(); + result[4] = dominion.getY2(); + result[5] = dominion.getZ2(); + if (!expand) { + size = size * -1; + } + switch (face) { + case NORTH: + result[2] -= size; + break; + case SOUTH: + result[5] += size; + break; + case WEST: + result[0] -= size; + break; + case EAST: + result[3] += size; + break; + case UP: + result[4] += size; + break; + case DOWN: + result[1] -= size; + break; + default: + operator.setResponse(FAIL.addMessage("无效的方向")); + return null; + } + if (!expand) { + // 校验第二组坐标是否小于第一组坐标 + if (result[0] > result[3] || result[1] > result[4] || result[2] > result[5]) { + operator.setResponse(FAIL.addMessage("缩小后的领地大小无效")); + return null; + } + } + if (sizeNotValid(operator, result)) { + return null; + } + return result; + } + + + /** + * 以警告形式打印所有子领地名称 + * + * @param sub_dominions 子领地列表 + * @param WARNING 警告消息 + */ + public static void showSubNamesWarning(List sub_dominions, AbstractOperator.Result WARNING) { + 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); + WARNING.addMessage("(子领地:%s)", sub_names); + } + } + } From c858332fbdb4844c08a1284e58f185c554e3ab75 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Mon, 8 Jul 2024 01:24:24 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E8=A1=A5=E5=85=85DominionDTO=E4=B8=AD?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dominion/controllers/DominionController.java | 4 ++++ .../java/cn/lunadeer/dominion/dtos/DominionDTO.java | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java index cdc69f1..de60cef 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java @@ -29,6 +29,10 @@ public class DominionController { return DominionDTO.selectAll(owner.getUniqueId()); } + public static List all() { + return DominionDTO.selectAll(); + } + /** * 创建领地 * diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java index c31a183..1490180 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java @@ -373,6 +373,16 @@ public class DominionDTO { return doUpdate(new UpdateRow().field(this.x1).field(this.y1).field(this.z1).field(this.x2).field(this.y2).field(this.z2)); } + public DominionDTO setXYZ(int[] cords) { + if (cords.length == 6) { + return setXYZ(cords[0], cords[1], cords[2], cords[3], cords[4], cords[5]); + } else { + XLogger.warn("领地坐标数据异常: %s", (Object) cords); + return null; + } + } + + public Location getTpLocation() { if (Objects.equals(tp_location.value, "default")) { return null; From fb1736e0f2a600d6d4d75be0f7a209744d8a6142 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Mon, 8 Jul 2024 16:51:16 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/cn/lunadeer/dominion/Cache.java | 16 ++++++++++++++++ src/main/java/cn/lunadeer/dominion/Dominion.java | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c877ca9..b428b68 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.35.8-beta + 1.35.9-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index 7c63635..5b64aea 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -433,6 +433,22 @@ public class Cache { return new ArrayList<>(id_dominions.values()); } + public int getDominionCounts() { + return id_dominions.size(); + } + + public int getMemberCounts() { + int count = 0; + for (Map member : player_uuid_to_member.values()) { + count += member.size(); + } + return count; + } + + public int getGroupCounts() { + return id_groups.size(); + } + public static Cache instance; private ConcurrentHashMap id_dominions; private ConcurrentHashMap> world_dominion_tree; diff --git a/src/main/java/cn/lunadeer/dominion/Dominion.java b/src/main/java/cn/lunadeer/dominion/Dominion.java index 10c4ebd..9f9c899 100644 --- a/src/main/java/cn/lunadeer/dominion/Dominion.java +++ b/src/main/java/cn/lunadeer/dominion/Dominion.java @@ -1,5 +1,6 @@ package cn.lunadeer.dominion; +import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO; import cn.lunadeer.dominion.events.EnvironmentEvents; import cn.lunadeer.dominion.events.PlayerEvents; import cn.lunadeer.dominion.events.SelectPointEvents; @@ -46,6 +47,9 @@ public final class Dominion extends JavaPlugin { bStatsMetrics metrics = new bStatsMetrics(this, 21445); metrics.addCustomChart(new bStatsMetrics.SimplePie("database", () -> config.getDbType())); + metrics.addCustomChart(new bStatsMetrics.SingleLineChart("dominion_count", () -> Cache.instance.getDominionCounts())); + metrics.addCustomChart(new bStatsMetrics.SingleLineChart("group_count", () -> Cache.instance.getGroupCounts())); + metrics.addCustomChart(new bStatsMetrics.SingleLineChart("member_count", () -> Cache.instance.getMemberCounts())); if (config.getCheckUpdate()) { giteaReleaseCheck = new GiteaReleaseCheck(this, From c859718f8ba4c97afe7c2bfc5a0ff6ca3c6db2c5 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Wed, 10 Jul 2024 12:00:49 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E9=A2=86=E5=9C=B0=E6=97=B6=E7=BB=8F=E6=B5=8E=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98=EF=BC=88=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E4=BD=A0=E6=98=AF1.35.9-beta=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=AF=B7=E5=8A=A1=E5=BF=85=E6=9B=B4=E6=96=B0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../cn/lunadeer/dominion/controllers/DominionController.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index b428b68..5ce751d 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.35.9-beta + 1.35.10-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java index de60cef..24f3d1c 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java @@ -230,7 +230,7 @@ public class DominionController { AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功扩展领地 %s %d格", dominion_name, size); // 检查经济 handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? sqr(newCords) - dominion.getSquare() : vol(newCords) - dominion.getVolume() - , false, FAIL, SUCCESS); + , true, FAIL, SUCCESS); // 显示粒子效果 handleParticle(operator, dominion.getWorld(), newCords, FAIL); dominion.setXYZ(newCords); @@ -445,7 +445,7 @@ public class DominionController { "成功设置领地 %s 的传送点 %d %d %d", dominion_name , loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); } else { - operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "传送点不在领地 %s 内", dominion_name)); + operator.setResponse(FAIL.addMessage("传送点不在领地 %s 内", dominion_name)); } } From ba81403d6f2cae0dcfa2ad5eef49b2b41dd18df9 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Fri, 12 Jul 2024 21:11:51 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=9E=82=E7=9B=B4=E9=80=89=E5=8F=96=E4=B8=8D=E7=94=9F?= =?UTF-8?q?=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../dominion/events/SelectPointEvents.java | 20 +++++++++++-------- .../java/cn/lunadeer/dominion/tuis/Menu.java | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 5ce751d..9f43d91 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.35.10-beta + 1.35.13-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java b/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java index 9a036b9..bdaaf23 100644 --- a/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java @@ -42,14 +42,23 @@ public class SelectPointEvents implements Listener { if (action == Action.LEFT_CLICK_BLOCK) { event.setCancelled(true); Notification.info(player, "已选择第一个点: %d %d %d", block.getX(), block.getY(), block.getZ()); - points.put(0, block.getLocation()); + Location loc = block.getLocation(); + if (Dominion.config.getLimitVert()) { + loc.setY(Dominion.config.getLimitMinY()); + } + points.put(0, loc); } else if (action == Action.RIGHT_CLICK_BLOCK) { event.setCancelled(true); Notification.info(player, "已选择第二个点: %d %d %d", block.getX(), block.getY(), block.getZ()); - points.put(1, block.getLocation()); + Location loc = block.getLocation(); + if (Dominion.config.getLimitVert()) { + loc.setY(Dominion.config.getLimitMaxY()); + } + points.put(1, loc); } else { return; } + Dominion.pointsSelect.put(player.getUniqueId(), points); if (points.size() == 2) { World world = points.get(0).getWorld(); @@ -57,7 +66,7 @@ public class SelectPointEvents implements Listener { return; } if (!points.get(0).getWorld().equals(points.get(1).getWorld())) { - Notification.error(player, "两个点不在同一个世界"); + Notification.warn(player, "两个点不在同一个世界"); return; } Notification.info(player, "已选择两个点,可以使用 /dominion create <领地名称> 创建领地"); @@ -69,10 +78,6 @@ public class SelectPointEvents implements Listener { int maxX = Math.max(loc1.getBlockX(), loc2.getBlockX()); int maxY = Math.max(loc1.getBlockY(), loc2.getBlockY()); int maxZ = Math.max(loc1.getBlockZ(), loc2.getBlockZ()); - if (Dominion.config.getLimitVert()) { - minY = Dominion.config.getLimitMinY(); - maxY = Dominion.config.getLimitMaxY(); - } DominionDTO dominion = new DominionDTO(player.getUniqueId(), "", loc1.getWorld().getName(), minX, minY, minZ, maxX, maxY, maxZ); if (Dominion.config.getEconomyEnable()) { @@ -95,6 +100,5 @@ public class SelectPointEvents implements Listener { Notification.info(player, "高度: %d", dominion.getHeight()); Notification.info(player, "体积: %d", dominion.getVolume()); } - Dominion.pointsSelect.put(player.getUniqueId(), points); } } diff --git a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java index 5499939..7214eba 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/Menu.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/Menu.java @@ -46,7 +46,7 @@ public class Menu { .append(Button.create("所有领地").setExecuteCommand("/dominion all_dominion").build()) .append("查看所有领地"); Line config = Line.create() - .append(Button.create("系统配置").setExecuteCommand("/dominion config").build()) + .append(Button.create("系统配置").setExecuteCommand("/dominion sys_config").build()) .append("查看/修改系统配置"); Line reload_cache = Line.create() .append(Button.create("重载缓存").setExecuteCommand("/dominion reload_cache").build()) From cc2423dd1ba4e7a53a5a40e1cc1f026f3e6611e7 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Sat, 13 Jul 2024 16:33:41 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E2=80=9C=E6=9C=AB?= =?UTF-8?q?=E5=BD=B1=E9=BE=99=E7=A0=B4=E5=9D=8F=E6=96=B9=E5=9D=97=E2=80=9D?= =?UTF-8?q?=E9=A2=86=E5=9C=B0=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/cn/lunadeer/dominion/dtos/Flag.java | 3 ++- .../cn/lunadeer/dominion/events/EnvironmentEvents.java | 10 ++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5ce751d..92fbc94 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.35.10-beta + 1.36.0-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java index 3e5d1ae..aea6364 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/Flag.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/Flag.java @@ -25,9 +25,10 @@ public enum Flag { CAKE("cake", "吃蛋糕", "是否可以吃蛋糕", false, false, true), CONTAINER("container", "一般容器", "包含:箱子/木桶/潜影盒/盔甲架/展示框", false, false, true), CRAFT("craft", "使用工作台", "是否可以使用工作台", false, false, true), - CREEPER_EXPLODE("creeper_explode", "实体爆炸", "包含:苦力怕/凋零头颅/水晶爆炸", false, true, true), + CREEPER_EXPLODE("creeper_explode", "实体爆炸", "包含:苦力怕/凋零头颅/末影水晶/火球", false, true, true), COMPARER("comparer", "比较器交互", "是否可以修改比较器状态", false, false, true), DOOR("door", "门交互", "是否可以使用各种材质的门(包括活板门)", false, false, true), + DRAGON_BREAK_BLOCK("dragon_break_block", "末影龙破坏方块", "末影龙冲撞是否可以破坏方块", false, true, true), DRAGON_EGG("dragon_egg", "触碰龙蛋", "是否可以触碰龙蛋", false, false, true), DYE("dye", "染色", "是否可以使用染料(对羊、狗项圈、猫项圈)染色", false, false, true), EDIT_SIGN("edit_sign", "编辑告示牌", "是否可以编辑告示牌", false, false, true), diff --git a/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java index 3b72a91..ba73faa 100644 --- a/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java @@ -38,6 +38,16 @@ public class EnvironmentEvents implements Listener { checkFlag(dom, Flag.CREEPER_EXPLODE, event); } + @EventHandler(priority = EventPriority.HIGHEST) // dragon_break_block + public void onDragonBreakBlock(EntityExplodeEvent event) { + Entity entity = event.getEntity(); + if (entity.getType() != EntityType.ENDER_DRAGON) { + return; + } + DominionDTO dom = Cache.instance.getDominion(event.getLocation()); + checkFlag(dom, Flag.DRAGON_BREAK_BLOCK, event); + } + @EventHandler(priority = EventPriority.HIGHEST) // fire_spread public void onFireSpread(BlockIgniteEvent event) { Player player = event.getPlayer(); From 0fe7f28c6478c0e60852801eb6e0e9c389f0a010 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Mon, 15 Jul 2024 15:20:13 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E9=A2=86?= =?UTF-8?q?=E5=9C=B0=E6=98=BE=E7=A4=BA=E5=B0=BA=E5=AF=B8=E4=B8=8E=E5=AE=9E?= =?UTF-8?q?=E9=99=85=E5=B0=BA=E5=AF=B8=E4=B8=8D=E4=B8=80=E8=87=B4=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/cn/lunadeer/dominion/Cache.java | 2 +- .../controllers/DominionController.java | 56 +++++++------------ .../lunadeer/dominion/dtos/DominionDTO.java | 10 ++-- .../dominion/events/SelectPointEvents.java | 9 +-- .../tuis/dominion/manage/SizeInfo.java | 2 +- 6 files changed, 33 insertions(+), 48 deletions(-) diff --git a/pom.xml b/pom.xml index 92fbc94..bcc2c0e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer Dominion - 1.36.0-beta + 1.36.1-beta jar Dominion diff --git a/src/main/java/cn/lunadeer/dominion/Cache.java b/src/main/java/cn/lunadeer/dominion/Cache.java index 5b64aea..d108027 100644 --- a/src/main/java/cn/lunadeer/dominion/Cache.java +++ b/src/main/java/cn/lunadeer/dominion/Cache.java @@ -251,7 +251,7 @@ public class Cache { player_current_dominion_id.put(player.getUniqueId(), current_dominion.getId()); // show border if (current_dominion.getFlagValue(Flag.SHOW_BORDER)) { - ParticleRender.showBoxFace(Dominion.instance, player, + ParticleRender.showBoxFace(player, current_dominion.getLocation1(), current_dominion.getLocation2()); } diff --git a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java index 24f3d1c..8d54463 100644 --- a/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java +++ b/src/main/java/cn/lunadeer/dominion/controllers/DominionController.java @@ -106,10 +106,14 @@ public class DominionController { operator.setResponse(FAIL.addMessage("你的领地数量已达上限(%d个)", Dominion.config.getLimitAmount())); return; } + int minX = Math.min(loc1.getBlockX(), loc2.getBlockX()); + int minY = Math.min(loc1.getBlockY(), loc2.getBlockY()); + int minZ = Math.min(loc1.getBlockZ(), loc2.getBlockZ()); + int maxX = Math.max(loc1.getBlockX(), loc2.getBlockX()) + 1; + int maxY = Math.max(loc1.getBlockY(), loc2.getBlockY()) + 1; + int maxZ = Math.max(loc1.getBlockZ(), loc2.getBlockZ()) + 1; // 检查领地大小是否合法 - if (sizeNotValid(operator, - loc1.getBlockX(), loc1.getBlockY(), loc1.getBlockZ(), - loc2.getBlockX(), loc2.getBlockY(), loc2.getBlockZ())) { + if (sizeNotValid(operator, minX, minY, minZ, maxX, maxY, maxZ)) { return; } DominionDTO parent_dominion; @@ -134,9 +138,7 @@ public class DominionController { } // 创建 dominion (此步骤不会写入数据) DominionDTO dominion = DominionDTO.create(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()), parent_dominion); + minX, minY, minZ, maxX, maxY, maxZ, parent_dominion); // 如果parent_dominion不为-1 检查是否在同一世界 if (parent_dominion.getId() != -1 && !parent_dominion.getWorld().equals(dominion.getWorld())) { operator.setResponse(FAIL.addMessage("父领地与子领地不在同一世界。")); @@ -169,7 +171,7 @@ public class DominionController { return; } // 显示粒子效果 - handleParticle(operator, dominion.getWorld(), dominion.getX1(), dominion.getY1(), dominion.getZ1(), dominion.getX2(), dominion.getY2(), dominion.getZ2(), FAIL); + handleParticle(operator, dominion); operator.setResponse(SUCCESS); } @@ -232,8 +234,8 @@ public class DominionController { handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? sqr(newCords) - dominion.getSquare() : vol(newCords) - dominion.getVolume() , true, FAIL, SUCCESS); // 显示粒子效果 - handleParticle(operator, dominion.getWorld(), newCords, FAIL); - dominion.setXYZ(newCords); + dominion = dominion.setXYZ(newCords); + handleParticle(operator, dominion); operator.setResponse(SUCCESS); } @@ -284,8 +286,8 @@ public class DominionController { handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? dominion.getSquare() - sqr(newCords) : dominion.getVolume() - vol(newCords) , false, FAIL, SUCCESS); // 显示粒子效果 - handleParticle(operator, dominion.getWorld(), newCords, FAIL); - dominion.setXYZ(newCords); + dominion = dominion.setXYZ(newCords); + handleParticle(operator, dominion); operator.setResponse(SUCCESS); } @@ -577,9 +579,7 @@ public class DominionController { * 判断两个领地是否相交 */ private static boolean isIntersect(DominionDTO a, DominionDTO b) { - return a.getX1() < b.getX2() && a.getX2() > b.getX1() && - a.getY1() < b.getY2() && a.getY2() > b.getY1() && - a.getZ1() < b.getZ2() && a.getZ2() > b.getZ1(); + return isIntersect(a, b.getX1(), b.getY1(), b.getZ1(), b.getX2(), b.getY2(), b.getZ2()); } private static boolean isIntersect(DominionDTO a, Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2) { @@ -781,33 +781,17 @@ public class DominionController { /** * 显示粒子效果 * - * @param operator 操作者 - * @param worldName 世界名称 - * @param x1 x1 - * @param y1 y1 - * @param z1 z1 - * @param x2 x2 - * @param y2 y2 - * @param z2 z2 - * @param FAIL 失败消息 + * @param operator 操作者 + * @param dominion 领地 */ - private static void handleParticle(AbstractOperator operator, String worldName, Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, AbstractOperator.Result FAIL) { + private static void handleParticle(AbstractOperator operator, DominionDTO dominion) { if (operator instanceof BukkitPlayerOperator) { - World world = Dominion.instance.getServer().getWorld(worldName); - if (world == null) { - operator.setResponse(FAIL.addMessage("世界 %s 不存在", worldName)); - return; - } - ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(), - new Location(world, x1, y1, z1), - new Location(world, x2, y2, z2)); + ParticleRender.showBoxFace(operator.getPlayer(), + dominion.getLocation1(), + dominion.getLocation2()); } } - private static void handleParticle(AbstractOperator operator, String worldName, int[] cords, AbstractOperator.Result FAIL) { - handleParticle(operator, worldName, cords[0], cords[1], cords[2], cords[3], cords[4], cords[5], FAIL); - } - private static @Nullable DominionDTO expandContractPreCheck(AbstractOperator operator, @Nullable DominionDTO dominion, AbstractOperator.Result FAIL) { if (dominion == null) { return null; diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java index 1490180..1ecb31b 100644 --- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java +++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java @@ -311,23 +311,23 @@ public class DominionDTO { } public Integer getSquare() { - return (getX2() - getX1() + 1) * (getZ2() - getZ1() + 1); + return getWidthX() * getWidthZ(); } public Integer getVolume() { - return getSquare() * (getY2() - getY1() + 1); + return getSquare() * getHeight(); } public Integer getWidthX() { - return getX2() - getX1() + 1; + return getX2() - getX1(); } public Integer getHeight() { - return getY2() - getY1() + 1; + return getY2() - getY1(); } public Integer getWidthZ() { - return getZ2() - getZ1() + 1; + return getZ2() - getZ1(); } public Integer getParentDomId() { diff --git a/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java b/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java index bdaaf23..d9ecccd 100644 --- a/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java +++ b/src/main/java/cn/lunadeer/dominion/events/SelectPointEvents.java @@ -1,5 +1,6 @@ package cn.lunadeer.dominion.events; +import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.dtos.DominionDTO; import cn.lunadeer.minecraftpluginutils.Notification; @@ -75,9 +76,9 @@ public class SelectPointEvents implements Listener { int minX = Math.min(loc1.getBlockX(), loc2.getBlockX()); int minY = Math.min(loc1.getBlockY(), loc2.getBlockY()); int minZ = Math.min(loc1.getBlockZ(), loc2.getBlockZ()); - int maxX = Math.max(loc1.getBlockX(), loc2.getBlockX()); - int maxY = Math.max(loc1.getBlockY(), loc2.getBlockY()); - int maxZ = Math.max(loc1.getBlockZ(), loc2.getBlockZ()); + int maxX = Math.max(loc1.getBlockX(), loc2.getBlockX()) + 1; + int maxY = Math.max(loc1.getBlockY(), loc2.getBlockY()) + 1; + int maxZ = Math.max(loc1.getBlockZ(), loc2.getBlockZ()) + 1; DominionDTO dominion = new DominionDTO(player.getUniqueId(), "", loc1.getWorld().getName(), minX, minY, minZ, maxX, maxY, maxZ); if (Dominion.config.getEconomyEnable()) { @@ -94,7 +95,7 @@ public class SelectPointEvents implements Listener { float price = count * Dominion.config.getEconomyPrice(); Notification.info(player, "预计领地创建价格为 %.2f %s", price, VaultConnect.instance.currencyNamePlural()); } - ParticleRender.showBoxFace(Dominion.instance, player, loc1, loc2); + ParticleRender.showBoxFace(player, dominion.getLocation1(), dominion.getLocation2()); Notification.info(player, "尺寸: %d x %d x %d", dominion.getWidthX(), dominion.getHeight(), dominion.getWidthZ()); Notification.info(player, "面积: %d", dominion.getSquare()); Notification.info(player, "高度: %d", dominion.getHeight()); diff --git a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/SizeInfo.java b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/SizeInfo.java index 3d28b2a..0ecde11 100644 --- a/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/SizeInfo.java +++ b/src/main/java/cn/lunadeer/dominion/tuis/dominion/manage/SizeInfo.java @@ -49,7 +49,7 @@ public class SizeInfo { .append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build()) .append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build())) .showOn(player); - ParticleRender.showBoxFace(Dominion.instance, player, + ParticleRender.showBoxFace(player, dominion.getLocation1(), dominion.getLocation2()); }