新增重命名与转让领地指令以及功能
This commit is contained in:
parent
b797140d30
commit
5b18242be4
29
README.md
29
README.md
@ -1,5 +1,9 @@
|
||||
# Dominion
|
||||
|
||||
开源地址:[Gitea](https://ssl.lunadeer.cn:14446/zhangyuheng/Dominion)
|
||||
|
||||
文档地址:[Doc](https://ssl.lunadeer.cn:14448/doc/23/)
|
||||
|
||||
## 简介
|
||||
|
||||
鉴于 Residence 插件的作者项目较多,维护压力大,无法及时跟进新版本以及适配Folia核心。故开发此插件,旨在平替纯净版生存服Residence的使用。
|
||||
@ -40,7 +44,8 @@
|
||||
|
||||
领地有两种创建方式:1.手动选择区域创建;2.以操作者为中心自动创建。
|
||||
|
||||
手动创建:需要使用箭矢作为选区工具,依次使用左键点选领地长方体区域的第一个点、右键点击长方体区域的第二个点。然后使用`/dominion create <领地名称>`创建领地,领地名称不可与其他领地重复。
|
||||
手动创建:需要使用箭矢作为选区工具,依次使用左键点选领地长方体区域的第一个点、右键点击长方体区域的第二个点。然后使用`/dominion create <领地名称>`
|
||||
创建领地,领地名称不可与其他领地重复。
|
||||
|
||||
自动创建:不需要选择对角线点,会以玩家为中心自动创建一定区域的领地。使用 `/dominion auto_create <领地名称>`即可自动创建领地区域。
|
||||
|
||||
@ -80,7 +85,8 @@
|
||||
|
||||
同样可以点击【清除】,即可删除此玩家在此领地的所有特权。
|
||||
|
||||
管理员:你可以在玩家特权中将一个玩家设置为【管理员】,那么此玩家即可拥有所有特权,同时此玩家还会**拥有此领地的权限编辑权限**,但是无法对领地大小进行编辑,同时也无法设置其他玩家为管理员。
|
||||
管理员:你可以在玩家特权中将一个玩家设置为【管理员】,那么此玩家即可拥有所有特权,同时此玩家还会**拥有此领地的权限编辑权限**
|
||||
,但是无法对领地大小进行编辑,同时也无法设置其他玩家为管理员。
|
||||
|
||||
### 4. 领地范围编辑
|
||||
|
||||
@ -119,28 +125,31 @@
|
||||
以下指令尖括号`<>`表示必填参数,方括号`[]`表示可选参数。
|
||||
|
||||
| 指令名 | 指令 |
|
||||
|-----|----|
|
||||
|------------|-------------------------------------------------------------|
|
||||
| 打开交互菜单 | `/dominion menu` |
|
||||
| 列出所有领地 | `/dominion list` |
|
||||
| 查看帮助 | `/dominion help [页码]` |
|
||||
| 查看领地信息 | `/dominion info [领地名称]` |
|
||||
| 查看领地权限信息 | `/dominion flag_info <领地名称> [页码]` |
|
||||
| 管理领地 | `/dominion manage <领地名称>` |
|
||||
| 创建领地 | `/dominion create <领地名称>` |
|
||||
| 自动创建领地 | `/dominion auto_create <领地名称>` |
|
||||
| 创建子领地 | `/dominion create_sub <子领地名称> [父领地名称]` |
|
||||
| 自动创建子领地 | `/dominion auto_create_sub <子领地名称> [父领地名称]` |
|
||||
| 管理领地 | `/dominion manage <领地名称>` |
|
||||
| 扩张领地 | `/dominion expand [大小] [领地名称]` |
|
||||
| 缩小领地 | `/dominion contract [大小] [领地名称]` |
|
||||
| 删除领地 | `/dominion delete <领地名称> [force]` |
|
||||
| 设置进入领地的提示语 | `/dominion set_enter_msg <提示语> [领地名称]` |
|
||||
| 设置离开领地的提示语 | `/dominion set_leave_msg <提示语> [领地名称]` |
|
||||
| 重命名领地 | `/dominion rename <原领地名称> <新领地名称>` |
|
||||
| 转让领地 | `/dominion give <领地名称> <玩家名称>` |
|
||||
| 删除领地 | `/dominion delete <领地名称>` |
|
||||
| ---------- | ---------- |
|
||||
| 列出所有领地 | `/dominion list` |
|
||||
| 查看领地信息 | `/dominion info [领地名称]` |
|
||||
| 查看领地权限信息 | `/dominion flag_info <领地名称> [页码]` |
|
||||
| 设置领地权限 | `/dominion set <权限名称> <true/false> [领地名称]` |
|
||||
| 创建玩家特权 | `/dominion create_privilege <玩家名称> [领地名称]` |
|
||||
| 设置玩家特权 | `/dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]` |
|
||||
| 重置玩家特权 | `/dominion clear_privilege <玩家名称> [领地名称]` |
|
||||
| 查看领地玩家特权列表 | `/dominion privilege_list [领地名称] [页码]` |
|
||||
| 查看玩家特权信息 | `/dominion privilege_info <玩家名称> [领地名称] [页码]` |
|
||||
| 设置进入领地的提示语 | `/dominion set_enter_msg <提示语> [领地名称]` |
|
||||
| 设置离开领地的提示语 | `/dominion set_leave_msg <提示语> [领地名称]` |
|
||||
|
||||
### 管理员指令
|
||||
|
||||
|
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>cn.lunadeer</groupId>
|
||||
<artifactId>Dominion</artifactId>
|
||||
<version>1.7.0-beta</version>
|
||||
<version>1.8.0-beta</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Dominion</name>
|
||||
|
@ -123,6 +123,12 @@ public class Commands implements TabExecutor {
|
||||
case "set_leave_msg":
|
||||
DominionOperate.setLeaveMessage(sender, args);
|
||||
break;
|
||||
case "rename":
|
||||
DominionOperate.renameDominion(sender, args);
|
||||
break;
|
||||
case "give":
|
||||
DominionOperate.giveDominion(sender, args);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@ -149,7 +155,9 @@ public class Commands implements TabExecutor {
|
||||
"create", "auto_create", "create_sub", "auto_create_sub", "expand", "contract", "delete", "set",
|
||||
"create_privilege", "set_privilege", "clear_privilege", "list", "privilege_info",
|
||||
"set_enter_msg",
|
||||
"set_leave_msg"
|
||||
"set_leave_msg",
|
||||
"rename",
|
||||
"give"
|
||||
);
|
||||
}
|
||||
if (args.length == 2) {
|
||||
@ -165,6 +173,8 @@ public class Commands implements TabExecutor {
|
||||
case "manage":
|
||||
case "flag_info":
|
||||
case "privilege_list":
|
||||
case "rename":
|
||||
case "give":
|
||||
return playerDominions(sender);
|
||||
case "set":
|
||||
return dominionFlags();
|
||||
@ -201,6 +211,10 @@ public class Commands implements TabExecutor {
|
||||
case "set_enter_msg":
|
||||
case "set_leave_msg":
|
||||
return playerDominions(sender);
|
||||
case "rename":
|
||||
return Collections.singletonList("输入新领地名称");
|
||||
case "give":
|
||||
return playerNames();
|
||||
}
|
||||
}
|
||||
if (args.length == 4) {
|
||||
|
@ -211,7 +211,7 @@ public class DominionOperate {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Notification.error(sender, "用法: /dominion delete <领地名称> [force]");
|
||||
Notification.error(sender, "用法: /dominion delete <领地名称>");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -255,4 +255,48 @@ public class DominionOperate {
|
||||
}
|
||||
Notification.error(sender, "用法: /dominion set_leave_msg <提示语> [领地名称]");
|
||||
}
|
||||
|
||||
/**
|
||||
* 重命名领地
|
||||
* /dominion rename <原领地名称> <新领地名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void renameDominion(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
if (args.length != 3) {
|
||||
Notification.error(sender, "用法: /dominion rename <原领地名称> <新领地名称>");
|
||||
return;
|
||||
}
|
||||
DominionController.rename(player, args[1], args[2]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 转让领地
|
||||
* /dominion give <领地名称> <玩家名称> [force]
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void giveDominion(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
if (args.length == 3) {
|
||||
String dom_name = args[1];
|
||||
String player_name = args[2];
|
||||
DominionController.give(player, dom_name, player_name, false);
|
||||
return;
|
||||
}
|
||||
if (args.length == 4) {
|
||||
String dom_name = args[1];
|
||||
String player_name = args[2];
|
||||
if (args[3].equals("force")) {
|
||||
DominionController.give(player, dom_name, player_name, true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
Notification.error(sender, "用法: /dominion give <领地名称> <玩家名称>");
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package cn.lunadeer.dominion.controllers;
|
||||
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.utils.Notification;
|
||||
import cn.lunadeer.dominion.utils.Time;
|
||||
import cn.lunadeer.dominion.utils.XLogger;
|
||||
@ -9,7 +10,9 @@ import org.bukkit.Location;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.lunadeer.dominion.controllers.Apis.*;
|
||||
|
||||
@ -314,7 +317,7 @@ public class DominionController {
|
||||
if (notOwner(operator, dominion)) {
|
||||
return;
|
||||
}
|
||||
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId());
|
||||
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
|
||||
if (!force) {
|
||||
Notification.warn(operator, "删除领地 " + dominion_name + " 会同时删除其所有子领地,是否继续?");
|
||||
String sub_names = "";
|
||||
@ -323,7 +326,7 @@ public class DominionController {
|
||||
}
|
||||
if (sub_dominions.size() > 0) {
|
||||
sub_names = sub_names.substring(0, sub_names.length() - 2);
|
||||
Notification.warn(operator, "当前子领地(不包含子领地的子领地等):" + sub_names);
|
||||
Notification.warn(operator, "当前子领地:" + sub_names);
|
||||
}
|
||||
Notification.warn(operator, "输入 /dominion delete " + dominion_name + " force 确认删除");
|
||||
return;
|
||||
@ -364,6 +367,7 @@ public class DominionController {
|
||||
return;
|
||||
}
|
||||
dominion.setJoinMessage(message);
|
||||
Notification.info(operator, "成功设置领地 " + dominion_name + " 的进入消息");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -398,6 +402,82 @@ public class DominionController {
|
||||
return;
|
||||
}
|
||||
dominion.setLeaveMessage(message);
|
||||
Notification.info(operator, "成功设置领地 " + dominion_name + " 的离开消息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 重命名领地
|
||||
*
|
||||
* @param operator 操作者
|
||||
* @param old_name 旧名称
|
||||
* @param new_name 新名称
|
||||
*/
|
||||
public static void rename(Player operator, String old_name, String new_name) {
|
||||
DominionDTO dominion = DominionDTO.select(old_name);
|
||||
if (dominion == null) {
|
||||
Notification.error(operator, "领地 " + old_name + " 不存在");
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion)) {
|
||||
Notification.error(operator, "你不是领地 " + old_name + " 的拥有者,无法执行此操作");
|
||||
return;
|
||||
}
|
||||
if (DominionDTO.select(new_name) != null) {
|
||||
Notification.error(operator, "已经存在名称为 " + new_name + " 的领地");
|
||||
return;
|
||||
}
|
||||
dominion.setName(new_name);
|
||||
Notification.info(operator, "成功将领地 " + old_name + " 重命名为 " + new_name);
|
||||
}
|
||||
|
||||
/**
|
||||
* 转让领地
|
||||
*
|
||||
* @param operator 操作者
|
||||
* @param dom_name 领地名称
|
||||
* @param player_name 玩家名称
|
||||
* @param force 是否强制转让
|
||||
*/
|
||||
public static void give(Player operator, String dom_name, String player_name, boolean force) {
|
||||
if (Objects.equals(player_name, operator.getName())) {
|
||||
Notification.error(operator, "你不能将领地转让给自己");
|
||||
return;
|
||||
}
|
||||
DominionDTO dominion = DominionDTO.select(dom_name);
|
||||
if (dominion == null) {
|
||||
Notification.error(operator, "领地 " + dom_name + " 不存在");
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion)) {
|
||||
return;
|
||||
}
|
||||
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
||||
if (player == null) {
|
||||
Notification.error(operator, "玩家 " + player_name + " 不存在");
|
||||
return;
|
||||
}
|
||||
if (dominion.getParentDomId() != -1) {
|
||||
Notification.error(operator, "子领地无法转让,你可以通过将玩家设置为管理员来让其管理子领地");
|
||||
return;
|
||||
}
|
||||
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
|
||||
if (!force) {
|
||||
Notification.warn(operator, "转让领地 " + dom_name + " 给 " + player_name + " 会同时转让其所有子领地,是否继续?");
|
||||
String sub_names = "";
|
||||
for (DominionDTO sub_dominion : sub_dominions) {
|
||||
sub_names = sub_dominion.getName() + ", ";
|
||||
}
|
||||
if (sub_dominions.size() > 0) {
|
||||
sub_names = sub_names.substring(0, sub_names.length() - 2);
|
||||
Notification.warn(operator, "当前子领地:" + sub_names);
|
||||
}
|
||||
Notification.warn(operator, "输入 /dominion give " + dom_name + " " + player_name + " force 确认转让");
|
||||
return;
|
||||
}
|
||||
for (DominionDTO sub_dominion : sub_dominions) {
|
||||
sub_dominion.setOwner(player.getUuid());
|
||||
}
|
||||
Notification.info(operator, "成功将领地 " + dom_name + " 及其所有子领地转让给 " + player_name);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -435,4 +515,14 @@ public class DominionController {
|
||||
sub.getY1() >= y1 && sub.getY2() <= y2 &&
|
||||
sub.getZ1() >= z1 && sub.getZ2() <= z2;
|
||||
}
|
||||
|
||||
private static List<DominionDTO> getSubDominionsRecursive(DominionDTO dominion) {
|
||||
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId());
|
||||
List<DominionDTO> sub_sub_dominions = new ArrayList<>();
|
||||
for (DominionDTO sub_dominion : sub_dominions) {
|
||||
sub_sub_dominions.addAll(getSubDominionsRecursive(sub_dominion));
|
||||
}
|
||||
sub_dominions.addAll(sub_sub_dominions);
|
||||
return sub_dominions;
|
||||
}
|
||||
}
|
||||
|
@ -321,7 +321,7 @@ public class DominionDTO {
|
||||
|
||||
private Integer id;
|
||||
private UUID owner;
|
||||
private final String name;
|
||||
private String name;
|
||||
private final String world;
|
||||
private Integer x1;
|
||||
private Integer y1;
|
||||
@ -396,6 +396,11 @@ public class DominionDTO {
|
||||
return name;
|
||||
}
|
||||
|
||||
public DominionDTO setName(String name) {
|
||||
this.name = name;
|
||||
return update(this);
|
||||
}
|
||||
|
||||
public String getWorld() {
|
||||
return world;
|
||||
}
|
||||
|
@ -75,28 +75,31 @@ public class Apis {
|
||||
if (player == null) return;
|
||||
int page = getPage(args);
|
||||
ListView view = ListView.create(5, "/dominion help");
|
||||
view.title("领地插件命令帮助")
|
||||
view.title("领地插件命令帮助 <>表示必填参数 []表示可选参数")
|
||||
.add(Line.create().append("打开交互菜单").append(Button.create("/dominion menu", "/dominion menu")))
|
||||
.add(Line.create().append("列出所有领地").append(Button.create("/dominion list", "/dominion list")))
|
||||
.add(Line.create().append("查看帮助").append(Button.create("/dominion help [页码]", "/dominion help 1")))
|
||||
.add(Line.create().append("查看领地信息").append(Button.create("/dominion info [领地名称]", "/dominion info")))
|
||||
.add(Line.create().append("查看领地权限信息").append(Button.create("/dominion flag_info <领地名称> [页码]", "/dominion flag_info")))
|
||||
.add(Line.create().append("管理领地").append("/dominion manage <领地名称>"))
|
||||
.add(Line.create().append("创建领地").append("/dominion create <领地名称>"))
|
||||
.add(Line.create().append("自动创建领地").append("/dominion auto_create <领地名称>"))
|
||||
.add(Line.create().append("创建子领地").append("/dominion create_sub <子领地名称> [父领地名称]"))
|
||||
.add(Line.create().append("自动创建子领地").append("/dominion auto_create_sub <子领地名称> [父领地名称]"))
|
||||
.add(Line.create().append("管理领地").append("/dominion manage <领地名称>"))
|
||||
.add(Line.create().append("扩张领地").append("/dominion expand [大小] [领地名称]"))
|
||||
.add(Line.create().append("缩小领地").append("/dominion contract [大小] [领地名称]"))
|
||||
.add(Line.create().append("设置进入领地的提示语").append("/dominion set_enter_msg <提示语> [领地名称]"))
|
||||
.add(Line.create().append("设置离开领地的提示语").append("/dominion set_leave_msg <提示语> [领地名称]"))
|
||||
.add(Line.create().append("重命名领地").append("/dominion rename <原领地名称> <新领地名称>"))
|
||||
.add(Line.create().append("转让领地").append("/dominion give <领地名称> <玩家名称> [force]"))
|
||||
.add(Line.create().append("删除领地").append("/dominion delete <领地名称> [force]"))
|
||||
// 以下指令主要被用于 ui 触发
|
||||
.add(Line.create().append("列出所有领地").append(Button.create("/dominion list", "/dominion list")))
|
||||
.add(Line.create().append("查看领地信息").append(Button.create("/dominion info [领地名称]", "/dominion info")))
|
||||
.add(Line.create().append("查看领地权限信息").append(Button.create("/dominion flag_info <领地名称> [页码]", "/dominion flag_info")))
|
||||
.add(Line.create().append("设置领地权限").append("/dominion set <权限名称> <true/false> [领地名称]"))
|
||||
.add(Line.create().append("创建玩家特权").append("/dominion create_privilege <玩家名称> [领地名称]"))
|
||||
.add(Line.create().append("设置玩家特权").append("/dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]"))
|
||||
.add(Line.create().append("重置玩家特权").append("/dominion clear_privilege <玩家名称> [领地名称]"))
|
||||
.add(Line.create().append("查看领地玩家特权列表").append("/dominion privilege_list [领地名称] [页码]"))
|
||||
.add(Line.create().append("查看玩家特权信息").append("/dominion privilege_info <玩家名称> [领地名称] [页码]"))
|
||||
.add(Line.create().append("设置进入领地的提示语").append("/dominion set_enter_msg <提示语> [领地名称]"))
|
||||
.add(Line.create().append("设置离开领地的提示语").append("/dominion set_leave_msg <提示语> [领地名称]"))
|
||||
.showOn(player, page);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user