mirror of
https://github.com/ColdeZhang/Dominion.git
synced 2024-10-18 23:16:42 +08:00
实现了权限模板套用功能
This commit is contained in:
parent
ae1444c469
commit
4c80ad292e
@ -168,6 +168,12 @@ public class Commands implements TabExecutor {
|
||||
case "template_set_flag":
|
||||
Template.setTemplateFlag(sender, args);
|
||||
break;
|
||||
case "apply_template":
|
||||
PlayerPrivilege.applyTemplate(sender, args);
|
||||
break;
|
||||
case "select_template":
|
||||
SelectTemplate.show(sender, args);
|
||||
break;
|
||||
// ---=== CUI ===---
|
||||
case "cui_rename":
|
||||
RenameDominion.open(sender, args);
|
||||
@ -221,7 +227,13 @@ public class Commands implements TabExecutor {
|
||||
"reload_cache",
|
||||
"reload_config",
|
||||
"export_mca",
|
||||
"config"
|
||||
"config",
|
||||
"apply_template",
|
||||
"template_list",
|
||||
"template_manage",
|
||||
"template_delete",
|
||||
"template_create",
|
||||
"template_set_flag"
|
||||
);
|
||||
}
|
||||
if (args.length == 2) {
|
||||
@ -229,6 +241,7 @@ public class Commands implements TabExecutor {
|
||||
case "help":
|
||||
case "list":
|
||||
case "config":
|
||||
case "template_list":
|
||||
return Collections.singletonList("页码(可选)");
|
||||
case "create":
|
||||
case "auto_create":
|
||||
@ -250,6 +263,7 @@ public class Commands implements TabExecutor {
|
||||
case "set_privilege":
|
||||
case "clear_privilege":
|
||||
case "privilege_info":
|
||||
case "apply_template":
|
||||
return playerNames();
|
||||
case "expand":
|
||||
case "contract":
|
||||
@ -261,6 +275,12 @@ public class Commands implements TabExecutor {
|
||||
return Collections.singletonList("进入提示语内容");
|
||||
case "set_leave_msg":
|
||||
return Collections.singletonList("离开提示语内容");
|
||||
case "template_manage":
|
||||
case "template_delete":
|
||||
case "template_set_flag":
|
||||
return allTemplates(sender);
|
||||
case "template_create":
|
||||
return Collections.singletonList("输入模板名称");
|
||||
}
|
||||
}
|
||||
if (args.length == 3) {
|
||||
@ -268,6 +288,7 @@ public class Commands implements TabExecutor {
|
||||
case "set":
|
||||
return boolOptions();
|
||||
case "set_privilege":
|
||||
case "template_set_flag":
|
||||
return playerPrivileges();
|
||||
case "expand":
|
||||
case "contract":
|
||||
@ -278,11 +299,14 @@ public class Commands implements TabExecutor {
|
||||
case "create_sub":
|
||||
case "set_enter_msg":
|
||||
case "set_leave_msg":
|
||||
case "apply_template":
|
||||
return playerDominions(sender);
|
||||
case "rename":
|
||||
return Collections.singletonList("输入新领地名称");
|
||||
case "give":
|
||||
return playerNames();
|
||||
case "template_manage":
|
||||
return Collections.singletonList("页码(可选)");
|
||||
}
|
||||
}
|
||||
if (args.length == 4) {
|
||||
@ -290,7 +314,10 @@ public class Commands implements TabExecutor {
|
||||
case "set":
|
||||
return playerDominions(sender);
|
||||
case "set_privilege":
|
||||
case "template_set_flag":
|
||||
return boolOptions();
|
||||
case "apply_template":
|
||||
return allTemplates(sender);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -4,6 +4,7 @@ import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@ -75,4 +76,15 @@ public class Helper {
|
||||
return dominions_name;
|
||||
}
|
||||
|
||||
public static List<String> allTemplates(CommandSender sender) {
|
||||
List<String> templates_name = new ArrayList<>();
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return templates_name;
|
||||
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
|
||||
for (PrivilegeTemplateDTO template : templates) {
|
||||
templates_name.add(template.getName());
|
||||
}
|
||||
return templates_name;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.lunadeer.dominion.commands;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.PrivilegeController;
|
||||
import cn.lunadeer.dominion.tuis.DominionPrivilegeList;
|
||||
import cn.lunadeer.dominion.tuis.PrivilegeInfo;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
@ -96,4 +97,32 @@ public class PlayerPrivilege {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用权限模板
|
||||
* /dominion apply_template <玩家名称> <领地名称> <模板名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void applyTemplate(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
if (args.length < 4) {
|
||||
Notification.error(sender, "用法: /dominion apply_template <玩家名称> <领地名称> <模板名称>");
|
||||
return;
|
||||
}
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String playerName = args[1];
|
||||
String dominionName = args[2];
|
||||
String templateName = args[3];
|
||||
PrivilegeController.applyTemplate(operator, dominionName, playerName, templateName);
|
||||
if (args.length == 5) {
|
||||
String[] newArgs = new String[3];
|
||||
newArgs[0] = "privilege_list";
|
||||
newArgs[1] = dominionName;
|
||||
newArgs[2] = args[4];
|
||||
DominionPrivilegeList.show(sender, newArgs);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,10 +1,7 @@
|
||||
package cn.lunadeer.dominion.controllers;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.dominion.dtos.*;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
|
||||
import java.util.UUID;
|
||||
@ -106,9 +103,9 @@ public class PrivilegeController {
|
||||
privilege = createPlayerPrivilege(operator, player.getUuid(), dominion);
|
||||
if (privilege == null) return;
|
||||
}
|
||||
if (flag.equals("admin")) {
|
||||
if (flag.equals("admin") || privilege.getAdmin()) {
|
||||
if (notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法设置/取消其他玩家为管理员", dominionName));
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他管理员的权限", dominionName));
|
||||
return;
|
||||
}
|
||||
privilege.setAdmin(value);
|
||||
@ -169,4 +166,40 @@ public class PrivilegeController {
|
||||
return privilege;
|
||||
}
|
||||
|
||||
public static void applyTemplate(AbstractOperator operator, String dominionName, String playerName, String templateName) {
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "应用模板 %s 到玩家 %s 在领地 %s 的权限成功", templateName, playerName, dominionName);
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "应用模板 %s 到玩家 %s 在领地 %s 的权限失败", templateName, playerName, dominionName);
|
||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
|
||||
return;
|
||||
}
|
||||
if (noAuthToChangeFlags(operator, dominion)) return;
|
||||
PlayerDTO player = PlayerDTO.select(playerName);
|
||||
if (player == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", playerName));
|
||||
return;
|
||||
}
|
||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, dominionName));
|
||||
return;
|
||||
}
|
||||
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), templateName);
|
||||
if (template == null) {
|
||||
operator.setResponse(FAIL.addMessage("模板 %s 不存在", templateName));
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion) && privilege.getAdmin()) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他管理员的权限", dominionName));
|
||||
return;
|
||||
}
|
||||
privilege = privilege.applyTemplate(template);
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL);
|
||||
} else {
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -65,10 +65,18 @@ public class DominionPrivilegeList {
|
||||
}
|
||||
}
|
||||
|
||||
line.append(p_player.getLastKnownName())
|
||||
.append(Button.createGreen("配置权限").setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()).build());
|
||||
if ((!player.getName().equals(p_player.getLastKnownName()) && !privilege.getAdmin()) || dominion.getOwner().equals(player.getUniqueId()))
|
||||
line.append(Button.createRed("移除成员").setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b").build());
|
||||
line.append(Button.createGreen("权限")
|
||||
.setHoverText("配置成员权限")
|
||||
.setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()).build());
|
||||
if ((!player.getName().equals(p_player.getLastKnownName()) && !privilege.getAdmin()) || dominion.getOwner().equals(player.getUniqueId())) {
|
||||
line.append(Button.createRed("移除")
|
||||
.setHoverText("将此成员移出(变为访客)")
|
||||
.setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b").build());
|
||||
line.append(Button.createGreen("模板")
|
||||
.setHoverText("套用权限模板")
|
||||
.setExecuteCommand("/dominion select_template " + p_player.getLastKnownName() + " " + dominion.getName() + " " + page).build());
|
||||
}
|
||||
line.append(p_player.getLastKnownName());
|
||||
view.add(line);
|
||||
}
|
||||
view.showOn(player, page);
|
||||
|
53
src/main/java/cn/lunadeer/dominion/tuis/SelectTemplate.java
Normal file
53
src/main/java/cn/lunadeer/dominion/tuis/SelectTemplate.java
Normal file
@ -0,0 +1,53 @@
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
|
||||
public class SelectTemplate {
|
||||
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
|
||||
String playerName = args[1];
|
||||
String dominionName = args[2];
|
||||
String backPage = args[3];
|
||||
|
||||
int page = 1;
|
||||
if (args.length == 5) {
|
||||
try {
|
||||
page = Integer.parseInt(args[4]);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
|
||||
|
||||
ListView view = ListView.create(10, "/dominion select_template " + playerName + " " + dominionName + " " + backPage);
|
||||
view.title("选择一个模板");
|
||||
Line sub = Line.create()
|
||||
.append("套用在领地 " + dominionName + " 的成员 " + playerName + " 身上")
|
||||
.append(Button.create("返回").setExecuteCommand("/dominion privilege_list " + dominionName + " " + backPage).build());
|
||||
view.subtitle(sub);
|
||||
|
||||
for (PrivilegeTemplateDTO template : templates) {
|
||||
// /dominion apply_template <玩家名称> <领地名称> <模板名称>
|
||||
view.add(Line.create()
|
||||
.append(Button.create("选择")
|
||||
.setExecuteCommand("/dominion apply_template " + playerName + " " + dominionName + " " + template.getName() + " " + backPage)
|
||||
.build())
|
||||
.append(Component.text(template.getName())));
|
||||
}
|
||||
view.showOn(player, page);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user