mirror of
https://github.com/ColdeZhang/Dominion.git
synced 2024-10-19 03:26:40 +08:00
finish main controller some command api
This commit is contained in:
parent
f2dfe0c6a1
commit
ee967fbb4d
@ -3,9 +3,15 @@ package cn.lunadeer.dominion;
|
|||||||
import cn.lunadeer.dominion.utils.ConfigManager;
|
import cn.lunadeer.dominion.utils.ConfigManager;
|
||||||
import cn.lunadeer.dominion.utils.Database;
|
import cn.lunadeer.dominion.utils.Database;
|
||||||
import cn.lunadeer.dominion.utils.XLogger;
|
import cn.lunadeer.dominion.utils.XLogger;
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.postgresql.core.Tuple;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public final class Dominion extends JavaPlugin {
|
public final class Dominion extends JavaPlugin {
|
||||||
|
|
||||||
@ -37,4 +43,5 @@ public final class Dominion extends JavaPlugin {
|
|||||||
public static Dominion instance;
|
public static Dominion instance;
|
||||||
public static ConfigManager config;
|
public static ConfigManager config;
|
||||||
public static Connection dbConnection;
|
public static Connection dbConnection;
|
||||||
|
public static Map<UUID, List<Location>> pointsSelect = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
33
src/main/java/cn/lunadeer/dominion/commands/Apis.java
Normal file
33
src/main/java/cn/lunadeer/dominion/commands/Apis.java
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package cn.lunadeer.dominion.commands;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.utils.Notification;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class Apis {
|
||||||
|
public static Player playerOnly(CommandSender sender) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
Notification.error(sender, "该命令只能由玩家执行");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (Player) sender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sizeInfo(CommandSender sender, DominionDTO dominionDTO) {
|
||||||
|
Integer x1 = dominionDTO.getX1();
|
||||||
|
Integer y1 = dominionDTO.getY1();
|
||||||
|
Integer z1 = dominionDTO.getZ1();
|
||||||
|
Integer x2 = dominionDTO.getX2();
|
||||||
|
Integer y2 = dominionDTO.getY2();
|
||||||
|
Integer z2 = dominionDTO.getZ2();
|
||||||
|
Notification.info(sender, "领地 " + dominionDTO.getName() + " 的尺寸信息:");
|
||||||
|
Notification.info(sender, " 大小为" + (x2 - x1) + " x" + (y2 - y1) + " x" + (z2 - z1));
|
||||||
|
Notification.info(sender, " 中心坐标为 " + (x1 + (x2 - x1) / 2) + " " + (y1 + (y2 - y1) / 2) + " " + (z1 + (z2 - z1) / 2));
|
||||||
|
Notification.info(sender, " 高度为 " + (y2 - y1));
|
||||||
|
Notification.info(sender, " 体积为 " + (x2 - x1) * (y2 - y1) * (z2 - z1));
|
||||||
|
Notification.info(sender, " 领地的世界为 " + dominionDTO.getWorld());
|
||||||
|
Notification.info(sender, " 领地的对角点坐标为 x1=" + x1 + " y1=" + y1 + " z1=" + z1 + " x2=" + x2 + " y2=" + y2 + " z2=" + z2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
114
src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
Normal file
114
src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
package cn.lunadeer.dominion.commands;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.controllers.DominionController;
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.utils.Notification;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
import static cn.lunadeer.dominion.commands.Apis.sizeInfo;
|
||||||
|
|
||||||
|
public class DominionOperate {
|
||||||
|
/**
|
||||||
|
* 创建领地
|
||||||
|
*
|
||||||
|
* @param sender 命令发送者
|
||||||
|
* @param args 命令参数
|
||||||
|
*/
|
||||||
|
public static void createDominion(CommandSender sender, String[] args) {
|
||||||
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
if (args.length != 2) {
|
||||||
|
Notification.error(sender, "用法: /dominion create <领地名称>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<Location> points = Dominion.pointsSelect.get(player.getUniqueId());
|
||||||
|
if (points == null || points.size() != 2) {
|
||||||
|
Notification.error(sender, "请先使用木棍选择领地的对角线两点,或使用 /dominion auto_create <领地名称> 创建自动领地");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String name = args[1];
|
||||||
|
DominionDTO dominionDTO = DominionDTO.select(name);
|
||||||
|
if (dominionDTO != null) {
|
||||||
|
Notification.error(sender, "已经存在名称为 " + name + " 的领地");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dominionDTO = DominionController.create(player, name, points.get(0), points.get(1));
|
||||||
|
if (dominionDTO == null) {
|
||||||
|
Notification.error(sender, "创建领地失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Notification.info(sender, "成功创建领地: " + name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动创建领地
|
||||||
|
* 会在玩家当前位置的周围创建一个 20x20x20 的领地
|
||||||
|
*
|
||||||
|
* @param sender 命令发送者
|
||||||
|
* @param args 命令参数
|
||||||
|
*/
|
||||||
|
public static void autoCreateDominion(CommandSender sender, String[] args) {
|
||||||
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
if (args.length != 2) {
|
||||||
|
Notification.error(sender, "用法: /dominion auto_create <领地名称>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String name = args[1];
|
||||||
|
DominionDTO dominionDTO = DominionDTO.select(name);
|
||||||
|
if (dominionDTO != null) {
|
||||||
|
Notification.error(sender, "已经存在名称为 " + name + " 的领地");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Location location = player.getLocation();
|
||||||
|
Location location1 = new Location(location.getWorld(), location.getX() - 10, location.getY() - 10, location.getZ() - 10);
|
||||||
|
Location location2 = new Location(location.getWorld(), location.getX() + 10, location.getY() + 10, location.getZ() + 10);
|
||||||
|
dominionDTO = DominionController.create(player, name, location1, location2);
|
||||||
|
if (dominionDTO == null) {
|
||||||
|
Notification.error(sender, "创建领地失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Notification.info(sender, "成功创建领地: " + name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void expandDominion(CommandSender sender, String[] args) {
|
||||||
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
if (args.length != 2 && args.length != 3) {
|
||||||
|
Notification.error(sender, "用法: /dominion expand [大小] [领地名称]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int size = 10;
|
||||||
|
String name = "";
|
||||||
|
if (args.length == 2) {
|
||||||
|
try {
|
||||||
|
size = Integer.parseInt(args[1]);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Notification.error(sender, "大小格式错误");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (args.length == 3) {
|
||||||
|
name = args[2];
|
||||||
|
}
|
||||||
|
DominionDTO dominionDTO;
|
||||||
|
if (name.isEmpty()) {
|
||||||
|
dominionDTO = DominionController.expand(player, size);
|
||||||
|
} else {
|
||||||
|
dominionDTO = DominionController.expand(player, size, name);
|
||||||
|
}
|
||||||
|
if (dominionDTO == null) {
|
||||||
|
Notification.error(sender, "扩展领地失败");
|
||||||
|
} else {
|
||||||
|
Notification.info(sender, "成功扩展领地: " + dominionDTO.getName() + " " + size);
|
||||||
|
sizeInfo(sender, dominionDTO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
154
src/main/java/cn/lunadeer/dominion/controllers/Apis.java
Normal file
154
src/main/java/cn/lunadeer/dominion/controllers/Apis.java
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||||
|
import cn.lunadeer.dominion.utils.Notification;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Apis {
|
||||||
|
|
||||||
|
public static boolean notOwner(Player player, DominionDTO dominion) {
|
||||||
|
if (player.isOp()) return false;
|
||||||
|
if (dominion.getOwner().equals(player.getUniqueId())) return false;
|
||||||
|
Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者,无法执行此操作");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean noAuthToChangeFlags(Player player, DominionDTO dominion) {
|
||||||
|
if (player.isOp()) return false;
|
||||||
|
if (!dominion.getOwner().equals(player.getUniqueId())) {
|
||||||
|
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId());
|
||||||
|
for (PlayerPrivilegeDTO privilege : privileges) {
|
||||||
|
if (privilege.getAdmin()) return false;
|
||||||
|
}
|
||||||
|
Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者或管理员,无法执行此操作");
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取玩家当前所在的领地
|
||||||
|
* 如果玩家不在一个领地内或者在子领地内,会提示玩家手动指定要操作的领地名称
|
||||||
|
*
|
||||||
|
* @param player 玩家
|
||||||
|
* @return 当前所在的领地
|
||||||
|
*/
|
||||||
|
public static DominionDTO getPlayerCurrentDominion(Player 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) {
|
||||||
|
Notification.error(player, "你不在一个领地内或在子领地内,无法确定你要操作的领地,请手动指定要操作的领地名称");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return dominions.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean updateTemplateFlag(PrivilegeTemplateDTO privilege, String flag, boolean value) {
|
||||||
|
switch (flag) {
|
||||||
|
case "anchor":
|
||||||
|
privilege.setAnchor(value);
|
||||||
|
break;
|
||||||
|
case "animal_killing":
|
||||||
|
privilege.setAnimalKilling(value);
|
||||||
|
break;
|
||||||
|
case "anvil":
|
||||||
|
privilege.setAnvil(value);
|
||||||
|
break;
|
||||||
|
case "beacon":
|
||||||
|
privilege.setBeacon(value);
|
||||||
|
break;
|
||||||
|
case "bed":
|
||||||
|
privilege.setBed(value);
|
||||||
|
break;
|
||||||
|
case "brew":
|
||||||
|
privilege.setBrew(value);
|
||||||
|
break;
|
||||||
|
case "button":
|
||||||
|
privilege.setButton(value);
|
||||||
|
break;
|
||||||
|
case "cake":
|
||||||
|
privilege.setCake(value);
|
||||||
|
break;
|
||||||
|
case "container":
|
||||||
|
privilege.setContainer(value);
|
||||||
|
break;
|
||||||
|
case "craft":
|
||||||
|
privilege.setCraft(value);
|
||||||
|
break;
|
||||||
|
case "diode":
|
||||||
|
privilege.setDiode(value);
|
||||||
|
break;
|
||||||
|
case "door":
|
||||||
|
privilege.setDoor(value);
|
||||||
|
break;
|
||||||
|
case "dye":
|
||||||
|
privilege.setDye(value);
|
||||||
|
break;
|
||||||
|
case "egg":
|
||||||
|
privilege.setEgg(value);
|
||||||
|
break;
|
||||||
|
case "enchant":
|
||||||
|
privilege.setEnchant(value);
|
||||||
|
break;
|
||||||
|
case "ender_pearl":
|
||||||
|
privilege.setEnderPearl(value);
|
||||||
|
break;
|
||||||
|
case "feed":
|
||||||
|
privilege.setFeed(value);
|
||||||
|
break;
|
||||||
|
case "glow":
|
||||||
|
privilege.setGlow(value);
|
||||||
|
break;
|
||||||
|
case "honey":
|
||||||
|
privilege.setHoney(value);
|
||||||
|
break;
|
||||||
|
case "hook":
|
||||||
|
privilege.setHook(value);
|
||||||
|
break;
|
||||||
|
case "ignite":
|
||||||
|
privilege.setIgnite(value);
|
||||||
|
break;
|
||||||
|
case "mob_killing":
|
||||||
|
privilege.setMobKilling(value);
|
||||||
|
break;
|
||||||
|
case "move":
|
||||||
|
privilege.setMove(value);
|
||||||
|
break;
|
||||||
|
case "place":
|
||||||
|
privilege.setPlace(value);
|
||||||
|
break;
|
||||||
|
case "pressure":
|
||||||
|
privilege.setPressure(value);
|
||||||
|
break;
|
||||||
|
case "riding":
|
||||||
|
privilege.setRiding(value);
|
||||||
|
break;
|
||||||
|
case "shear":
|
||||||
|
privilege.setShear(value);
|
||||||
|
break;
|
||||||
|
case "shoot":
|
||||||
|
privilege.setShoot(value);
|
||||||
|
break;
|
||||||
|
case "trade":
|
||||||
|
privilege.setTrade(value);
|
||||||
|
break;
|
||||||
|
case "vehicle_destroy":
|
||||||
|
privilege.setVehicleDestroy(value);
|
||||||
|
break;
|
||||||
|
case "harvest":
|
||||||
|
privilege.setHarvest(value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,6 @@
|
|||||||
package cn.lunadeer.dominion.controllers;
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.utils.Database;
|
|
||||||
import cn.lunadeer.dominion.utils.Notification;
|
import cn.lunadeer.dominion.utils.Notification;
|
||||||
import cn.lunadeer.dominion.utils.Time;
|
import cn.lunadeer.dominion.utils.Time;
|
||||||
import cn.lunadeer.dominion.utils.XLogger;
|
import cn.lunadeer.dominion.utils.XLogger;
|
||||||
@ -11,7 +9,9 @@ import org.bukkit.block.BlockFace;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
|
import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion;
|
||||||
|
import static cn.lunadeer.dominion.controllers.Apis.notOwner;
|
||||||
|
|
||||||
public class DominionController {
|
public class DominionController {
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ public class DominionController {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 是否是父领地的拥有者
|
// 是否是父领地的拥有者
|
||||||
if (!isOwner(owner, parent_dominion) && parent_dominion.getId() != -1) {
|
if (notOwner(owner, parent_dominion) && parent_dominion.getId() != -1) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 如果parent_dominion不为-1 检查是否在同一世界
|
// 如果parent_dominion不为-1 检查是否在同一世界
|
||||||
@ -80,7 +80,7 @@ public class DominionController {
|
|||||||
Notification.error(owner, "超出父领地 " + parent_dominion_name + " 范围");
|
Notification.error(owner, "超出父领地 " + parent_dominion_name + " 范围");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 获取此父领地的所有子领地
|
// 获取此领地的所有同级领地
|
||||||
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), parent_dominion.getId());
|
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), parent_dominion.getId());
|
||||||
// 检查是否与其他子领地冲突
|
// 检查是否与其他子领地冲突
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
@ -107,14 +107,11 @@ public class DominionController {
|
|||||||
* @return 扩展后的领地
|
* @return 扩展后的领地
|
||||||
*/
|
*/
|
||||||
public static DominionDTO expand(Player operator, Integer size) {
|
public static DominionDTO expand(Player operator, Integer size) {
|
||||||
Location location = operator.getLocation();
|
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
||||||
List<DominionDTO> dominions = DominionDTO.selectByLocation(location.getWorld().getName(),
|
if (dominion == null) {
|
||||||
(int) location.getX(), (int) location.getY(), (int) location.getZ());
|
|
||||||
if (dominions.size() != 1) {
|
|
||||||
Notification.error(operator, "你不在一个领地内或在一个子领地内,无法确定你要操作的领地,请手动指定要操作的领地名称");
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return expand(operator, size, dominions.get(0).getName());
|
return expand(operator, size, dominion.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -133,7 +130,7 @@ public class DominionController {
|
|||||||
Notification.error(operator, "领地 " + dominion_name + " 不存在");
|
Notification.error(operator, "领地 " + dominion_name + " 不存在");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!isOwner(operator, dominion)) {
|
if (notOwner(operator, dominion)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!location.getWorld().getName().equals(dominion.getWorld())) {
|
if (!location.getWorld().getName().equals(dominion.getWorld())) {
|
||||||
@ -202,14 +199,11 @@ public class DominionController {
|
|||||||
* @return 缩小后的领地
|
* @return 缩小后的领地
|
||||||
*/
|
*/
|
||||||
public static DominionDTO contract(Player operator, Integer size) {
|
public static DominionDTO contract(Player operator, Integer size) {
|
||||||
Location location = operator.getLocation();
|
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
||||||
List<DominionDTO> dominions = DominionDTO.selectByLocation(location.getWorld().getName(),
|
if (dominion == null) {
|
||||||
(int) location.getX(), (int) location.getY(), (int) location.getZ());
|
|
||||||
if (dominions.size() != 1) {
|
|
||||||
Notification.error(operator, "你不在一个领地内或在子领地内,无法确定你要操作的领地,请手动指定要操作的领地名称");
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return contract(operator, size, dominions.get(0).getName());
|
return contract(operator, size, dominion.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -228,7 +222,7 @@ public class DominionController {
|
|||||||
Notification.error(operator, "领地 " + dominion_name + " 不存在");
|
Notification.error(operator, "领地 " + dominion_name + " 不存在");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!isOwner(operator, dominion)) {
|
if (notOwner(operator, dominion)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!location.getWorld().getName().equals(dominion.getWorld())) {
|
if (!location.getWorld().getName().equals(dominion.getWorld())) {
|
||||||
@ -280,6 +274,105 @@ public class DominionController {
|
|||||||
return dominion.setXYZ(x1, y1, z1, x2, y2, z2);
|
return dominion.setXYZ(x1, y1, z1, x2, y2, z2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除领地 会同时删除其所有子领地
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param dominion_name 领地名称
|
||||||
|
* @param force 是否强制删除
|
||||||
|
*/
|
||||||
|
public static void delete(Player operator, String dominion_name, boolean force) {
|
||||||
|
DominionDTO dominion = DominionDTO.select(dominion_name);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "领地 " + dominion_name + " 不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (notOwner(operator, dominion)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId());
|
||||||
|
if (!force) {
|
||||||
|
Notification.warn(operator, "删除领地 " + 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);
|
||||||
|
}
|
||||||
|
Notification.warn(operator, "输入 /dominion force_delete " + dominion_name + " 确认删除");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO.delete(dominion);
|
||||||
|
Notification.info(operator, "领地 " + dominion_name + " 及其所有子领地已删除");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置领地的进入消息
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param message 消息
|
||||||
|
*/
|
||||||
|
public static void setJoinMessage(Player operator, String message) {
|
||||||
|
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
||||||
|
if (dominion == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setJoinMessage(operator, dominion.getName(), message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置进入领地的消息
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param dominion_name 领地名称
|
||||||
|
* @param message 消息
|
||||||
|
*/
|
||||||
|
public static void setJoinMessage(Player operator, String dominion_name, String message) {
|
||||||
|
DominionDTO dominion = DominionDTO.select(dominion_name);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "领地 " + dominion_name + " 不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (notOwner(operator, dominion)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dominion.setJoinMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置领地的离开消息
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param message 消息
|
||||||
|
*/
|
||||||
|
public static void setLeaveMessage(Player operator, String message) {
|
||||||
|
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
||||||
|
if (dominion == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setLeaveMessage(operator, dominion.getName(), message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置离开领地的消息
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param dominion_name 领地名称
|
||||||
|
* @param message 消息
|
||||||
|
*/
|
||||||
|
public static void setLeaveMessage(Player operator, String dominion_name, String message) {
|
||||||
|
DominionDTO dominion = DominionDTO.select(dominion_name);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "领地 " + dominion_name + " 不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (notOwner(operator, dominion)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dominion.setLeaveMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断两个领地是否相交
|
* 判断两个领地是否相交
|
||||||
@ -316,12 +409,4 @@ public class DominionController {
|
|||||||
sub.getY1() >= y1 && sub.getY2() <= y2 &&
|
sub.getY1() >= y1 && sub.getY2() <= y2 &&
|
||||||
sub.getZ1() >= z1 && sub.getZ2() <= z2;
|
sub.getZ1() >= z1 && sub.getZ2() <= z2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isOwner(Player player, DominionDTO dominion) {
|
|
||||||
if (dominion.getOwner().equals(player.getUniqueId())) return true;
|
|
||||||
Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者,无法执行此操作");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,82 @@
|
|||||||
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.utils.Notification;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
||||||
|
|
||||||
|
public class FlagsController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置领地权限
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param flag 权限名称
|
||||||
|
* @param value 权限值
|
||||||
|
* @return 设置后的领地信息
|
||||||
|
*/
|
||||||
|
public static DominionDTO setFlag(Player operator, String flag, boolean value){
|
||||||
|
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||||
|
if (dominion == null) return null;
|
||||||
|
return setFlag(operator, flag, value, dominion.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置领地权限
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param flag 权限名称
|
||||||
|
* @param value 权限值
|
||||||
|
* @param dominionName 领地名称
|
||||||
|
* @return 设置后的领地信息
|
||||||
|
*/
|
||||||
|
public static DominionDTO setFlag(Player operator, String flag, boolean value, String dominionName) {
|
||||||
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "领地 " + dominionName + " 不存在");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (noAuthToChangeFlags(operator, dominion)) return null;
|
||||||
|
switch (flag) {
|
||||||
|
case "anchor": return dominion.setAnchor(value);
|
||||||
|
case "animal_killing": return dominion.setAnimalKilling(value);
|
||||||
|
case "anvil": return dominion.setAnvil(value);
|
||||||
|
case "beacon": return dominion.setBeacon(value);
|
||||||
|
case "bed": return dominion.setBed(value);
|
||||||
|
case "brew": return dominion.setBrew(value);
|
||||||
|
case "button": return dominion.setButton(value);
|
||||||
|
case "cake": return dominion.setCake(value);
|
||||||
|
case "container": return dominion.setContainer(value);
|
||||||
|
case "craft": return dominion.setCraft(value);
|
||||||
|
case "creeper_explode": return dominion.setCreeperExplode(value);
|
||||||
|
case "diode": return dominion.setDiode(value);
|
||||||
|
case "door": return dominion.setDoor(value);
|
||||||
|
case "dye": return dominion.setDye(value);
|
||||||
|
case "egg": return dominion.setEgg(value);
|
||||||
|
case "enchant": return dominion.setEnchant(value);
|
||||||
|
case "ender_pearl": return dominion.setEnderPearl(value);
|
||||||
|
case "feed": return dominion.setFeed(value);
|
||||||
|
case "fire_spread": return dominion.setFireSpread(value);
|
||||||
|
case "flow_in_protection": return dominion.setFlowInProtection(value);
|
||||||
|
case "glow": return dominion.setGlow(value);
|
||||||
|
case "grow": return dominion.setGrow(value);
|
||||||
|
case "honey": return dominion.setHoney(value);
|
||||||
|
case "hook": return dominion.setHook(value);
|
||||||
|
case "ignite": return dominion.setIgnite(value);
|
||||||
|
case "mob_killing": return dominion.setMobKilling(value);
|
||||||
|
case "move": return dominion.setMove(value);
|
||||||
|
case "place": return dominion.setPlace(value);
|
||||||
|
case "pressure": return dominion.setPressure(value);
|
||||||
|
case "riding": return dominion.setRiding(value);
|
||||||
|
case "shear": return dominion.setShear(value);
|
||||||
|
case "shoot": return dominion.setShoot(value);
|
||||||
|
case "tnt_explode": return dominion.setTntExplode(value);
|
||||||
|
case "trade": return dominion.setTrade(value);
|
||||||
|
case "vehicle_destroy": return dominion.setVehicleDestroy(value);
|
||||||
|
case "wither_spawn": return dominion.setWitherSpawn(value);
|
||||||
|
case "harvest": return dominion.setHarvest(value);
|
||||||
|
default:
|
||||||
|
Notification.error(operator, "未知的领地权限 " + flag);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,148 @@
|
|||||||
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||||
|
import cn.lunadeer.dominion.utils.Notification;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
||||||
|
|
||||||
|
public class GroupController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建权限组
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param name 权限组名称
|
||||||
|
* @return 是否创建成功
|
||||||
|
*/
|
||||||
|
public static PrivilegeTemplateDTO create(Player operator, String name) {
|
||||||
|
PrivilegeTemplateDTO template = new PrivilegeTemplateDTO(name, operator.getUniqueId(), true);
|
||||||
|
template = PrivilegeTemplateDTO.insert(template);
|
||||||
|
if (template == null) {
|
||||||
|
Notification.error(operator, "创建权限组失败");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除权限组
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param name 权限组名称
|
||||||
|
* @return 是否删除成功
|
||||||
|
*/
|
||||||
|
public static boolean delete(Player operator, String name) {
|
||||||
|
PrivilegeTemplateDTO.delete(operator.getUniqueId(), name);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置权限组的权限
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param name 权限组名称
|
||||||
|
* @param flag 权限名称
|
||||||
|
* @param value 权限值
|
||||||
|
* @return 是否设置成功
|
||||||
|
*/
|
||||||
|
public static boolean setFlag(Player operator, String name, String flag, boolean value) {
|
||||||
|
PrivilegeTemplateDTO privilege = PrivilegeTemplateDTO.select(operator.getUniqueId(), name);
|
||||||
|
if (privilege == null) {
|
||||||
|
Notification.error(operator, "没有找到权限组 " + name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Apis.updateTemplateFlag(privilege, flag, value)) {
|
||||||
|
Notification.error(operator, "未知的领地权限 " + flag);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加玩家到权限组
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param player 玩家
|
||||||
|
* @param groupName 权限组名称
|
||||||
|
* @return 是否添加成功
|
||||||
|
*/
|
||||||
|
public static boolean addPlayer(Player operator, UUID player, String groupName) {
|
||||||
|
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||||
|
if (dominion == null) return false;
|
||||||
|
return addPlayer(operator, player, groupName, dominion.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加玩家到权限组
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param player 玩家
|
||||||
|
* @param groupName 权限组名称
|
||||||
|
* @param dominionName 领地名称
|
||||||
|
* @return 是否添加成功
|
||||||
|
*/
|
||||||
|
public static boolean addPlayer(Player operator, UUID player, String groupName, String dominionName) {
|
||||||
|
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), groupName);
|
||||||
|
if (template == null) {
|
||||||
|
Notification.error(operator, "没有找到权限组 " + groupName + " 或者需要先创建权限组");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "领地 " + dominionName + " 不存在");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (noAuthToChangeFlags(operator, dominion)) return false;
|
||||||
|
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, false, dominion.getId(), template.getId());
|
||||||
|
privilege = PlayerPrivilegeDTO.insert(privilege);
|
||||||
|
if (privilege == null) {
|
||||||
|
Notification.error(operator, "添加玩家 " + player + " 到权限组 " + groupName + " 失败");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从权限组中移除玩家
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param player 玩家
|
||||||
|
* @param groupName 权限组名称
|
||||||
|
* @return 是否移除成功
|
||||||
|
*/
|
||||||
|
public static boolean removePlayer(Player operator, UUID player, String groupName) {
|
||||||
|
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||||
|
if (dominion == null) return false;
|
||||||
|
return removePlayer(operator, player, groupName, dominion.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从权限组中移除玩家
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param player 玩家
|
||||||
|
* @param groupName 权限组名称
|
||||||
|
* @param dominionName 领地名称
|
||||||
|
* @return 是否移除成功
|
||||||
|
*/
|
||||||
|
public static boolean removePlayer(Player operator, UUID player, String groupName, String dominionName) {
|
||||||
|
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), groupName);
|
||||||
|
if (template == null) {
|
||||||
|
Notification.error(operator, "没有找到权限组 " + groupName);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "领地 " + dominionName + " 不存在");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (noAuthToChangeFlags(operator, dominion)) return false;
|
||||||
|
PlayerPrivilegeDTO.delete(player, dominion.getId(), template.getId());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,155 @@
|
|||||||
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||||
|
import cn.lunadeer.dominion.utils.Notification;
|
||||||
|
import cn.lunadeer.dominion.utils.XLogger;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
||||||
|
|
||||||
|
public class PrivilegeController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空玩家特权
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param player 玩家
|
||||||
|
* @return 是否清空成功
|
||||||
|
*/
|
||||||
|
public static boolean clearPrivilege(Player operator, UUID player) {
|
||||||
|
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||||
|
if (dominion == null) return false;
|
||||||
|
return clearPrivilege(operator, player, dominion.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空玩家特权
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param player 玩家
|
||||||
|
* @param dominionName 领地名称
|
||||||
|
* @return 是否清空成功
|
||||||
|
*/
|
||||||
|
public static boolean clearPrivilege(Player operator, UUID player, String dominionName) {
|
||||||
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "领地 " + dominionName + " 不存在");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (noAuthToChangeFlags(operator, dominion)) return false;
|
||||||
|
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(player, dominion.getId());
|
||||||
|
List<PrivilegeTemplateDTO> templates = getPlayerPrivilegeTemplates(player, dominion.getId());
|
||||||
|
if (templates.size() < 1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for (PrivilegeTemplateDTO template : templates) {
|
||||||
|
PlayerPrivilegeDTO.delete(player, dominion.getId(), template.getId());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置玩家特权
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param player 玩家
|
||||||
|
* @param flag 权限名称
|
||||||
|
* @param value 权限值
|
||||||
|
* @return 是否设置成功
|
||||||
|
*/
|
||||||
|
public static boolean setPrivilege(Player operator, UUID player, String flag, boolean value) {
|
||||||
|
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||||
|
if (dominion == null) return false;
|
||||||
|
return setPrivilege(operator, player, flag, value, dominion.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置玩家特权
|
||||||
|
*
|
||||||
|
* @param operator 操作者
|
||||||
|
* @param player 玩家
|
||||||
|
* @param flag 权限名称
|
||||||
|
* @param value 权限值
|
||||||
|
* @param dominionName 领地名称
|
||||||
|
* @return 是否设置成功
|
||||||
|
*/
|
||||||
|
public static boolean setPrivilege(Player operator, UUID player, String flag, boolean value, String dominionName) {
|
||||||
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "领地 " + dominionName + " 不存在");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (noAuthToChangeFlags(operator, dominion)) return false;
|
||||||
|
List<PrivilegeTemplateDTO> templates = getPlayerPrivilegeTemplates(player, dominion.getId());
|
||||||
|
if (templates.size() < 1) {
|
||||||
|
PrivilegeTemplateDTO template = createPlayerPrivilege(operator, player, dominion.getId());
|
||||||
|
if (template == null) return false;
|
||||||
|
templates.add(template);
|
||||||
|
}
|
||||||
|
if (templates.size() > 1) {
|
||||||
|
Notification.error(operator, "玩家特权拥有多个权限模板,建议使用 clear_privilege 清空此玩家特权后重新设置");
|
||||||
|
XLogger.warn("玩家特权拥有多个权限模板,使用搜索到的第一个 id: " + templates.get(0).getId() + " 进行操作,请检查数据库");
|
||||||
|
XLogger.warn("其他权限模板如下:");
|
||||||
|
for (int i = 1; i < templates.size(); i++) {
|
||||||
|
XLogger.warn(" id: " + templates.get(i).getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PrivilegeTemplateDTO privilege = templates.get(0);
|
||||||
|
if (Objects.equals(flag, "admin")) {
|
||||||
|
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(player, dominion.getId());
|
||||||
|
for (PlayerPrivilegeDTO p : privileges) {
|
||||||
|
if (p.getPrivilegeTemplateID().equals(privilege.getId())) {
|
||||||
|
p = p.setAdmin(value);
|
||||||
|
if (p == null) {
|
||||||
|
Notification.error(operator, "更新玩家特权失败");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Notification.error(operator, "没有找到玩家权限关联数据");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!Apis.updateTemplateFlag(privilege, flag, value)){
|
||||||
|
Notification.error(operator, "未知的领地权限 " + flag);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PrivilegeTemplateDTO createPlayerPrivilege(Player operator, UUID player, Integer domID) {
|
||||||
|
PrivilegeTemplateDTO template = new PrivilegeTemplateDTO(player.toString(), operator.getUniqueId(), false);
|
||||||
|
template = PrivilegeTemplateDTO.insert(template);
|
||||||
|
if (template == null) {
|
||||||
|
Notification.error(operator, "创建玩家特权失败");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, false, domID, template.getId());
|
||||||
|
privilege = PlayerPrivilegeDTO.insert(privilege);
|
||||||
|
if (privilege == null) {
|
||||||
|
Notification.error(operator, "创建玩家特权关联玩家时失败");
|
||||||
|
PrivilegeTemplateDTO.delete(template);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<PrivilegeTemplateDTO> getPlayerPrivilegeTemplates(UUID player, Integer domID) {
|
||||||
|
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(player, domID);
|
||||||
|
List<PrivilegeTemplateDTO> templates = new ArrayList<>();
|
||||||
|
for (PlayerPrivilegeDTO privilege : privileges) {
|
||||||
|
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(privilege.getPrivilegeTemplateID());
|
||||||
|
if (template == null) continue;
|
||||||
|
if (template.getGroup()) continue; // 跳过组权限
|
||||||
|
templates.add(template);
|
||||||
|
}
|
||||||
|
return templates;
|
||||||
|
}
|
||||||
|
}
|
@ -22,11 +22,10 @@ public class PlayerPrivilegeDTO {
|
|||||||
return players.get(0);
|
return players.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerPrivilegeDTO select(UUID playerUUID) {
|
public static List<PlayerPrivilegeDTO> select(UUID playerUUID, Integer dom_id) {
|
||||||
String sql = "SELECT * FROM player_privilege WHERE player_uuid = '" + playerUUID + "'";
|
String sql = "SELECT * FROM player_privilege WHERE player_uuid = '" + playerUUID + "' " +
|
||||||
List<PlayerPrivilegeDTO> players = query(sql);
|
"AND dom_id = " + dom_id;
|
||||||
if (players.size() == 0) return null;
|
return query(sql);
|
||||||
return players.get(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerPrivilegeDTO select(Integer dom_id) {
|
public static PlayerPrivilegeDTO select(Integer dom_id) {
|
||||||
@ -36,15 +35,15 @@ public class PlayerPrivilegeDTO {
|
|||||||
return players.get(0);
|
return players.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerPrivilegeDTO select(Integer dom_id, UUID playerUUID) {
|
public static void delete(UUID player, Integer domID, Integer privilegeTemplateID) {
|
||||||
String sql = "SELECT * FROM player_privilege WHERE dom_id = " + dom_id + " AND player_uuid = '" + playerUUID + "'";
|
String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "' " +
|
||||||
List<PlayerPrivilegeDTO> players = query(sql);
|
"AND dom_id = " + domID + " " +
|
||||||
if (players.size() == 0) return null;
|
"AND privilege_template_id = " + privilegeTemplateID;
|
||||||
return players.get(0);
|
query(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void delete(PlayerPrivilegeDTO player) {
|
public static void delete(UUID player) {
|
||||||
String sql = "DELETE FROM player_privilege WHERE id = " + player.getId();
|
String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "'";
|
||||||
query(sql);
|
query(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,9 +78,9 @@ public class PlayerPrivilegeDTO {
|
|||||||
return privilegeTemplateID;
|
return privilegeTemplateID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAdmin(Boolean admin) {
|
public PlayerPrivilegeDTO setAdmin(Boolean admin) {
|
||||||
this.admin = admin;
|
this.admin = admin;
|
||||||
update(this);
|
return update(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Integer privilegeTemplateID) {
|
private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Integer privilegeTemplateID) {
|
||||||
|
@ -28,6 +28,30 @@ public class PrivilegeTemplateDTO {
|
|||||||
return query(sql);
|
return query(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<PrivilegeTemplateDTO> searchGroup(String name){
|
||||||
|
String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%' AND group = true";
|
||||||
|
return query(sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<PrivilegeTemplateDTO> searchGroup(UUID creator){
|
||||||
|
String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "' AND group = true";
|
||||||
|
return query(sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PrivilegeTemplateDTO select(Integer id) {
|
||||||
|
String sql = "SELECT * FROM privilege_template WHERE id = " + id;
|
||||||
|
List<PrivilegeTemplateDTO> templates = query(sql);
|
||||||
|
if (templates.size() == 0) return null;
|
||||||
|
return templates.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PrivilegeTemplateDTO select(UUID creator, String name) {
|
||||||
|
String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "' AND name = '" + name + "'";
|
||||||
|
List<PrivilegeTemplateDTO> templates = query(sql);
|
||||||
|
if (templates.size() == 0) return null;
|
||||||
|
return templates.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
public static List<PrivilegeTemplateDTO> search(String name) {
|
public static List<PrivilegeTemplateDTO> search(String name) {
|
||||||
String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%'";
|
String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%'";
|
||||||
return query(sql);
|
return query(sql);
|
||||||
@ -43,6 +67,11 @@ public class PrivilegeTemplateDTO {
|
|||||||
query(sql);
|
query(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void delete(UUID creator, String name) {
|
||||||
|
String sql = "DELETE FROM privilege_template WHERE creator = '" + creator.toString() + "' AND name = '" + name + "'";
|
||||||
|
query(sql);
|
||||||
|
}
|
||||||
|
|
||||||
private static PrivilegeTemplateDTO update(PrivilegeTemplateDTO privilege) {
|
private static PrivilegeTemplateDTO update(PrivilegeTemplateDTO privilege) {
|
||||||
String sql = "UPDATE privilege_template SET " +
|
String sql = "UPDATE privilege_template SET " +
|
||||||
"name = '" + privilege.getName() + "', " +
|
"name = '" + privilege.getName() + "', " +
|
||||||
|
@ -143,6 +143,7 @@ public class Database {
|
|||||||
" trade BOOLEAN NOT NULL DEFAULT FALSE," +
|
" trade BOOLEAN NOT NULL DEFAULT FALSE," +
|
||||||
" vehicle_destroy BOOLEAN NOT NULL DEFAULT FALSE," +
|
" vehicle_destroy BOOLEAN NOT NULL DEFAULT FALSE," +
|
||||||
" harvest BOOLEAN NOT NULL DEFAULT FALSE," +
|
" harvest BOOLEAN NOT NULL DEFAULT FALSE," +
|
||||||
|
" UNIQUE (name, creator)," +
|
||||||
" FOREIGN KEY (creator) REFERENCES player_name(uuid)" +
|
" FOREIGN KEY (creator) REFERENCES player_name(uuid)" +
|
||||||
")";
|
")";
|
||||||
|
|
||||||
|
@ -6,7 +6,8 @@ import net.kyori.adventure.text.TextComponent;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.STUI.ViewStyles.*;
|
import static cn.lunadeer.dominion.utils.STUI.ViewStyles.main_color;
|
||||||
|
import static cn.lunadeer.dominion.utils.STUI.ViewStyles.sub_color;
|
||||||
|
|
||||||
|
|
||||||
public class Pagination {
|
public class Pagination {
|
||||||
|
@ -7,7 +7,7 @@ import org.bukkit.entity.Player;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.STUI.ViewStyles.*;
|
import static cn.lunadeer.dominion.utils.STUI.ViewStyles.main_color;
|
||||||
|
|
||||||
public class View {
|
public class View {
|
||||||
protected TextComponent title_decorate = Component.text("━", main_color);
|
protected TextComponent title_decorate = Component.text("━", main_color);
|
||||||
|
@ -4,3 +4,8 @@ main: cn.lunadeer.dominion.Dominion
|
|||||||
api-version: '1.20'
|
api-version: '1.20'
|
||||||
load: STARTUP
|
load: STARTUP
|
||||||
folia-supported: true
|
folia-supported: true
|
||||||
|
commands:
|
||||||
|
Dominion:
|
||||||
|
description: 领地插件命令
|
||||||
|
usage: /dominion <cmd>
|
||||||
|
aliases: [dominion, dom]
|
Loading…
Reference in New Issue
Block a user