实现了权限模板套用功能
Java CI-CD with Maven / build (push) Successful in 8m1s Details

This commit is contained in:
zhangyuheng 2024-06-08 09:35:30 +08:00
parent ae1444c469
commit 4c80ad292e
6 changed files with 173 additions and 11 deletions

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);

View 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);
}
}