mirror of
https://github.com/ColdeZhang/Dominion.git
synced 2024-10-19 00:36:40 +08:00
添加了通过ui选择创建玩家特权的途径
This commit is contained in:
parent
f6c9cb53ee
commit
9a4d2a462c
54
README.md
Normal file
54
README.md
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
# Dominion
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
|
||||||
|
鉴于 Residence 插件的作者项目较多,维护压力大,无法及时跟进新版本以及适配Folia核心。故开发此插件,旨在平替纯净版生存服Residence的使用。
|
||||||
|
|
||||||
|
## 说明
|
||||||
|
|
||||||
|
本插件基本还原了Residence的核心功能,主要适用于原版纯净生存服务器的防破坏目的,因此暂不考虑引入价格系统、商店等非原版Minecraft玩法。
|
||||||
|
|
||||||
|
![](https://ssl.lunadeer.cn:14437/i/2024/02/16/65cf3b08c986b.png)
|
||||||
|
|
||||||
|
为了提高存储效率,本插件使用了数据库+缓存的方式存储领地数据,玩家配置领地权限直接修改数据库内容,随后触发缓存更新。权限控制则以异步的方式访问缓存,减少事件阻塞。
|
||||||
|
|
||||||
|
权限系统主要由领地权限、玩家特权组成,玩家特权优先级高于领地权限。没有特权的玩家在领地内收到领地权限的控制,有特权配置则按照特权设置受控。
|
||||||
|
|
||||||
|
## 功能介绍
|
||||||
|
|
||||||
|
- 使用 Postgresql 存储数据;
|
||||||
|
- 支持BlueMap卫星地图渲染;
|
||||||
|
- 可视化领地权限配置;
|
||||||
|
- 支持为玩家单独设置特权;
|
||||||
|
- 支持设置领地管理员;
|
||||||
|
- 支持子领地;
|
||||||
|
|
||||||
|
## 支持版本
|
||||||
|
|
||||||
|
- 1.20.1+ (Paper、Folia)
|
||||||
|
|
||||||
|
## 安装方法
|
||||||
|
|
||||||
|
1. 将插件放入服务器的 `plugins` 目录下
|
||||||
|
2. 重启服务器
|
||||||
|
3. 在 `plugins/XXXXXXX/config.yml` 中配置
|
||||||
|
4. 重启服务器
|
||||||
|
|
||||||
|
## 玩家使用方法
|
||||||
|
|
||||||
|
## 管理员指南
|
||||||
|
|
||||||
|
## 指令
|
||||||
|
|
||||||
|
### 玩家指令
|
||||||
|
|
||||||
|
### 管理员指令
|
||||||
|
|
||||||
|
## 配置文件参考
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
- WebUI
|
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>cn.lunadeer</groupId>
|
<groupId>cn.lunadeer</groupId>
|
||||||
<artifactId>Dominion</artifactId>
|
<artifactId>Dominion</artifactId>
|
||||||
<version>1.0-beta</version>
|
<version>1.2-beta</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>Dominion</name>
|
<name>Dominion</name>
|
||||||
|
1
resource/frame.drawio
Normal file
1
resource/frame.drawio
Normal file
@ -0,0 +1 @@
|
|||||||
|
<mxfile host="Electron" modified="2024-02-06T02:51:17.167Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="EzG-lQXLogbq_xywu-ye" version="20.8.16" type="device"><diagram name="第 1 页" id="TAprC_qEjeDnN3pvnCCR">7ZvbcuI4EIafhstQtmUbc5lAmJmtbG1qM1uzuRS2bDQRFiOL0z79tmwZbGQSpjiEpHxDUEvW8dOvVpt00GC6+iLwbPInjwjrOFa06qBhx3ECx4ZPZVgXBg+5hSERNCpM1tbwRP8jhdEurXMakUzbCpPknEk6qxtDnqYklDUbFoIv68VizqKaYYYTYhieQsxM6w8ayUlhdf2gkvGV0GSim0bI0j2f4rK0NmQTHPFlxYTuO2ggOJfFt+lqQJiavPrEjPbkbjogSCoPeeD5ORn80ROPv5bu37b1kL746/im7NwCs7kesu6tXJdzQCKYEp3kQk54wlPM7rfWO8HnaURUOxakshciQzV2GxITHE7mgnzBMzC4YPhJkySvCibgLpyLBRlRKWma6Ae2LTxwPtPGn0TKtaYDzyVXFcsp07kxT+UITylTkN2KcEIlsJDBKKAwLA0RutATn4tQ1TGREgACGm/hA2ZMfagCWTfhHLqHZzTrhnyaZ4RZXnQUF03A11ojnnO320zRUdtXkyGxkLeKRLCEDGcZDUvziLJyCMWkq5neu7ralJVj2Lekgd4mWCREvlLORhsIYfcSPiVSwOgsQRiWdFHvCNb7KNmU04/C0PC6UmDGaapmZVPzozJAAa0IvuUVNWpBQP4Otbvl/VfLw5eiB2WqMpStKd8Jv7ErAmNTfP/nm7EvttSrFVwqIJ5mOF+bpVC8Vxk9blNcKeGO2u4xUDzgjIt8VlAcx05YIC74C6nkRP7Y9/wN7AsiJFm9jrtJp37A86w6FqXsLrcqbZeHyKQi0K61H+gKVL/PTDmGVkk/jZKW/FyplPacDyCltulg/CDjVk2vSk393rWpKbINQK5ePGGyxfpf3XqeeFaJrlcmh6tq5nCtU1eKoym6KU/JjuJaJ1bc8o73puI6RyruUXTa5lk/xBKPcUZaXTtI14gdeaTXpGt9v4fwmbxEt2fqGoidqWv+uXTNdgxyBrDMLTYnw0YBQ0PMbhlNUsiTSr1PAVPQexsmFFwSpr6pQt//ylqUDkIJQAoitwmlwBkj/0QKFPTr0HgNnhVyG6BxzuZZtRG/T3dPRYd6TXtgvYzX5PZa0C7tm5M0MlEE4zlBPDYOYgQuAsfu1kMXbj8oLWU1Bfz6yR1STxDHcM2YsBTAG6yM4zOYp7uxqLHt/5qrNzv5qt1k+bIBEZbtzVb5pJf58C1Rf+ezCEvTD1Tr8oDHhNW5xNq7CWGNcjh23Z4pjaJiAxFoHI/z+hQROqoElXt3HW+4w5V3KPN7z0b9Jk632NkcZFWeXpGHvSfpjdW1dwJeN7rJI/FyapU6O1zxOM7IWZAqZbt6F4CpF5wxRVXrxR0SHwtC0hwfGwee61mvkXrE24bg3e+RnsHO/YLocHHLzdvePyZB3MiNHwZkHJ/nytgUV228Mp4vrtr/eD5YG1c92jFDzoE3BHSsB3fcDQF9ZDq7th1UCbXf4DNPPRJBYfIUJB8L2v0328qdQ5O9vXC8F9fFefleXJfdrJzWI5pG1ZtDcQkY8ilNKU/bU/yKvD/jFPfNU7zfcIj3z3WIu20I73OdzofG74ofz76bipn31W+ZqWG3EWhYK2BXJGD94G0B611UwNrfyn0uAXMPFbD3dcNcA7uvuEHBHgVdUEZgYowsroK8KZetvl2RvtnWAR5aU5jlbAKHzPDc1rXfZWrEcNLG7a4KKPtyQEFy+z9AxauF7X9Sofv/AQ==</diagram></mxfile>
|
@ -99,6 +99,9 @@ public class Commands implements TabExecutor {
|
|||||||
case "set":
|
case "set":
|
||||||
DominionFlag.setDominionFlag(sender, args);
|
DominionFlag.setDominionFlag(sender, args);
|
||||||
break;
|
break;
|
||||||
|
case "create_privilege":
|
||||||
|
PlayerPrivilege.createPlayerPrivilege(sender, args);
|
||||||
|
break;
|
||||||
case "set_privilege":
|
case "set_privilege":
|
||||||
PlayerPrivilege.setPlayerPrivilege(sender, args);
|
PlayerPrivilege.setPlayerPrivilege(sender, args);
|
||||||
break;
|
break;
|
||||||
@ -111,6 +114,9 @@ public class Commands implements TabExecutor {
|
|||||||
case "privilege_info":
|
case "privilege_info":
|
||||||
PrivilegeInfo.show(sender, args);
|
PrivilegeInfo.show(sender, args);
|
||||||
break;
|
break;
|
||||||
|
case "select_player_create_privilege":
|
||||||
|
SelectPlayer.show(sender, args);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -135,7 +141,7 @@ public class Commands implements TabExecutor {
|
|||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
return Arrays.asList("menu", "help", "info", "manage", "flag_info", "group_list", "privilege_list", "group",
|
return Arrays.asList("menu", "help", "info", "manage", "flag_info", "group_list", "privilege_list", "group",
|
||||||
"create", "auto_create", "create_sub", "auto_create_sub", "expand", "contract", "delete", "set",
|
"create", "auto_create", "create_sub", "auto_create_sub", "expand", "contract", "delete", "set",
|
||||||
"set_privilege", "clear_privilege", "list", "privilege_info"
|
"create_privilege", "set_privilege", "clear_privilege", "list", "privilege_info"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
@ -154,6 +160,7 @@ public class Commands implements TabExecutor {
|
|||||||
return playerDominions(sender);
|
return playerDominions(sender);
|
||||||
case "set":
|
case "set":
|
||||||
return dominionFlags();
|
return dominionFlags();
|
||||||
|
case "create_privilege":
|
||||||
case "set_privilege":
|
case "set_privilege":
|
||||||
case "clear_privilege":
|
case "clear_privilege":
|
||||||
case "privilege_info":
|
case "privilege_info":
|
||||||
@ -175,6 +182,7 @@ public class Commands implements TabExecutor {
|
|||||||
case "expand":
|
case "expand":
|
||||||
case "contract":
|
case "contract":
|
||||||
case "clear_privilege":
|
case "clear_privilege":
|
||||||
|
case "create_privilege":
|
||||||
case "privilege_info":
|
case "privilege_info":
|
||||||
case "auto_create_sub":
|
case "auto_create_sub":
|
||||||
case "create_sub":
|
case "create_sub":
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.lunadeer.dominion.commands;
|
package cn.lunadeer.dominion.commands;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.tuis.DominionPrivilegeList;
|
||||||
import cn.lunadeer.dominion.tuis.PrivilegeInfo;
|
import cn.lunadeer.dominion.tuis.PrivilegeInfo;
|
||||||
import cn.lunadeer.dominion.utils.Notification;
|
import cn.lunadeer.dominion.utils.Notification;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -8,9 +9,44 @@ import org.bukkit.entity.Player;
|
|||||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.controllers.PrivilegeController.clearPrivilege;
|
import static cn.lunadeer.dominion.controllers.PrivilegeController.clearPrivilege;
|
||||||
import static cn.lunadeer.dominion.controllers.PrivilegeController.setPrivilege;
|
import static cn.lunadeer.dominion.controllers.PrivilegeController.setPrivilege;
|
||||||
|
import static cn.lunadeer.dominion.controllers.PrivilegeController.createPrivilege;
|
||||||
|
|
||||||
public class PlayerPrivilege {
|
public class PlayerPrivilege {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建玩家特权
|
||||||
|
* /dominion create_privilege <玩家名称> [领地名称]
|
||||||
|
*
|
||||||
|
* @param sender 命令发送者
|
||||||
|
* @param args 命令参数
|
||||||
|
*/
|
||||||
|
public static void createPlayerPrivilege(CommandSender sender, String[] args) {
|
||||||
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
if (args.length != 2 && args.length != 3 && args.length != 4) {
|
||||||
|
Notification.error(sender, "用法: /dominion create_privilege <玩家名称> [领地名称]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (args.length == 2) {
|
||||||
|
if (!createPrivilege(player, args[1])) {
|
||||||
|
Notification.error(sender, "创建玩家特权失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!createPrivilege(player, args[1], args[2])) {
|
||||||
|
Notification.error(sender, "创建玩家特权失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Notification.info(sender, "成功创建玩家特权 " + args[1]);
|
||||||
|
if (args.length == 4) {
|
||||||
|
String[] newArgs = new String[3];
|
||||||
|
newArgs[0] = "privilege_list";
|
||||||
|
newArgs[1] = args[2];
|
||||||
|
DominionPrivilegeList.show(sender, newArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置玩家权限
|
* 设置玩家权限
|
||||||
* /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]
|
* /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]
|
||||||
@ -61,20 +97,28 @@ public class PlayerPrivilege {
|
|||||||
public static void clearPlayerPrivilege(CommandSender sender, String[] args) {
|
public static void clearPlayerPrivilege(CommandSender sender, String[] args) {
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
if (args.length != 2 && args.length != 3) {
|
if (args.length != 2 && args.length != 3 && args.length != 4) {
|
||||||
Notification.error(sender, "用法: /dominion clear_privilege <玩家名称> [领地名称]");
|
Notification.error(sender, "用法: /dominion clear_privilege <玩家名称> [领地名称]");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
if (clearPrivilege(player, args[1])) {
|
if (!clearPrivilege(player, args[1])) {
|
||||||
|
Notification.error(sender, "重置玩家权限失败");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (clearPrivilege(player, args[1], args[2])) {
|
if (!clearPrivilege(player, args[1], args[2])) {
|
||||||
|
Notification.error(sender, "重置玩家权限失败");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Notification.error(sender, "重置玩家权限失败");
|
Notification.info(sender, "成功清除玩家权限 " + args[1]);
|
||||||
|
if (args.length == 4) {
|
||||||
|
String[] newArgs = new String[3];
|
||||||
|
newArgs[0] = "privilege_list";
|
||||||
|
newArgs[1] = args[2];
|
||||||
|
DominionPrivilegeList.show(sender, newArgs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import org.bukkit.entity.Player;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
||||||
|
import static cn.lunadeer.dominion.controllers.Apis.notOwner;
|
||||||
|
|
||||||
public class PrivilegeController {
|
public class PrivilegeController {
|
||||||
|
|
||||||
@ -21,7 +22,10 @@ public class PrivilegeController {
|
|||||||
*/
|
*/
|
||||||
public static boolean clearPrivilege(Player operator, String player_name) {
|
public static boolean clearPrivilege(Player operator, String player_name) {
|
||||||
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||||
if (dominion == null) return false;
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "你不在任何领地内,请指定领地名称 /dominion clear_privilege <玩家名称> <领地名称>");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return clearPrivilege(operator, player_name, dominion.getName());
|
return clearPrivilege(operator, player_name, dominion.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +64,10 @@ public class PrivilegeController {
|
|||||||
*/
|
*/
|
||||||
public static boolean setPrivilege(Player operator, String player_name, String flag, boolean value) {
|
public static boolean setPrivilege(Player operator, String player_name, String flag, boolean value) {
|
||||||
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||||
if (dominion == null) return false;
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "你不在任何领地内,请指定领地名称 /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return setPrivilege(operator, player_name, flag, value, dominion.getName());
|
return setPrivilege(operator, player_name, flag, value, dominion.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,6 +206,30 @@ public class PrivilegeController {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean createPrivilege(Player operator, String player_name) {
|
||||||
|
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "你不在任何领地内,请指定领地名称 /dominion create_privilege <玩家名称> <领地名称>");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return createPrivilege(operator, player_name, dominion.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean createPrivilege(Player operator, String player_name, String dominionName) {
|
||||||
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(operator, "领地 " + dominionName + " 不存在,无法设置特权");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (notOwner(operator, dominion)) return false;
|
||||||
|
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
||||||
|
if (player == null) {
|
||||||
|
Notification.error(operator, "玩家 " + player_name + " 不存在或没有登录过");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return createPlayerPrivilege(operator, player.getUuid(), dominion) != null;
|
||||||
|
}
|
||||||
|
|
||||||
private static PlayerPrivilegeDTO createPlayerPrivilege(Player operator, UUID player, DominionDTO dom) {
|
private static PlayerPrivilegeDTO createPlayerPrivilege(Player operator, UUID player, DominionDTO dom) {
|
||||||
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, dom.getId(),
|
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, dom.getId(),
|
||||||
dom.getAnchor(), dom.getAnimalKilling(), dom.getAnvil(),
|
dom.getAnchor(), dom.getAnimalKilling(), dom.getAnvil(),
|
||||||
@ -208,7 +239,7 @@ public class PrivilegeController {
|
|||||||
dom.getEgg(), dom.getEnchant(), dom.getEnderPearl(),
|
dom.getEgg(), dom.getEnchant(), dom.getEnderPearl(),
|
||||||
dom.getFeed(),
|
dom.getFeed(),
|
||||||
dom.getGlow(),
|
dom.getGlow(),
|
||||||
dom.getHoney(), dom.getHook(),
|
dom.getHarvest(), dom.getHoney(), dom.getHook(),
|
||||||
dom.getIgnite(),
|
dom.getIgnite(),
|
||||||
dom.getLever(),
|
dom.getLever(),
|
||||||
dom.getMonsterKilling(), dom.getMove(),
|
dom.getMonsterKilling(), dom.getMove(),
|
||||||
@ -216,10 +247,10 @@ public class PrivilegeController {
|
|||||||
dom.getRiding(), dom.getRepeater(),
|
dom.getRiding(), dom.getRepeater(),
|
||||||
dom.getShear(), dom.getShoot(),
|
dom.getShear(), dom.getShoot(),
|
||||||
dom.getTrade(),
|
dom.getTrade(),
|
||||||
dom.getVehicleDestroy(), dom.getHarvest());
|
dom.getVehicleDestroy());
|
||||||
privilege = PlayerPrivilegeDTO.insert(privilege);
|
privilege = PlayerPrivilegeDTO.insert(privilege);
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
Notification.error(operator, "创建玩家特权关联玩家时失败");
|
Notification.error(operator, "创建玩家特权失败,可能是此玩家已存在特权");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return privilege;
|
return privilege;
|
||||||
|
@ -21,7 +21,7 @@ public class PlayerDTO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static List<PlayerDTO> all() {
|
public static List<PlayerDTO> all() {
|
||||||
String sql = "SELECT * FROM player_name;";
|
String sql = "SELECT * FROM player_name WHERE id > 0;";
|
||||||
return query(sql);
|
return query(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,10 +12,41 @@ import java.util.UUID;
|
|||||||
public class PlayerPrivilegeDTO {
|
public class PlayerPrivilegeDTO {
|
||||||
|
|
||||||
public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) {
|
public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) {
|
||||||
String sql = "INSERT INTO player_privilege (player_uuid, admin, dom_id) VALUES (" +
|
String sql = "INSERT INTO player_privilege (player_uuid, admin, dom_id, " +
|
||||||
"'" + player.getPlayerUUID() + "', " +
|
"anchor, animal_killing, anvil, " +
|
||||||
player.getAdmin() + ", " +
|
"beacon, bed, brew, break, button, " +
|
||||||
player.getDomID() +
|
"cake, container, craft, comparer, " +
|
||||||
|
"door, dye, " +
|
||||||
|
"egg, enchant, ender_pearl, " +
|
||||||
|
"feed, " +
|
||||||
|
"glow, " +
|
||||||
|
"harvest, honey, hook, " +
|
||||||
|
"ignite, " +
|
||||||
|
"lever, " +
|
||||||
|
"monster_killing, move, " +
|
||||||
|
"place, pressure, " +
|
||||||
|
"riding, repeater, " +
|
||||||
|
"shear, shoot, " +
|
||||||
|
"trade, " +
|
||||||
|
"vehicle_destroy" +
|
||||||
|
") VALUES (" +
|
||||||
|
"'" + player.getPlayerUUID() + "', " + player.getAdmin() + ", " + player.getDomID() + ", " +
|
||||||
|
player.getAnchor() + ", " + player.getAnimalKilling() + ", " + player.getAnvil() + ", " +
|
||||||
|
player.getBeacon() + ", " + player.getBed() + ", " + player.getBrew() + ", " + player.getBreak() + ", " + player.getButton() + ", " +
|
||||||
|
player.getCake() + ", " + player.getContainer() + ", " + player.getCraft() + ", " + player.getComparer() + ", " +
|
||||||
|
player.getDoor() + ", " + player.getDye() + ", " +
|
||||||
|
player.getEgg() + ", " + player.getEnchant() + ", " + player.getEnderPearl() + ", " +
|
||||||
|
player.getFeed() + ", " +
|
||||||
|
player.getGlow() + ", " +
|
||||||
|
player.getHarvest() + ", " + player.getHoney() + ", " + player.getHook() + ", " +
|
||||||
|
player.getIgnite() + ", " +
|
||||||
|
player.getLever() + ", " +
|
||||||
|
player.getMonsterKilling() + ", " + player.getMove() + ", " +
|
||||||
|
player.getPlace() + ", " + player.getPressure() + ", " +
|
||||||
|
player.getRiding() + ", " + player.getRepeater() + ", " +
|
||||||
|
player.getShear() + ", " + player.getShoot() + ", " +
|
||||||
|
player.getTrade() + ", " +
|
||||||
|
player.getVehicleDestroy() +
|
||||||
") RETURNING *;";
|
") RETURNING *;";
|
||||||
List<PlayerPrivilegeDTO> players = query(sql);
|
List<PlayerPrivilegeDTO> players = query(sql);
|
||||||
if (players.size() == 0) return null;
|
if (players.size() == 0) return null;
|
||||||
|
@ -66,10 +66,11 @@ public class Apis {
|
|||||||
.add(Line.create().append("缩小领地").append("/dominion contract [大小] [领地名称]"))
|
.add(Line.create().append("缩小领地").append("/dominion contract [大小] [领地名称]"))
|
||||||
.add(Line.create().append("删除领地").append("/dominion delete <领地名称> [force]"))
|
.add(Line.create().append("删除领地").append("/dominion delete <领地名称> [force]"))
|
||||||
.add(Line.create().append("设置领地权限").append("/dominion set <权限名称> <true/false> [领地名称]"))
|
.add(Line.create().append("设置领地权限").append("/dominion set <权限名称> <true/false> [领地名称]"))
|
||||||
.add(Line.create().append("设置玩家权限").append("/dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]"))
|
.add(Line.create().append("创建玩家特权").append("/dominion create_privilege <玩家名称> [领地名称]"))
|
||||||
.add(Line.create().append("重置玩家权限").append("/dominion clear_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_list [领地名称] [页码]"))
|
||||||
.add(Line.create().append("查看玩家权限信息").append("/dominion privilege_info <玩家名称> [领地名称] [页码]"))
|
.add(Line.create().append("查看玩家特权信息").append("/dominion privilege_info <玩家名称> [领地名称] [页码]"))
|
||||||
.showOn(player, page);
|
.showOn(player, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,10 +36,6 @@ public class DominionPrivilegeList {
|
|||||||
ListView view = ListView.create(10, "/dominion privilege_list " + dominion.getName());
|
ListView view = ListView.create(10, "/dominion privilege_list " + dominion.getName());
|
||||||
if (noAuthToManage(player, dominion)) return;
|
if (noAuthToManage(player, dominion)) return;
|
||||||
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(dominion.getId());
|
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(dominion.getId());
|
||||||
if (privileges.isEmpty()) {
|
|
||||||
Notification.warn(sender, "领地 " + dominion.getName() + " 没有任何玩家拥有特权");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
view.title("领地 " + dominion.getName() + " 玩家特权列表");
|
view.title("领地 " + dominion.getName() + " 玩家特权列表");
|
||||||
view.navigator(
|
view.navigator(
|
||||||
Line.create()
|
Line.create()
|
||||||
@ -48,13 +44,14 @@ public class DominionPrivilegeList {
|
|||||||
.append(Button.create("管理界面", "/dominion manage " + dominion.getName()))
|
.append(Button.create("管理界面", "/dominion manage " + dominion.getName()))
|
||||||
.append("特权列表")
|
.append("特权列表")
|
||||||
);
|
);
|
||||||
|
view.add(Line.create().append(Button.create("选择玩家创建特权", "/dominion select_player_create_privilege " + dominion.getName())));
|
||||||
for (PlayerPrivilegeDTO privilege : privileges) {
|
for (PlayerPrivilegeDTO privilege : privileges) {
|
||||||
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
|
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
|
||||||
if (p_player == null) continue;
|
if (p_player == null) continue;
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append(p_player.getLastKnownName())
|
.append(p_player.getLastKnownName())
|
||||||
.append(Button.createGreen("管理", "/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()))
|
.append(Button.createGreen("管理", "/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()))
|
||||||
.append(Button.createRed("清空", "/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName()))
|
.append(Button.createRed("清除", "/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
view.showOn(player, page);
|
view.showOn(player, page);
|
||||||
|
37
src/main/java/cn/lunadeer/dominion/tuis/SelectPlayer.java
Normal file
37
src/main/java/cn/lunadeer/dominion/tuis/SelectPlayer.java
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package cn.lunadeer.dominion.tuis;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.controllers.PlayerController;
|
||||||
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
|
import cn.lunadeer.dominion.utils.STUI.Button;
|
||||||
|
import cn.lunadeer.dominion.utils.STUI.Line;
|
||||||
|
import cn.lunadeer.dominion.utils.STUI.ListView;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
|
public class SelectPlayer {
|
||||||
|
// /dominion select_player_create_privilege <领地名称> [页码]
|
||||||
|
public static void show(CommandSender sender, String[] args) {
|
||||||
|
Player player = playerOnly(sender);
|
||||||
|
int page = 1;
|
||||||
|
if (args.length == 3) {
|
||||||
|
try {
|
||||||
|
page = Integer.parseInt(args[2]);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String dominion_name = args[1];
|
||||||
|
ListView view = ListView.create(10, "/dominion select_player_create_privilege " + dominion_name);
|
||||||
|
view.title("选择玩家以创建特权").subtitle("只能选择已经登录过的玩家");
|
||||||
|
List<PlayerDTO> players = PlayerController.allPlayers();
|
||||||
|
for (PlayerDTO p : players) {
|
||||||
|
view.add(Line.create().
|
||||||
|
append(Button.create(p.getLastKnownName(),
|
||||||
|
"/dominion create_privilege " + p.getLastKnownName() + " " + dominion_name + " b")));
|
||||||
|
}
|
||||||
|
view.showOn(player, page);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user