优化了一些ui显示以及逻辑控制

This commit is contained in:
zhangyuheng 2024-02-17 00:15:57 +08:00
parent 62e89173a2
commit 63364a677c
7 changed files with 164 additions and 4 deletions

117
README.md
View File

@ -31,22 +31,137 @@
1. 将插件放入服务器的 `plugins` 目录下
2. 重启服务器
3. 在 `plugins/XXXXXXX/config.yml` 中配置
3. 在 `plugins/Dominion/config.yml` 中配置
4. 重启服务器
## 玩家使用方法
### 1. 创建领地
领地有两种创建方式1.手动选择区域创建2.以操作者为中心自动创建。
手动创建:需要使用箭矢作为选区工具,依次使用左键点选领地长方体区域的第一个点、右键点击长方体区域的第二个点。然后使用`/dominion create <领地名称>`创建领地,领地名称不可与其他领地重复。
自动创建:不需要选择对角线点,会以玩家为中心自动创建一定区域的领地。使用 `/dominion auto_create <领地名称>`即可自动创建领地区域。
### 2. 领地管理
使用`/dominion menu`可以打开领地系统的可视化操作文字界面TUI单击【我的领地】可以查看自己创建的所有领地。
![](https://ssl.lunadeer.cn:14437/i/2024/02/16/65cf80216464b.png)
单击对应领地的【管理】即可进入对应领地的管理界面。
![](https://ssl.lunadeer.cn:14437/i/2024/02/16/65cf807884b37.png)
单击【权限设置】即可配置其他玩家在领地内的行为控制。
![](/media/202402/2024-02-16_233445_1258510.4401325488988944.png)
绿色打勾表明启用,红色方框表示关闭。单击可以切换对应权限的开关状态。
![](https://ssl.lunadeer.cn:14437/i/2024/02/16/65cf80dcd4b4d.png)
### 3. 玩家特权
在领地管理界面单击【玩家权限】即可管理玩家在此领地内的特权,请注意:玩家特权的优先级要高于领地权限控制。
![](https://ssl.lunadeer.cn:14437/i/2024/02/16/65cf830224cde.png)
默认没有玩家拥有特权,可以点击【选择玩家创建特权】选择玩家创建其特权,注意:此处只会显示登录过服务器的玩家名称,因此暂时不支持对从没有在服务器登录过的玩家进行操作。
![](https://ssl.lunadeer.cn:14437/i/2024/02/16/65cf82f10c88e.png)
选择了对应玩家后即可管理玩家在此领地的特权。
![](https://ssl.lunadeer.cn:14437/i/2024/02/16/65cf84498fc4c.png)
![](https://ssl.lunadeer.cn:14437/i/2024/02/16/65cf84600f24d.png)
同样可以点击【清除】,即可删除此玩家在此领地的所有特权。
管理员:你可以在玩家特权中将一个玩家设置为【管理员】,那么此玩家即可拥有所有特权,同时此玩家还会**拥有此领地的权限编辑权限**,但是无法对领地大小进行编辑,同时也无法设置其他玩家为管理员。
### 4. 领地范围编辑
总体而言对范围进行编辑有扩大与缩小两个操作。
扩大:面向想要扩大的方向,使用命令`/dominion expand [大小] [领地名称]`。
缩小:面向想要缩小的方向,使用命令`/dominion contract [大小] [领地名称]`。
其中大小和领地名称都是可选的如果不填写则大小默认为10领地默认为当前所在领地。
请注意1.如果需要填写领地名则同时需要填写大小2.一般不建议在领地外进行扩大缩小操作3.当对子领地进行操作时需要指明子领地名称。
### 5. 子领地
创建方法与普通领地相同,可以使用自动创建,也可以手动创建。
命令分别为:
`/dominion create_sub <子领地名称> [父领地名称]`
`/dominion auto_create_sub <子领地名称> [父领地名称]`
当不填写父领地名称时会尝试以当前所在领地为父领地进行创建。
当玩家处在一个子领地内时,其行为只收到子领地的权限控制,即权限大小为:
玩家子领地特权 > 子领地 > 父领地特权 > 父领地
## 管理员指南
## 指令
### 玩家指令
以下指令尖括号`<>`表示必填参数,方括号`[]`表示可选参数。
| 指令名 | 指令 |
|-----|----|
| 打开交互菜单 | `/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 expand [大小] [领地名称]` |
| 缩小领地 | `/dominion contract [大小] [领地名称]` |
| 删除领地 | `/dominion delete <领地名称> [force]` |
| 设置领地权限 | `/dominion set <权限名称> <true/false> [领地名称]` |
| 创建玩家特权 | `/dominion create_privilege <玩家名称> [领地名称]` |
| 设置玩家特权 | `/dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]` |
| 重置玩家特权 | `/dominion clear_privilege <玩家名称> [领地名称]` |
| 查看领地玩家特权列表 | `/dominion privilege_list [领地名称] [页码]` |
| 查看玩家特权信息 | `/dominion privilege_info <玩家名称> [领地名称] [页码]` |
### 管理员指令
暂无
## 配置文件参考
```yaml
Database:
Host: localhost
Port: 5432
Name: dominion
User: dominion
Pass: dominion
AutoCreateRadius: 10
MaxX: 128
MaxY: 64
MaxZ: 128
BlueMap: true
Debug: false
```
## TODO

View File

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

View File

@ -2,6 +2,7 @@ package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -53,14 +54,28 @@ public class Helper {
"vehicle_destroy");
}
/**
* 获取玩家可管理的领地列表
*
* @param sender 命令发送者
* @return 领地列表
*/
public static List<String> playerDominions(CommandSender sender) {
List<String> dominions_name = new ArrayList<>();
Player player = playerOnly(sender);
if (player == null) return dominions_name;
List<DominionDTO> dominions = DominionController.all(player);
for (DominionDTO dominion : dominions) {
List<DominionDTO> dominions_own = DominionController.all(player);
List<PlayerPrivilegeDTO> dominions_admin = PlayerPrivilegeDTO.selectAll(player.getUniqueId());
for (DominionDTO dominion : dominions_own) {
dominions_name.add(dominion.getName());
}
for (PlayerPrivilegeDTO privilege : dominions_admin) {
if (privilege.getAdmin()) {
DominionDTO dom = DominionDTO.select(privilege.getDomID());
if (dom == null) continue;
dominions_name.add(dom.getName());
}
}
return dominions_name;
}

View File

@ -4,6 +4,7 @@ import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.dominion.utils.Notification;
import org.bukkit.entity.NPC;
import org.bukkit.entity.Player;
import java.util.UUID;
@ -99,6 +100,13 @@ public class PrivilegeController {
if (privilege == null) return false;
}
switch (flag) {
case "admin":
if (notOwner(operator, dominion)) {
Notification.error(operator, "你不是领地 " + dominionName + " 的拥有者,无法设置其他玩家为管理员");
return false;
}
privilege.setAdmin(value);
break;
case "anchor":
privilege.setAnchor(value);
break;
@ -231,6 +239,10 @@ public class PrivilegeController {
}
private static PlayerPrivilegeDTO createPlayerPrivilege(Player operator, UUID player, DominionDTO dom) {
if (operator.getUniqueId() == player) {
Notification.error(operator, "你不能给自己设置特权");
return null;
}
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, dom.getId(),
dom.getAnchor(), dom.getAnimalKilling(), dom.getAnvil(),
dom.getBeacon(), dom.getBed(), dom.getBrew(), dom.getBreak(), dom.getButton(),

View File

@ -77,6 +77,11 @@ public class PlayerPrivilegeDTO {
return query(sql);
}
public static List<PlayerPrivilegeDTO> selectAll(UUID player) {
String sql = "SELECT * FROM player_privilege WHERE player_uuid = '" + player + "';";
return query(sql);
}
private final Integer id;
private final UUID playerUUID;
private Boolean admin;

View File

@ -53,6 +53,15 @@ public class PrivilegeInfo {
.append(Button.create("特权列表", "/dominion privilege_list " + dominion.getName()))
.append("特权信息")
);
if (privilege.getAdmin()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " admin false " + dominion.getName() + " " + page))
.append("管理员"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " admin true " + dominion.getName() + " " + page))
.append("管理员"));
}
if (privilege.getAnchor()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " anchor false " + dominion.getName() + " " + page))

View File

@ -16,6 +16,7 @@ public class SelectPlayer {
// /dominion select_player_create_privilege <领地名称> [页码]
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
int page = 1;
if (args.length == 3) {
try {
@ -28,6 +29,9 @@ public class SelectPlayer {
view.title("选择玩家以创建特权").subtitle("只能选择已经登录过的玩家");
List<PlayerDTO> players = PlayerController.allPlayers();
for (PlayerDTO p : players) {
if (p.getUuid() == player.getUniqueId()) {
continue;
}
view.add(Line.create().
append(Button.create(p.getLastKnownName(),
"/dominion create_privilege " + p.getLastKnownName() + " " + dominion_name + " b")));