移除了权限组 完成了ui

This commit is contained in:
zhangyuheng 2024-02-10 15:35:03 +08:00
parent 5810244de9
commit 15f19865ef
24 changed files with 1630 additions and 1697 deletions

View File

@ -1,22 +1,14 @@
package cn.lunadeer.dominion;
import cn.lunadeer.dominion.commands.*;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.controllers.GroupController;
import cn.lunadeer.dominion.commands.DominionFlag;
import cn.lunadeer.dominion.commands.DominionOperate;
import cn.lunadeer.dominion.commands.PlayerPrivilege;
import cn.lunadeer.dominion.controllers.PlayerController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.STUI.Line;
import cn.lunadeer.dominion.utils.STUI.ListView;
import cn.lunadeer.dominion.utils.STUI.Pagination;
import cn.lunadeer.dominion.utils.STUI.View;
import net.kyori.adventure.text.TextComponent;
import cn.lunadeer.dominion.tuis.*;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ -25,7 +17,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.commands.Helper.*;
public class Commands implements TabExecutor {
@ -67,34 +58,22 @@ public class Commands implements TabExecutor {
}
switch (args[0]) {
case "menu":
TUIs.menu(sender, args);
Menu.show(sender, args);
break;
case "list":
TUIs.list(sender, args);
ListDominion.show(sender, args);
break;
case "help":
TUIs.printHelp(sender, args);
cn.lunadeer.dominion.tuis.Apis.printHelp(sender, args);
break;
case "info":
TUIs.sizeInfo(sender, args);
DominionSizeInfo.show(sender, args);
break;
case "manage":
TUIs.manage(sender, args);
DominionManage.show(sender, args);
break;
case "flag_info":
TUIs.flagInfo(sender, args);
break;
case "group_list":
TUIs.groupList(sender, args);
break;
case "privilege_list":
TUIs.privilegeList(sender, args);
break;
case "group":
TUIs.group(sender, args);
break;
case "group_detail":
TUIs.groupDetail(sender, args);
DominionFlagInfo.show(sender, args);
break;
case "create":
DominionOperate.createDominion(sender, args);
@ -126,20 +105,11 @@ public class Commands implements TabExecutor {
case "clear_privilege":
PlayerPrivilege.clearPlayerPrivilege(sender, args);
break;
case "create_group":
PrivilegeGroup.createGroup(sender, args);
case "privilege_list":
DominionPrivilegeList.show(sender, args);
break;
case "delete_group":
PrivilegeGroup.deleteGroup(sender, args);
break;
case "set_group":
PrivilegeGroup.setDominionFlag(sender, args);
break;
case "add_player":
PrivilegeGroup.addPlayer(sender, args);
break;
case "remove_player":
PrivilegeGroup.removePlayer(sender, args);
case "privilege_info":
PrivilegeInfo.show(sender, args);
break;
default:
return false;
@ -165,8 +135,7 @@ public class Commands implements TabExecutor {
if (args.length == 1) {
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",
"set_privilege", "clear_privilege", "create_group", "delete_group", "set_group", "add_player",
"remove_player", "list"
"set_privilege", "clear_privilege", "list", "privilege_info"
);
}
if (args.length == 2) {
@ -178,28 +147,23 @@ public class Commands implements TabExecutor {
case "auto_create":
return Collections.singletonList("输入领地名称");
case "delete":
case "create_sub":
case "auto_create_sub":
case "info":
case "manage":
case "flag_info":
case "group_list":
case "privilege_list":
return playerDominions(sender);
case "set":
return dominionFlags();
case "set_privilege":
case "clear_privilege":
case "add_player":
case "remove_player":
case "privilege_info":
return playerNames();
case "create_group":
case "delete_group":
case "set_group":
return playerGroups(sender);
case "expand":
case "contract":
return Collections.singletonList("大小(整数)");
case "create_sub":
case "auto_create_sub":
return Collections.singletonList("子领地名称");
}
}
if (args.length == 3) {
@ -208,25 +172,20 @@ public class Commands implements TabExecutor {
return boolOptions();
case "set_privilege":
return playerPrivileges();
case "set_group":
return groupPrivileges();
case "add_player":
case "remove_player":
return playerGroups(sender);
case "expand":
case "contract":
case "clear_privilege":
case "privilege_info":
case "auto_create_sub":
case "create_sub":
return playerDominions(sender);
}
}
if (args.length == 4) {
switch (args[0]) {
case "set":
case "set_privilege":
case "clear_privilege":
case "add_player":
case "remove_player":
return playerDominions(sender);
case "set_group":
case "set_privilege":
return boolOptions();
}
}

View File

@ -7,9 +7,7 @@ import cn.lunadeer.dominion.utils.XLogger;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.plugin.java.JavaPlugin;
import org.postgresql.core.Tuple;
import javax.xml.crypto.Data;
import java.sql.Connection;
import java.util.*;

View File

@ -1,505 +0,0 @@
package cn.lunadeer.dominion;
import cn.lunadeer.dominion.commands.Helper;
import cn.lunadeer.dominion.controllers.GroupController;
import cn.lunadeer.dominion.controllers.PlayerController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.STUI.Button;
import cn.lunadeer.dominion.utils.STUI.Line;
import cn.lunadeer.dominion.utils.STUI.ListView;
import cn.lunadeer.dominion.utils.STUI.View;
import net.kyori.adventure.text.TextComponent;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.List;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.commands.Helper.playerDominions;
import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion;
public class TUIs {
private static int getPage(String[] args) {
int page = 1;
if (args.length == 2) {
try {
page = Integer.parseInt(args[1]);
} catch (Exception e) {
return 1;
}
}
return page;
}
private static DominionDTO getDominion(Player player, String[] args) {
if (args.length == 2) {
return DominionDTO.select(args[1]);
} else {
return getPlayerCurrentDominion(player);
}
}
private static boolean noAuthToManage(Player player, DominionDTO dominion) {
if (player.isOp()) return false;
if (!dominion.getOwner().equals(player.getUniqueId())) {
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId());
for (PlayerPrivilegeDTO privilege : privileges) {
if (privilege.getAdmin()) return false;
}
Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者或管理员,无权访问此页面");
return true;
} else {
return false;
}
}
public static void printHelp(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
int page = getPage(args);
ListView view = ListView.create(5, "/dominion help");
view.title("领地插件命令帮助")
.add(Line.create().append("打开交互菜单").append(Button.create("/dominion menu", "/dominion menu")))
.add(Line.create().append("列出所有领地").append(Button.create("/dominion list", "/dominion list")))
.add(Line.create().append("查看帮助").append(Button.create("/dominion help [页码]", "/dominion help 1")))
.add(Line.create().append("查看领地信息").append(Button.create("/dominion info [领地名称]", "/dominion info")))
.add(Line.create().append("查看领地权限信息").append(Button.create("/dominion flag_info <领地名称> [页码]", "/dominion flag_info")))
.add(Line.create().append("管理领地").append("/dominion manage <领地名称>"))
.add(Line.create().append("创建领地").append("/dominion create <领地名称>"))
.add(Line.create().append("自动创建领地").append("/dominion auto_create <领地名称>"))
.add(Line.create().append("创建子领地").append("/dominion create_sub <子领地名称> [父领地名称]"))
.add(Line.create().append("自动创建子领地").append("/dominion auto_create_sub <子领地名称> [父领地名称]"))
.add(Line.create().append("扩张领地").append("/dominion expand [大小] [领地名称]"))
.add(Line.create().append("缩小领地").append("/dominion contract [大小] [领地名称]"))
.add(Line.create().append("删除领地").append("/dominion delete <领地名称> [force]"))
.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 clear_privilege <玩家名称> [领地名称]"))
.add(Line.create().append("查看领地玩家权限").append("/dominion privilege_list <领地名称> [页码]"))
.add(Line.create().append("查看权限组").append("/dominion group [页码]"))
.add(Line.create().append("查看权限组详情").append("/dominion group_detail <权限组名称> [页码]"))
.add(Line.create().append("创建权限组").append("/dominion create_group <权限组名称>"))
.add(Line.create().append("删除权限组").append("/dominion delete_group <权限组名称>"))
.add(Line.create().append("设置权限组权限").append("/dominion set_group <权限组名称> <权限名称> <true/false>"))
.add(Line.create().append("设置玩家在某个领地归属的权限组").append("/dominion add_player <玩家名称> <权限组名称> [领地名称]"))
.add(Line.create().append("删除玩家在某个领地归属的权限组").append("/dominion remove_player <玩家名称> <权限组名称> [领地名称]"))
.add(Line.create().append("查看领地的权限组").append("/dominion group_list <领地名称> [页码]"))
.showOn(player, page);
}
public static void sizeInfo(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = getDominion(player, args);
if (dominion == null) {
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion info <领地名称>");
return;
}
PlayerDTO owner = PlayerController.getPlayerDTO(dominion.getOwner());
Integer x1 = dominion.getX1();
Integer y1 = dominion.getY1();
Integer z1 = dominion.getZ1();
Integer x2 = dominion.getX2();
Integer y2 = dominion.getY2();
Integer z2 = dominion.getZ2();
View view = View.create();
view.title("领地 " + dominion.getName() + " 的尺寸信息")
.subtitle("领地归属:" + owner.getLastKnownName())
.addLine(Line.create().append("领地大小:").append((x2 - x1) + " x" + (y2 - y1) + " x" + (z2 - z1)))
.addLine(Line.create().append("中心坐标:").append((x1 + (x2 - x1) / 2) + " " + (y1 + (y2 - y1) / 2) + " " + (z1 + (z2 - z1) / 2)))
.addLine(Line.create().append("垂直高度:").append(String.valueOf(y2 - y1)))
.addLine(Line.create().append("水平面积:").append(String.valueOf((x2 - x1) * (z2 - z1))))
.addLine(Line.create().append("领地体积:").append(String.valueOf((x2 - x1) * (y2 - y1) * (z2 - z1))))
.actionBar(Line.create()
.append(Button.create("管理界面", "/dominion manage " + dominion.getName()))
.append(Button.create("权限列表", "/dominion flag_info " + dominion.getName())))
.showOn(player);
}
public static void group(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
int page = getPage(args);
List<PrivilegeTemplateDTO> template = GroupController.all(player);
if (template.isEmpty()) {
Notification.warn(sender, "没有任何权限组");
return;
}
ListView view = ListView.create(5, "/dominion group");
for (PrivilegeTemplateDTO dto : template) {
view.add(Line.create().append(dto.getName()).append(Button.create("管理", "/dominion group_detail " + dto.getName())));
}
view.showOn(player, page);
}
public static void groupDetail(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length < 2) {
Notification.error(sender, "用法: /dominion group_detail <权限组名称> [页码]");
return;
}
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception e) {
Notification.error(sender, "页码格式错误");
return;
}
}
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(player.getUniqueId(), args[1]);
if (template == null) {
Notification.error(sender, "权限组 " + args[1] + " 不存在");
return;
}
// todo group detail
}
public static void menu(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
Line list = Line.create()
.append(Button.create("我的领地", "/dominion list"))
.append("查看我的领地");
Line group = Line.create()
.append(Button.create("权限组", "/dominion group"))
.append("管理权限组");
Line help = Line.create()
.append(Button.create("指令帮助", "/dominion help"))
.append("查看指令帮助");
View view = View.create();
view.title("Dominion 领地系统")
.navigator(Line.create().append("主菜单"))
.addLine(list)
.addLine(group)
.addLine(help)
.showOn(player);
}
public static void list(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
int page = getPage(args);
ListView view = ListView.create(5, "/dominion list");
List<String> dominions = playerDominions(sender);
if (dominions.isEmpty()) {
Notification.warn(sender, "你没有任何领地");
return;
}
view.title("我的领地列表");
view.navigator(Line.create().append(Button.create("主菜单", "/dominion menu")).append("我的领地"));
for (String dominion : dominions) {
TextComponent manage = Button.createGreen("管理", "/dominion manage " + dominion);
TextComponent delete = Button.createRed("删除", "/dominion delete " + dominion);
view.add(Line.create().append(dominion).append(manage).append(delete));
}
view.showOn(player, page);
}
public static void flagInfo(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length < 2) {
Notification.error(sender, "用法: /dominion flag_info <领地名称> [页码]");
return;
}
DominionDTO dominion = DominionDTO.select(args[1]);
if (dominion == null) {
Notification.error(sender, "领地 " + args[1] + " 不存在");
return;
}
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
}
ListView view = ListView.create(6, "/dominion flag_info " + dominion.getName());
view.title("领地 " + dominion.getName() + " 默认权限")
.navigator(Line.create()
.append(Button.create("主菜单", "/dominion menu"))
.append(Button.create("我的领地", "/dominion list"))
.append(Button.create("管理界面", "/dominion manage " + dominion.getName()))
.append("权限列表"));
if (dominion.getAnchor()) {
view.add(Line.create().append("重生锚").append(Button.createRed("禁用", "/dominion set anchor false " + dominion.getName())));
} else {
view.add(Line.create().append("重生锚").append(Button.createGreen("启用", "/dominion set anchor true " + dominion.getName())));
}
if (dominion.getAnimalKilling()) {
view.add(Line.create().append("动物伤害").append(Button.createRed("禁用", "/dominion set animal_killing false " + dominion.getName())));
} else {
view.add(Line.create().append("动物伤害").append(Button.createGreen("启用", "/dominion set animal_killing true " + dominion.getName())));
}
if (dominion.getAnvil()) {
view.add(Line.create().append("使用铁砧").append(Button.createRed("禁用", "/dominion set anvil false " + dominion.getName())));
} else {
view.add(Line.create().append("使用铁砧").append(Button.createGreen("启用", "/dominion set anvil true " + dominion.getName())));
}
if (dominion.getBeacon()) {
view.add(Line.create().append("信标交互").append(Button.createRed("禁用", "/dominion set beacon false " + dominion.getName())));
} else {
view.add(Line.create().append("信标交互").append(Button.createGreen("启用", "/dominion set beacon true " + dominion.getName())));
}
if (dominion.getBed()) {
view.add(Line.create().append("床交互").append(Button.createRed("禁用", "/dominion set bed false " + dominion.getName())));
} else {
view.add(Line.create().append("床交互").append(Button.createGreen("启用", "/dominion set bed true " + dominion.getName())));
}
if (dominion.getBrew()) {
view.add(Line.create().append("使用酿造台").append(Button.createRed("禁用", "/dominion set brew false " + dominion.getName())));
} else {
view.add(Line.create().append("使用酿造台").append(Button.createGreen("启用", "/dominion set brew true " + dominion.getName())));
}
if (dominion.getButton()) {
view.add(Line.create().append("使用按钮").append(Button.createRed("禁用", "/dominion set button false " + dominion.getName())));
} else {
view.add(Line.create().append("使用按钮").append(Button.createGreen("启用", "/dominion set button true " + dominion.getName())));
}
if (dominion.getCake()) {
view.add(Line.create().append("使用蛋糕").append(Button.createRed("禁用", "/dominion set cake false " + dominion.getName())));
} else {
view.add(Line.create().append("使用蛋糕").append(Button.createGreen("启用", "/dominion set cake true " + dominion.getName())));
}
if (dominion.getContainer()) {
view.add(Line.create().append("容器交互").append(Button.createRed("禁用", "/dominion set container false " + dominion.getName())));
} else {
view.add(Line.create().append("容器交互").append(Button.createGreen("启用", "/dominion set container true " + dominion.getName())));
}
if (dominion.getCraft()) {
view.add(Line.create().append("合成").append(Button.createRed("禁用", "/dominion set craft false " + dominion.getName())));
} else {
view.add(Line.create().append("合成").append(Button.createGreen("启用", "/dominion set craft true " + dominion.getName())));
}
if (dominion.getCreeperExplode()) {
view.add(Line.create().append("苦力怕爆炸").append(Button.createRed("禁用", "/dominion set creeper_explode false " + dominion.getName())));
} else {
view.add(Line.create().append("苦力怕爆炸").append(Button.createGreen("启用", "/dominion set creeper_explode true " + dominion.getName())));
}
if (dominion.getDiode()) {
view.add(Line.create().append("中继器交互").append(Button.createRed("禁用", "/dominion set diode false " + dominion.getName())));
} else {
view.add(Line.create().append("中继器交互").append(Button.createGreen("启用", "/dominion set diode true " + dominion.getName())));
}
if (dominion.getDoor()) {
view.add(Line.create().append("门交互").append(Button.createRed("禁用", "/dominion set door false " + dominion.getName())));
} else {
view.add(Line.create().append("门交互").append(Button.createGreen("启用", "/dominion set door true " + dominion.getName())));
}
if (dominion.getDye()) {
view.add(Line.create().append("染色").append(Button.createRed("禁用", "/dominion set dye false " + dominion.getName())));
} else {
view.add(Line.create().append("染色").append(Button.createGreen("启用", "/dominion set dye true " + dominion.getName())));
}
if (dominion.getEgg()) {
view.add(Line.create().append("投掷鸡蛋").append(Button.createRed("禁用", "/dominion set egg false " + dominion.getName())));
} else {
view.add(Line.create().append("投掷鸡蛋").append(Button.createGreen("启用", "/dominion set egg true " + dominion.getName())));
}
if (dominion.getEnchant()) {
view.add(Line.create().append("附魔").append(Button.createRed("禁用", "/dominion set enchant false " + dominion.getName())));
} else {
view.add(Line.create().append("附魔").append(Button.createGreen("启用", "/dominion set enchant true " + dominion.getName())));
}
if (dominion.getEnderPearl()) {
view.add(Line.create().append("末影珍珠").append(Button.createRed("禁用", "/dominion set ender_pearl false " + dominion.getName())));
} else {
view.add(Line.create().append("末影珍珠").append(Button.createGreen("启用", "/dominion set ender_pearl true " + dominion.getName())));
}
if (dominion.getFeed()) {
view.add(Line.create().append("喂食").append(Button.createRed("禁用", "/dominion set feed false " + dominion.getName())));
} else {
view.add(Line.create().append("喂食").append(Button.createGreen("启用", "/dominion set feed true " + dominion.getName())));
}
if (dominion.getFireSpread()) {
view.add(Line.create().append("火焰蔓延").append(Button.createRed("禁用", "/dominion set fire_spread false " + dominion.getName())));
} else {
view.add(Line.create().append("火焰蔓延").append(Button.createGreen("启用", "/dominion set fire_spread true " + dominion.getName())));
}
if (dominion.getFlowInProtection()) {
view.add(Line.create().append("流体保护").append(Button.createRed("禁用", "/dominion set flow_in_protection false " + dominion.getName())));
} else {
view.add(Line.create().append("流体保护").append(Button.createGreen("启用", "/dominion set flow_in_protection true " + dominion.getName())));
}
if (dominion.getGlow()) {
view.add(Line.create().append("发光").append(Button.createRed("禁用", "/dominion set glow false " + dominion.getName())));
} else {
view.add(Line.create().append("发光").append(Button.createGreen("启用", "/dominion set glow true " + dominion.getName())));
}
if (dominion.getGrow()) {
view.add(Line.create().append("植物生长").append(Button.createRed("禁用", "/dominion set grow false " + dominion.getName())));
} else {
view.add(Line.create().append("植物生长").append(Button.createGreen("启用", "/dominion set grow true " + dominion.getName())));
}
if (dominion.getHoney()) {
view.add(Line.create().append("蜂巢交互").append(Button.createRed("禁用", "/dominion set honey false " + dominion.getName())));
} else {
view.add(Line.create().append("蜂巢交互").append(Button.createGreen("启用", "/dominion set honey true " + dominion.getName())));
}
if (dominion.getHook()) {
view.add(Line.create().append("钩子交互").append(Button.createRed("禁用", "/dominion set hook false " + dominion.getName())));
} else {
view.add(Line.create().append("钩子交互").append(Button.createGreen("启用", "/dominion set hook true " + dominion.getName())));
}
if (dominion.getIgnite()) {
view.add(Line.create().append("点燃").append(Button.createRed("禁用", "/dominion set ignite false " + dominion.getName())));
} else {
view.add(Line.create().append("点燃").append(Button.createGreen("启用", "/dominion set ignite true " + dominion.getName())));
}
if (dominion.getMobKilling()) {
view.add(Line.create().append("生物伤害").append(Button.createRed("禁用", "/dominion set mob_killing false " + dominion.getName())));
} else {
view.add(Line.create().append("生物伤害").append(Button.createGreen("启用", "/dominion set mob_killing true " + dominion.getName())));
}
if (dominion.getMove()) {
view.add(Line.create().append("移动").append(Button.createRed("禁用", "/dominion set move false " + dominion.getName())));
} else {
view.add(Line.create().append("移动").append(Button.createGreen("启用", "/dominion set move true " + dominion.getName())));
}
if (dominion.getPlace()) {
view.add(Line.create().append("放置").append(Button.createRed("禁用", "/dominion set place false " + dominion.getName())));
} else {
view.add(Line.create().append("放置").append(Button.createGreen("启用", "/dominion set place true " + dominion.getName())));
}
if (dominion.getPressure()) {
view.add(Line.create().append("压力板交互").append(Button.createRed("禁用", "/dominion set pressure false " + dominion.getName())));
} else {
view.add(Line.create().append("压力板交互").append(Button.createGreen("启用", "/dominion set pressure true " + dominion.getName())));
}
if (dominion.getRiding()) {
view.add(Line.create().append("骑乘").append(Button.createRed("禁用", "/dominion set riding false " + dominion.getName())));
} else {
view.add(Line.create().append("骑乘").append(Button.createGreen("启用", "/dominion set riding true " + dominion.getName())));
}
if (dominion.getShear()) {
view.add(Line.create().append("剪羊毛").append(Button.createRed("禁用", "/dominion set shear false " + dominion.getName())));
} else {
view.add(Line.create().append("剪羊毛").append(Button.createGreen("启用", "/dominion set shear true " + dominion.getName())));
}
if (dominion.getShoot()) {
view.add(Line.create().append("发射").append(Button.createRed("禁用", "/dominion set shoot false " + dominion.getName())));
} else {
view.add(Line.create().append("发射").append(Button.createGreen("启用", "/dominion set shoot true " + dominion.getName())));
}
if (dominion.getTntExplode()) {
view.add(Line.create().append("TNT爆炸").append(Button.createRed("禁用", "/dominion set tnt_explode false " + dominion.getName())));
} else {
view.add(Line.create().append("TNT爆炸").append(Button.createGreen("启用", "/dominion set tnt_explode true " + dominion.getName())));
}
if (dominion.getTrade()) {
view.add(Line.create().append("交易").append(Button.createRed("禁用", "/dominion set trade false " + dominion.getName())));
} else {
view.add(Line.create().append("交易").append(Button.createGreen("启用", "/dominion set trade true " + dominion.getName())));
}
if (dominion.getVehicleDestroy()) {
view.add(Line.create().append("破坏载具").append(Button.createRed("禁用", "/dominion set vehicle_destroy false " + dominion.getName())));
} else {
view.add(Line.create().append("破坏载具").append(Button.createGreen("启用", "/dominion set vehicle_destroy true " + dominion.getName())));
}
if (dominion.getWitherSpawn()) {
view.add(Line.create().append("凋零生成").append(Button.createRed("禁用", "/dominion set wither_spawn false " + dominion.getName())));
} else {
view.add(Line.create().append("凋零生成").append(Button.createGreen("启用", "/dominion set wither_spawn true " + dominion.getName())));
}
if (dominion.getHarvest()) {
view.add(Line.create().append("收获").append(Button.createRed("禁用", "/dominion set harvest false " + dominion.getName())));
} else {
view.add(Line.create().append("收获").append(Button.createGreen("启用", "/dominion set harvest true " + dominion.getName())));
}
view.showOn(player, page);
}
public static void manage(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = getDominion(player, args);
if (dominion == null) {
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion manage <领地名称>");
return;
}
if (noAuthToManage(player, dominion)) return;
Line size_info = Line.create()
.append(Button.create("尺寸信息", "/dominion info " + dominion.getName()))
.append("查看领地尺寸信息");
Line flag_info = Line.create()
.append(Button.create("权限设置", "/dominion flag_info " + dominion.getName()))
.append("管理领地默认权限");
Line group_info = Line.create()
.append(Button.create("权限组", "/dominion group_list " + dominion.getName()))
.append("管理领地权限组");
Line privilege_list = Line.create()
.append(Button.create("玩家权限", "/dominion privilege_list " + dominion.getName()))
.append("管理玩家特权");
View view = View.create();
view.title("领地 " + dominion.getName() + " 管理界面")
.navigator(Line.create()
.append(Button.create("主菜单", "/dominion menu"))
.append(Button.create("我的领地", "/dominion list"))
.append(dominion.getName()))
.addLine(size_info)
.addLine(flag_info)
.addLine(group_info)
.addLine(privilege_list)
.showOn(player);
}
public static void groupList(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length < 2) {
Notification.error(sender, "用法: /dominion group_list <领地名称> [页码]");
return;
}
DominionDTO dominion = DominionDTO.select(args[1]);
if (dominion == null) {
Notification.error(sender, "领地 " + args[1] + " 不存在");
return;
}
if (noAuthToManage(player, dominion)) return;
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
}
ListView view = ListView.create(6, "/dominion group_list " + dominion.getName());
view.title("领地 " + dominion.getName() + " 权限组信息")
.subtitle(Button.create("返回管理界面", "/dominion manage " + dominion.getName()));
// todo
view.showOn(player, page);
}
public static void privilegeList(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length < 2) {
Notification.error(sender, "用法: /dominion privilege_list <领地名称> [页码]");
return;
}
DominionDTO dominion = DominionDTO.select(args[1]);
if (dominion == null) {
Notification.error(sender, "领地 " + args[1] + " 不存在");
return;
}
if (noAuthToManage(player, dominion)) return;
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
}
ListView view = ListView.create(6, "/dominion privilege_list " + dominion.getName());
view.title("领地 " + dominion.getName() + " 玩家权限信息")
.subtitle(Button.create("返回管理界面", "/dominion manage " + dominion.getName()));
// todo
view.showOn(player, page);
}
}

View File

@ -1,7 +1,7 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.controllers.FlagsController;
import cn.lunadeer.dominion.tuis.DominionFlagInfo;
import cn.lunadeer.dominion.utils.Notification;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -28,8 +28,19 @@ public class DominionFlag {
if (FlagsController.setFlag(player, args[1], Boolean.parseBoolean(args[2]), args[3]) == null) {
Notification.error(sender, "设置领地权限失败");
}
} else if (args.length == 5) {
if (FlagsController.setFlag(player, args[1], Boolean.parseBoolean(args[2]), args[3]) == null) {
Notification.error(sender, "设置领地权限失败");
}
String[] newArgs = new String[3];
newArgs[0] = "flag_info";
newArgs[1] = args[3];
newArgs[2] = args[4];
DominionFlagInfo.show(sender, newArgs);
return;
} else {
Notification.error(sender, "用法: /dominion set <权限名称> <true/false> [领地名称]");
return;
}
Notification.info(sender, "设置领地权限 " + args[1] + "" + args[2]);
}

View File

@ -4,16 +4,13 @@ import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.utils.Notification;
import net.kyori.adventure.text.Component;
import org.bukkit.Location;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
import static cn.lunadeer.dominion.commands.Apis.*;
import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion;
public class DominionOperate {
/**

View File

@ -1,17 +1,7 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.DominionController;
import cn.lunadeer.dominion.controllers.GroupController;
import cn.lunadeer.dominion.controllers.PlayerController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.STUI.Button;
import cn.lunadeer.dominion.utils.STUI.Line;
import cn.lunadeer.dominion.utils.STUI.ListView;
import cn.lunadeer.dominion.utils.STUI.View;
import net.kyori.adventure.text.TextComponent;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -20,7 +10,6 @@ import java.util.Arrays;
import java.util.List;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion;
public class Helper {
@ -33,20 +22,14 @@ public class Helper {
"harvest");
}
public static List<String> groupPrivileges() {
public static List<String> playerPrivileges() {
return Arrays.asList(
"anchor", "animal_killing", "anvil", "beacon", "bed", "brew", "button", "cake", "container", "craft",
"admin", "anchor", "animal_killing", "anvil", "beacon", "bed", "brew", "button", "cake", "container", "craft",
"diode", "door", "dye", "egg", "enchant", "ender_pearl", "feed", "glow", "honey", "hook", "ignite",
"mob_killing", "move", "place", "pressure", "riding", "shear", "shoot", "trade", "vehicle_destroy",
"harvest");
}
public static List<String> playerPrivileges() {
List<String> privileges = new ArrayList<>(groupPrivileges());
privileges.add("admin");
return privileges;
}
public static List<String> playerDominions(CommandSender sender) {
List<String> dominions_name = new ArrayList<>();
Player player = playerOnly(sender);
@ -58,16 +41,5 @@ public class Helper {
return dominions_name;
}
public static List<String> playerGroups(CommandSender sender) {
List<String> groups_name = new ArrayList<>();
Player player = playerOnly(sender);
if (player == null) return groups_name;
List<PrivilegeTemplateDTO> groups = GroupController.all(player);
for (PrivilegeTemplateDTO group : groups) {
groups_name.add(group.getName());
}
return groups_name;
}
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.tuis.PrivilegeInfo;
import cn.lunadeer.dominion.utils.Notification;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -21,20 +21,34 @@ public class PlayerPrivilege {
public static void setPlayerPrivilege(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length != 4 && args.length != 5) {
if (args.length == 4) {
if (!setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]))) {
Notification.error(sender, "设置玩家权限失败");
return;
}
} else if (args.length == 5) {
if (!setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]), args[4])) {
Notification.error(sender, "设置玩家权限失败");
return;
}
} else if (args.length == 6) {
if (!setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]), args[4])) {
Notification.error(sender, "设置玩家权限失败");
return;
}
String[] newArgs = new String[4];
newArgs[0] = "privilege_info";
newArgs[1] = args[1];
newArgs[2] = args[4];
newArgs[3] = args[5];
PrivilegeInfo.show(sender, newArgs);
return;
} else {
Notification.error(sender, "用法: /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]");
return;
}
if (args.length == 4) {
if (setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]))) {
return;
}
} else {
if (setPrivilege(player, args[1], args[2], Boolean.parseBoolean(args[3]), args[4])) {
return;
}
}
Notification.error(sender, "设置玩家权限失败");
Notification.info(sender, "设置玩家权限 " + args[1] + "" + args[2]);
}
/**

View File

@ -1,107 +0,0 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.controllers.FlagsController;
import cn.lunadeer.dominion.controllers.GroupController;
import cn.lunadeer.dominion.controllers.PlayerController;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.utils.Notification;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
public class PrivilegeGroup {
/**
* 创建权限组
* /dominion create_group <权限组名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void createGroup(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length != 2) {
Notification.error(sender, "用法: /dominion create_group <权限组名称>");
return;
}
GroupController.create(player, args[1]);
}
/**
* 删除权限组
* /dominion delete_group <权限组名称>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void deleteGroup(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length != 2) {
Notification.error(sender, "用法: /dominion delete_group <权限组名称>");
return;
}
GroupController.delete(player, args[1]);
}
/**
* 设置权限组权限
* /dominion set_group <权限组名称> <权限名称> <true/false>
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void setDominionFlag(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length != 4) {
Notification.error(sender, "用法: /dominion set_group <权限组名称> <权限名称> <true/false>");
return;
}
GroupController.setFlag(player, args[1], args[2], Boolean.parseBoolean(args[3]));
}
/**
* 设置玩家在某个领地归属的权限组
* /dominion add_player <玩家名称> <权限组名称> [领地名称]
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void addPlayer(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length != 3 && args.length != 4) {
Notification.error(sender, "用法: /dominion add_player <玩家名称> <权限组名称> [领地名称]");
return;
}
if (args.length == 3) {
GroupController.addPlayer(player, args[1], args[2]);
} else {
GroupController.addPlayer(player, args[1], args[2], args[3]);
}
}
/**
* 删除玩家在某个领地归属的权限组
* /dominion remove_player <玩家名称> <权限组名称> [领地名称]
*
* @param sender 命令发送者
* @param args 命令参数
*/
public static void removePlayer(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length != 3 && args.length != 4) {
Notification.error(sender, "用法: /dominion remove_player <玩家名称> <权限组名称> [领地名称]");
return;
}
if (args.length == 3) {
GroupController.removePlayer(player, args[1], args[2]);
} else {
GroupController.removePlayer(player, args[1], args[2], args[3]);
}
}
}

View File

@ -2,7 +2,6 @@ package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
import cn.lunadeer.dominion.utils.Notification;
import org.bukkit.Location;
import org.bukkit.block.BlockFace;
@ -22,15 +21,13 @@ public class Apis {
public static boolean noAuthToChangeFlags(Player player, DominionDTO dominion) {
if (player.isOp()) return false;
if (!dominion.getOwner().equals(player.getUniqueId())) {
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId());
for (PlayerPrivilegeDTO privilege : privileges) {
if (privilege.getAdmin()) return false;
PlayerPrivilegeDTO privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId());
if (privileges == null || !privileges.getAdmin()) {
Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者或管理员,无权修改权限");
return true;
}
Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者或管理员,无法执行此操作");
return true;
} else {
return false;
}
return false;
}
/**
@ -57,108 +54,6 @@ public class Apis {
return getPlayerCurrentDominion(player, true);
}
public static boolean updateTemplateFlag(PrivilegeTemplateDTO privilege, String flag, boolean value) {
switch (flag) {
case "anchor":
privilege.setAnchor(value);
break;
case "animal_killing":
privilege.setAnimalKilling(value);
break;
case "anvil":
privilege.setAnvil(value);
break;
case "beacon":
privilege.setBeacon(value);
break;
case "bed":
privilege.setBed(value);
break;
case "brew":
privilege.setBrew(value);
break;
case "button":
privilege.setButton(value);
break;
case "cake":
privilege.setCake(value);
break;
case "container":
privilege.setContainer(value);
break;
case "craft":
privilege.setCraft(value);
break;
case "diode":
privilege.setDiode(value);
break;
case "door":
privilege.setDoor(value);
break;
case "dye":
privilege.setDye(value);
break;
case "egg":
privilege.setEgg(value);
break;
case "enchant":
privilege.setEnchant(value);
break;
case "ender_pearl":
privilege.setEnderPearl(value);
break;
case "feed":
privilege.setFeed(value);
break;
case "glow":
privilege.setGlow(value);
break;
case "honey":
privilege.setHoney(value);
break;
case "hook":
privilege.setHook(value);
break;
case "ignite":
privilege.setIgnite(value);
break;
case "mob_killing":
privilege.setMobKilling(value);
break;
case "move":
privilege.setMove(value);
break;
case "place":
privilege.setPlace(value);
break;
case "pressure":
privilege.setPressure(value);
break;
case "riding":
privilege.setRiding(value);
break;
case "shear":
privilege.setShear(value);
break;
case "shoot":
privilege.setShoot(value);
break;
case "trade":
privilege.setTrade(value);
break;
case "vehicle_destroy":
privilege.setVehicleDestroy(value);
break;
case "harvest":
privilege.setHarvest(value);
break;
default:
return false;
}
return true;
}
public static BlockFace getFace(Player player) {
float yaw = player.getYaw();
float pitch = player.getPitch();

View File

@ -3,7 +3,6 @@ package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.STUI.Pagination;
import cn.lunadeer.dominion.utils.Time;
import cn.lunadeer.dominion.utils.XLogger;
import org.bukkit.Location;

View File

@ -1,166 +0,0 @@
package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
import cn.lunadeer.dominion.utils.Notification;
import org.bukkit.entity.Player;
import java.util.List;
import java.util.UUID;
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
public class GroupController {
public static List<PrivilegeTemplateDTO> all(Player owner) {
return PrivilegeTemplateDTO.selectGroup(owner.getUniqueId());
}
/**
* 创建权限组
*
* @param operator 操作者
* @param name 权限组名称
* @return 是否创建成功
*/
public static PrivilegeTemplateDTO create(Player operator, String name) {
PrivilegeTemplateDTO template = new PrivilegeTemplateDTO(name, operator.getUniqueId(), true);
template = PrivilegeTemplateDTO.insert(template);
if (template == null) {
Notification.error(operator, "创建权限组失败");
return null;
}
return template;
}
/**
* 删除权限组
*
* @param operator 操作者
* @param name 权限组名称
* @return 是否删除成功
*/
public static boolean delete(Player operator, String name) {
PrivilegeTemplateDTO.delete(operator.getUniqueId(), name);
return true;
}
/**
* 设置权限组的权限
*
* @param operator 操作者
* @param name 权限组名称
* @param flag 权限名称
* @param value 权限值
* @return 是否设置成功
*/
public static boolean setFlag(Player operator, String name, String flag, boolean value) {
PrivilegeTemplateDTO privilege = PrivilegeTemplateDTO.select(operator.getUniqueId(), name);
if (privilege == null) {
Notification.error(operator, "没有找到权限组 " + name);
return false;
}
if (!Apis.updateTemplateFlag(privilege, flag, value)) {
Notification.error(operator, "未知的权限组权限 " + flag);
return false;
}
Notification.info(operator, "设置权限组 " + name + " 权限 " + flag + "" + value);
return true;
}
/**
* 添加玩家到权限组
*
* @param operator 操作者
* @param player_name 玩家
* @param groupName 权限组名称
* @return 是否添加成功
*/
public static boolean addPlayer(Player operator, String player_name, String groupName) {
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
if (dominion == null) return false;
return addPlayer(operator, player_name, groupName, dominion.getName());
}
/**
* 添加玩家到权限组
*
* @param operator 操作者
* @param player_name 玩家
* @param groupName 权限组名称
* @param dominionName 领地名称
* @return 是否添加成功
*/
public static boolean addPlayer(Player operator, String player_name, String groupName, String dominionName) {
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), groupName);
if (template == null) {
Notification.error(operator, "没有找到权限组 " + groupName + " 或者需要先创建权限组");
return false;
}
PlayerDTO player = PlayerDTO.select(player_name);
if (player == null) {
Notification.error(operator, "玩家 " + player_name + " 不存在或没有登录过");
return false;
}
DominionDTO dominion = DominionDTO.select(dominionName);
if (dominion == null) {
Notification.error(operator, "领地 " + dominionName + " 不存在");
return false;
}
if (noAuthToChangeFlags(operator, dominion)) return false;
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player.getUuid(), false, dominion.getId(), template.getId());
privilege = PlayerPrivilegeDTO.insert(privilege);
if (privilege == null) {
Notification.error(operator, "设置玩家" + player.getLastKnownName() + "在领地 " + dominionName + " 归属权限组 " + groupName + " 失败");
return false;
}
Notification.info(operator, "设置玩家" + player.getLastKnownName() + "在领地 " + dominionName + " 归属权限组 " + groupName);
return true;
}
/**
* 从权限组中移除玩家
*
* @param operator 操作者
* @param player_name 玩家
* @param groupName 权限组名称
* @return 是否移除成功
*/
public static boolean removePlayer(Player operator, String player_name, String groupName) {
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
if (dominion == null) return false;
return removePlayer(operator, player_name, groupName, dominion.getName());
}
/**
* 从权限组中移除玩家
*
* @param operator 操作者
* @param player_name 玩家
* @param groupName 权限组名称
* @param dominionName 领地名称
* @return 是否移除成功
*/
public static boolean removePlayer(Player operator, String player_name, String groupName, String dominionName) {
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), groupName);
if (template == null) {
Notification.error(operator, "没有找到权限组 " + groupName);
return false;
}
DominionDTO dominion = DominionDTO.select(dominionName);
if (dominion == null) {
Notification.error(operator, "领地 " + dominionName + " 不存在");
return false;
}
if (noAuthToChangeFlags(operator, dominion)) return false;
PlayerDTO player = PlayerDTO.select(player_name);
if (player == null) {
Notification.error(operator, "玩家 " + player_name + " 不存在或没有登录过");
return false;
}
PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId(), template.getId());
return true;
}
}

View File

@ -3,14 +3,9 @@ package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.XLogger;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
@ -50,13 +45,7 @@ public class PrivilegeController {
Notification.error(operator, "玩家 " + player_name + " 不存在或没有登录过");
return false;
}
List<PrivilegeTemplateDTO> templates = getPlayerPrivilegeTemplates(player.getUuid(), dominion.getId());
if (templates.size() < 1) {
return true;
}
for (PrivilegeTemplateDTO template : templates) {
PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId(), template.getId());
}
PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId());
return true;
}
@ -97,69 +86,121 @@ public class PrivilegeController {
Notification.error(operator, "玩家 " + player_name + " 不存在或没有登录过");
return false;
}
List<PrivilegeTemplateDTO> templates = getPlayerPrivilegeTemplates(player.getUuid(), dominion.getId());
if (templates.size() < 1) {
PrivilegeTemplateDTO template = createPlayerPrivilege(operator, player.getUuid(), dominion.getId());
if (template == null) return false;
templates.add(template);
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
if (privilege == null) {
privilege = createPlayerPrivilege(operator, player.getUuid(), dominion.getId());
if (privilege == null) return false;
}
if (templates.size() > 1) {
Notification.error(operator, "玩家特权拥有多个权限模板,建议使用 clear_privilege 清空此玩家特权后重新设置");
XLogger.warn("玩家特权拥有多个权限模板,使用搜索到的第一个 id: " + templates.get(0).getId() + " 进行操作,请检查数据库");
XLogger.warn("其他权限模板如下:");
for (int i = 1; i < templates.size(); i++) {
XLogger.warn(" id: " + templates.get(i).getId());
}
}
PrivilegeTemplateDTO privilege = templates.get(0);
if (Objects.equals(flag, "admin")) {
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
for (PlayerPrivilegeDTO p : privileges) {
if (p.getPrivilegeTemplateID().equals(privilege.getId())) {
p = p.setAdmin(value);
if (p == null) {
Notification.error(operator, "更新玩家特权失败");
return false;
}
return true;
}
}
Notification.error(operator, "没有找到玩家权限关联数据");
return false;
}
if (!Apis.updateTemplateFlag(privilege, flag, value)) {
Notification.error(operator, "未知的领地权限 " + flag);
return false;
switch (flag) {
case "anchor":
privilege.setAnchor(value);
break;
case "animal_killing":
privilege.setAnimalKilling(value);
break;
case "anvil":
privilege.setAnvil(value);
break;
case "beacon":
privilege.setBeacon(value);
break;
case "bed":
privilege.setBed(value);
break;
case "brew":
privilege.setBrew(value);
break;
case "button":
privilege.setButton(value);
break;
case "cake":
privilege.setCake(value);
break;
case "container":
privilege.setContainer(value);
break;
case "craft":
privilege.setCraft(value);
break;
case "diode":
privilege.setDiode(value);
break;
case "door":
privilege.setDoor(value);
break;
case "dye":
privilege.setDye(value);
break;
case "egg":
privilege.setEgg(value);
break;
case "enchant":
privilege.setEnchant(value);
break;
case "ender_pearl":
privilege.setEnderPearl(value);
break;
case "feed":
privilege.setFeed(value);
break;
case "glow":
privilege.setGlow(value);
break;
case "honey":
privilege.setHoney(value);
break;
case "hook":
privilege.setHook(value);
break;
case "ignite":
privilege.setIgnite(value);
break;
case "mob_killing":
privilege.setMobKilling(value);
break;
case "move":
privilege.setMove(value);
break;
case "place":
privilege.setPlace(value);
break;
case "pressure":
privilege.setPressure(value);
break;
case "riding":
privilege.setRiding(value);
break;
case "shear":
privilege.setShear(value);
break;
case "shoot":
privilege.setShoot(value);
break;
case "trade":
privilege.setTrade(value);
break;
case "vehicle_destroy":
privilege.setVehicleDestroy(value);
break;
case "harvest":
privilege.setHarvest(value);
break;
default:
Notification.error(operator, "未知的领地权限 " + flag);
return false;
}
Notification.info(operator, "设置玩家在领地 " + dominionName + " 的权限 " + flag + "" + value);
return true;
}
private static PrivilegeTemplateDTO createPlayerPrivilege(Player operator, UUID player, Integer domID) {
PrivilegeTemplateDTO template = new PrivilegeTemplateDTO(player.toString(), operator.getUniqueId(), false);
template = PrivilegeTemplateDTO.insert(template);
if (template == null) {
Notification.error(operator, "创建玩家特权失败");
return null;
}
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, false, domID, template.getId());
private static PlayerPrivilegeDTO createPlayerPrivilege(Player operator, UUID player, Integer domID) {
PlayerPrivilegeDTO privilege = new PlayerPrivilegeDTO(player, false, domID);
privilege = PlayerPrivilegeDTO.insert(privilege);
if (privilege == null) {
Notification.error(operator, "创建玩家特权关联玩家时失败");
PrivilegeTemplateDTO.delete(template);
return null;
}
return template;
return privilege;
}
private static List<PrivilegeTemplateDTO> getPlayerPrivilegeTemplates(UUID player, Integer domID) {
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(player, domID);
List<PrivilegeTemplateDTO> templates = new ArrayList<>();
for (PlayerPrivilegeDTO privilege : privileges) {
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(privilege.getPrivilegeTemplateID());
if (template == null) continue;
if (template.getGroup()) continue; // 跳过组权限
templates.add(template);
}
return templates;
}
}

View File

@ -11,52 +11,70 @@ import java.util.UUID;
public class PlayerPrivilegeDTO {
public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) {
String sql = "INSERT INTO player_privilege (player_uuid, admin, dom_id, privilege_template_id) VALUES (" +
String sql = "INSERT INTO player_privilege (player_uuid, admin, dom_id) VALUES (" +
"'" + player.getPlayerUUID() + "', " +
player.getAdmin() + ", " +
player.getDomID() + ", " +
player.getPrivilegeTemplateID() + ")" +
"RETURNING *;";
player.getDomID() +
") RETURNING *;";
List<PlayerPrivilegeDTO> players = query(sql);
if (players.size() == 0) return null;
return players.get(0);
}
public static List<PlayerPrivilegeDTO> select(UUID playerUUID, Integer dom_id) {
public static PlayerPrivilegeDTO select(UUID playerUUID, Integer dom_id) {
String sql = "SELECT * FROM player_privilege WHERE player_uuid = '" + playerUUID + "' " +
"AND dom_id = " + dom_id + ";";
return query(sql);
List<PlayerPrivilegeDTO> p = query(sql);
if (p.size() == 0) return null;
return p.get(0);
}
public static PlayerPrivilegeDTO select(Integer dom_id) {
public static List<PlayerPrivilegeDTO> select(Integer dom_id) {
String sql = "SELECT * FROM player_privilege WHERE dom_id = " + dom_id + ";";
List<PlayerPrivilegeDTO> players = query(sql);
if (players.size() == 0) return null;
return players.get(0);
}
public static void delete(UUID player, Integer domID, Integer privilegeTemplateID) {
String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "' " +
"AND dom_id = " + domID + " " +
"AND privilege_template_id = " + privilegeTemplateID + ";";
query(sql);
}
public static void delete(UUID player) {
String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "';";
query(sql);
}
public static List<PlayerPrivilegeDTO> selectAll() {
String sql = "SELECT * FROM player_privilege;";
return query(sql);
}
public static void delete(UUID player, Integer domID) {
String sql = "DELETE FROM player_privilege WHERE player_uuid = '" + player + "' " +
"AND dom_id = " + domID + ";";
query(sql);
}
private final Integer id;
private final UUID playerUUID;
private Boolean admin;
private final Integer domID;
private final Integer privilegeTemplateID;
private Boolean anchor;
private Boolean animalKilling;
private Boolean anvil;
private Boolean beacon;
private Boolean bed;
private Boolean brew;
private Boolean button;
private Boolean cake;
private Boolean container;
private Boolean craft;
private Boolean diode;
private Boolean door;
private Boolean dye;
private Boolean egg;
private Boolean enchant;
private Boolean enderPearl;
private Boolean feed;
private Boolean glow;
private Boolean honey;
private Boolean hook;
private Boolean ignite;
private Boolean mobKilling;
private Boolean move;
private Boolean place;
private Boolean pressure;
private Boolean riding;
private Boolean shear;
private Boolean shoot;
private Boolean trade;
private Boolean vehicleDestroy;
private Boolean harvest;
public Integer getId() {
return id;
@ -74,8 +92,283 @@ public class PlayerPrivilegeDTO {
return domID;
}
public Integer getPrivilegeTemplateID() {
return privilegeTemplateID;
public Boolean getAnchor() {
return anchor;
}
public Boolean getAnimalKilling() {
return animalKilling;
}
public Boolean getAnvil() {
return anvil;
}
public Boolean getBeacon() {
return beacon;
}
public Boolean getBed() {
return bed;
}
public Boolean getBrew() {
return brew;
}
public Boolean getButton() {
return button;
}
public Boolean getCake() {
return cake;
}
public Boolean getContainer() {
return container;
}
public Boolean getCraft() {
return craft;
}
public Boolean getDiode() {
return diode;
}
public Boolean getDoor() {
return door;
}
public Boolean getDye() {
return dye;
}
public Boolean getEgg() {
return egg;
}
public Boolean getEnchant() {
return enchant;
}
public Boolean getEnderPearl() {
return enderPearl;
}
public Boolean getFeed() {
return feed;
}
public Boolean getGlow() {
return glow;
}
public Boolean getHoney() {
return honey;
}
public Boolean getHook() {
return hook;
}
public Boolean getIgnite() {
return ignite;
}
public Boolean getMobKilling() {
return mobKilling;
}
public Boolean getMove() {
return move;
}
public Boolean getPlace() {
return place;
}
public Boolean getPressure() {
return pressure;
}
public Boolean getRiding() {
return riding;
}
public Boolean getShear() {
return shear;
}
public Boolean getShoot() {
return shoot;
}
public Boolean getTrade() {
return trade;
}
public Boolean getVehicleDestroy() {
return vehicleDestroy;
}
public Boolean getHarvest() {
return harvest;
}
public PlayerPrivilegeDTO setAnchor(Boolean anchor) {
this.anchor = anchor;
return update(this);
}
public PlayerPrivilegeDTO setAnimalKilling(Boolean animalKilling) {
this.animalKilling = animalKilling;
return update(this);
}
public PlayerPrivilegeDTO setAnvil(Boolean anvil) {
this.anvil = anvil;
return update(this);
}
public PlayerPrivilegeDTO setBeacon(Boolean beacon) {
this.beacon = beacon;
return update(this);
}
public PlayerPrivilegeDTO setBed(Boolean bed) {
this.bed = bed;
return update(this);
}
public PlayerPrivilegeDTO setBrew(Boolean brew) {
this.brew = brew;
return update(this);
}
public PlayerPrivilegeDTO setButton(Boolean button) {
this.button = button;
return update(this);
}
public PlayerPrivilegeDTO setCake(Boolean cake) {
this.cake = cake;
return update(this);
}
public PlayerPrivilegeDTO setContainer(Boolean container) {
this.container = container;
return update(this);
}
public PlayerPrivilegeDTO setCraft(Boolean craft) {
this.craft = craft;
return update(this);
}
public PlayerPrivilegeDTO setDiode(Boolean diode) {
this.diode = diode;
return update(this);
}
public PlayerPrivilegeDTO setDoor(Boolean door) {
this.door = door;
return update(this);
}
public PlayerPrivilegeDTO setDye(Boolean dye) {
this.dye = dye;
return update(this);
}
public PlayerPrivilegeDTO setEgg(Boolean egg) {
this.egg = egg;
return update(this);
}
public PlayerPrivilegeDTO setEnchant(Boolean enchant) {
this.enchant = enchant;
return update(this);
}
public PlayerPrivilegeDTO setEnderPearl(Boolean enderPearl) {
this.enderPearl = enderPearl;
return update(this);
}
public PlayerPrivilegeDTO setFeed(Boolean feed) {
this.feed = feed;
return update(this);
}
public PlayerPrivilegeDTO setGlow(Boolean glow) {
this.glow = glow;
return update(this);
}
public PlayerPrivilegeDTO setHoney(Boolean honey) {
this.honey = honey;
return update(this);
}
public PlayerPrivilegeDTO setHook(Boolean hook) {
this.hook = hook;
return update(this);
}
public PlayerPrivilegeDTO setIgnite(Boolean ignite) {
this.ignite = ignite;
return update(this);
}
public PlayerPrivilegeDTO setMobKilling(Boolean mobKilling) {
this.mobKilling = mobKilling;
return update(this);
}
public PlayerPrivilegeDTO setMove(Boolean move) {
this.move = move;
return update(this);
}
public PlayerPrivilegeDTO setPlace(Boolean place) {
this.place = place;
return update(this);
}
public PlayerPrivilegeDTO setPressure(Boolean pressure) {
this.pressure = pressure;
return update(this);
}
public PlayerPrivilegeDTO setRiding(Boolean riding) {
this.riding = riding;
return update(this);
}
public PlayerPrivilegeDTO setShear(Boolean shear) {
this.shear = shear;
return update(this);
}
public PlayerPrivilegeDTO setShoot(Boolean shoot) {
this.shoot = shoot;
return update(this);
}
public PlayerPrivilegeDTO setTrade(Boolean trade) {
this.trade = trade;
return update(this);
}
public PlayerPrivilegeDTO setVehicleDestroy(Boolean vehicleDestroy) {
this.vehicleDestroy = vehicleDestroy;
return update(this);
}
public PlayerPrivilegeDTO setHarvest(Boolean harvest) {
this.harvest = harvest;
return update(this);
}
public PlayerPrivilegeDTO setAdmin(Boolean admin) {
@ -83,16 +376,60 @@ public class PlayerPrivilegeDTO {
return update(this);
}
private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Integer privilegeTemplateID) {
private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID,
Boolean anchor, Boolean animalKilling, Boolean anvil,
Boolean beacon, Boolean bed, Boolean brew, Boolean button, Boolean cake,
Boolean container, Boolean craft, Boolean diode, Boolean door, Boolean dye,
Boolean egg, Boolean enchant, Boolean enderPearl, Boolean feed, Boolean glow,
Boolean honey, Boolean hook, Boolean ignite, Boolean mobKilling, Boolean move,
Boolean place, Boolean pressure, Boolean riding, Boolean shear, Boolean shoot,
Boolean trade, Boolean vehicleDestroy, Boolean harvest) {
this.id = id;
this.playerUUID = playerUUID;
this.admin = admin;
this.domID = domID;
this.privilegeTemplateID = privilegeTemplateID;
this.anchor = anchor;
this.animalKilling = animalKilling;
this.anvil = anvil;
this.beacon = beacon;
this.bed = bed;
this.brew = brew;
this.button = button;
this.cake = cake;
this.container = container;
this.craft = craft;
this.diode = diode;
this.door = door;
this.dye = dye;
this.egg = egg;
this.enchant = enchant;
this.enderPearl = enderPearl;
this.feed = feed;
this.glow = glow;
this.honey = honey;
this.hook = hook;
this.ignite = ignite;
this.mobKilling = mobKilling;
this.move = move;
this.place = place;
this.pressure = pressure;
this.riding = riding;
this.shear = shear;
this.shoot = shoot;
this.trade = trade;
this.vehicleDestroy = vehicleDestroy;
this.harvest = harvest;
}
public PlayerPrivilegeDTO(UUID playerUUID, Boolean admin, Integer domID, Integer privilegeTemplateID) {
this(null, playerUUID, admin, domID, privilegeTemplateID);
public PlayerPrivilegeDTO(UUID playerUUID, Boolean admin, Integer domID) {
this(null, playerUUID, admin, domID,
false, false, false,
false, false, false, false, false,
false, false, false, false, false,
false, false, false, false, false,
false, false, false, false, false,
false, false, false, false, false,
false, false, false);
}
private static List<PlayerPrivilegeDTO> query(String sql) {
@ -100,12 +437,43 @@ public class PlayerPrivilegeDTO {
try (ResultSet rs = Database.query(sql)) {
if (rs == null) return players;
while (rs.next()) {
Integer id = rs.getInt("id");
UUID uuid = UUID.fromString(rs.getString("player_uuid"));
Boolean admin = rs.getBoolean("admin");
Integer domID = rs.getInt("dom_id");
Integer privilegeTemplateID = rs.getInt("privilege_template_id");
PlayerPrivilegeDTO player = new PlayerPrivilegeDTO(id, uuid, admin, domID, privilegeTemplateID);
PlayerPrivilegeDTO player = new PlayerPrivilegeDTO(
rs.getInt("id"),
UUID.fromString(rs.getString("player_uuid")),
rs.getBoolean("admin"),
rs.getInt("dom_id"),
rs.getBoolean("anchor"),
rs.getBoolean("animal_killing"),
rs.getBoolean("anvil"),
rs.getBoolean("beacon"),
rs.getBoolean("bed"),
rs.getBoolean("brew"),
rs.getBoolean("button"),
rs.getBoolean("cake"),
rs.getBoolean("container"),
rs.getBoolean("craft"),
rs.getBoolean("diode"),
rs.getBoolean("door"),
rs.getBoolean("dye"),
rs.getBoolean("egg"),
rs.getBoolean("enchant"),
rs.getBoolean("ender_pearl"),
rs.getBoolean("feed"),
rs.getBoolean("glow"),
rs.getBoolean("honey"),
rs.getBoolean("hook"),
rs.getBoolean("ignite"),
rs.getBoolean("mob_killing"),
rs.getBoolean("move"),
rs.getBoolean("place"),
rs.getBoolean("pressure"),
rs.getBoolean("riding"),
rs.getBoolean("shear"),
rs.getBoolean("shoot"),
rs.getBoolean("trade"),
rs.getBoolean("vehicle_destroy"),
rs.getBoolean("harvest")
);
players.add(player);
}
} catch (Exception e) {
@ -119,8 +487,39 @@ public class PlayerPrivilegeDTO {
String sql = "UPDATE player_privilege SET " +
"admin = " + player.getAdmin() + ", " +
"dom_id = " + player.getDomID() + ", " +
"privilege_template_id = " + player.getPrivilegeTemplateID() + " " +
"WHERE id = " + player.getId() + ";";
"anchor = " + player.getAnchor() + ", " +
"animal_killing = " + player.getAnimalKilling() + ", " +
"anvil = " + player.getAnvil() + ", " +
"beacon = " + player.getBeacon() + ", " +
"bed = " + player.getBed() + ", " +
"brew = " + player.getBrew() + ", " +
"button = " + player.getButton() + ", " +
"cake = " + player.getCake() + ", " +
"container = " + player.getContainer() + ", " +
"craft = " + player.getCraft() + ", " +
"diode = " + player.getDiode() + ", " +
"door = " + player.getDoor() + ", " +
"dye = " + player.getDye() + ", " +
"egg = " + player.getEgg() + ", " +
"enchant = " + player.getEnchant() + ", " +
"ender_pearl = " + player.getEnderPearl() + ", " +
"feed = " + player.getFeed() + ", " +
"glow = " + player.getGlow() + ", " +
"honey = " + player.getHoney() + ", " +
"hook = " + player.getHook() + ", " +
"ignite = " + player.getIgnite() + ", " +
"mob_killing = " + player.getMobKilling() + ", " +
"move = " + player.getMove() + ", " +
"place = " + player.getPlace() + ", " +
"pressure = " + player.getPressure() + ", " +
"riding = " + player.getRiding() + ", " +
"shear = " + player.getShear() + ", " +
"shoot = " + player.getShoot() + ", " +
"trade = " + player.getTrade() + ", " +
"vehicle_destroy = " + player.getVehicleDestroy() + ", " +
"harvest = " + player.getHarvest() + " " +
"WHERE id = " + player.getId() + " " +
"RETURNING *;";
List<PlayerPrivilegeDTO> players = query(sql);
if (players.size() == 0) return null;
return players.get(0);

View File

@ -1,561 +0,0 @@
package cn.lunadeer.dominion.dtos;
import cn.lunadeer.dominion.utils.Database;
import cn.lunadeer.dominion.utils.XLogger;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class PrivilegeTemplateDTO {
public static PrivilegeTemplateDTO insert(PrivilegeTemplateDTO privilege) {
String sql = "INSERT INTO privilege_template (name, creator, team) " +
"VALUES ('" +
privilege.getName() + "', '" +
privilege.getCreator().toString() + "', " +
privilege.getGroup() + ") " +
"RETURNING *;";
List<PrivilegeTemplateDTO> templates = query(sql);
if (templates.size() == 0) return null;
return templates.get(0);
}
public static List<PrivilegeTemplateDTO> selectAll() {
String sql = "SELECT * FROM privilege_template;";
return query(sql);
}
public static List<PrivilegeTemplateDTO> searchGroup(String name){
String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%' AND team = true;";
return query(sql);
}
public static List<PrivilegeTemplateDTO> selectGroup(UUID creator){
String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "' AND team = true;";
return query(sql);
}
public static PrivilegeTemplateDTO select(Integer id) {
String sql = "SELECT * FROM privilege_template WHERE id = " + id + ";";
List<PrivilegeTemplateDTO> templates = query(sql);
if (templates.size() == 0) return null;
return templates.get(0);
}
public static PrivilegeTemplateDTO select(UUID creator, String name) {
String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "' AND name = '" + name + "';";
List<PrivilegeTemplateDTO> templates = query(sql);
if (templates.size() == 0) return null;
return templates.get(0);
}
public static List<PrivilegeTemplateDTO> search(String name) {
String sql = "SELECT * FROM privilege_template WHERE name LIKE '%" + name + "%';";
return query(sql);
}
public static List<PrivilegeTemplateDTO> search(UUID creator) {
String sql = "SELECT * FROM privilege_template WHERE creator = '" + creator.toString() + "';";
return query(sql);
}
public static void delete(PrivilegeTemplateDTO privilege) {
String sql = "DELETE FROM privilege_template WHERE id = " + privilege.getId() + ";";
query(sql);
}
public static void delete(UUID creator, String name) {
String sql = "DELETE FROM privilege_template WHERE creator = '" + creator.toString() + "' AND name = '" + name + "';";
query(sql);
}
private static PrivilegeTemplateDTO update(PrivilegeTemplateDTO privilege) {
String sql = "UPDATE privilege_template SET " +
"name = '" + privilege.getName() + "', " +
"creator = '" + privilege.getCreator().toString() + "', " +
"team = " + privilege.getGroup() + ", " +
"anchor = " + privilege.getAnchor() + ", " +
"animal_killing = " + privilege.getAnimalKilling() + ", " +
"anvil = " + privilege.getAnvil() + ", " +
"beacon = " + privilege.getBeacon() + ", " +
"bed = " + privilege.getBed() + ", " +
"brew = " + privilege.getBrew() + ", " +
"button = " + privilege.getButton() + ", " +
"cake = " + privilege.getCake() + ", " +
"container = " + privilege.getContainer() + ", " +
"craft = " + privilege.getCraft() + ", " +
"diode = " + privilege.getDiode() + ", " +
"door = " + privilege.getDoor() + ", " +
"dye = " + privilege.getDye() + ", " +
"egg = " + privilege.getEgg() + ", " +
"enchant = " + privilege.getEnchant() + ", " +
"ender_pearl = " + privilege.getEnderPearl() + ", " +
"feed = " + privilege.getFeed() + ", " +
"glow = " + privilege.getGlow() + ", " +
"honey = " + privilege.getHoney() + ", " +
"hook = " + privilege.getHook() + ", " +
"ignite = " + privilege.getIgnite() + ", " +
"mob_killing = " + privilege.getMobKilling() + ", " +
"move = " + privilege.getMove() + ", " +
"place = " + privilege.getPlace() + ", " +
"pressure = " + privilege.getPressure() + ", " +
"riding = " + privilege.getRiding() + ", " +
"shear = " + privilege.getShear() + ", " +
"shoot = " + privilege.getShoot() + ", " +
"trade = " + privilege.getTrade() + ", " +
"vehicle_destroy = " + privilege.getVehicleDestroy() + ", " +
"harvest = " + privilege.getHarvest() + " " +
"WHERE id = " + privilege.getId() + " " +
"RETURNING *;";
List<PrivilegeTemplateDTO> templates = query(sql);
if (templates.size() == 0) return null;
return templates.get(0);
}
private final Integer id;
private String name;
private final UUID creator;
private final Boolean team;
private Boolean anchor;
private Boolean animalKilling;
private Boolean anvil;
private Boolean beacon;
private Boolean bed;
private Boolean brew;
private Boolean button;
private Boolean cake;
private Boolean container;
private Boolean craft;
private Boolean diode;
private Boolean door;
private Boolean dye;
private Boolean egg;
private Boolean enchant;
private Boolean enderPearl;
private Boolean feed;
private Boolean glow;
private Boolean honey;
private Boolean hook;
private Boolean ignite;
private Boolean mobKilling;
private Boolean move;
private Boolean place;
private Boolean pressure;
private Boolean riding;
private Boolean shear;
private Boolean shoot;
private Boolean trade;
private Boolean vehicleDestroy;
private Boolean harvest;
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public UUID getCreator() {
return creator;
}
public Boolean getGroup() {
return team;
}
public Boolean getAnchor() {
return anchor;
}
public Boolean getAnimalKilling() {
return animalKilling;
}
public Boolean getAnvil() {
return anvil;
}
public Boolean getBeacon() {
return beacon;
}
public Boolean getBed() {
return bed;
}
public Boolean getBrew() {
return brew;
}
public Boolean getButton() {
return button;
}
public Boolean getCake() {
return cake;
}
public Boolean getContainer() {
return container;
}
public Boolean getCraft() {
return craft;
}
public Boolean getDiode() {
return diode;
}
public Boolean getDoor() {
return door;
}
public Boolean getDye() {
return dye;
}
public Boolean getEgg() {
return egg;
}
public Boolean getEnchant() {
return enchant;
}
public Boolean getEnderPearl() {
return enderPearl;
}
public Boolean getFeed() {
return feed;
}
public Boolean getGlow() {
return glow;
}
public Boolean getHoney() {
return honey;
}
public Boolean getHook() {
return hook;
}
public Boolean getIgnite() {
return ignite;
}
public Boolean getMobKilling() {
return mobKilling;
}
public Boolean getMove() {
return move;
}
public Boolean getPlace() {
return place;
}
public Boolean getPressure() {
return pressure;
}
public Boolean getRiding() {
return riding;
}
public Boolean getShear() {
return shear;
}
public Boolean getShoot() {
return shoot;
}
public Boolean getTrade() {
return trade;
}
public Boolean getVehicleDestroy() {
return vehicleDestroy;
}
public Boolean getHarvest() {
return harvest;
}
public PrivilegeTemplateDTO setName(String name) {
this.name = name;
return update(this);
}
public PrivilegeTemplateDTO setAnchor(Boolean anchor) {
this.anchor = anchor;
return update(this);
}
public PrivilegeTemplateDTO setAnimalKilling(Boolean animalKilling) {
this.animalKilling = animalKilling;
return update(this);
}
public PrivilegeTemplateDTO setAnvil(Boolean anvil) {
this.anvil = anvil;
return update(this);
}
public PrivilegeTemplateDTO setBeacon(Boolean beacon) {
this.beacon = beacon;
return update(this);
}
public PrivilegeTemplateDTO setBed(Boolean bed) {
this.bed = bed;
return update(this);
}
public PrivilegeTemplateDTO setBrew(Boolean brew) {
this.brew = brew;
return update(this);
}
public PrivilegeTemplateDTO setButton(Boolean button) {
this.button = button;
return update(this);
}
public PrivilegeTemplateDTO setCake(Boolean cake) {
this.cake = cake;
return update(this);
}
public PrivilegeTemplateDTO setContainer(Boolean container) {
this.container = container;
return update(this);
}
public PrivilegeTemplateDTO setCraft(Boolean craft) {
this.craft = craft;
return update(this);
}
public PrivilegeTemplateDTO setDiode(Boolean diode) {
this.diode = diode;
return update(this);
}
public PrivilegeTemplateDTO setDoor(Boolean door) {
this.door = door;
return update(this);
}
public PrivilegeTemplateDTO setDye(Boolean dye) {
this.dye = dye;
return update(this);
}
public PrivilegeTemplateDTO setEgg(Boolean egg) {
this.egg = egg;
return update(this);
}
public PrivilegeTemplateDTO setEnchant(Boolean enchant) {
this.enchant = enchant;
return update(this);
}
public PrivilegeTemplateDTO setEnderPearl(Boolean enderPearl) {
this.enderPearl = enderPearl;
return update(this);
}
public PrivilegeTemplateDTO setFeed(Boolean feed) {
this.feed = feed;
return update(this);
}
public PrivilegeTemplateDTO setGlow(Boolean glow) {
this.glow = glow;
return update(this);
}
public PrivilegeTemplateDTO setHoney(Boolean honey) {
this.honey = honey;
return update(this);
}
public PrivilegeTemplateDTO setHook(Boolean hook) {
this.hook = hook;
return update(this);
}
public PrivilegeTemplateDTO setIgnite(Boolean ignite) {
this.ignite = ignite;
return update(this);
}
public PrivilegeTemplateDTO setMobKilling(Boolean mobKilling) {
this.mobKilling = mobKilling;
return update(this);
}
public PrivilegeTemplateDTO setMove(Boolean move) {
this.move = move;
return update(this);
}
public PrivilegeTemplateDTO setPlace(Boolean place) {
this.place = place;
return update(this);
}
public PrivilegeTemplateDTO setPressure(Boolean pressure) {
this.pressure = pressure;
return update(this);
}
public PrivilegeTemplateDTO setRiding(Boolean riding) {
this.riding = riding;
return update(this);
}
public PrivilegeTemplateDTO setShear(Boolean shear) {
this.shear = shear;
return update(this);
}
public PrivilegeTemplateDTO setShoot(Boolean shoot) {
this.shoot = shoot;
return update(this);
}
public PrivilegeTemplateDTO setTrade(Boolean trade) {
this.trade = trade;
return update(this);
}
public PrivilegeTemplateDTO setVehicleDestroy(Boolean vehicleDestroy) {
this.vehicleDestroy = vehicleDestroy;
return update(this);
}
public PrivilegeTemplateDTO setHarvest(Boolean harvest) {
this.harvest = harvest;
return update(this);
}
public PrivilegeTemplateDTO(String name, UUID creator, Boolean team) {
this(null, name, creator, team,
false, false, false,
false, false, false, false, false,
false, false, false, false, false,
false, false, false, false, false,
false, false, false, false, false,
false, false, false, false, false,
false, false, false);
}
private PrivilegeTemplateDTO(Integer id, String name, UUID creator, Boolean team,
Boolean anchor, Boolean animalKilling, Boolean anvil,
Boolean beacon, Boolean bed, Boolean brew, Boolean button, Boolean cake,
Boolean container, Boolean craft, Boolean diode, Boolean door, Boolean dye,
Boolean egg, Boolean enchant, Boolean enderPearl, Boolean feed, Boolean glow,
Boolean honey, Boolean hook, Boolean ignite, Boolean mobKilling, Boolean move,
Boolean place, Boolean pressure, Boolean riding, Boolean shear, Boolean shoot,
Boolean trade, Boolean vehicleDestroy, Boolean harvest) {
this.id = id;
this.name = name;
this.creator = creator;
this.team = team;
this.anchor = anchor;
this.animalKilling = animalKilling;
this.anvil = anvil;
this.beacon = beacon;
this.bed = bed;
this.brew = brew;
this.button = button;
this.cake = cake;
this.container = container;
this.craft = craft;
this.diode = diode;
this.door = door;
this.dye = dye;
this.egg = egg;
this.enchant = enchant;
this.enderPearl = enderPearl;
this.feed = feed;
this.glow = glow;
this.honey = honey;
this.hook = hook;
this.ignite = ignite;
this.mobKilling = mobKilling;
this.move = move;
this.place = place;
this.pressure = pressure;
this.riding = riding;
this.shear = shear;
this.shoot = shoot;
this.trade = trade;
this.vehicleDestroy = vehicleDestroy;
this.harvest = harvest;
}
private static List<PrivilegeTemplateDTO> query(String sql) {
List<PrivilegeTemplateDTO> privilegeTemplates = new ArrayList<>();
try (ResultSet rs = Database.query(sql)) {
if (rs == null) return privilegeTemplates;
while (rs.next()) {
PrivilegeTemplateDTO privilegeTemplate = new PrivilegeTemplateDTO(
rs.getInt("id"),
rs.getString("name"),
UUID.fromString(rs.getString("creator")),
rs.getBoolean("team"),
rs.getBoolean("anchor"),
rs.getBoolean("animal_killing"),
rs.getBoolean("anvil"),
rs.getBoolean("beacon"),
rs.getBoolean("bed"),
rs.getBoolean("brew"),
rs.getBoolean("button"),
rs.getBoolean("cake"),
rs.getBoolean("container"),
rs.getBoolean("craft"),
rs.getBoolean("diode"),
rs.getBoolean("door"),
rs.getBoolean("dye"),
rs.getBoolean("egg"),
rs.getBoolean("enchant"),
rs.getBoolean("ender_pearl"),
rs.getBoolean("feed"),
rs.getBoolean("glow"),
rs.getBoolean("honey"),
rs.getBoolean("hook"),
rs.getBoolean("ignite"),
rs.getBoolean("mob_killing"),
rs.getBoolean("move"),
rs.getBoolean("place"),
rs.getBoolean("pressure"),
rs.getBoolean("riding"),
rs.getBoolean("shear"),
rs.getBoolean("shoot"),
rs.getBoolean("trade"),
rs.getBoolean("vehicle_destroy"),
rs.getBoolean("harvest")
);
privilegeTemplates.add(privilegeTemplate);
}
} catch (SQLException e) {
XLogger.err("Database query failed: " + e.getMessage());
XLogger.err("SQL: " + sql);
}
return privilegeTemplates;
}
}

View File

@ -0,0 +1,76 @@
package cn.lunadeer.dominion.tuis;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
import cn.lunadeer.dominion.utils.Notification;
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 static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion;
public class Apis {
public static int getPage(String[] args) {
int page = 1;
if (args.length == 2) {
try {
page = Integer.parseInt(args[1]);
} catch (Exception e) {
return 1;
}
}
return page;
}
public static DominionDTO getDominion(Player player, String[] args) {
if (args.length == 2) {
return DominionDTO.select(args[1]);
} else {
return getPlayerCurrentDominion(player);
}
}
public static boolean noAuthToManage(Player player, DominionDTO dominion) {
if (player.isOp()) return false;
if (!dominion.getOwner().equals(player.getUniqueId())) {
PlayerPrivilegeDTO privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId());
if (privileges == null || !privileges.getAdmin()) {
Notification.error(player, "你不是领地 " + dominion.getName() + " 的拥有者或管理员,无权访问此页面");
return true;
}
}
return false;
}
public static void printHelp(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
int page = getPage(args);
ListView view = ListView.create(5, "/dominion help");
view.title("领地插件命令帮助")
.add(Line.create().append("打开交互菜单").append(Button.create("/dominion menu", "/dominion menu")))
.add(Line.create().append("列出所有领地").append(Button.create("/dominion list", "/dominion list")))
.add(Line.create().append("查看帮助").append(Button.create("/dominion help [页码]", "/dominion help 1")))
.add(Line.create().append("查看领地信息").append(Button.create("/dominion info [领地名称]", "/dominion info")))
.add(Line.create().append("查看领地权限信息").append(Button.create("/dominion flag_info <领地名称> [页码]", "/dominion flag_info")))
.add(Line.create().append("管理领地").append("/dominion manage <领地名称>"))
.add(Line.create().append("创建领地").append("/dominion create <领地名称>"))
.add(Line.create().append("自动创建领地").append("/dominion auto_create <领地名称>"))
.add(Line.create().append("创建子领地").append("/dominion create_sub <子领地名称> [父领地名称]"))
.add(Line.create().append("自动创建子领地").append("/dominion auto_create_sub <子领地名称> [父领地名称]"))
.add(Line.create().append("扩张领地").append("/dominion expand [大小] [领地名称]"))
.add(Line.create().append("缩小领地").append("/dominion contract [大小] [领地名称]"))
.add(Line.create().append("删除领地").append("/dominion delete <领地名称> [force]"))
.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 clear_privilege <玩家名称> [领地名称]"))
.add(Line.create().append("查看领地玩家特权列表").append("/dominion privilege_list [领地名称] [页码]"))
.add(Line.create().append("查看玩家权限信息").append("/dominion privilege_info <玩家名称> [领地名称] [页码]"))
.showOn(player, page);
}
}

View File

@ -0,0 +1,376 @@
package cn.lunadeer.dominion.tuis;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.utils.Notification;
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 static cn.lunadeer.dominion.commands.Apis.playerOnly;
public class DominionFlagInfo {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
if (args.length < 2) {
Notification.error(sender, "用法: /dominion flag_info <领地名称> [页码]");
return;
}
DominionDTO dominion = DominionDTO.select(args[1]);
if (dominion == null) {
Notification.error(sender, "领地 " + args[1] + " 不存在");
return;
}
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
}
ListView view = ListView.create(6, "/dominion flag_info " + dominion.getName());
view.title("领地 " + dominion.getName() + " 默认权限")
.navigator(Line.create()
.append(Button.create("主菜单", "/dominion menu"))
.append(Button.create("我的领地", "/dominion list"))
.append(Button.create("管理界面", "/dominion manage " + dominion.getName()))
.append("权限列表"));
if (dominion.getAnchor()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set anchor false " + dominion.getName() + " " + page))
.append("重生锚"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set anchor true " + dominion.getName() + " " + page))
.append("重生锚"));
}
if (dominion.getAnimalKilling()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set animal_killing false " + dominion.getName() + " " + page))
.append("动物伤害"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set animal_killing true " + dominion.getName() + " " + page))
.append("动物伤害"));
}
if (dominion.getAnvil()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set anvil false " + dominion.getName() + " " + page))
.append("使用铁砧"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set anvil true " + dominion.getName() + " " + page))
.append("使用铁砧"));
}
if (dominion.getBeacon()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set beacon false " + dominion.getName() + " " + page))
.append("信标交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set beacon true " + dominion.getName() + " " + page))
.append("信标交互"));
}
if (dominion.getBed()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set bed false " + dominion.getName() + " " + page))
.append("床交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set bed true " + dominion.getName() + " " + page))
.append("床交互"));
}
if (dominion.getBrew()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set brew false " + dominion.getName() + " " + page))
.append("使用酿造台"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set brew true " + dominion.getName() + " " + page))
.append("使用酿造台"));
}
if (dominion.getButton()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set button false " + dominion.getName() + " " + page))
.append("使用按钮"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set button true " + dominion.getName() + " " + page))
.append("使用按钮"));
}
if (dominion.getCake()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set cake false " + dominion.getName() + " " + page))
.append("使用蛋糕"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set cake true " + dominion.getName() + " " + page))
.append("使用蛋糕"));
}
if (dominion.getContainer()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set container false " + dominion.getName() + " " + page))
.append("容器交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set container true " + dominion.getName() + " " + page))
.append("容器交互"));
}
if (dominion.getCraft()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set craft false " + dominion.getName() + " " + page))
.append("合成"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set craft true " + dominion.getName() + " " + page))
.append("合成"));
}
if (dominion.getCreeperExplode()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set creeper_explode false " + dominion.getName() + " " + page))
.append("苦力怕爆炸"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set creeper_explode true " + dominion.getName() + " " + page))
.append("苦力怕爆炸"));
}
if (dominion.getDiode()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set diode false " + dominion.getName() + " " + page))
.append("中继器交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set diode true " + dominion.getName() + " " + page))
.append("中继器交互"));
}
if (dominion.getDoor()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set door false " + dominion.getName() + " " + page))
.append("门交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set door true " + dominion.getName() + " " + page))
.append("门交互"));
}
if (dominion.getDye()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set dye false " + dominion.getName() + " " + page))
.append("染色"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set dye true " + dominion.getName() + " " + page))
.append("染色"));
}
if (dominion.getEgg()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set egg false " + dominion.getName() + " " + page))
.append("投掷鸡蛋"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set egg true " + dominion.getName() + " " + page))
.append("投掷鸡蛋"));
}
if (dominion.getEnchant()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set enchant false " + dominion.getName() + " " + page))
.append("附魔"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set enchant true " + dominion.getName() + " " + page))
.append("附魔"));
}
if (dominion.getEnderPearl()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set ender_pearl false " + dominion.getName() + " " + page))
.append("末影珍珠"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set ender_pearl true " + dominion.getName() + " " + page))
.append("末影珍珠"));
}
if (dominion.getFeed()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set feed false " + dominion.getName() + " " + page))
.append("喂食"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set feed true " + dominion.getName() + " " + page))
.append("喂食"));
}
if (dominion.getFireSpread()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set fire_spread false " + dominion.getName() + " " + page))
.append("火焰蔓延"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set fire_spread true " + dominion.getName() + " " + page))
.append("火焰蔓延"));
}
if (dominion.getFlowInProtection()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set flow_in_protection false " + dominion.getName() + " " + page))
.append("流体保护"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set flow_in_protection true " + dominion.getName() + " " + page))
.append("流体保护"));
}
if (dominion.getGlow()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set glow false " + dominion.getName() + " " + page))
.append("发光"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set glow true " + dominion.getName() + " " + page))
.append("发光"));
}
if (dominion.getGrow()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set grow false " + dominion.getName() + " " + page))
.append("植物生长"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set grow true " + dominion.getName() + " " + page))
.append("植物生长"));
}
if (dominion.getHoney()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set honey false " + dominion.getName() + " " + page))
.append("蜂巢交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set honey true " + dominion.getName() + " " + page))
.append("蜂巢交互"));
}
if (dominion.getHook()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set hook false " + dominion.getName() + " " + page))
.append("钩子交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set hook true " + dominion.getName() + " " + page))
.append("钩子交互"));
}
if (dominion.getIgnite()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set ignite false " + dominion.getName() + " " + page))
.append("点燃"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set ignite true " + dominion.getName() + " " + page))
.append("点燃"));
}
if (dominion.getMobKilling()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set mob_killing false " + dominion.getName() + " " + page))
.append("生物伤害"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set mob_killing true " + dominion.getName() + " " + page))
.append("生物伤害"));
}
if (dominion.getMove()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set move false " + dominion.getName() + " " + page))
.append("移动"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set move true " + dominion.getName() + " " + page))
.append("移动"));
}
if (dominion.getPlace()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set place false " + dominion.getName() + " " + page))
.append("放置"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set place true " + dominion.getName() + " " + page))
.append("放置"));
}
if (dominion.getPressure()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set pressure false " + dominion.getName() + " " + page))
.append("压力板交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set pressure true " + dominion.getName() + " " + page))
.append("压力板交互"));
}
if (dominion.getRiding()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set riding false " + dominion.getName() + " " + page))
.append("骑乘"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set riding true " + dominion.getName() + " " + page))
.append("骑乘"));
}
if (dominion.getShear()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set shear false " + dominion.getName() + " " + page))
.append("剪羊毛"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set shear true " + dominion.getName() + " " + page))
.append("剪羊毛"));
}
if (dominion.getShoot()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set shoot false " + dominion.getName() + " " + page))
.append("发射"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set shoot true " + dominion.getName() + " " + page))
.append("发射"));
}
if (dominion.getTntExplode()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set tnt_explode false " + dominion.getName() + " " + page))
.append("TNT爆炸"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set tnt_explode true " + dominion.getName() + " " + page))
.append("TNT爆炸"));
}
if (dominion.getTrade()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set trade false " + dominion.getName() + " " + page))
.append("交易"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set trade true " + dominion.getName() + " " + page))
.append("交易"));
}
if (dominion.getVehicleDestroy()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set vehicle_destroy false " + dominion.getName() + " " + page))
.append("破坏载具"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set vehicle_destroy true " + dominion.getName() + " " + page))
.append("破坏载具"));
}
if (dominion.getWitherSpawn()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set wither_spawn false " + dominion.getName() + " " + page))
.append("凋零生成"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set wither_spawn true " + dominion.getName() + " " + page))
.append("凋零生成"));
}
if (dominion.getHarvest()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set harvest false " + dominion.getName() + " " + page))
.append("收获"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set harvest true " + dominion.getName() + " " + page))
.append("收获"));
}
view.showOn(player, page);
}
}

View File

@ -0,0 +1,45 @@
package cn.lunadeer.dominion.tuis;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.STUI.Button;
import cn.lunadeer.dominion.utils.STUI.Line;
import cn.lunadeer.dominion.utils.STUI.View;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.tuis.Apis.getDominion;
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
public class DominionManage {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = getDominion(player, args);
if (dominion == null) {
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion manage <领地名称>");
return;
}
if (noAuthToManage(player, dominion)) return;
Line size_info = Line.create()
.append(Button.create("尺寸信息", "/dominion info " + dominion.getName()))
.append("查看领地尺寸信息");
Line flag_info = Line.create()
.append(Button.create("权限设置", "/dominion flag_info " + dominion.getName()))
.append("管理领地默认权限");
Line privilege_list = Line.create()
.append(Button.create("玩家权限", "/dominion privilege_list " + dominion.getName()))
.append("管理玩家特权");
View view = View.create();
view.title("领地 " + dominion.getName() + " 管理界面")
.navigator(Line.create()
.append(Button.create("主菜单", "/dominion menu"))
.append(Button.create("我的领地", "/dominion list"))
.append(dominion.getName()))
.addLine(size_info)
.addLine(flag_info)
.addLine(privilege_list)
.showOn(player);
}
}

View File

@ -0,0 +1,62 @@
package cn.lunadeer.dominion.tuis;
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 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;
import static cn.lunadeer.dominion.tuis.Apis.getDominion;
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
public class DominionPrivilegeList {
public static void show(CommandSender sender, String[] args) {
int page = 1;
if (args.length == 3) {
try {
page = Integer.parseInt(args[2]);
} catch (Exception ignored) {
}
}
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = getDominion(player, args);
if (dominion == null) {
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_list <领地名称>");
return;
}
ListView view = ListView.create(5, "/dominion privilege_list " + dominion.getName());
if (noAuthToManage(player, dominion)) return;
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(dominion.getId());
if (privileges.isEmpty()) {
Notification.warn(sender, "领地 " + dominion.getName() + " 没有任何玩家拥有特权");
return;
}
view.title("领地 " + dominion.getName() + " 玩家特权列表");
view.navigator(
Line.create()
.append(Button.create("主菜单", "/dominion menu"))
.append(Button.create("我的领地", "/dominion list"))
.append(Button.create("管理界面", "/dominion manage " + dominion.getName()))
.append("特权列表")
);
for (PlayerPrivilegeDTO privilege : privileges) {
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
if (p_player == null) continue;
view.add(Line.create()
.append(p_player.getLastKnownName())
.append(Button.createGreen("管理", "/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()))
.append(Button.createRed("清空", "/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName()))
);
}
view.showOn(player, page);
}
}

View File

@ -0,0 +1,45 @@
package cn.lunadeer.dominion.tuis;
import cn.lunadeer.dominion.controllers.PlayerController;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.STUI.Button;
import cn.lunadeer.dominion.utils.STUI.Line;
import cn.lunadeer.dominion.utils.STUI.View;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.tuis.Apis.getDominion;
public class DominionSizeInfo {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = getDominion(player, args);
if (dominion == null) {
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion info <领地名称>");
return;
}
PlayerDTO owner = PlayerController.getPlayerDTO(dominion.getOwner());
Integer x1 = dominion.getX1();
Integer y1 = dominion.getY1();
Integer z1 = dominion.getZ1();
Integer x2 = dominion.getX2();
Integer y2 = dominion.getY2();
Integer z2 = dominion.getZ2();
View view = View.create();
view.title("领地 " + dominion.getName() + " 的尺寸信息")
.subtitle("领地归属:" + owner.getLastKnownName())
.addLine(Line.create().append("领地大小:").append((x2 - x1) + " x" + (y2 - y1) + " x" + (z2 - z1)))
.addLine(Line.create().append("中心坐标:").append((x1 + (x2 - x1) / 2) + " " + (y1 + (y2 - y1) / 2) + " " + (z1 + (z2 - z1) / 2)))
.addLine(Line.create().append("垂直高度:").append(String.valueOf(y2 - y1)))
.addLine(Line.create().append("水平面积:").append(String.valueOf((x2 - x1) * (z2 - z1))))
.addLine(Line.create().append("领地体积:").append(String.valueOf((x2 - x1) * (y2 - y1) * (z2 - z1))))
.actionBar(Line.create()
.append(Button.create("管理界面", "/dominion manage " + dominion.getName()))
.append(Button.create("权限列表", "/dominion flag_info " + dominion.getName())))
.showOn(player);
}
}

View File

@ -0,0 +1,37 @@
package cn.lunadeer.dominion.tuis;
import cn.lunadeer.dominion.utils.Notification;
import cn.lunadeer.dominion.utils.STUI.Button;
import cn.lunadeer.dominion.utils.STUI.Line;
import cn.lunadeer.dominion.utils.STUI.ListView;
import net.kyori.adventure.text.TextComponent;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.List;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.commands.Helper.playerDominions;
import static cn.lunadeer.dominion.tuis.Apis.getPage;
public class ListDominion {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
int page = getPage(args);
ListView view = ListView.create(5, "/dominion list");
List<String> dominions = playerDominions(sender);
if (dominions.isEmpty()) {
Notification.warn(sender, "你没有任何领地");
return;
}
view.title("我的领地列表");
view.navigator(Line.create().append(Button.create("主菜单", "/dominion menu")).append("我的领地"));
for (String dominion : dominions) {
TextComponent manage = Button.createGreen("管理", "/dominion manage " + dominion);
TextComponent delete = Button.createRed("删除", "/dominion delete " + dominion);
view.add(Line.create().append(dominion).append(manage).append(delete));
}
view.showOn(player, page);
}
}

View File

@ -0,0 +1,28 @@
package cn.lunadeer.dominion.tuis;
import cn.lunadeer.dominion.utils.STUI.Button;
import cn.lunadeer.dominion.utils.STUI.Line;
import cn.lunadeer.dominion.utils.STUI.View;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
public class Menu {
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
Line list = Line.create()
.append(Button.create("我的领地", "/dominion list"))
.append("查看我的领地");
Line help = Line.create()
.append(Button.create("指令帮助", "/dominion help"))
.append("查看指令帮助");
View view = View.create();
view.title("Dominion 领地系统")
.navigator(Line.create().append("主菜单"))
.addLine(list)
.addLine(help)
.showOn(player);
}
}

View File

@ -0,0 +1,337 @@
package cn.lunadeer.dominion.tuis;
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 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 static cn.lunadeer.dominion.commands.Apis.playerOnly;
import static cn.lunadeer.dominion.tuis.Apis.getDominion;
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
public class PrivilegeInfo {
// /dominion privilege_info <玩家名称> [领地名称] [页码]
public static void show(CommandSender sender, String[] args) {
Player player = playerOnly(sender);
if (player == null) return;
DominionDTO dominion = getDominion(player, args);
int page = 1;
if (args.length == 4) {
try {
page = Integer.parseInt(args[3]);
} catch (Exception ignored) {
}
}
String playerName = args[1];
if (dominion == null) {
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_info <玩家名称> [领地名称]");
return;
}
ListView view = ListView.create(5, "/dominion privilege_info " + playerName + " " + dominion.getName());
if (noAuthToManage(player, dominion)) return;
PlayerDTO playerDTO = PlayerDTO.select(playerName);
if (playerDTO == null) {
Notification.error(sender, "玩家 " + playerName + " 不存在");
return;
}
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(playerDTO.getUuid(), dominion.getId());
if (privilege == null) {
Notification.warn(sender, "玩家 " + playerName + " 没有任何特权");
return;
}
view.title("玩家 " + playerName + " 在领地 " + dominion.getName() + " 的特权信息");
view.navigator(
Line.create()
.append(Button.create("主菜单", "/dominion menu"))
.append(Button.create("我的领地", "/dominion list"))
.append(Button.create("管理界面", "/dominion manage " + dominion.getName()))
.append(Button.create("特权列表", "/dominion privilege_list " + dominion.getName()))
.append("特权信息")
);
if (privilege.getAnchor()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " anchor false " + dominion.getName() + " " + page))
.append("重生锚"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " anchor true " + dominion.getName() + " " + page))
.append("重生锚"));
}
if (privilege.getAnimalKilling()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " animal_killing false " + dominion.getName() + " " + page))
.append("动物伤害"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " animal_killing true " + dominion.getName() + " " + page))
.append("动物伤害"));
}
if (privilege.getAnvil()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " anvil false " + dominion.getName() + " " + page))
.append("使用铁砧"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " anvil true " + dominion.getName() + " " + page))
.append("使用铁砧"));
}
if (privilege.getBeacon()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " beacon false " + dominion.getName() + " " + page))
.append("信标交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " beacon true " + dominion.getName() + " " + page))
.append("信标交互"));
}
if (privilege.getBed()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " bed false " + dominion.getName() + " " + page))
.append("床交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " bed true " + dominion.getName() + " " + page))
.append("床交互"));
}
if (privilege.getBrew()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " brew false " + dominion.getName() + " " + page))
.append("使用酿造台"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " brew true " + dominion.getName() + " " + page))
.append("使用酿造台"));
}
if (privilege.getButton()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " button false " + dominion.getName() + " " + page))
.append("使用按钮"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " button true " + dominion.getName() + " " + page))
.append("使用按钮"));
}
if (privilege.getCake()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " cake false " + dominion.getName() + " " + page))
.append("使用蛋糕"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " cake true " + dominion.getName() + " " + page))
.append("使用蛋糕"));
}
if (privilege.getContainer()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " container false " + dominion.getName() + " " + page))
.append("容器交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " container true " + dominion.getName() + " " + page))
.append("容器交互"));
}
if (privilege.getCraft()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " craft false " + dominion.getName() + " " + page))
.append("合成"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " craft true " + dominion.getName() + " " + page))
.append("合成"));
}
if (privilege.getDiode()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " diode false " + dominion.getName() + " " + page))
.append("中继器交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " diode true " + dominion.getName() + " " + page))
.append("中继器交互"));
}
if (privilege.getDoor()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " door false " + dominion.getName() + " " + page))
.append("门交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " door true " + dominion.getName() + " " + page))
.append("门交互"));
}
if (privilege.getDye()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " dye false " + dominion.getName() + " " + page))
.append("染色"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " dye true " + dominion.getName() + " " + page))
.append("染色"));
}
if (privilege.getEgg()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " egg false " + dominion.getName() + " " + page))
.append("投掷鸡蛋"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " egg true " + dominion.getName() + " " + page))
.append("投掷鸡蛋"));
}
if (privilege.getEnchant()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " enchant false " + dominion.getName() + " " + page))
.append("附魔"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " enchant true " + dominion.getName() + " " + page))
.append("附魔"));
}
if (privilege.getEnderPearl()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " ender_pearl false " + dominion.getName() + " " + page))
.append("末影珍珠"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " ender_pearl true " + dominion.getName() + " " + page))
.append("末影珍珠"));
}
if (privilege.getFeed()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " feed false " + dominion.getName() + " " + page))
.append("喂食"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " feed true " + dominion.getName() + " " + page))
.append("喂食"));
}
if (privilege.getGlow()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " glow false " + dominion.getName() + " " + page))
.append("发光"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " glow true " + dominion.getName() + " " + page))
.append("发光"));
}
if (privilege.getHoney()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " honey false " + dominion.getName() + " " + page))
.append("蜂巢交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " honey true " + dominion.getName() + " " + page))
.append("蜂巢交互"));
}
if (privilege.getHook()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " hook false " + dominion.getName() + " " + page))
.append("钩子交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " hook true " + dominion.getName() + " " + page))
.append("钩子交互"));
}
if (privilege.getIgnite()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " ignite false " + dominion.getName() + " " + page))
.append("点燃"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " ignite true " + dominion.getName() + " " + page))
.append("点燃"));
}
if (privilege.getMobKilling()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " mob_killing false " + dominion.getName() + " " + page))
.append("生物伤害"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " mob_killing true " + dominion.getName() + " " + page))
.append("生物伤害"));
}
if (privilege.getMove()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " move false " + dominion.getName() + " " + page))
.append("移动"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " move true " + dominion.getName() + " " + page))
.append("移动"));
}
if (privilege.getPlace()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " place false " + dominion.getName() + " " + page))
.append("放置"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " place true " + dominion.getName() + " " + page))
.append("放置"));
}
if (privilege.getPressure()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " pressure false " + dominion.getName() + " " + page))
.append("压力板交互"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " pressure true " + dominion.getName() + " " + page))
.append("压力板交互"));
}
if (privilege.getRiding()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " riding false " + dominion.getName() + " " + page))
.append("骑乘"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " riding true " + dominion.getName() + " " + page))
.append("骑乘"));
}
if (privilege.getShear()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " shear false " + dominion.getName() + " " + page))
.append("剪羊毛"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " shear true " + dominion.getName() + " " + page))
.append("剪羊毛"));
}
if (privilege.getShoot()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " shoot false " + dominion.getName() + " " + page))
.append("发射"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " shoot true " + dominion.getName() + " " + page))
.append("发射"));
}
if (privilege.getTrade()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " trade false " + dominion.getName() + " " + page))
.append("交易"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " trade true " + dominion.getName() + " " + page))
.append("交易"));
}
if (privilege.getVehicleDestroy()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " vehicle_destroy false " + dominion.getName() + " " + page))
.append("破坏载具"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " vehicle_destroy true " + dominion.getName() + " " + page))
.append("破坏载具"));
}
if (privilege.getHarvest()) {
view.add(Line.create()
.append(Button.createGreen("", "/dominion set_privilege " + playerName + " harvest false " + dominion.getName() + " " + page))
.append("收获"));
} else {
view.add(Line.create()
.append(Button.createRed("", "/dominion set_privilege " + playerName + " harvest true " + dominion.getName() + " " + page))
.append("收获"));
}
view.showOn(player, page);
}
}

View File

@ -105,13 +105,13 @@ public class Database {
" FOREIGN KEY (parent_dom_id) REFERENCES dominion(id)" +
");";
// privilege template
sql += "CREATE TABLE IF NOT EXISTS privilege_template (" +
// player privilege
sql += "CREATE TABLE IF NOT EXISTS player_privilege (" +
" id SERIAL PRIMARY KEY," +
" name TEXT NOT NULL," +
" creator VARCHAR(36) NOT NULL," +
" team BOOLEAN NOT NULL DEFAULT TRUE," +
" player_uuid VARCHAR(36) NOT NULL," +
" dom_id INT NOT NULL," +
" admin BOOLEAN NOT NULL DEFAULT FALSE," +
" anchor BOOLEAN NOT NULL DEFAULT FALSE," +
" animal_killing BOOLEAN NOT NULL DEFAULT FALSE," +
" anvil BOOLEAN NOT NULL DEFAULT FALSE," +
@ -143,20 +143,9 @@ public class Database {
" trade BOOLEAN NOT NULL DEFAULT FALSE," +
" vehicle_destroy BOOLEAN NOT NULL DEFAULT FALSE," +
" harvest BOOLEAN NOT NULL DEFAULT FALSE," +
" UNIQUE (name, creator)," +
" FOREIGN KEY (creator) REFERENCES player_name(uuid)" +
");";
// player dominion privilege
sql += "CREATE TABLE IF NOT EXISTS player_dom_privilege (" +
" id SERIAL PRIMARY KEY," +
" player_uuid VARCHAR(36) NOT NULL," +
" admin BOOLEAN NOT NULL DEFAULT FALSE," +
" dom_id INT NOT NULL," +
" privilege_template_id INT NOT NULL," +
" FOREIGN KEY (player_uuid) REFERENCES player_name(uuid)," +
" FOREIGN KEY (dom_id) REFERENCES dominion(id)," +
" FOREIGN KEY (privilege_template_id) REFERENCES privilege_template(id)" +
" FOREIGN KEY (dom_id) REFERENCES dominion(id)" +
");";
sql += "INSERT INTO player_name (" +

View File

@ -10,7 +10,6 @@ import java.util.List;
import static cn.lunadeer.dominion.utils.STUI.ViewStyles.main_color;
public class View {
protected TextComponent title_decorate = Component.text("", main_color);
protected TextComponent space = Component.text(" ");
protected TextComponent sub_title_decorate = Component.text("- ", main_color);
protected TextComponent line_decorate = Component.text("", main_color);
@ -23,18 +22,11 @@ public class View {
protected TextComponent divide_line = Component.text("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", main_color);
public void showOn(Player player) {
player.sendMessage(edge);
// player.sendMessage(edge);
TextComponent.Builder builder = Component.text();
int title_length = title.content().length();
int title_width = title_length * 2 + 2;
int decorate_count = divide_line.content().length() - title_width;
for (int i = 0; i < decorate_count / 2; i++) {
builder.append(title_decorate);
}
builder.append(Component.text("__/", main_color));
builder.append(space).append(title).append(space);
for (int i = 0; i < decorate_count / 2; i++) {
builder.append(title_decorate);
}
builder.append(Component.text("\\__", main_color));
player.sendMessage(builder.build());
if (subtitle != null) {
player.sendMessage(divide_line);