将tnt爆炸、火焰蔓延等领地独有的(非玩家行为)控制从“访客权限”移动到“环境设置”,避免歧义
Java CI-CD with Maven / build (push) Successful in 7m34s Details

This commit is contained in:
zhangyuheng 2024-06-17 15:12:51 +08:00
parent 4bd817bd84
commit 2299630e15
7 changed files with 99 additions and 4 deletions

View File

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

View File

@ -177,6 +177,9 @@ public class Commands implements TabExecutor {
case "set_map_color":
DominionOperate.setMapColor(sender, args);
break;
case "env_info":
DominionEnvInfo.show(sender, args);
break;
// ---=== CUI ===---
case "cui_rename":
RenameDominion.open(sender, args);

View File

@ -2,6 +2,8 @@ package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.FlagsController;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.tuis.DominionEnvInfo;
import cn.lunadeer.dominion.tuis.DominionFlagInfo;
import cn.lunadeer.minecraftpluginutils.Notification;
import org.bukkit.command.CommandSender;
@ -29,10 +31,15 @@ public class DominionFlag {
} else if (args.length == 5) {
FlagsController.setFlag(operator, args[1], Boolean.parseBoolean(args[2]), args[3]);
String[] newArgs = new String[3];
newArgs[0] = "flag_info";
newArgs[0] = Flag.isDominionOnlyFlag(args[1]) ? "env_info" : "flag_info";
newArgs[1] = args[3];
newArgs[2] = args[4];
DominionFlagInfo.show(sender, newArgs);
if (Flag.isDominionOnlyFlag(args[1])) {
DominionEnvInfo.show(sender, newArgs);
} else {
DominionFlagInfo.show(sender, newArgs);
}
} else {
Notification.error(sender, "用法: /dominion set <权限名称> <true/false> [领地名称]");
}

View File

@ -120,6 +120,26 @@ public enum Flag {
return Arrays.asList(Flag.values());
}
public static List<Flag> getDominionOnlyFlagsEnabled() {
List<Flag> flags = new ArrayList<>();
for (Flag flag : Flag.values()) {
if (!flag.dominion_only) {
continue;
}
if (!flag.enable) {
continue;
}
flags.add(flag);
}
Comparator<Object> comparator = Collator.getInstance(java.util.Locale.CHINA);
flags.sort((o1, o2) -> comparator.compare(o1.getDisplayName(), o2.getDisplayName()));
return flags;
}
public static boolean isDominionOnlyFlag(String flagName) {
return getFlag(flagName).dominion_only;
}
public static List<Flag> getDominionFlagsEnabled() {
List<Flag> flags = new ArrayList<>();
for (Flag flag : Flag.values()) {

View File

@ -0,0 +1,61 @@
package cn.lunadeer.dominion.tuis;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.minecraftpluginutils.Notification;
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 static cn.lunadeer.dominion.commands.Apis.playerOnly;
public class DominionEnvInfo {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length < 2) {
Notification.error(sender, "用法: /dominion env_info <领地名称> [页码]");
return;
}
DominionDTO dominion = DominionDTO.select(args[1]);
if (dominion == null) {
Notification.error(sender, "领地 %s 不存在", args[1]);
return;
}
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
}
ListView view = ListView.create(10, "/dominion env_info " + dominion.getName());
view.title("领地 " + dominion.getName() + " 环境设置")
.navigator(Line.create()
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
.append("环境设置"));
for (Flag flag : Flag.getDominionOnlyFlagsEnabled()) {
view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page));
}
view.showOn(player, page);
}
private static Line createOption(Flag flag, boolean value, String dominion_name, int page) {
if (value) {
return Line.create()
.append(Button.createGreen("").setExecuteCommand("/dominion set " + flag.getFlagName() + " false " + dominion_name + " " + page).build())
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
} else {
return Line.create()
.append(Button.createRed("").setExecuteCommand("/dominion set " + flag.getFlagName() + " true " + dominion_name + " " + page).build())
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
}
}
}

View File

@ -40,7 +40,7 @@ public class DominionFlagInfo {
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
.append("访客权限"));
for (Flag flag : Flag.getDominionFlagsEnabled()) {
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page));
}
view.showOn(player, page);

View File

@ -28,6 +28,9 @@ public class DominionManage {
Line size_info = Line.create()
.append(Button.create("详细信息").setExecuteCommand("/dominion info " + dominion.getName()).build())
.append("查看领地详细信息");
Line env_info = Line.create()
.append(Button.create("环境设置").setExecuteCommand("/dominion env_info " + dominion.getName()).build())
.append("设置领地内的一些非玩家相关效果");
Line flag_info = Line.create()
.append(Button.create("访客权限").setExecuteCommand("/dominion flag_info " + dominion.getName()).build())
.append("访客在此领地的权限");
@ -58,6 +61,7 @@ public class DominionManage {
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
.append(dominion.getName()))
.add(size_info)
.add(env_info)
.add(flag_info)
.add(privilege_list)
.add(set_tp)