Compare commits
No commits in common. "master" and "v1.33.4-beta" have entirely different histories.
master
...
v1.33.4-be
|
@ -39,7 +39,6 @@
|
|||
- 支持经济系统(需要 Vault 前置);
|
||||
- 领地区域可视化;
|
||||
- 管理员可在游戏内使用TUI配置领地系统;
|
||||
- 支持[从 Residence 迁移](https://ssl.lunadeer.cn:14448/doc/73/)领地数据(1.33.7+);
|
||||
|
||||
<div style="text-align: center;">
|
||||
|
||||
|
|
7
pom.xml
7
pom.xml
|
@ -6,7 +6,7 @@
|
|||
|
||||
<groupId>cn.lunadeer</groupId>
|
||||
<artifactId>Dominion</artifactId>
|
||||
<version>1.35.9-beta</version>
|
||||
<version>1.33.4-beta</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Dominion</name>
|
||||
|
@ -90,10 +90,5 @@
|
|||
<version>v2.6.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.yaml</groupId>
|
||||
<artifactId>snakeyaml</artifactId>
|
||||
<version>2.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package cn.lunadeer.dominion;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.*;
|
||||
import cn.lunadeer.dominion.utils.ResMigration;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.ParticleRender;
|
||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||
|
@ -24,8 +26,7 @@ public class Cache {
|
|||
public Cache() {
|
||||
player_current_dominion_id = new HashMap<>();
|
||||
loadDominions();
|
||||
loadMembers();
|
||||
loadGroups();
|
||||
loadPlayerPrivileges();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -104,101 +105,56 @@ public class Cache {
|
|||
*
|
||||
* @param player_uuid 玩家UUID
|
||||
*/
|
||||
public void loadMembers(UUID player_uuid) {
|
||||
if (_last_update_member.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
|
||||
XLogger.debug("run loadMembersExecution directly");
|
||||
loadMembersExecution(player_uuid);
|
||||
public void loadPlayerPrivileges(UUID player_uuid) {
|
||||
if (_last_update_privilege.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
|
||||
XLogger.debug("run loadPlayerPrivilegesExecution directly");
|
||||
loadPlayerPrivilegesExecution(player_uuid);
|
||||
} else {
|
||||
if (_update_member_is_scheduled.get()) return;
|
||||
XLogger.debug("schedule loadMembersExecution");
|
||||
_update_member_is_scheduled.set(true);
|
||||
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_member.get())) / 1000 * 20L;
|
||||
if (_update_privilege_is_scheduled.get()) return;
|
||||
XLogger.debug("schedule loadPlayerPrivilegesExecution");
|
||||
_update_privilege_is_scheduled.set(true);
|
||||
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_privilege.get())) / 1000 * 20L;
|
||||
Scheduler.runTaskLaterAsync(() -> {
|
||||
XLogger.debug("run loadMembersExecution scheduled");
|
||||
loadMembersExecution(player_uuid);
|
||||
_update_member_is_scheduled.set(false);
|
||||
XLogger.debug("run loadPlayerPrivilegesExecution scheduled");
|
||||
loadPlayerPrivilegesExecution(player_uuid);
|
||||
_update_privilege_is_scheduled.set(false);
|
||||
},
|
||||
delay_tick);
|
||||
}
|
||||
}
|
||||
|
||||
public void loadMembers() {
|
||||
loadMembers(null);
|
||||
public void loadPlayerPrivileges() {
|
||||
loadPlayerPrivileges(null);
|
||||
}
|
||||
|
||||
private void loadMembersExecution(UUID player_to_update) {
|
||||
private void loadPlayerPrivilegesExecution(UUID player_to_update) {
|
||||
Scheduler.runTaskAsync(() -> {
|
||||
long start = System.currentTimeMillis();
|
||||
List<MemberDTO> all_privileges;
|
||||
List<PlayerPrivilegeDTO> all_privileges;
|
||||
if (player_to_update == null) {
|
||||
all_privileges = MemberDTO.selectAll();
|
||||
player_uuid_to_member = new ConcurrentHashMap<>();
|
||||
all_privileges = PlayerPrivilegeDTO.selectAll();
|
||||
player_uuid_to_privilege = new ConcurrentHashMap<>();
|
||||
} else {
|
||||
all_privileges = MemberDTO.selectAll(player_to_update);
|
||||
if (!player_uuid_to_member.containsKey(player_to_update)) {
|
||||
player_uuid_to_member.put(player_to_update, new ConcurrentHashMap<>());
|
||||
all_privileges = PlayerPrivilegeDTO.selectAll(player_to_update);
|
||||
if (!player_uuid_to_privilege.containsKey(player_to_update)) {
|
||||
player_uuid_to_privilege.put(player_to_update, new ConcurrentHashMap<>());
|
||||
}
|
||||
player_uuid_to_member.get(player_to_update).clear();
|
||||
player_uuid_to_privilege.get(player_to_update).clear();
|
||||
}
|
||||
for (MemberDTO privilege : all_privileges) {
|
||||
for (PlayerPrivilegeDTO privilege : all_privileges) {
|
||||
UUID player_uuid = privilege.getPlayerUUID();
|
||||
if (!player_uuid_to_member.containsKey(player_uuid)) {
|
||||
player_uuid_to_member.put(player_uuid, new ConcurrentHashMap<>());
|
||||
if (!player_uuid_to_privilege.containsKey(player_uuid)) {
|
||||
player_uuid_to_privilege.put(player_uuid, new ConcurrentHashMap<>());
|
||||
}
|
||||
player_uuid_to_member.get(player_uuid).put(privilege.getDomID(), privilege);
|
||||
player_uuid_to_privilege.get(player_uuid).put(privilege.getDomID(), privilege);
|
||||
}
|
||||
recheckPlayerState = true;
|
||||
_last_update_member.set(System.currentTimeMillis());
|
||||
XLogger.debug("loadMembersExecution cost: %d ms for %d privileges"
|
||||
_last_update_privilege.set(System.currentTimeMillis());
|
||||
XLogger.debug("loadPlayerPrivilegesExecution cost: %d ms for %d privileges"
|
||||
, System.currentTimeMillis() - start, all_privileges.size());
|
||||
});
|
||||
}
|
||||
|
||||
public void loadGroups() {
|
||||
loadGroups(null);
|
||||
}
|
||||
|
||||
public void loadGroups(Integer groupId) {
|
||||
if (_last_update_group.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
|
||||
XLogger.debug("run loadGroupsExecution directly");
|
||||
loadGroupExecution(groupId);
|
||||
} else {
|
||||
if (_update_group_is_scheduled.get()) return;
|
||||
XLogger.debug("schedule loadGroupsExecution");
|
||||
_update_group_is_scheduled.set(true);
|
||||
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_group.get())) / 1000 * 20L;
|
||||
Scheduler.runTaskLaterAsync(() -> {
|
||||
XLogger.debug("run loadGroupsExecution scheduled");
|
||||
loadGroupExecution(groupId);
|
||||
_update_group_is_scheduled.set(false);
|
||||
},
|
||||
delay_tick);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadGroupExecution(Integer groupId) {
|
||||
Scheduler.runTaskAsync(() -> {
|
||||
long start = System.currentTimeMillis();
|
||||
if (groupId == null) {
|
||||
id_groups = new ConcurrentHashMap<>();
|
||||
List<GroupDTO> groups = GroupDTO.selectAll();
|
||||
for (GroupDTO group : groups) {
|
||||
id_groups.put(group.getId(), group);
|
||||
}
|
||||
} else {
|
||||
GroupDTO group = GroupDTO.select(groupId);
|
||||
if (group == null && id_groups.containsKey(groupId)) {
|
||||
id_groups.remove(groupId);
|
||||
} else if (group != null) {
|
||||
id_groups.put(groupId, group);
|
||||
}
|
||||
}
|
||||
recheckPlayerState = true;
|
||||
_last_update_group.set(System.currentTimeMillis());
|
||||
XLogger.debug("loadGroupsExecution cost: %d ms", System.currentTimeMillis() - start);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取玩家当前所在领地
|
||||
* 此方法会先判断缓存中是否有玩家当前所在领地,如果没有则遍历所有领地判断玩家所在位置
|
||||
|
@ -283,18 +239,9 @@ public class Cache {
|
|||
player.setGlowing(false);
|
||||
return;
|
||||
}
|
||||
MemberDTO privilege = getMember(player, dominion);
|
||||
PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion);
|
||||
if (privilege != null) {
|
||||
if (privilege.getGroupId() == -1) {
|
||||
player.setGlowing(privilege.getFlagValue(Flag.GLOW));
|
||||
} else {
|
||||
GroupDTO group = getGroup(privilege.getGroupId());
|
||||
if (group != null) {
|
||||
player.setGlowing(group.getFlagValue(Flag.GLOW));
|
||||
} else {
|
||||
player.setGlowing(dominion.getFlagValue(Flag.GLOW));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
player.setGlowing(dominion.getFlagValue(Flag.GLOW));
|
||||
}
|
||||
|
@ -320,18 +267,9 @@ public class Cache {
|
|||
player.setAllowFlight(false);
|
||||
return;
|
||||
}
|
||||
MemberDTO privilege = getMember(player, dominion);
|
||||
PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion);
|
||||
if (privilege != null) {
|
||||
if (privilege.getGroupId() == -1) {
|
||||
player.setAllowFlight(privilege.getFlagValue(Flag.FLY));
|
||||
} else {
|
||||
GroupDTO group = getGroup(privilege.getGroupId());
|
||||
if (group != null) {
|
||||
player.setAllowFlight(group.getFlagValue(Flag.FLY));
|
||||
} else {
|
||||
player.setAllowFlight(dominion.getFlagValue(Flag.FLY));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
player.setAllowFlight(dominion.getFlagValue(Flag.FLY));
|
||||
}
|
||||
|
@ -363,10 +301,6 @@ public class Cache {
|
|||
return dominionTree;
|
||||
}
|
||||
|
||||
public GroupDTO getGroup(Integer id) {
|
||||
return id_groups.get(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取玩家在指定领地的特权
|
||||
* 如果玩家不存在特权,则返回null
|
||||
|
@ -375,14 +309,14 @@ public class Cache {
|
|||
* @param dominion 领地
|
||||
* @return 特权表
|
||||
*/
|
||||
public MemberDTO getMember(Player player, DominionDTO dominion) {
|
||||
if (!player_uuid_to_member.containsKey(player.getUniqueId())) return null;
|
||||
return player_uuid_to_member.get(player.getUniqueId()).get(dominion.getId());
|
||||
public PlayerPrivilegeDTO getPlayerPrivilege(Player player, DominionDTO dominion) {
|
||||
if (!player_uuid_to_privilege.containsKey(player.getUniqueId())) return null;
|
||||
return player_uuid_to_privilege.get(player.getUniqueId()).get(dominion.getId());
|
||||
}
|
||||
|
||||
public MemberDTO getMember(UUID player_uuid, DominionDTO dominion) {
|
||||
if (!player_uuid_to_member.containsKey(player_uuid)) return null;
|
||||
return player_uuid_to_member.get(player_uuid).get(dominion.getId());
|
||||
public PlayerPrivilegeDTO getPlayerPrivilege(UUID player_uuid, DominionDTO dominion) {
|
||||
if (!player_uuid_to_privilege.containsKey(player_uuid)) return null;
|
||||
return player_uuid_to_privilege.get(player_uuid).get(dominion.getId());
|
||||
}
|
||||
|
||||
private static boolean isInDominion(@Nullable DominionDTO dominion, Player player) {
|
||||
|
@ -410,61 +344,21 @@ public class Cache {
|
|||
return count;
|
||||
}
|
||||
|
||||
public List<ResMigration.ResidenceNode> getResidenceData(UUID player_uuid) {
|
||||
if (residence_data == null) {
|
||||
residence_data = new HashMap<>();
|
||||
List<ResMigration.ResidenceNode> residences = ResMigration.extractFromResidence(Dominion.instance);
|
||||
for (ResMigration.ResidenceNode node : residences) {
|
||||
if (node == null) {
|
||||
continue;
|
||||
}
|
||||
if (!residence_data.containsKey(node.owner)) {
|
||||
XLogger.debug("residence_data put %s", node.owner);
|
||||
residence_data.put(node.owner, new ArrayList<>());
|
||||
}
|
||||
residence_data.get(node.owner).add(node);
|
||||
}
|
||||
XLogger.debug("residence_data: %d", residence_data.size());
|
||||
}
|
||||
return residence_data.get(player_uuid);
|
||||
}
|
||||
|
||||
public List<DominionDTO> getDominions() {
|
||||
return new ArrayList<>(id_dominions.values());
|
||||
}
|
||||
|
||||
public int getDominionCounts() {
|
||||
return id_dominions.size();
|
||||
}
|
||||
|
||||
public int getMemberCounts() {
|
||||
int count = 0;
|
||||
for (Map<Integer, MemberDTO> member : player_uuid_to_member.values()) {
|
||||
count += member.size();
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
public int getGroupCounts() {
|
||||
return id_groups.size();
|
||||
}
|
||||
|
||||
public static Cache instance;
|
||||
private ConcurrentHashMap<Integer, DominionDTO> id_dominions;
|
||||
private ConcurrentHashMap<String, List<DominionNode>> world_dominion_tree;
|
||||
private ConcurrentHashMap<Integer, GroupDTO> id_groups;
|
||||
private ConcurrentHashMap<UUID, ConcurrentHashMap<Integer, MemberDTO>> player_uuid_to_member; // 玩家所有的特权
|
||||
private ConcurrentHashMap<UUID, ConcurrentHashMap<Integer, PlayerPrivilegeDTO>> player_uuid_to_privilege; // 玩家所有的特权
|
||||
private final Map<UUID, Integer> player_current_dominion_id; // 玩家当前所在领地
|
||||
private ConcurrentHashMap<Integer, List<Integer>> dominion_children;
|
||||
private final AtomicLong _last_update_dominion = new AtomicLong(0);
|
||||
private final AtomicBoolean _update_dominion_is_scheduled = new AtomicBoolean(false);
|
||||
private final AtomicLong _last_update_member = new AtomicLong(0);
|
||||
private final AtomicBoolean _update_member_is_scheduled = new AtomicBoolean(false);
|
||||
private final AtomicLong _last_update_group = new AtomicLong(0);
|
||||
private final AtomicBoolean _update_group_is_scheduled = new AtomicBoolean(false);
|
||||
private final AtomicLong _last_update_privilege = new AtomicLong(0);
|
||||
private final AtomicBoolean _update_privilege_is_scheduled = new AtomicBoolean(false);
|
||||
private static final long UPDATE_INTERVAL = 1000 * 4;
|
||||
private boolean recheckPlayerState = false; // 是否需要重新检查玩家状态(发光、飞行)
|
||||
public final Map<UUID, LocalDateTime> NextTimeAllowTeleport = new java.util.HashMap<>();
|
||||
|
||||
private Map<UUID, List<ResMigration.ResidenceNode>> residence_data = null;
|
||||
}
|
||||
|
|
|
@ -4,15 +4,7 @@ import cn.lunadeer.dominion.commands.*;
|
|||
import cn.lunadeer.dominion.controllers.PlayerController;
|
||||
import cn.lunadeer.dominion.cuis.*;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.tuis.AllDominion;
|
||||
import cn.lunadeer.dominion.tuis.Menu;
|
||||
import cn.lunadeer.dominion.tuis.MigrateList;
|
||||
import cn.lunadeer.dominion.tuis.SysConfig;
|
||||
import cn.lunadeer.dominion.tuis.dominion.DominionList;
|
||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.SizeInfo;
|
||||
import cn.lunadeer.dominion.tuis.*;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
|
@ -27,6 +19,24 @@ import java.util.List;
|
|||
import static cn.lunadeer.dominion.commands.Helper.*;
|
||||
|
||||
public class Commands implements TabExecutor {
|
||||
/*
|
||||
创建领地: /dominion create <领地名称>
|
||||
自动创建领地: /dominion auto_create <领地名称>
|
||||
创建子领地: /dominion create_sub <子领地名称> [父领地名称]
|
||||
自动创建子领地: /dominion auto_create_sub <子领地名称> [父领地名称]
|
||||
扩张领地: /dominion expand [大小] [领地名称]
|
||||
缩小领地: /dominion contract [大小] [领地名称]
|
||||
删除领地: /dominion delete <领地名称> [force]
|
||||
设置领地权限: /dominion set <权限名称> <true/false> [领地名称]
|
||||
设置玩家权限: /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]
|
||||
重置玩家权限: /dominion clear_privilege <玩家名称> [领地名称]
|
||||
创建权限组: /dominion create_group <权限组名称>
|
||||
删除权限组: /dominion delete_group <权限组名称>
|
||||
设置权限组权限: /dominion set_group <权限组名称> <权限名称> <true/false>
|
||||
设置玩家在某个领地归属的权限组: /dominion add_player <玩家名称> <权限组名称> [领地名称]
|
||||
删除玩家在某个领地归属的权限组: /dominion remove_player <玩家名称> <权限组名称> [领地名称]
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Executes the given command, returning its success.
|
||||
|
@ -51,19 +61,19 @@ public class Commands implements TabExecutor {
|
|||
Menu.show(sender, args);
|
||||
break;
|
||||
case "list":
|
||||
DominionList.show(sender, args);
|
||||
ListDominion.show(sender, args);
|
||||
break;
|
||||
case "help":
|
||||
cn.lunadeer.dominion.tuis.Apis.printHelp(sender, args);
|
||||
break;
|
||||
case "info":
|
||||
SizeInfo.show(sender, args);
|
||||
DominionSizeInfo.show(sender, args);
|
||||
break;
|
||||
case "manage":
|
||||
DominionManage.show(sender, args);
|
||||
break;
|
||||
case "guest_setting":
|
||||
GuestSetting.show(sender, args);
|
||||
case "flag_info":
|
||||
DominionFlagInfo.show(sender, args);
|
||||
break;
|
||||
case "create":
|
||||
DominionOperate.createDominion(sender, args);
|
||||
|
@ -89,6 +99,24 @@ public class Commands implements TabExecutor {
|
|||
case "set":
|
||||
DominionFlag.setDominionFlag(sender, args);
|
||||
break;
|
||||
case "create_privilege":
|
||||
PlayerPrivilege.createPlayerPrivilege(sender, args);
|
||||
break;
|
||||
case "set_privilege":
|
||||
PlayerPrivilege.setPlayerPrivilege(sender, args);
|
||||
break;
|
||||
case "clear_privilege":
|
||||
PlayerPrivilege.clearPlayerPrivilege(sender, args);
|
||||
break;
|
||||
case "privilege_list":
|
||||
DominionPrivilegeList.show(sender, args);
|
||||
break;
|
||||
case "privilege_info":
|
||||
PrivilegeInfo.show(sender, args);
|
||||
break;
|
||||
case "select_player_create_privilege":
|
||||
SelectPlayer.show(sender, args);
|
||||
break;
|
||||
case "set_enter_msg":
|
||||
DominionOperate.setEnterMessage(sender, args);
|
||||
break;
|
||||
|
@ -116,8 +144,8 @@ public class Commands implements TabExecutor {
|
|||
case "export_mca":
|
||||
Operator.exportMca(sender, args);
|
||||
break;
|
||||
case "sys_config":
|
||||
SysConfig.show(sender, args);
|
||||
case "config":
|
||||
DominionConfig.show(sender, args);
|
||||
break;
|
||||
case "set_config":
|
||||
SetConfig.handler(sender, args);
|
||||
|
@ -125,27 +153,32 @@ public class Commands implements TabExecutor {
|
|||
case "all_dominion":
|
||||
AllDominion.show(sender, args);
|
||||
break;
|
||||
case "migrate_list":
|
||||
MigrateList.show(sender, args);
|
||||
case "template_list":
|
||||
TemplateList.show(sender, args);
|
||||
break;
|
||||
case "migrate":
|
||||
Migration.migrate(sender, args);
|
||||
case "template_manage":
|
||||
TemplateManage.show(sender, args);
|
||||
break;
|
||||
case "template_delete":
|
||||
Template.deleteTemplate(sender, args);
|
||||
break;
|
||||
case "template_create":
|
||||
Template.createTemplate(sender, args);
|
||||
break;
|
||||
case "template_set_flag":
|
||||
Template.setTemplateFlag(sender, args);
|
||||
break;
|
||||
case "apply_template":
|
||||
PlayerPrivilege.applyTemplate(sender, args);
|
||||
break;
|
||||
case "select_template":
|
||||
SelectTemplate.show(sender, args);
|
||||
break;
|
||||
case "set_map_color":
|
||||
DominionOperate.setMapColor(sender, args);
|
||||
break;
|
||||
case "env_setting":
|
||||
EnvSetting.show(sender, args);
|
||||
break;
|
||||
// ---=== Sub Command ===---
|
||||
case "member":
|
||||
Member.handle(sender, args);
|
||||
break;
|
||||
case "group":
|
||||
Group.handle(sender, args);
|
||||
break;
|
||||
case "template":
|
||||
Template.handle(sender, args);
|
||||
case "env_info":
|
||||
DominionEnvInfo.show(sender, args);
|
||||
break;
|
||||
// ---=== CUI ===---
|
||||
case "cui_rename":
|
||||
|
@ -160,8 +193,8 @@ public class Commands implements TabExecutor {
|
|||
case "cui_create":
|
||||
CreateDominion.open(sender, args);
|
||||
break;
|
||||
case "cui_member_add":
|
||||
MemberAdd.open(sender, args);
|
||||
case "cui_create_privilege":
|
||||
CreatePrivilege.open(sender, args);
|
||||
break;
|
||||
case "cui_template_create":
|
||||
CreateTemplate.open(sender, args);
|
||||
|
@ -169,12 +202,6 @@ public class Commands implements TabExecutor {
|
|||
case "cui_set_map_color":
|
||||
SetMapColor.open(sender, args);
|
||||
break;
|
||||
case "cui_create_group":
|
||||
CreateGroup.open(sender, args);
|
||||
break;
|
||||
case "cui_rename_group":
|
||||
RenameGroup.open(sender, args);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
@ -197,8 +224,9 @@ public class Commands implements TabExecutor {
|
|||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if (args.length == 1) {
|
||||
return Arrays.asList("menu", "help", "info", "manage", "guest_setting",
|
||||
return Arrays.asList("menu", "help", "info", "manage", "flag_info", "privilege_list",
|
||||
"create", "auto_create", "create_sub", "auto_create_sub", "expand", "contract", "delete", "set",
|
||||
"create_privilege", "set_privilege", "clear_privilege", "list", "privilege_info",
|
||||
"set_enter_msg",
|
||||
"set_leave_msg",
|
||||
"set_tp_location",
|
||||
|
@ -208,35 +236,32 @@ public class Commands implements TabExecutor {
|
|||
"reload_cache",
|
||||
"reload_config",
|
||||
"export_mca",
|
||||
"sys_config",
|
||||
"config",
|
||||
"apply_template",
|
||||
"template_list",
|
||||
"template_manage",
|
||||
"template_delete",
|
||||
"template_create",
|
||||
"template_set_flag",
|
||||
"all_dominion",
|
||||
"set_map_color",
|
||||
"member",
|
||||
"group",
|
||||
"template"
|
||||
"set_map_color"
|
||||
);
|
||||
}
|
||||
if (args.length > 1 && args[0].equals("member")) {
|
||||
return Member.handleTab(sender, args);
|
||||
}
|
||||
if (args.length > 1 && args[0].equals("group")) {
|
||||
return Group.handleTab(sender, args);
|
||||
}
|
||||
if (args.length > 1 && args[0].equals("template")) {
|
||||
return Template.handleTab(sender, args);
|
||||
}
|
||||
if (args.length == 2) {
|
||||
switch (args[0]) {
|
||||
case "help":
|
||||
case "list":
|
||||
case "sys_config":
|
||||
case "config":
|
||||
case "template_list":
|
||||
return Collections.singletonList("页码(可选)");
|
||||
case "create":
|
||||
case "auto_create":
|
||||
return Collections.singletonList("输入领地名称");
|
||||
case "delete":
|
||||
case "info":
|
||||
case "manage":
|
||||
case "guest_setting":
|
||||
case "flag_info":
|
||||
case "privilege_list":
|
||||
case "rename":
|
||||
case "give":
|
||||
case "set_tp_location":
|
||||
|
@ -245,6 +270,12 @@ public class Commands implements TabExecutor {
|
|||
return allDominions();
|
||||
case "set":
|
||||
return dominionFlags();
|
||||
case "create_privilege":
|
||||
case "set_privilege":
|
||||
case "clear_privilege":
|
||||
case "privilege_info":
|
||||
case "apply_template":
|
||||
return playerNames();
|
||||
case "expand":
|
||||
case "contract":
|
||||
return Collections.singletonList("大小(整数)");
|
||||
|
@ -255,6 +286,12 @@ public class Commands implements TabExecutor {
|
|||
return Collections.singletonList("进入提示语内容");
|
||||
case "set_leave_msg":
|
||||
return Collections.singletonList("离开提示语内容");
|
||||
case "template_manage":
|
||||
case "template_delete":
|
||||
case "template_set_flag":
|
||||
return allTemplates(sender);
|
||||
case "template_create":
|
||||
return Collections.singletonList("输入模板名称");
|
||||
case "set_map_color":
|
||||
return Collections.singletonList("输入颜色(16进制)");
|
||||
}
|
||||
|
@ -263,34 +300,48 @@ public class Commands implements TabExecutor {
|
|||
switch (args[0]) {
|
||||
case "set":
|
||||
return boolOptions();
|
||||
case "set_privilege":
|
||||
case "template_set_flag":
|
||||
return playerPrivileges();
|
||||
case "expand":
|
||||
case "contract":
|
||||
case "clear_privilege":
|
||||
case "create_privilege":
|
||||
case "privilege_info":
|
||||
case "auto_create_sub":
|
||||
case "create_sub":
|
||||
case "set_enter_msg":
|
||||
case "set_leave_msg":
|
||||
case "apply_template":
|
||||
case "set_map_color":
|
||||
return playerDominions(sender);
|
||||
case "rename":
|
||||
return Collections.singletonList("输入新领地名称");
|
||||
case "give":
|
||||
return playerNames();
|
||||
case "template_manage":
|
||||
return Collections.singletonList("页码(可选)");
|
||||
}
|
||||
}
|
||||
if (args.length == 4) {
|
||||
switch (args[0]) {
|
||||
case "set":
|
||||
return playerDominions(sender);
|
||||
case "set_privilege":
|
||||
case "template_set_flag":
|
||||
return boolOptions();
|
||||
case "apply_template":
|
||||
return allTemplates(sender);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<String> boolOptions() {
|
||||
private static List<String> boolOptions() {
|
||||
return Arrays.asList("true", "false");
|
||||
}
|
||||
|
||||
public static List<String> playerNames() {
|
||||
private static List<String> playerNames() {
|
||||
List<PlayerDTO> players = PlayerController.allPlayers();
|
||||
List<String> names = new ArrayList<>();
|
||||
for (PlayerDTO player : players) {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package cn.lunadeer.dominion;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||
import cn.lunadeer.dominion.events.EnvironmentEvents;
|
||||
import cn.lunadeer.dominion.events.PlayerEvents;
|
||||
import cn.lunadeer.dominion.events.SelectPointEvents;
|
||||
|
@ -28,6 +27,7 @@ public final class Dominion extends JavaPlugin {
|
|||
new Notification(this);
|
||||
new XLogger(this);
|
||||
config = new ConfigManager(this);
|
||||
XLogger.setDebug(config.isDebug());
|
||||
new DatabaseManager(this,
|
||||
DatabaseType.valueOf(config.getDbType().toUpperCase()),
|
||||
config.getDbHost(),
|
||||
|
@ -39,6 +39,9 @@ public final class Dominion extends JavaPlugin {
|
|||
new Scheduler(this);
|
||||
AutoClean.run();
|
||||
Cache.instance = new Cache();
|
||||
if (config.getEconomyEnable()) {
|
||||
new VaultConnect(this);
|
||||
}
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(new PlayerEvents(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new EnvironmentEvents(), this);
|
||||
|
@ -46,11 +49,6 @@ public final class Dominion extends JavaPlugin {
|
|||
Objects.requireNonNull(Bukkit.getPluginCommand("dominion")).setExecutor(new Commands());
|
||||
|
||||
bStatsMetrics metrics = new bStatsMetrics(this, 21445);
|
||||
metrics.addCustomChart(new bStatsMetrics.SimplePie("database", () -> config.getDbType()));
|
||||
metrics.addCustomChart(new bStatsMetrics.SingleLineChart("dominion_count", () -> Cache.instance.getDominionCounts()));
|
||||
metrics.addCustomChart(new bStatsMetrics.SingleLineChart("group_count", () -> Cache.instance.getGroupCounts()));
|
||||
metrics.addCustomChart(new bStatsMetrics.SingleLineChart("member_count", () -> Cache.instance.getMemberCounts()));
|
||||
|
||||
if (config.getCheckUpdate()) {
|
||||
giteaReleaseCheck = new GiteaReleaseCheck(this,
|
||||
"https://ssl.lunadeer.cn:14446",
|
||||
|
|
|
@ -36,7 +36,7 @@ public class Apis {
|
|||
Notification.info(sender, " 领地的对角点坐标: x1=%d y1=%d z1=%d, x2=%d y2=%d z2=%d", x1, y1, z1, x2, y2, z2);
|
||||
}
|
||||
|
||||
public static Map<Integer, Location> autoPoints(Player player) {
|
||||
public static void autoPoints(Player player) {
|
||||
Integer size = Dominion.config.getAutoCreateRadius();
|
||||
Location location = player.getLocation();
|
||||
Location location1 = new Location(location.getWorld(), location.getX() - size, location.getY() - size, location.getZ() - size);
|
||||
|
@ -49,7 +49,6 @@ public class Apis {
|
|||
points.put(0, location1);
|
||||
points.put(1, location2);
|
||||
Dominion.pointsSelect.put(player.getUniqueId(), points);
|
||||
return points;
|
||||
}
|
||||
|
||||
public static boolean notOpOrConsole(CommandSender sender) {
|
||||
|
@ -63,8 +62,4 @@ public class Apis {
|
|||
return false;
|
||||
}
|
||||
|
||||
public static String CommandParser(String command, Object... args) {
|
||||
return String.format(command, args);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -3,8 +3,8 @@ package cn.lunadeer.dominion.commands;
|
|||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.FlagsController;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
|
||||
import cn.lunadeer.dominion.tuis.DominionEnvInfo;
|
||||
import cn.lunadeer.dominion.tuis.DominionFlagInfo;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -35,9 +35,9 @@ public class DominionFlag {
|
|||
newArgs[1] = args[3];
|
||||
newArgs[2] = args[4];
|
||||
if (Flag.isDominionOnlyFlag(args[1])) {
|
||||
EnvSetting.show(sender, newArgs);
|
||||
DominionEnvInfo.show(sender, newArgs);
|
||||
} else {
|
||||
GuestSetting.show(sender, newArgs);
|
||||
DominionFlagInfo.show(sender, newArgs);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
|
|
@ -6,8 +6,7 @@ import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
|||
import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||
import cn.lunadeer.minecraftpluginutils.Teleport;
|
||||
|
@ -375,7 +374,7 @@ public class DominionOperate {
|
|||
return;
|
||||
}
|
||||
|
||||
MemberDTO privilegeDTO = MemberDTO.select(player.getUniqueId(), dominionDTO.getId());
|
||||
PlayerPrivilegeDTO privilegeDTO = PlayerPrivilegeDTO.select(player.getUniqueId(), dominionDTO.getId());
|
||||
if (!player.getUniqueId().equals(dominionDTO.getOwner())) { // 领地所有人可以传送到自己的领地
|
||||
if (privilegeDTO == null) {
|
||||
if (!dominionDTO.getFlagValue(Flag.TELEPORT)) {
|
||||
|
@ -383,18 +382,10 @@ public class DominionOperate {
|
|||
return;
|
||||
}
|
||||
} else {
|
||||
if (privilegeDTO.getGroupId() == -1) {
|
||||
if (!privilegeDTO.getFlagValue(Flag.TELEPORT)) {
|
||||
Notification.error(sender, "你不被允许传送到这个领地");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
GroupDTO groupDTO = Cache.instance.getGroup(privilegeDTO.getGroupId());
|
||||
if (!groupDTO.getFlagValue(Flag.TELEPORT)) {
|
||||
Notification.error(sender, "你所在的权限组组不被允许传送到这个领地");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -409,34 +400,22 @@ public class DominionOperate {
|
|||
}
|
||||
if (Dominion.config.getTpDelay() > 0) {
|
||||
Notification.info(player, "传送将在 %d 秒后执行", Dominion.config.getTpDelay());
|
||||
Scheduler.runTaskAsync(() -> {
|
||||
int i = Dominion.config.getTpDelay();
|
||||
while (i > 0) {
|
||||
if (!player.isOnline()) {
|
||||
return;
|
||||
}
|
||||
Notification.actionBar(player, "传送倒计时 %d 秒", i);
|
||||
i--;
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
XLogger.err(e.getMessage());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
Cache.instance.NextTimeAllowTeleport.put(player.getUniqueId(), now.plusSeconds(Dominion.config.getTpCoolDown()));
|
||||
Scheduler.runTaskLater(() -> {
|
||||
Location location = dominionDTO.getTpLocation();
|
||||
int center_x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;
|
||||
int center_z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
||||
World world = Dominion.instance.getServer().getWorld(dominionDTO.getWorld());
|
||||
if (location == null) {
|
||||
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
||||
Notification.warn(player, "领地 %s 没有设置传送点,将尝试传送到中心点", dominionDTO.getName());
|
||||
int x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;
|
||||
int z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
||||
World world = Dominion.instance.getServer().getWorld(dominionDTO.getWorld());
|
||||
location = new Location(world, x, player.getLocation().getY(), z);
|
||||
XLogger.warn("领地 %s 没有设置传送点,将尝试传送到中心点", dominionDTO.getName());
|
||||
} else if (!isInDominion(dominionDTO, location)) {
|
||||
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
||||
Notification.warn(player, "领地 %s 传送点不在领地内,将尝试传送到中心点", dominionDTO.getName());
|
||||
int x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;
|
||||
int z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
||||
World world = Dominion.instance.getServer().getWorld(dominionDTO.getWorld());
|
||||
location = new Location(world, x, player.getLocation().getY(), z);
|
||||
XLogger.warn("领地 %s 传送点不在领地内,将尝试传送到中心点", dominionDTO.getName());
|
||||
}
|
||||
if (player.isOnline()) {
|
||||
Teleport.doTeleportSafely(player, location).thenAccept(b -> {
|
||||
|
|
|
@ -1,261 +0,0 @@
|
|||
package cn.lunadeer.dominion.commands;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.GroupController;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.SelectMember;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.Commands.boolOptions;
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.commands.Helper.*;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||
|
||||
public class Group {
|
||||
|
||||
/**
|
||||
* /dominion group create <领地名称> <权限组名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void createGroup(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 4) {
|
||||
Notification.error(sender, "用法: /dominion group create <领地名称> <权限组名称>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[2];
|
||||
String groupName = args[3];
|
||||
GroupController.createGroup(operator, dominionName, groupName);
|
||||
GroupList.show(sender, dominionName);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* /dominion group delete <领地名称> <权限组名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void deleteGroup(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 4) {
|
||||
Notification.error(sender, "用法: /dominion group delete <领地名称> <权限组名称>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[2];
|
||||
String groupName = args[3];
|
||||
GroupController.deleteGroup(operator, dominionName, groupName);
|
||||
GroupList.show(sender, dominionName);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* /dominion group rename <领地名称> <权限组旧名称> <新名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void renameGroup(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 5) {
|
||||
Notification.error(sender, "用法: /dominion group rename <领地名称> <权限组旧名称> <新名称>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[2];
|
||||
String oldGroupName = args[3];
|
||||
String newGroupName = args[4];
|
||||
GroupController.renameGroup(operator, dominionName, oldGroupName, newGroupName);
|
||||
GroupSetting.show(sender, dominionName, newGroupName);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* /dominion group set_flag <领地名称> <权限组名称> <权限名称> <true|false>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void setGroupFlag(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 6) {
|
||||
Notification.error(sender, "用法: /dominion group set_flag <领地名称> <权限组名称> <权限名称> <true|false>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[2];
|
||||
String groupName = args[3];
|
||||
String flag = args[4];
|
||||
boolean value = Boolean.parseBoolean(args[5]);
|
||||
int page = getPage(args, 6);
|
||||
GroupController.setGroupFlag(operator, dominionName, groupName, flag, value);
|
||||
GroupSetting.show(sender, dominionName, groupName, page);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* /dominion group add_member <领地名称> <权限组名称> <玩家名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void addMember(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 5) {
|
||||
Notification.error(sender, "用法: /dominion group add_member <领地名称> <权限组名称> <玩家名称>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[2];
|
||||
String groupName = args[3];
|
||||
String playerName = args[4];
|
||||
int page = getPage(args, 5);
|
||||
GroupController.addMember(operator, dominionName, groupName, playerName);
|
||||
GroupList.show(sender, dominionName, page);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* /dominion group remove_member <领地名称> <权限组名称> <玩家名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void removeMember(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 5) {
|
||||
Notification.error(sender, "用法: /dominion group remove_member <领地名称> <权限组名称> <玩家名称>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[2];
|
||||
String groupName = args[3];
|
||||
String playerName = args[4];
|
||||
int page = getPage(args, 5);
|
||||
GroupController.removeMember(operator, dominionName, groupName, playerName);
|
||||
GroupList.show(sender, dominionName, page);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
|
||||
switch (args[1]) {
|
||||
case "create":
|
||||
createGroup(sender, args);
|
||||
break;
|
||||
case "delete":
|
||||
deleteGroup(sender, args);
|
||||
break;
|
||||
case "rename":
|
||||
renameGroup(sender, args);
|
||||
break;
|
||||
case "set_flag":
|
||||
setGroupFlag(sender, args);
|
||||
break;
|
||||
case "add_member":
|
||||
addMember(sender, args);
|
||||
break;
|
||||
case "remove_member":
|
||||
removeMember(sender, args);
|
||||
break;
|
||||
case "select_member":
|
||||
SelectMember.show(sender, args);
|
||||
break;
|
||||
case "setting":
|
||||
GroupSetting.show(sender, args);
|
||||
break;
|
||||
case "list":
|
||||
GroupList.show(sender, args);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static @Nullable List<String> handleTab(@NotNull CommandSender sender, @NotNull String[] args) {
|
||||
if (args.length == 2) {
|
||||
return Arrays.asList("create", "delete", "rename", "set_flag", "add_member", "remove_member",
|
||||
"select_member", "list");
|
||||
}
|
||||
if (args.length == 3) {
|
||||
switch (args[1]) {
|
||||
case "create":
|
||||
case "delete":
|
||||
case "rename":
|
||||
case "set_flag":
|
||||
case "add_member":
|
||||
case "remove_member":
|
||||
case "select_member":
|
||||
case "setting":
|
||||
case "list":
|
||||
return playerDominions(sender);
|
||||
}
|
||||
}
|
||||
if (args.length == 4) {
|
||||
switch (args[1]) {
|
||||
case "create":
|
||||
return Collections.singletonList("新权限组名称");
|
||||
case "delete":
|
||||
case "rename":
|
||||
case "set_flag":
|
||||
case "add_member":
|
||||
case "remove_member":
|
||||
case "select_member":
|
||||
case "setting":
|
||||
return dominionGroups(args[2]);
|
||||
}
|
||||
}
|
||||
if (args.length == 5) {
|
||||
switch (args[1]) {
|
||||
case "rename":
|
||||
return Collections.singletonList("权限组新名称");
|
||||
case "set_flag":
|
||||
return playerPrivileges();
|
||||
case "remove_member":
|
||||
return groupPlayers(args[2], args[3]);
|
||||
}
|
||||
}
|
||||
if (args.length == 6) {
|
||||
switch (args[1]) {
|
||||
case "set_flag":
|
||||
return boolOptions();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +1,10 @@
|
|||
package cn.lunadeer.dominion.commands;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.dtos.*;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
@ -38,32 +41,6 @@ public class Helper {
|
|||
return dominions_name;
|
||||
}
|
||||
|
||||
public static List<String> dominionGroups(String dominionName) {
|
||||
List<String> groups_name = new ArrayList<>();
|
||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||
if (dominion == null) return groups_name;
|
||||
List<GroupDTO> groups = GroupDTO.selectByDominionId(dominion.getId());
|
||||
for (GroupDTO group : groups) {
|
||||
groups_name.add(group.getName());
|
||||
}
|
||||
return groups_name;
|
||||
}
|
||||
|
||||
public static List<String> groupPlayers(String domName, String groupName) {
|
||||
List<String> players_name = new ArrayList<>();
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) return players_name;
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group == null) return players_name;
|
||||
List<MemberDTO> privileges = MemberDTO.selectByDomGroupId(dominion.getId(), group.getId());
|
||||
for (MemberDTO privilege : privileges) {
|
||||
PlayerDTO player = PlayerDTO.select(privilege.getPlayerUUID());
|
||||
if (player == null) continue;
|
||||
players_name.add(player.getLastKnownName());
|
||||
}
|
||||
return players_name;
|
||||
}
|
||||
|
||||
public static List<String> playerOwnDominions(CommandSender sender) {
|
||||
List<String> dominions_name = new ArrayList<>();
|
||||
Player player = playerOnly(sender);
|
||||
|
@ -79,8 +56,8 @@ public class Helper {
|
|||
List<String> dominions_name = new ArrayList<>();
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return dominions_name;
|
||||
List<MemberDTO> dominions_admin = MemberDTO.selectAll(player.getUniqueId());
|
||||
for (MemberDTO privilege : dominions_admin) {
|
||||
List<PlayerPrivilegeDTO> dominions_admin = PlayerPrivilegeDTO.selectAll(player.getUniqueId());
|
||||
for (PlayerPrivilegeDTO privilege : dominions_admin) {
|
||||
if (privilege.getAdmin()) {
|
||||
DominionDTO dom = DominionDTO.select(privilege.getDomID());
|
||||
if (dom == null) continue;
|
||||
|
|
|
@ -1,210 +0,0 @@
|
|||
package cn.lunadeer.dominion.commands;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.MemberController;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberSetting;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectTemplate;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.Commands.boolOptions;
|
||||
import static cn.lunadeer.dominion.Commands.playerNames;
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.commands.Helper.*;
|
||||
|
||||
public class Member {
|
||||
|
||||
/**
|
||||
* 创建玩家特权
|
||||
* /dominion member add <领地名称> <玩家名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void member_add(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 4) {
|
||||
Notification.error(sender, "用法: /dominion member add <领地名称> <玩家名称>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[2];
|
||||
String playerName = args[3];
|
||||
MemberController.memberAdd(operator, dominionName, playerName);
|
||||
MemberList.show(sender, dominionName);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置玩家权限
|
||||
* /dominion member set_flag <领地名称> <玩家名称> <权限名称> <true/false>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void member_set_flag(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 6) {
|
||||
Notification.error(sender, "用法: /dominion member set_flag <领地名称> <玩家名称> <权限名称> <true/false>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[2];
|
||||
String playerName = args[3];
|
||||
String flagName = args[4];
|
||||
boolean flagValue = Boolean.parseBoolean(args[5]);
|
||||
Integer page = args.length == 7 ? Integer.parseInt(args[6]) : 1;
|
||||
MemberController.setMemberFlag(operator, dominionName, playerName, flagName, flagValue);
|
||||
MemberSetting.show(sender, dominionName, playerName, page);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置玩家权限
|
||||
* /dominion member remove <领地名称> <玩家名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void member_remove(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 4) {
|
||||
Notification.error(sender, "用法: /dominion member remove <领地名称> <玩家名称>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[2];
|
||||
String playerName = args[3];
|
||||
MemberController.memberRemove(operator, dominionName, playerName);
|
||||
MemberList.show(sender, dominionName);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用权限模板
|
||||
* /dominion member apply_template <领地名称> <玩家名称> <模板名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void member_apply_template(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 5) {
|
||||
Notification.error(sender, "用法: /dominion member apply_template <领地名称> <玩家名称> <模板名称>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String dominionName = args[2];
|
||||
String playerName = args[3];
|
||||
String templateName = args[4];
|
||||
MemberController.applyTemplate(operator, dominionName, playerName, templateName);
|
||||
MemberSetting.show(sender, dominionName, playerName);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
|
||||
switch (args[1]) {
|
||||
case "add":
|
||||
Member.member_add(sender, args);
|
||||
break;
|
||||
case "set_flag":
|
||||
Member.member_set_flag(sender, args);
|
||||
break;
|
||||
case "remove":
|
||||
Member.member_remove(sender, args);
|
||||
break;
|
||||
case "apply_template":
|
||||
Member.member_apply_template(sender, args);
|
||||
break;
|
||||
case "list":
|
||||
MemberList.show(sender, args);
|
||||
break;
|
||||
case "setting":
|
||||
MemberSetting.show(sender, args);
|
||||
break;
|
||||
case "select_player":
|
||||
SelectPlayer.show(sender, args);
|
||||
break;
|
||||
case "select_template":
|
||||
SelectTemplate.show(sender, args);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static @Nullable List<String> handleTab(@NotNull CommandSender sender, @NotNull String[] args) {
|
||||
if (args.length == 2) {
|
||||
return Arrays.asList("add", "set_flag", "remove", "apply_template", "list", "setting", "select_player", "select_template");
|
||||
}
|
||||
if (args.length == 3) {
|
||||
switch (args[1]) {
|
||||
case "add":
|
||||
case "remove":
|
||||
case "list":
|
||||
case "setting":
|
||||
case "set_flag":
|
||||
case "apply_template":
|
||||
case "select_player":
|
||||
case "select_template":
|
||||
return playerDominions(sender);
|
||||
}
|
||||
}
|
||||
if (args.length == 4) {
|
||||
switch (args[1]) {
|
||||
case "add":
|
||||
case "remove":
|
||||
case "set_flag":
|
||||
case "apply_template":
|
||||
case "setting":
|
||||
case "select_template":
|
||||
case "select_player":
|
||||
return playerNames();
|
||||
case "list":
|
||||
return Collections.singletonList("页码(可选)");
|
||||
}
|
||||
}
|
||||
if (args.length == 5) {
|
||||
switch (args[1]) {
|
||||
case "set_flag":
|
||||
return playerPrivileges();
|
||||
case "apply_template":
|
||||
return allTemplates(sender);
|
||||
case "setting":
|
||||
case "select_template":
|
||||
return Collections.singletonList("页码(可选)");
|
||||
}
|
||||
}
|
||||
if (args.length == 6) {
|
||||
switch (args[1]) {
|
||||
case "set_flag":
|
||||
return boolOptions();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,95 +0,0 @@
|
|||
package cn.lunadeer.dominion.commands;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.tuis.MigrateList;
|
||||
import cn.lunadeer.dominion.utils.ResMigration;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
|
||||
public class Migration {
|
||||
|
||||
public static void migrate(CommandSender sender, String[] args) {
|
||||
try {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
|
||||
if (!Dominion.config.getResidenceMigration()) {
|
||||
Notification.error(sender, "Residence 迁移功能没有开启");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.length < 2) {
|
||||
Notification.error(sender, "用法: /dominion migrate <res领地名称>");
|
||||
return;
|
||||
}
|
||||
String resName = args[1];
|
||||
List<ResMigration.ResidenceNode> res_data = Cache.instance.getResidenceData(player.getUniqueId());
|
||||
if (res_data == null) {
|
||||
Notification.error(sender, "你没有可迁移的数据");
|
||||
return;
|
||||
}
|
||||
ResMigration.ResidenceNode resNode = res_data.stream().filter(node -> node.name.equals(resName)).findFirst().orElse(null);
|
||||
if (resNode == null) {
|
||||
Notification.error(sender, "未找到指定的 Residence 领地");
|
||||
return;
|
||||
}
|
||||
if (!resNode.owner.equals(player.getUniqueId())) {
|
||||
Notification.error(sender, "你不是该领地的所有者,无法迁移此领地");
|
||||
return;
|
||||
}
|
||||
create(player, resNode, "");
|
||||
if (args.length == 3 ) {
|
||||
int parentId = Integer.parseInt(args[2]);
|
||||
String[] newArgs = new String[2];
|
||||
newArgs[0] = "migrate_list";
|
||||
newArgs[1] = String.valueOf(parentId);
|
||||
MigrateList.show(sender, newArgs);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, "迁移失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private static void create(Player player, ResMigration.ResidenceNode node, String parentName) {
|
||||
BukkitPlayerOperator operator = new BukkitPlayerOperator(player);
|
||||
operator.getResponse().thenAccept(result -> {
|
||||
if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.SUCCESS)) {
|
||||
DominionDTO dominion = DominionDTO.select(node.name);
|
||||
if (dominion == null) {
|
||||
return;
|
||||
}
|
||||
dominion.setTpLocation(node.tpLoc)
|
||||
.setJoinMessage(node.joinMessage)
|
||||
.setLeaveMessage(node.leaveMessage);
|
||||
for (String msg : result.getMessages()) {
|
||||
Notification.info(player, msg);
|
||||
}
|
||||
Notification.info(player, "领地 " + node.name + " 已从 Residence 迁移至 Dominion");
|
||||
if (node.children != null) {
|
||||
for (ResMigration.ResidenceNode child : node.children) {
|
||||
create(player, child, node.name);
|
||||
}
|
||||
}
|
||||
} else if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.WARNING)) {
|
||||
for (String msg : result.getMessages()) {
|
||||
Notification.warn(player, msg);
|
||||
}
|
||||
} else {
|
||||
for (String msg : result.getMessages()) {
|
||||
Notification.error(player, msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
DominionController.create(operator, node.name, node.loc1, node.loc2, parentName, true);
|
||||
}
|
||||
}
|
|
@ -28,14 +28,9 @@ public class Operator {
|
|||
});
|
||||
Scheduler.runTaskAsync(() -> {
|
||||
Notification.info(sender, "正在从数据库重新加载玩家权限缓存...");
|
||||
Cache.instance.loadMembers();
|
||||
Cache.instance.loadPlayerPrivileges();
|
||||
Notification.info(sender, "玩家权限缓存已重新加载");
|
||||
});
|
||||
Scheduler.runTaskAsync(() -> {
|
||||
Notification.info(sender, "正在从数据库重新加载权限组缓存...");
|
||||
Cache.instance.loadGroups();
|
||||
Notification.info(sender, "权限组缓存已重新加载");
|
||||
});
|
||||
}
|
||||
|
||||
public static void exportMca(CommandSender sender, String[] args) {
|
||||
|
|
|
@ -0,0 +1,128 @@
|
|||
package cn.lunadeer.dominion.commands;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.PrivilegeController;
|
||||
import cn.lunadeer.dominion.tuis.DominionPrivilegeList;
|
||||
import cn.lunadeer.dominion.tuis.PrivilegeInfo;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.controllers.PrivilegeController.*;
|
||||
|
||||
public class PlayerPrivilege {
|
||||
|
||||
/**
|
||||
* 创建玩家特权
|
||||
* /dominion create_privilege <玩家名称> [领地名称]
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void createPlayerPrivilege(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
if (args.length != 2 && args.length != 3 && args.length != 4) {
|
||||
Notification.error(sender, "用法: /dominion create_privilege <玩家名称> [领地名称]");
|
||||
return;
|
||||
}
|
||||
if (args.length == 2) {
|
||||
createPrivilege(operator, args[1]);
|
||||
} else {
|
||||
createPrivilege(operator, args[1], args[2]);
|
||||
}
|
||||
if (args.length == 4) {
|
||||
String[] newArgs = new String[2];
|
||||
newArgs[0] = "privilege_list";
|
||||
newArgs[1] = args[2];
|
||||
DominionPrivilegeList.show(sender, newArgs);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置玩家权限
|
||||
* /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void setPlayerPrivilege(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
if (args.length == 4) {
|
||||
setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]));
|
||||
} else if (args.length == 5) {
|
||||
setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]), args[4]);
|
||||
} else if (args.length == 6) {
|
||||
setPrivilege(operator, args[1], args[2], Boolean.parseBoolean(args[3]), args[4]);
|
||||
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);
|
||||
} else {
|
||||
Notification.error(sender, "用法: /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置玩家权限
|
||||
* /dominion clear_privilege <玩家名称> [领地名称]
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void clearPlayerPrivilege(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
if (args.length != 2 && args.length != 3 && args.length != 4) {
|
||||
Notification.error(sender, "用法: /dominion clear_privilege <玩家名称> [领地名称]");
|
||||
return;
|
||||
}
|
||||
if (args.length == 2) {
|
||||
clearPrivilege(operator, args[1]);
|
||||
} else {
|
||||
clearPrivilege(operator, args[1], args[2]);
|
||||
}
|
||||
if (args.length == 4) {
|
||||
String[] newArgs = new String[3];
|
||||
newArgs[0] = "privilege_list";
|
||||
newArgs[1] = args[2];
|
||||
DominionPrivilegeList.show(sender, newArgs);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用权限模板
|
||||
* /dominion apply_template <玩家名称> <领地名称> <模板名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void applyTemplate(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
if (args.length < 4) {
|
||||
Notification.error(sender, "用法: /dominion apply_template <玩家名称> <领地名称> <模板名称>");
|
||||
return;
|
||||
}
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String playerName = args[1];
|
||||
String dominionName = args[2];
|
||||
String templateName = args[3];
|
||||
PrivilegeController.applyTemplate(operator, dominionName, playerName, templateName);
|
||||
if (args.length == 5) {
|
||||
String[] newArgs = new String[3];
|
||||
newArgs[0] = "privilege_list";
|
||||
newArgs[1] = dominionName;
|
||||
newArgs[2] = args[4];
|
||||
DominionPrivilegeList.show(sender, newArgs);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
package cn.lunadeer.dominion.commands;
|
||||
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.tuis.SysConfig;
|
||||
import cn.lunadeer.dominion.tuis.DominionConfig;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
|
@ -67,9 +67,6 @@ public class SetConfig {
|
|||
case "economy_refund":
|
||||
setEconomyRefund(sender, args);
|
||||
break;
|
||||
case "residence_migration":
|
||||
setResidenceMigration(sender, args);
|
||||
break;
|
||||
default:
|
||||
Notification.error(sender, "未知参数");
|
||||
}
|
||||
|
@ -81,7 +78,7 @@ public class SetConfig {
|
|||
String[] newArgs = new String[2];
|
||||
newArgs[0] = "config";
|
||||
newArgs[1] = String.valueOf(page);
|
||||
SysConfig.show(sender, newArgs);
|
||||
DominionConfig.show(sender, newArgs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -253,10 +250,4 @@ public class SetConfig {
|
|||
Dominion.config.setEconomyRefund(economyRefund);
|
||||
}
|
||||
}
|
||||
|
||||
private static void setResidenceMigration(CommandSender sender, String[] args) {
|
||||
boolean residenceMigration = Boolean.parseBoolean(args[2]);
|
||||
Dominion.config.setResidenceMigration(residenceMigration);
|
||||
refreshPageOrNot(sender, args);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,150 +2,98 @@ package cn.lunadeer.dominion.commands;
|
|||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.TemplateController;
|
||||
import cn.lunadeer.dominion.tuis.template.TemplateList;
|
||||
import cn.lunadeer.dominion.tuis.template.TemplateSetting;
|
||||
import cn.lunadeer.dominion.tuis.TemplateList;
|
||||
import cn.lunadeer.dominion.tuis.TemplateManage;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.Commands.boolOptions;
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.commands.Helper.allTemplates;
|
||||
import static cn.lunadeer.dominion.commands.Helper.playerPrivileges;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||
|
||||
public class Template {
|
||||
|
||||
/**
|
||||
* 创建权限模板
|
||||
* /dominion template create <模板名称> [页码]
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void createTemplate(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 3) {
|
||||
Notification.error(sender, "用法: /dominion template create <模板名称>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
TemplateController.createTemplate(operator, args[2]);
|
||||
TemplateList.show(sender);
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除权限模板
|
||||
* /dominion template delete <模板名称> [页码]
|
||||
* /dominion template_delete <模板名称> [页码]
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void deleteTemplate(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 3) {
|
||||
Notification.error(sender, "用法: /dominion template delete <模板名称>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
TemplateController.deleteTemplate(operator, args[2]);
|
||||
TemplateList.show(sender, getPage(args, 3));
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
if (args.length < 2) {
|
||||
Notification.error(sender, "用法: /dominion template_delete <模板名称>");
|
||||
return;
|
||||
}
|
||||
TemplateController.deleteTemplate(operator, args[1]);
|
||||
String[] newArgs = new String[2];
|
||||
newArgs[0] = "template_list";
|
||||
if (args.length == 3) {
|
||||
newArgs[1] = args[2];
|
||||
} else {
|
||||
newArgs[1] = "1";
|
||||
}
|
||||
TemplateList.show(sender, newArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建权限模板
|
||||
* /dominion template_create <模板名称> [页码]
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void createTemplate(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
if (args.length < 2) {
|
||||
Notification.error(sender, "用法: /dominion template_create <模板名称>");
|
||||
return;
|
||||
}
|
||||
TemplateController.createTemplate(operator, args[1]);
|
||||
String[] newArgs = new String[2];
|
||||
newArgs[0] = "template_list";
|
||||
newArgs[1] = "1";
|
||||
TemplateList.show(sender, newArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑模板
|
||||
* /dominion template set_flag <模板名称> <权限名称> <true/false> [页码]
|
||||
* /dominion template_set_flag <模板名称> <权限名称> <true/false> [页码]
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void setTemplateFlag(CommandSender sender, String[] args) {
|
||||
try {
|
||||
if (args.length < 5) {
|
||||
Notification.error(sender, "用法: /dominion template set_flag <模板名称> <权限名称> <true/false>");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||
String templateName = args[2];
|
||||
String flagName = args[3];
|
||||
boolean value = Boolean.parseBoolean(args[4]);
|
||||
TemplateController.setTemplateFlag(operator, templateName, flagName, value);
|
||||
TemplateSetting.show(sender, templateName, getPage(args, 5));
|
||||
} catch (Exception e) {
|
||||
Notification.error(sender, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
|
||||
switch (args[1]) {
|
||||
case "list":
|
||||
TemplateList.show(sender, args);
|
||||
break;
|
||||
case "setting":
|
||||
TemplateSetting.show(sender, args);
|
||||
break;
|
||||
case "delete":
|
||||
Template.deleteTemplate(sender, args);
|
||||
break;
|
||||
case "create":
|
||||
Template.createTemplate(sender, args);
|
||||
break;
|
||||
case "set_flag":
|
||||
Template.setTemplateFlag(sender, args);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static @Nullable List<String> handleTab(@NotNull CommandSender sender, @NotNull String[] args) {
|
||||
if (args.length == 2) {
|
||||
return Arrays.asList("list", "setting", "delete", "create", "set_flag");
|
||||
}
|
||||
if (args.length == 3) {
|
||||
switch (args[1]) {
|
||||
case "create":
|
||||
return Collections.singletonList("输入模板名称");
|
||||
case "delete":
|
||||
case "set_flag":
|
||||
case "setting":
|
||||
return allTemplates(sender);
|
||||
case "list":
|
||||
return Collections.singletonList("页码(可选)");
|
||||
}
|
||||
}
|
||||
if (args.length == 4) {
|
||||
switch (args[1]) {
|
||||
case "set_flag":
|
||||
return playerPrivileges();
|
||||
case "setting":
|
||||
return Collections.singletonList("页码(可选)");
|
||||
if (args.length < 4) {
|
||||
Notification.error(sender, "用法: /dominion template_set_flag <模板名称> <权限名称> <true/false>");
|
||||
return;
|
||||
}
|
||||
boolean value;
|
||||
if (args[3].equalsIgnoreCase("true")) {
|
||||
value = true;
|
||||
} else if (args[3].equalsIgnoreCase("false")) {
|
||||
value = false;
|
||||
} else {
|
||||
Notification.error(sender, "权限值必须是true或false");
|
||||
return;
|
||||
}
|
||||
TemplateController.setTemplateFlag(operator, args[1], args[2], value);
|
||||
String[] newArgs = new String[3];
|
||||
newArgs[0] = "template_manage";
|
||||
newArgs[1] = args[1];
|
||||
if (args.length == 5) {
|
||||
switch (args[1]) {
|
||||
case "set_flag":
|
||||
return boolOptions();
|
||||
newArgs[2] = args[4];
|
||||
} else {
|
||||
newArgs[2] = "1";
|
||||
}
|
||||
}
|
||||
return null;
|
||||
TemplateManage.show(sender, newArgs);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package cn.lunadeer.dominion.controllers;
|
|||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import org.bukkit.Location;
|
||||
|
||||
public class Apis {
|
||||
|
@ -15,7 +15,7 @@ public class Apis {
|
|||
public static boolean noAuthToChangeFlags(AbstractOperator player, DominionDTO dominion) {
|
||||
if (player.isOp()) return false;
|
||||
if (!dominion.getOwner().equals(player.getUniqueId())) {
|
||||
MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId());
|
||||
PlayerPrivilegeDTO privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId());
|
||||
if (privileges == null || !privileges.getAdmin()) {
|
||||
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不是领地 %s 的拥有者或管理员,无权修改权限", dominion.getName()));
|
||||
return true;
|
||||
|
|
|
@ -12,9 +12,7 @@ import org.bukkit.Location;
|
|||
import org.bukkit.World;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
@ -40,6 +38,7 @@ public class DominionController {
|
|||
* @param name 领地名称
|
||||
* @param loc1 位置1
|
||||
* @param loc2 位置2
|
||||
* @return 创建的领地
|
||||
*/
|
||||
public static void create(AbstractOperator operator, String name, Location loc1, Location loc2) {
|
||||
DominionDTO parent = getPlayerCurrentDominion(operator);
|
||||
|
@ -58,34 +57,18 @@ public class DominionController {
|
|||
* @param loc1 位置1
|
||||
* @param loc2 位置2
|
||||
* @param parent_dominion_name 父领地名称
|
||||
* @return 创建的领地
|
||||
*/
|
||||
public static void create(AbstractOperator operator, String name,
|
||||
Location loc1, Location loc2,
|
||||
String parent_dominion_name) {
|
||||
create(operator, name, loc1, loc2, parent_dominion_name, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建子领地
|
||||
*
|
||||
* @param operator 拥有者
|
||||
* @param name 领地名称
|
||||
* @param loc1 位置1
|
||||
* @param loc2 位置2
|
||||
* @param parent_dominion_name 父领地名称(留空表示为根领地)
|
||||
* @param skipEco 是否跳过经济检查
|
||||
*/
|
||||
public static void create(AbstractOperator operator, String name,
|
||||
Location loc1, Location loc2,
|
||||
@NotNull String parent_dominion_name, boolean skipEco) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建领地失败");
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功创建领地 %s", name);
|
||||
if (name.isEmpty()) {
|
||||
operator.setResponse(FAIL.addMessage("领地名称不能为空"));
|
||||
return;
|
||||
}
|
||||
if (name.contains(" ") || name.contains(".")) {
|
||||
operator.setResponse(FAIL.addMessage("领地名称不能包含空格或点"));
|
||||
if (name.contains(" ")) {
|
||||
operator.setResponse(FAIL.addMessage("领地名称不能包含空格"));
|
||||
return;
|
||||
}
|
||||
if (DominionDTO.select(name) != null) {
|
||||
|
@ -112,8 +95,12 @@ public class DominionController {
|
|||
loc2.getBlockX(), loc2.getBlockY(), loc2.getBlockZ())) {
|
||||
return;
|
||||
}
|
||||
DominionDTO dominion = new DominionDTO(operator.getUniqueId(), name, loc1.getWorld().getName(),
|
||||
(int) Math.min(loc1.getX(), loc2.getX()), (int) Math.min(loc1.getY(), loc2.getY()),
|
||||
(int) Math.min(loc1.getZ(), loc2.getZ()), (int) Math.max(loc1.getX(), loc2.getX()),
|
||||
(int) Math.max(loc1.getY(), loc2.getY()), (int) Math.max(loc1.getZ(), loc2.getZ()));
|
||||
DominionDTO parent_dominion;
|
||||
if (parent_dominion_name.isEmpty() || parent_dominion_name.equals("root")) {
|
||||
if (parent_dominion_name.isEmpty()) {
|
||||
parent_dominion = DominionDTO.select(-1);
|
||||
} else {
|
||||
parent_dominion = DominionDTO.select(parent_dominion_name);
|
||||
|
@ -132,11 +119,6 @@ public class DominionController {
|
|||
return;
|
||||
}
|
||||
}
|
||||
// 创建 dominion (此步骤不会写入数据)
|
||||
DominionDTO dominion = DominionDTO.create(operator.getUniqueId(), name, loc1.getWorld().getName(),
|
||||
(int) Math.min(loc1.getX(), loc2.getX()), (int) Math.min(loc1.getY(), loc2.getY()),
|
||||
(int) Math.min(loc1.getZ(), loc2.getZ()), (int) Math.max(loc1.getX(), loc2.getX()),
|
||||
(int) Math.max(loc1.getY(), loc2.getY()), (int) Math.max(loc1.getZ(), loc2.getZ()), parent_dominion);
|
||||
// 如果parent_dominion不为-1 检查是否在同一世界
|
||||
if (parent_dominion.getId() != -1 && !parent_dominion.getWorld().equals(dominion.getWorld())) {
|
||||
operator.setResponse(FAIL.addMessage("父领地与子领地不在同一世界。"));
|
||||
|
@ -161,16 +143,35 @@ public class DominionController {
|
|||
}
|
||||
}
|
||||
// 检查经济
|
||||
if (!skipEco)
|
||||
handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? dominion.getSquare() : dominion.getVolume(), true, FAIL, SUCCESS);
|
||||
if (Dominion.config.getEconomyEnable()) {
|
||||
if (!VaultConnect.instance.economyAvailable()) {
|
||||
operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。"));
|
||||
return;
|
||||
}
|
||||
int count;
|
||||
if (Dominion.config.getEconomyOnlyXZ()) {
|
||||
count = dominion.getSquare();
|
||||
} else {
|
||||
count = dominion.getVolume();
|
||||
}
|
||||
float price = count * Dominion.config.getEconomyPrice();
|
||||
if (VaultConnect.instance.getBalance(operator.getPlayer()) < price) {
|
||||
operator.setResponse(FAIL.addMessage("你的余额不足,创建此领地需要 %.2f %s", price, VaultConnect.instance.currencyNamePlural()));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "已扣除 %.2f %s", price, VaultConnect.instance.currencyNamePlural()));
|
||||
VaultConnect.instance.withdrawPlayer(operator.getPlayer(), price);
|
||||
}
|
||||
dominion = DominionDTO.insert(dominion);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("创建领地失败,数据库错误,请联系管理员"));
|
||||
return;
|
||||
}
|
||||
// 显示粒子效果
|
||||
handleParticle(operator, dominion.getWorld(), dominion.getX1(), dominion.getY1(), dominion.getZ1(), dominion.getX2(), dominion.getY2(), dominion.getZ2(), FAIL);
|
||||
operator.setResponse(SUCCESS);
|
||||
if (operator instanceof BukkitPlayerOperator) {
|
||||
ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(), loc1, loc2);
|
||||
}
|
||||
dominion.setParentDomId(parent_dominion.getId());
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功创建领地 %s", name));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -180,6 +181,7 @@ public class DominionController {
|
|||
*
|
||||
* @param operator 操作者
|
||||
* @param size 扩展的大小
|
||||
* @return 扩展后的领地
|
||||
*/
|
||||
public static void expand(AbstractOperator operator, Integer size) {
|
||||
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
||||
|
@ -196,15 +198,52 @@ public class DominionController {
|
|||
* @param operator 操作者
|
||||
* @param size 扩展的大小
|
||||
* @param dominion_name 领地名称
|
||||
* @return 扩展后的领地
|
||||
*/
|
||||
public static void expand(AbstractOperator operator, Integer size, String dominion_name) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "扩展领地失败");
|
||||
DominionDTO dominion = expandContractPreCheck(operator, getExistDomAndIsOwner(operator, dominion_name), FAIL);
|
||||
Location location = operator.getLocation();
|
||||
BlockFace face = operator.getDirection();
|
||||
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
||||
if (dominion == null) {
|
||||
return;
|
||||
}
|
||||
int[] newCords = expandContractSizeChange(operator, dominion, true, size, FAIL);
|
||||
if (newCords == null) {
|
||||
if (location != null) {
|
||||
if (!location.getWorld().getName().equals(dominion.getWorld())) {
|
||||
operator.setResponse(FAIL.addMessage("禁止跨世界操作"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
Integer x1 = dominion.getX1();
|
||||
Integer y1 = dominion.getY1();
|
||||
Integer z1 = dominion.getZ1();
|
||||
Integer x2 = dominion.getX2();
|
||||
Integer y2 = dominion.getY2();
|
||||
Integer z2 = dominion.getZ2();
|
||||
switch (face) {
|
||||
case NORTH:
|
||||
z1 -= size;
|
||||
break;
|
||||
case SOUTH:
|
||||
z2 += size;
|
||||
break;
|
||||
case WEST:
|
||||
x1 -= size;
|
||||
break;
|
||||
case EAST:
|
||||
x2 += size;
|
||||
break;
|
||||
case UP:
|
||||
y2 += size;
|
||||
break;
|
||||
case DOWN:
|
||||
y1 -= size;
|
||||
break;
|
||||
default:
|
||||
operator.setResponse(FAIL.addMessage("无效的方向"));
|
||||
return;
|
||||
}
|
||||
if (sizeNotValid(operator, x1, y1, z1, x2, y2, z2)) {
|
||||
return;
|
||||
}
|
||||
// 校验是否超出父领地范围
|
||||
|
@ -213,14 +252,14 @@ public class DominionController {
|
|||
operator.setResponse(FAIL.addMessage("父领地丢失"));
|
||||
return;
|
||||
}
|
||||
if (!isContained(newCords, parent_dominion)) {
|
||||
if (!isContained(x1, y1, z1, x2, y2, z2, parent_dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("超出父领地 %s 范围", parent_dominion.getName()));
|
||||
return;
|
||||
}
|
||||
// 获取同世界下的所有同级领地
|
||||
List<DominionDTO> exist_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getParentDomId());
|
||||
for (DominionDTO exist_dominion : exist_dominions) {
|
||||
if (isIntersect(exist_dominion, newCords)) {
|
||||
if (isIntersect(exist_dominion, x1, y1, z1, x2, y2, z2)) {
|
||||
// 如果是自己,跳过
|
||||
if (exist_dominion.getId().equals(dominion.getId())) continue;
|
||||
operator.setResponse(FAIL.addMessage("与领地 %s 冲突", exist_dominion.getName()));
|
||||
|
@ -229,11 +268,32 @@ public class DominionController {
|
|||
}
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功扩展领地 %s %d格", dominion_name, size);
|
||||
// 检查经济
|
||||
handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? sqr(newCords) - dominion.getSquare() : vol(newCords) - dominion.getVolume()
|
||||
, false, FAIL, SUCCESS);
|
||||
// 显示粒子效果
|
||||
handleParticle(operator, dominion.getWorld(), newCords, FAIL);
|
||||
dominion.setXYZ(newCords);
|
||||
if (Dominion.config.getEconomyEnable()) {
|
||||
if (!VaultConnect.instance.economyAvailable()) {
|
||||
operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。"));
|
||||
return;
|
||||
}
|
||||
int count;
|
||||
if (Dominion.config.getEconomyOnlyXZ()) {
|
||||
count = (x2 - x1 + 1) * (z2 - z1 + 1) - dominion.getSquare();
|
||||
} else {
|
||||
count = (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1) - dominion.getVolume();
|
||||
}
|
||||
float price = count * Dominion.config.getEconomyPrice();
|
||||
if (VaultConnect.instance.getBalance(operator.getPlayer()) < price) {
|
||||
operator.setResponse(FAIL.addMessage("你的余额不足,扩展此领地需要 %.2f %s", price, VaultConnect.instance.currencyNamePlural()));
|
||||
return;
|
||||
}
|
||||
SUCCESS.addMessage("已扣除 %.2f %s", price, VaultConnect.instance.currencyNamePlural());
|
||||
VaultConnect.instance.withdrawPlayer(operator.getPlayer(), price);
|
||||
}
|
||||
if (operator instanceof BukkitPlayerOperator) {
|
||||
World world = Dominion.instance.getServer().getWorld(dominion.getWorld());
|
||||
ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(),
|
||||
new Location(world, x1, y1, z1),
|
||||
new Location(world, x2, y2, z2));
|
||||
}
|
||||
dominion.setXYZ(x1, y1, z1, x2, y2, z2);
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
|
@ -244,6 +304,7 @@ public class DominionController {
|
|||
*
|
||||
* @param operator 操作者
|
||||
* @param size 缩小的大小
|
||||
* @return 缩小后的领地
|
||||
*/
|
||||
public static void contract(AbstractOperator operator, Integer size) {
|
||||
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
||||
|
@ -260,51 +321,94 @@ public class DominionController {
|
|||
* @param operator 操作者
|
||||
* @param size 缩小的大小
|
||||
* @param dominion_name 领地名称
|
||||
* @return 缩小后的领地
|
||||
*/
|
||||
public static void contract(AbstractOperator operator, Integer size, String dominion_name) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "缩小领地失败");
|
||||
DominionDTO dominion = expandContractPreCheck(operator, getExistDomAndIsOwner(operator, dominion_name), FAIL);
|
||||
Location location = operator.getLocation();
|
||||
BlockFace face = operator.getDirection();
|
||||
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
||||
if (dominion == null) {
|
||||
return;
|
||||
}
|
||||
int[] newCords = expandContractSizeChange(operator, dominion, false, size, FAIL);
|
||||
if (newCords == null) {
|
||||
if (location != null) {
|
||||
if (!location.getWorld().getName().equals(dominion.getWorld())) {
|
||||
operator.setResponse(FAIL.addMessage("禁止跨世界操作"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
Integer x1 = dominion.getX1();
|
||||
Integer y1 = dominion.getY1();
|
||||
Integer z1 = dominion.getZ1();
|
||||
Integer x2 = dominion.getX2();
|
||||
Integer y2 = dominion.getY2();
|
||||
Integer z2 = dominion.getZ2();
|
||||
switch (face) {
|
||||
case SOUTH:
|
||||
z2 -= size;
|
||||
break;
|
||||
case NORTH:
|
||||
z1 += size;
|
||||
break;
|
||||
case EAST:
|
||||
x2 -= size;
|
||||
break;
|
||||
case WEST:
|
||||
x1 += size;
|
||||
break;
|
||||
case UP:
|
||||
y2 -= size;
|
||||
break;
|
||||
case DOWN:
|
||||
y1 += size;
|
||||
break;
|
||||
default:
|
||||
operator.setResponse(FAIL.addMessage("无效的方向"));
|
||||
return;
|
||||
}
|
||||
// 校验第二组坐标是否小于第一组坐标
|
||||
if (x1 >= x2 || y1 >= y2 || z1 >= z2) {
|
||||
operator.setResponse(FAIL.addMessage("缩小后的领地大小无效"));
|
||||
return;
|
||||
}
|
||||
if (sizeNotValid(operator, x1, y1, z1, x2, y2, z2)) {
|
||||
return;
|
||||
}
|
||||
// 获取所有的子领地
|
||||
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId());
|
||||
for (DominionDTO sub_dominion : sub_dominions) {
|
||||
if (!isContained(sub_dominion, newCords)) {
|
||||
if (!isContained(sub_dominion, x1, y1, z1, x2, y2, z2)) {
|
||||
operator.setResponse(FAIL.addMessage("缩小后的领地无法包含子领地 %s", sub_dominion.getName()));
|
||||
return;
|
||||
}
|
||||
}
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功缩小领地 %s %d格", dominion_name, size);
|
||||
// 退还经济
|
||||
handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? dominion.getSquare() - sqr(newCords) : dominion.getVolume() - vol(newCords)
|
||||
, false, FAIL, SUCCESS);
|
||||
// 显示粒子效果
|
||||
handleParticle(operator, dominion.getWorld(), newCords, FAIL);
|
||||
dominion.setXYZ(newCords);
|
||||
if (Dominion.config.getEconomyEnable()) {
|
||||
if (!VaultConnect.instance.economyAvailable()) {
|
||||
operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。"));
|
||||
return;
|
||||
}
|
||||
int count;
|
||||
if (Dominion.config.getEconomyOnlyXZ()) {
|
||||
count = dominion.getSquare() - (x2 - x1 + 1) * (z2 - z1 + 1);
|
||||
} else {
|
||||
count = dominion.getVolume() - (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1);
|
||||
}
|
||||
float refund = count * Dominion.config.getEconomyPrice() * Dominion.config.getEconomyRefund();
|
||||
VaultConnect.instance.depositPlayer(operator.getPlayer(), refund);
|
||||
SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural());
|
||||
}
|
||||
if (operator instanceof BukkitPlayerOperator) {
|
||||
World world = Dominion.instance.getServer().getWorld(dominion.getWorld());
|
||||
ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(),
|
||||
new Location(world, x1, y1, z1),
|
||||
new Location(world, x2, y2, z2));
|
||||
}
|
||||
dominion.setXYZ(x1, y1, z1, x2, y2, z2);
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
private static int vol(int x1, int y1, int z1, int x2, int y2, int z2) {
|
||||
return (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1);
|
||||
}
|
||||
|
||||
private static int vol(int[] cords) {
|
||||
return vol(cords[0], cords[1], cords[2], cords[3], cords[4], cords[5]);
|
||||
}
|
||||
|
||||
private static int sqr(int x1, int z1, int x2, int z2) {
|
||||
return (x2 - x1 + 1) * (z2 - z1 + 1);
|
||||
}
|
||||
|
||||
private static int sqr(int[] cords) {
|
||||
return sqr(cords[0], cords[2], cords[3], cords[5]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除领地 会同时删除其所有子领地
|
||||
*
|
||||
|
@ -313,8 +417,6 @@ public class DominionController {
|
|||
* @param force 是否强制删除
|
||||
*/
|
||||
public static void delete(AbstractOperator operator, String dominion_name, boolean force) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "删除领地失败");
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "领地 %s 及其所有子领地已删除", dominion_name);
|
||||
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
||||
if (dominion == null) {
|
||||
return;
|
||||
|
@ -322,7 +424,14 @@ public class DominionController {
|
|||
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
|
||||
if (!force) {
|
||||
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, "删除领地 %s 会同时删除其所有子领地,是否继续?", dominion_name);
|
||||
showSubNamesWarning(sub_dominions, WARNING);
|
||||
String sub_names = "";
|
||||
for (DominionDTO sub_dominion : sub_dominions) {
|
||||
sub_names = sub_dominion.getName() + ", ";
|
||||
}
|
||||
if (sub_dominions.size() > 0) {
|
||||
sub_names = sub_names.substring(0, sub_names.length() - 2);
|
||||
WARNING.addMessage("(子领地:%s)", sub_names);
|
||||
}
|
||||
if (operator instanceof BukkitPlayerOperator) {
|
||||
Notification.warn(operator.getPlayer(), "输入 /dominion delete %s force 确认删除", dominion_name);
|
||||
}
|
||||
|
@ -330,7 +439,13 @@ public class DominionController {
|
|||
return;
|
||||
}
|
||||
DominionDTO.delete(dominion);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "领地 %s 及其所有子领地已删除", dominion_name);
|
||||
// 退还经济
|
||||
if (Dominion.config.getEconomyEnable()) {
|
||||
if (!VaultConnect.instance.economyAvailable()) {
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "退款失败,没有可用的经济插件系统,请联系服主。"));
|
||||
return;
|
||||
}
|
||||
int count = 0;
|
||||
if (Dominion.config.getEconomyOnlyXZ()) {
|
||||
for (DominionDTO sub_dominion : sub_dominions) {
|
||||
|
@ -341,7 +456,10 @@ public class DominionController {
|
|||
count += sub_dominion.getVolume();
|
||||
}
|
||||
}
|
||||
handleEconomy(operator, count, false, FAIL, SUCCESS);
|
||||
float refund = count * Dominion.config.getEconomyPrice() * Dominion.config.getEconomyRefund();
|
||||
VaultConnect.instance.depositPlayer(operator.getPlayer(), refund);
|
||||
SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural());
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
|
@ -425,7 +543,6 @@ public class DominionController {
|
|||
* @param dominion_name 领地名称
|
||||
*/
|
||||
public static void setTpLocation(AbstractOperator operator, int x, int y, int z, String dominion_name) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置领地传送点失败");
|
||||
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在", dominion_name));
|
||||
|
@ -462,8 +579,8 @@ public class DominionController {
|
|||
operator.setResponse(FAIL.addMessage("新名称不能为空"));
|
||||
return;
|
||||
}
|
||||
if (new_name.contains(" ") || new_name.contains(".")) {
|
||||
operator.setResponse(FAIL.addMessage("领地名称不能包含空格或点"));
|
||||
if (new_name.contains(" ")) {
|
||||
operator.setResponse(FAIL.addMessage("领地名称不能包含空格"));
|
||||
return;
|
||||
}
|
||||
if (Objects.equals(old_name, new_name)) {
|
||||
|
@ -517,7 +634,14 @@ public class DominionController {
|
|||
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
|
||||
if (!force) {
|
||||
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, "转让领地 %s 给 %s 会同时转让其所有子领地,是否继续?", dom_name, player_name);
|
||||
showSubNamesWarning(sub_dominions, WARNING);
|
||||
String sub_names = "";
|
||||
for (DominionDTO sub_dominion : sub_dominions) {
|
||||
sub_names = sub_dominion.getName() + ", ";
|
||||
}
|
||||
if (sub_dominions.size() > 0) {
|
||||
sub_names = sub_names.substring(0, sub_names.length() - 2);
|
||||
WARNING.addMessage("(子领地:%s)", sub_names);
|
||||
}
|
||||
if (operator instanceof BukkitPlayerOperator) {
|
||||
Notification.warn(operator.getPlayer(), "输入 /dominion give %s %s force 确认转让", dom_name, player_name);
|
||||
}
|
||||
|
@ -588,10 +712,6 @@ public class DominionController {
|
|||
a.getZ1() < z2 && a.getZ2() > z1;
|
||||
}
|
||||
|
||||
private static boolean isIntersect(DominionDTO a, int[] cord) {
|
||||
return isIntersect(a, cord[0], cord[1], cord[2], cord[3], cord[4], cord[5]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断 sub 是否完全被 parent 包裹
|
||||
*/
|
||||
|
@ -599,32 +719,24 @@ public class DominionController {
|
|||
if (parent.getId() == -1) {
|
||||
return true;
|
||||
}
|
||||
return isContained(sub.getX1(), sub.getY1(), sub.getZ1(), sub.getX2(), sub.getY2(), sub.getZ2(), parent.getX1(), parent.getY1(), parent.getZ1(), parent.getX2(), parent.getY2(), parent.getZ2());
|
||||
}
|
||||
|
||||
private static boolean isContained(int[] cords, DominionDTO parent) {
|
||||
return isContained(cords[0], cords[1], cords[2], cords[3], cords[4], cords[5], parent);
|
||||
}
|
||||
|
||||
private static boolean isContained(DominionDTO sub, int[] cords) {
|
||||
return isContained(sub, cords[0], cords[1], cords[2], cords[3], cords[4], cords[5]);
|
||||
return sub.getX1() >= parent.getX1() && sub.getX2() <= parent.getX2() &&
|
||||
sub.getY1() >= parent.getY1() && sub.getY2() <= parent.getY2() &&
|
||||
sub.getZ1() >= parent.getZ1() && sub.getZ2() <= parent.getZ2();
|
||||
}
|
||||
|
||||
private static boolean isContained(Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, DominionDTO parent) {
|
||||
if (parent.getId() == -1) {
|
||||
return true;
|
||||
}
|
||||
return isContained(x1, y1, z1, x2, y2, z2, parent.getX1(), parent.getY1(), parent.getZ1(), parent.getX2(), parent.getY2(), parent.getZ2());
|
||||
return x1 >= parent.getX1() && x2 <= parent.getX2() &&
|
||||
y1 >= parent.getY1() && y2 <= parent.getY2() &&
|
||||
z1 >= parent.getZ1() && z2 <= parent.getZ2();
|
||||
}
|
||||
|
||||
private static boolean isContained(DominionDTO sub, Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2) {
|
||||
return isContained(sub.getX1(), sub.getY1(), sub.getZ1(), sub.getX2(), sub.getY2(), sub.getZ2(), x1, y1, z1, x2, y2, z2);
|
||||
}
|
||||
|
||||
private static boolean isContained(int sub_x1, int sub_y1, int sub_z1, int sub_x2, int sub_y2, int sub_z2, int parent_x1, int parent_y1, int parent_z1, int parent_x2, int parent_y2, int parent_z2) {
|
||||
return sub_x1 >= parent_x1 && sub_x2 <= parent_x2 &&
|
||||
sub_y1 >= parent_y1 && sub_y2 <= parent_y2 &&
|
||||
sub_z1 >= parent_z1 && sub_z2 <= parent_z2;
|
||||
return sub.getX1() >= x1 && sub.getX2() <= x2 &&
|
||||
sub.getY1() >= y1 && sub.getY2() <= y2 &&
|
||||
sub.getZ1() >= z1 && sub.getZ2() <= z2;
|
||||
}
|
||||
|
||||
private static List<DominionDTO> getSubDominionsRecursive(DominionDTO dominion) {
|
||||
|
@ -637,10 +749,6 @@ public class DominionController {
|
|||
return sub_dominions;
|
||||
}
|
||||
|
||||
private static boolean sizeNotValid(AbstractOperator operator, int[] cords) {
|
||||
return sizeNotValid(operator, cords[0], cords[1], cords[2], cords[3], cords[4], cords[5]);
|
||||
}
|
||||
|
||||
private static boolean sizeNotValid(AbstractOperator operator, int x1, int y1, int z1, int x2, int y2, int z2) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "尺寸不合法");
|
||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||
|
@ -713,7 +821,7 @@ public class DominionController {
|
|||
level++;
|
||||
}
|
||||
if (level >= Dominion.config.getLimitDepth()) {
|
||||
operator.setResponse(FAIL.addMessage("子领地嵌套深度不能超过 %d", Dominion.config.getLimitDepth()));
|
||||
operator.setResponse(FAIL.addMessage("子领地嵌套深度不能超过 %s", Dominion.config.getLimitDepth()));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -747,150 +855,4 @@ public class DominionController {
|
|||
return dominion;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理经济系统
|
||||
*
|
||||
* @param operator 操作者
|
||||
* @param count 数量
|
||||
* @param paid 操作类型 true 为扣费 false 为退费
|
||||
* @param FAIL 失败消息
|
||||
* @param SUCCESS 成功消息
|
||||
*/
|
||||
private static void handleEconomy(AbstractOperator operator, Integer count, boolean paid, AbstractOperator.Result FAIL, AbstractOperator.Result SUCCESS) {
|
||||
if (Dominion.config.getEconomyEnable()) {
|
||||
if (!VaultConnect.instance.economyAvailable()) {
|
||||
operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。"));
|
||||
return;
|
||||
}
|
||||
float priceOrRefund = count * Dominion.config.getEconomyPrice();
|
||||
if (paid) {
|
||||
if (VaultConnect.instance.getBalance(operator.getPlayer()) < priceOrRefund) {
|
||||
operator.setResponse(FAIL.addMessage("你的余额不足,需要 %.2f %s", priceOrRefund, VaultConnect.instance.currencyNamePlural()));
|
||||
return;
|
||||
}
|
||||
SUCCESS.addMessage("已扣除 %.2f %s", priceOrRefund, VaultConnect.instance.currencyNamePlural());
|
||||
VaultConnect.instance.withdrawPlayer(operator.getPlayer(), priceOrRefund);
|
||||
} else {
|
||||
float refund = priceOrRefund * Dominion.config.getEconomyRefund();
|
||||
VaultConnect.instance.depositPlayer(operator.getPlayer(), refund);
|
||||
SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示粒子效果
|
||||
*
|
||||
* @param operator 操作者
|
||||
* @param worldName 世界名称
|
||||
* @param x1 x1
|
||||
* @param y1 y1
|
||||
* @param z1 z1
|
||||
* @param x2 x2
|
||||
* @param y2 y2
|
||||
* @param z2 z2
|
||||
* @param FAIL 失败消息
|
||||
*/
|
||||
private static void handleParticle(AbstractOperator operator, String worldName, Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, AbstractOperator.Result FAIL) {
|
||||
if (operator instanceof BukkitPlayerOperator) {
|
||||
World world = Dominion.instance.getServer().getWorld(worldName);
|
||||
if (world == null) {
|
||||
operator.setResponse(FAIL.addMessage("世界 %s 不存在", worldName));
|
||||
return;
|
||||
}
|
||||
ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(),
|
||||
new Location(world, x1, y1, z1),
|
||||
new Location(world, x2, y2, z2));
|
||||
}
|
||||
}
|
||||
|
||||
private static void handleParticle(AbstractOperator operator, String worldName, int[] cords, AbstractOperator.Result FAIL) {
|
||||
handleParticle(operator, worldName, cords[0], cords[1], cords[2], cords[3], cords[4], cords[5], FAIL);
|
||||
}
|
||||
|
||||
private static @Nullable DominionDTO expandContractPreCheck(AbstractOperator operator, @Nullable DominionDTO dominion, AbstractOperator.Result FAIL) {
|
||||
if (dominion == null) {
|
||||
return null;
|
||||
}
|
||||
if (operator.getLocation() == null) {
|
||||
operator.setResponse(FAIL.addMessage("无法获取你的位置"));
|
||||
return null;
|
||||
}
|
||||
if (!operator.getLocation().getWorld().getName().equals(dominion.getWorld())) {
|
||||
operator.setResponse(FAIL.addMessage("禁止跨世界操作"));
|
||||
return null;
|
||||
}
|
||||
if (!isInDominion(dominion, operator.getLocation())) {
|
||||
operator.setResponse(FAIL.addMessage("你不在领地 %s 内,无法执行此操作", dominion.getName()));
|
||||
return null;
|
||||
}
|
||||
return dominion;
|
||||
}
|
||||
|
||||
private static int[] expandContractSizeChange(AbstractOperator operator, @NotNull DominionDTO dominion, boolean expand, int size, AbstractOperator.Result FAIL) {
|
||||
BlockFace face = operator.getDirection();
|
||||
int[] result = new int[6];
|
||||
result[0] = dominion.getX1();
|
||||
result[1] = dominion.getY1();
|
||||
result[2] = dominion.getZ1();
|
||||
result[3] = dominion.getX2();
|
||||
result[4] = dominion.getY2();
|
||||
result[5] = dominion.getZ2();
|
||||
if (!expand) {
|
||||
size = size * -1;
|
||||
}
|
||||
switch (face) {
|
||||
case NORTH:
|
||||
result[2] -= size;
|
||||
break;
|
||||
case SOUTH:
|
||||
result[5] += size;
|
||||
break;
|
||||
case WEST:
|
||||
result[0] -= size;
|
||||
break;
|
||||
case EAST:
|
||||
result[3] += size;
|
||||
break;
|
||||
case UP:
|
||||
result[4] += size;
|
||||
break;
|
||||
case DOWN:
|
||||
result[1] -= size;
|
||||
break;
|
||||
default:
|
||||
operator.setResponse(FAIL.addMessage("无效的方向"));
|
||||
return null;
|
||||
}
|
||||
if (!expand) {
|
||||
// 校验第二组坐标是否小于第一组坐标
|
||||
if (result[0] > result[3] || result[1] > result[4] || result[2] > result[5]) {
|
||||
operator.setResponse(FAIL.addMessage("缩小后的领地大小无效"));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (sizeNotValid(operator, result)) {
|
||||
return null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 以警告形式打印所有子领地名称
|
||||
*
|
||||
* @param sub_dominions 子领地列表
|
||||
* @param WARNING 警告消息
|
||||
*/
|
||||
public static void showSubNamesWarning(List<DominionDTO> sub_dominions, AbstractOperator.Result WARNING) {
|
||||
String sub_names = "";
|
||||
for (DominionDTO sub_dominion : sub_dominions) {
|
||||
sub_names = sub_dominion.getName() + ", ";
|
||||
}
|
||||
if (sub_dominions.size() > 0) {
|
||||
sub_names = sub_names.substring(0, sub_names.length() - 2);
|
||||
WARNING.addMessage("(子领地:%s)", sub_names);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,218 +0,0 @@
|
|||
package cn.lunadeer.dominion.controllers;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.*;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
||||
import static cn.lunadeer.dominion.controllers.Apis.notOwner;
|
||||
|
||||
public class GroupController {
|
||||
|
||||
public static void createGroup(AbstractOperator operator, String domName, String groupName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建权限组 %s 失败", groupName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建权限组 %s 成功", groupName);
|
||||
if (groupName.contains(" ")) {
|
||||
operator.setResponse(FAIL.addMessage("权限组名称不能包含空格"));
|
||||
return;
|
||||
}
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法创建权限组", domName));
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group != null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 已存在名为 %s 的权限组", domName, groupName));
|
||||
return;
|
||||
}
|
||||
group = GroupDTO.create(groupName, dominion);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
public static void deleteGroup(AbstractOperator operator, String domName, String groupName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "删除权限组 %s 失败", groupName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "删除权限组 %s 成功", groupName);
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法删除权限组", domName));
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
||||
return;
|
||||
}
|
||||
group.delete();
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
public static void setGroupFlag(AbstractOperator operator, String domName, String groupName, String flag, boolean value) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置权限组 %s 的权限 %s 为 %s 失败", groupName, flag, value);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置权限组 %s 的权限 %s 为 %s 成功", groupName, flag, value);
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
if (noAuthToChangeFlags(operator, dominion)) {
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
||||
return;
|
||||
}
|
||||
if ((flag.equals("admin") || group.getAdmin()) && notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改管理员权限组权限", domName));
|
||||
return;
|
||||
}
|
||||
if (flag.equals("admin")) {
|
||||
group = group.setAdmin(value);
|
||||
} else {
|
||||
Flag f = Flag.getFlag(flag);
|
||||
if (f == null) {
|
||||
operator.setResponse(FAIL.addMessage("未知的权限 %s", flag));
|
||||
return;
|
||||
}
|
||||
group = group.setFlagValue(f, value);
|
||||
}
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
public static void renameGroup(AbstractOperator operator, String domName, String oldName, String newName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "重命名权限组 %s 为 %s 失败", oldName, newName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "重命名权限组 %s 为 %s 成功", oldName, newName);
|
||||
if (newName.contains(" ")) {
|
||||
operator.setResponse(FAIL.addMessage("权限组名称不能包含空格"));
|
||||
return;
|
||||
}
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法重命名权限组", domName));
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), oldName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, oldName));
|
||||
return;
|
||||
}
|
||||
group = group.setName(newName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
public static void addMember(AbstractOperator operator, String domName, String groupName, String playerName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "添加成员 %s 到权限组 %s 失败", playerName, groupName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "添加成员 %s 到权限组 %s 成功", playerName, groupName);
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
||||
return;
|
||||
}
|
||||
if (noAuthToChangeFlags(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你没有权限修改领地 %s 的权限组 %s 成员", domName, groupName));
|
||||
return;
|
||||
}
|
||||
if (group.getAdmin() && notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法添加成员到管理员权限组", domName));
|
||||
return;
|
||||
}
|
||||
PlayerDTO player = PlayerDTO.select(playerName);
|
||||
if (player == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName));
|
||||
return;
|
||||
}
|
||||
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员,无法直接加入权限组", playerName, domName));
|
||||
return;
|
||||
}
|
||||
if (Objects.equals(privilege.getGroupId(), group.getId())) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 已在权限组 %s 中", playerName, groupName));
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion) && privilege.getAdmin()) {
|
||||
operator.setResponse(FAIL.addMessage("%s 是管理员,你不是领地 %s 的拥有者,无法添加管理员到权限组", playerName, domName));
|
||||
return;
|
||||
}
|
||||
privilege = privilege.setGroupId(group.getId());
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
public static void removeMember(AbstractOperator operator, String domName, String groupName, String playerName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "从权限组 %s 移除成员 %s 失败", groupName, playerName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "从权限组 %s 移除成员 %s 成功", groupName, playerName);
|
||||
DominionDTO dominion = DominionDTO.select(domName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
||||
return;
|
||||
}
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||
if (group == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
||||
return;
|
||||
}
|
||||
if (noAuthToChangeFlags(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你没有权限移除领地 %s 的权限组 %s 成员", domName, groupName));
|
||||
return;
|
||||
}
|
||||
if (group.getAdmin() && notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法从管理员权限组移除成员", domName));
|
||||
return;
|
||||
}
|
||||
PlayerDTO player = PlayerDTO.select(playerName);
|
||||
if (player == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName));
|
||||
return;
|
||||
}
|
||||
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, domName));
|
||||
return;
|
||||
}
|
||||
if (!Objects.equals(privilege.getGroupId(), group.getId())) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不在权限组 %s 中", playerName, groupName));
|
||||
return;
|
||||
}
|
||||
privilege = privilege.setGroupId(-1);
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,11 +1,30 @@
|
|||
package cn.lunadeer.dominion.controllers;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.dtos.*;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
||||
import static cn.lunadeer.dominion.controllers.Apis.notOwner;
|
||||
|
||||
public class MemberController {
|
||||
public class PrivilegeController {
|
||||
|
||||
/**
|
||||
* 清空玩家成员权限
|
||||
*
|
||||
* @param operator 操作者
|
||||
* @param player_name 玩家
|
||||
*/
|
||||
public static void clearPrivilege(AbstractOperator operator, String player_name) {
|
||||
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion clear_privilege <玩家名称> <领地名称>"));
|
||||
return;
|
||||
}
|
||||
clearPrivilege(operator, player_name, dominion.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空玩家成员权限
|
||||
|
@ -14,9 +33,8 @@ public class MemberController {
|
|||
* @param player_name 玩家
|
||||
* @param dominionName 领地名称
|
||||
*/
|
||||
public static void memberRemove(AbstractOperator operator, String dominionName, String player_name) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "将玩家 %s 从领地 %s 移除失败", player_name, dominionName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "将玩家 %s 从领地 %s 移除成功", player_name, dominionName);
|
||||
public static void clearPrivilege(AbstractOperator operator, String player_name, String dominionName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "清空玩家 %s 在领地 %s 的权限失败", player_name, dominionName);
|
||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
|
||||
|
@ -28,7 +46,7 @@ public class MemberController {
|
|||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
||||
return;
|
||||
}
|
||||
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
|
||||
return;
|
||||
|
@ -37,8 +55,25 @@ public class MemberController {
|
|||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法移除一个领地管理员", dominionName));
|
||||
return;
|
||||
}
|
||||
MemberDTO.delete(player.getUuid(), dominion.getId());
|
||||
operator.setResponse(SUCCESS);
|
||||
PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId());
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "清空玩家 %s 在领地 %s 的权限成功", player_name, dominionName));
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置玩家成员权限
|
||||
*
|
||||
* @param operator 操作者
|
||||
* @param player_name 玩家
|
||||
* @param flag 权限名称
|
||||
* @param value 权限值
|
||||
*/
|
||||
public static void setPrivilege(AbstractOperator operator, String player_name, String flag, boolean value) {
|
||||
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]"));
|
||||
return;
|
||||
}
|
||||
setPrivilege(operator, player_name, flag, value, dominion.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -50,9 +85,8 @@ public class MemberController {
|
|||
* @param value 权限值
|
||||
* @param dominionName 领地名称
|
||||
*/
|
||||
public static void setMemberFlag(AbstractOperator operator, String dominionName, String player_name, String flag, boolean value) {
|
||||
public static void setPrivilege(AbstractOperator operator, String player_name, String flag, boolean value, String dominionName) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 失败", player_name, dominionName, flag, value);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 成功", player_name, dominionName, flag, value);
|
||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
|
||||
|
@ -64,10 +98,10 @@ public class MemberController {
|
|||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
||||
return;
|
||||
}
|
||||
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
|
||||
return;
|
||||
privilege = createPlayerPrivilege(operator, player.getUuid(), dominion);
|
||||
if (privilege == null) return;
|
||||
}
|
||||
if ((flag.equals("admin") || privilege.getAdmin()) && notOwner(operator, dominion)) {
|
||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他玩家管理员的权限", dominionName));
|
||||
|
@ -76,6 +110,10 @@ public class MemberController {
|
|||
if (flag.equals("admin")) {
|
||||
privilege.setAdmin(value);
|
||||
} else {
|
||||
if (privilege.getAdmin()) {
|
||||
operator.setResponse(FAIL.addMessage("管理员拥有所有权限,无需单独设置权限"));
|
||||
return;
|
||||
}
|
||||
Flag f = Flag.getFlag(flag);
|
||||
if (f == null) {
|
||||
operator.setResponse(FAIL.addMessage("未知的领地权限 %s", flag));
|
||||
|
@ -83,34 +121,53 @@ public class MemberController {
|
|||
}
|
||||
privilege.setFlagValue(f, value);
|
||||
}
|
||||
operator.setResponse(SUCCESS);
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 成功", player_name, dominionName, flag, value));
|
||||
}
|
||||
|
||||
public static void memberAdd(AbstractOperator operator, String dominionName, String player_name) {
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "将玩家 %s 添加到领地成员 %s 失败", player_name, dominionName);
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "将玩家 %s 添加到领地成员 %s 成功", player_name, dominionName);
|
||||
public static void createPrivilege(AbstractOperator operator, String player_name) {
|
||||
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不在任何领地内,请指定领地名称 /dominion create_privilege <玩家名称> <领地名称>"));
|
||||
return;
|
||||
}
|
||||
createPrivilege(operator, player_name, dominion.getName());
|
||||
}
|
||||
|
||||
public static void createPrivilege(AbstractOperator operator, String player_name, String dominionName) {
|
||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||
if (dominion == null) {
|
||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在,无法创建成员权限", dominionName));
|
||||
return;
|
||||
}
|
||||
if (noAuthToChangeFlags(operator, dominion)) return;
|
||||
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
||||
if (player == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "玩家 %s 不存在或没有登录过", player_name));
|
||||
return;
|
||||
}
|
||||
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||
if (createPlayerPrivilege(operator, player.getUuid(), dominion) != null) {
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建玩家 %s 在领地 %s 的成员权限成功", player_name, dominionName));
|
||||
}
|
||||
}
|
||||
|
||||
private static PlayerPrivilegeDTO createPlayerPrivilege(AbstractOperator operator, UUID player, DominionDTO dom) {
|
||||
XLogger.debug("operator: " + operator.getUniqueId() + " player: " + player);
|
||||
if (operator.getUniqueId().equals(player)) {
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不能给自己设置成员权限"));
|
||||
return null;
|
||||
}
|
||||
PlayerDTO playerDTO = PlayerDTO.select(player);
|
||||
PlayerPrivilegeDTO privilege = Cache.instance.getPlayerPrivilege(player, dom);
|
||||
if (privilege != null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 已经是领地 %s 的成员", player_name, dominionName));
|
||||
return;
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建玩家成员权限失败,玩家 %s 已经是领地 %s 的成员", playerDTO.getLastKnownName(), dom.getName()));
|
||||
return null;
|
||||
}
|
||||
privilege = MemberDTO.insert(new MemberDTO(player.getUuid(), dominion));
|
||||
privilege = PlayerPrivilegeDTO.insert(new PlayerPrivilegeDTO(player, dom));
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL);
|
||||
} else {
|
||||
operator.setResponse(SUCCESS);
|
||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建玩家成员权限失败,请联系管理员"));
|
||||
return null;
|
||||
}
|
||||
return privilege;
|
||||
}
|
||||
|
||||
public static void applyTemplate(AbstractOperator operator, String dominionName, String playerName, String templateName) {
|
||||
|
@ -127,7 +184,7 @@ public class MemberController {
|
|||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", playerName));
|
||||
return;
|
||||
}
|
||||
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
||||
if (privilege == null) {
|
||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, dominionName));
|
||||
return;
|
|
@ -10,14 +10,10 @@ public class TemplateController {
|
|||
public static void createTemplate(AbstractOperator operator, String templateName) {
|
||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建成功");
|
||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建失败");
|
||||
if (templateName.contains(" ")) {
|
||||
operator.setResponse(FAIL.addMessage("模板名称不能包含空格"));
|
||||
return;
|
||||
}
|
||||
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(operator.getUniqueId());
|
||||
for (PrivilegeTemplateDTO template : templates) {
|
||||
if (template.getName().equals(templateName)) {
|
||||
operator.setResponse(FAIL.addMessage("已经存在名为 %s 的权限模板", templateName));
|
||||
operator.setResponse(FAIL.addMessage("已经存在名为" + templateName + "的权限模板"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +22,7 @@ public class TemplateController {
|
|||
operator.setResponse(FAIL.addMessage("可能是数据库错误,请联系管理员"));
|
||||
return;
|
||||
}
|
||||
operator.setResponse(SUCCESS.addMessage("成功创建名为 %s 的权限模板", templateName));
|
||||
operator.setResponse(SUCCESS.addMessage("成功创建名为" + templateName + "的权限模板"));
|
||||
}
|
||||
|
||||
public static void deleteTemplate(AbstractOperator operator, String templateName) {
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
package cn.lunadeer.dominion.cuis;
|
||||
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.controllers.AbstractOperator;
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
||||
import cn.lunadeer.dominion.tuis.DominionManage;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
import org.bukkit.Location;
|
||||
|
@ -28,9 +30,13 @@ public class CreateDominion {
|
|||
@Override
|
||||
public void handleData(String input) {
|
||||
XLogger.debug("createDominionCB.run: %s", input);
|
||||
|
||||
autoPoints(sender);
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||
Map<Integer, Location> points = autoPoints(sender);
|
||||
Map<Integer, Location> points = Dominion.pointsSelect.get(sender.getUniqueId());
|
||||
if (points == null || points.get(0) == null || points.get(1) == null) {
|
||||
Notification.error(sender, "自动选点失败");
|
||||
return;
|
||||
}
|
||||
operator.getResponse().thenAccept(result -> {
|
||||
if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)) {
|
||||
DominionManage.show(sender, new String[]{"list"});
|
||||
|
|
|
@ -1,50 +0,0 @@
|
|||
package cn.lunadeer.dominion.cuis;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.GroupController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
|
||||
public class CreateGroup {
|
||||
|
||||
private static class createGroupCB implements CuiTextInput.InputCallback {
|
||||
|
||||
private final Player sender;
|
||||
private final String dominionName;
|
||||
|
||||
public createGroupCB(Player sender, String dominionName) {
|
||||
this.sender = sender;
|
||||
this.dominionName = dominionName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleData(String input) {
|
||||
XLogger.debug("createGroupCB.run: %s", input);
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||
GroupController.createGroup(operator, dominionName, input);
|
||||
GroupList.show(sender, dominionName);
|
||||
}
|
||||
}
|
||||
|
||||
public static void open(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地不存在");
|
||||
return;
|
||||
}
|
||||
CuiTextInput.InputCallback createGroupCB = new createGroupCB(player, dominion.getName());
|
||||
CuiTextInput view = CuiTextInput.create(createGroupCB).setText("未命名权限组").title("输入要创建的权限组名称");
|
||||
view.setSuggestCommand("/dominion group create <领地名称> <权限组名称>");
|
||||
view.open(player);
|
||||
}
|
||||
|
||||
}
|
|
@ -2,10 +2,10 @@ package cn.lunadeer.dominion.cuis;
|
|||
|
||||
import cn.lunadeer.dominion.controllers.AbstractOperator;
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.MemberController;
|
||||
import cn.lunadeer.dominion.controllers.PrivilegeController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer;
|
||||
import cn.lunadeer.dominion.tuis.DominionPrivilegeList;
|
||||
import cn.lunadeer.dominion.tuis.SelectPlayer;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
|
@ -16,13 +16,13 @@ import java.util.Objects;
|
|||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
|
||||
public class MemberAdd {
|
||||
public class CreatePrivilege {
|
||||
|
||||
private static class memberAddCB implements CuiTextInput.InputCallback {
|
||||
private static class createPrivilegeCB implements CuiTextInput.InputCallback {
|
||||
private final Player sender;
|
||||
private final String dominionName;
|
||||
|
||||
public memberAddCB(Player sender, String dominionName) {
|
||||
public createPrivilegeCB(Player sender, String dominionName) {
|
||||
this.sender = sender;
|
||||
this.dominionName = dominionName;
|
||||
}
|
||||
|
@ -33,12 +33,12 @@ public class MemberAdd {
|
|||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||
operator.getResponse().thenAccept(result -> {
|
||||
if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)){
|
||||
MemberList.show(sender, dominionName);
|
||||
DominionPrivilegeList.show(sender, new String[]{"privilege_list", dominionName});
|
||||
} else {
|
||||
SelectPlayer.show(sender, dominionName, 1);
|
||||
SelectPlayer.show(sender, new String[]{"select_player_create_privilege", dominionName});
|
||||
}
|
||||
});
|
||||
MemberController.memberAdd(operator, dominionName, input);
|
||||
PrivilegeController.createPrivilege(operator, input, dominionName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -50,9 +50,9 @@ public class MemberAdd {
|
|||
Notification.error(sender, "领地不存在");
|
||||
return;
|
||||
}
|
||||
CuiTextInput.InputCallback createPrivilegeCB = new memberAddCB(player, dominion.getName());
|
||||
CuiTextInput.InputCallback createPrivilegeCB = new createPrivilegeCB(player, dominion.getName());
|
||||
CuiTextInput view = CuiTextInput.create(createPrivilegeCB).setText("Steve").title("输入玩家名称以添加为成员");
|
||||
view.setSuggestCommand("/dominion member add <领地名称> <玩家名称>");
|
||||
view.setSuggestCommand("/dominion create_privilege <玩家名称> [领地名称]");
|
||||
view.open(player);
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ package cn.lunadeer.dominion.cuis;
|
|||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.TemplateController;
|
||||
import cn.lunadeer.dominion.tuis.template.TemplateList;
|
||||
import cn.lunadeer.dominion.tuis.TemplateList;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
@ -23,8 +23,10 @@ public class CreateTemplate {
|
|||
public void handleData(String input) {
|
||||
XLogger.debug("createTemplateCB.run: %s", input);
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||
operator.getResponse().thenAccept(result -> {
|
||||
TemplateList.show(sender, new String[]{"template_list"});
|
||||
});
|
||||
TemplateController.createTemplate(operator, input);
|
||||
TemplateList.show(sender);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,7 +35,7 @@ public class CreateTemplate {
|
|||
if (player == null) return;
|
||||
CuiTextInput.InputCallback createTemplateCB = new createTemplateCB(player);
|
||||
CuiTextInput view = CuiTextInput.create(createTemplateCB).setText("未命名模板").title("输入模板名称");
|
||||
view.setSuggestCommand("/dominion template create <模板名称>");
|
||||
view.setSuggestCommand("/dominion template_create <模板名称>");
|
||||
view.open(player);
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package cn.lunadeer.dominion.cuis;
|
|||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
||||
import cn.lunadeer.dominion.tuis.DominionManage;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
|
|
|
@ -3,7 +3,7 @@ package cn.lunadeer.dominion.cuis;
|
|||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
||||
import cn.lunadeer.dominion.tuis.DominionManage;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
|
|
|
@ -2,7 +2,7 @@ package cn.lunadeer.dominion.cuis;
|
|||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
||||
import cn.lunadeer.dominion.tuis.DominionManage;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
|
@ -1,52 +0,0 @@
|
|||
package cn.lunadeer.dominion.cuis;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.GroupController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
|
||||
public class RenameGroup {
|
||||
|
||||
private static class renameGroupCB implements CuiTextInput.InputCallback {
|
||||
|
||||
private final Player sender;
|
||||
private final String dominionName;
|
||||
private final String oldName;
|
||||
|
||||
public renameGroupCB(Player sender, String dominionName, String oldName) {
|
||||
this.sender = sender;
|
||||
this.dominionName = dominionName;
|
||||
this.oldName = oldName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleData(String input) {
|
||||
XLogger.debug("renameGroupCB.run: %s", input);
|
||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||
GroupController.renameGroup(operator, dominionName, oldName, input);
|
||||
GroupSetting.show(sender, dominionName, input);
|
||||
}
|
||||
}
|
||||
|
||||
public static void open(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地不存在");
|
||||
return;
|
||||
}
|
||||
CuiTextInput.InputCallback renameGroupCB = new renameGroupCB(player, dominion.getName(), args[2]);
|
||||
CuiTextInput view = CuiTextInput.create(renameGroupCB).setText(args[2]).title("输入新的权限组名称");
|
||||
view.setSuggestCommand("/dominion group rename <领地名称> <权限组旧名称> <新名称>");
|
||||
view.open(player);
|
||||
}
|
||||
|
||||
}
|
|
@ -3,7 +3,7 @@ package cn.lunadeer.dominion.cuis;
|
|||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||
import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
||||
import cn.lunadeer.dominion.tuis.DominionManage;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||
|
|
|
@ -191,11 +191,6 @@ public class DominionDTO {
|
|||
this(null, owner, name, world, x1, y1, z1, x2, y2, z2, -1);
|
||||
}
|
||||
|
||||
public static DominionDTO create(UUID owner, String name, String world,
|
||||
Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, DominionDTO parent) {
|
||||
return new DominionDTO(null, owner, name, world, x1, y1, z1, x2, y2, z2, parent == null ? -1 : parent.getId());
|
||||
}
|
||||
|
||||
private final Field id = new Field("id", FieldType.INT);
|
||||
private final Field owner = new Field("owner", FieldType.STRING);
|
||||
private final Field name = new Field("name", FieldType.STRING);
|
||||
|
@ -334,6 +329,11 @@ public class DominionDTO {
|
|||
return (Integer) parentDomId.value;
|
||||
}
|
||||
|
||||
public DominionDTO setParentDomId(Integer parentDomId) {
|
||||
this.parentDomId.value = parentDomId;
|
||||
return doUpdate(new UpdateRow().field(this.parentDomId));
|
||||
}
|
||||
|
||||
public String getJoinMessage() {
|
||||
return (String) joinMessage.value;
|
||||
}
|
||||
|
@ -373,18 +373,8 @@ public class DominionDTO {
|
|||
return doUpdate(new UpdateRow().field(this.x1).field(this.y1).field(this.z1).field(this.x2).field(this.y2).field(this.z2));
|
||||
}
|
||||
|
||||
public DominionDTO setXYZ(int[] cords) {
|
||||
if (cords.length == 6) {
|
||||
return setXYZ(cords[0], cords[1], cords[2], cords[3], cords[4], cords[5]);
|
||||
} else {
|
||||
XLogger.warn("领地坐标数据异常: %s", (Object) cords);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Location getTpLocation() {
|
||||
if (Objects.equals(tp_location.value, "default")) {
|
||||
if (Objects.equals(tp_location, "default")) {
|
||||
return null;
|
||||
} else {
|
||||
// 0:0:0
|
||||
|
|
|
@ -15,7 +15,7 @@ import java.util.List;
|
|||
public enum Flag {
|
||||
ANCHOR("anchor", "重生锚", "是否允许设置重生锚", false, false, true),
|
||||
ANIMAL_KILLING("animal_killing", "对动物造成伤害", "是否允许对动物造成伤害", false, false, true),
|
||||
ANIMAL_SPAWN("animal_spawn", "动物生成(繁殖)", "是否允许动物生成(包括繁殖)", true, true, false),
|
||||
ANIMAL_SPAWN("animal_spawn", "动物生成", "是否允许动物生成", true, true, false),
|
||||
ANVIL("anvil", "使用铁砧", "是否允许使用铁砧", false, false, true),
|
||||
BEACON("beacon", "信标交互", "是否允许与信标交互", false, false, true),
|
||||
BED("bed", "床交互", "是否允许使用床睡觉或设置重生点", false, false, true),
|
||||
|
@ -28,14 +28,13 @@ public enum Flag {
|
|||
CREEPER_EXPLODE("creeper_explode", "实体爆炸", "包含:苦力怕/凋零头颅/水晶爆炸", false, true, true),
|
||||
COMPARER("comparer", "比较器交互", "是否可以修改比较器状态", false, false, true),
|
||||
DOOR("door", "门交互", "是否可以使用各种材质的门(包括活板门)", false, false, true),
|
||||
DRAGON_EGG("dragon_egg", "触碰龙蛋", "是否可以触碰龙蛋", false, false, true),
|
||||
DYE("dye", "染色", "是否可以使用染料(对羊、狗项圈、猫项圈)染色", false, false, true),
|
||||
EDIT_SIGN("edit_sign", "编辑告示牌", "是否可以编辑告示牌", false, false, true),
|
||||
EGG("egg", "扔鸡蛋", "是否可以扔鸡蛋", false, false, true),
|
||||
ENCHANT("enchant", "使用附魔台", "是否可以使用附魔台", false, false, true),
|
||||
ENDER_MAN("ender_man", "末影人行为", "包含:末影人是否可以生成、瞬移", false, true, true),
|
||||
ENDER_PEARL("ender_pearl", "投掷末影珍珠", "是否可以使用末影珍珠", false, false, true),
|
||||
FEED("feed", "喂养动物", "是否可以喂养动物", false, false, true),
|
||||
FEED("feed", "喂养", "是否可以喂养动物", false, false, true),
|
||||
FIRE_SPREAD("fire_spread", "火焰蔓延", "是否可以火焰蔓延", false, true, true),
|
||||
FLOW_IN_PROTECTION("flow_in_protection", "外部流体是否可以进入", "包含:岩浆、水(不会阻止领地内部的流体蔓延)", false, true, true),
|
||||
FLY("fly", "飞行", "不是翅鞘飞行,是类似于创造模式的飞行", false, false, false),
|
||||
|
@ -63,8 +62,6 @@ public enum Flag {
|
|||
TRAMPLE("trample", "作物践踏", "是否可以践踏作物(关闭意味着保护耕地)", false, true, true),
|
||||
VEHICLE_DESTROY("vehicle_destroy", "破坏载具", "是否可以破坏载具(主要是矿车)", false, false, true),
|
||||
VEHICLE_SPAWN("vehicle_spawn", "生成载具", "是否可以生成载具(主要是矿车)", false, false, true),
|
||||
VILLAGER_KILLING("villager_killing", "对村民造成伤害", "是否可以对村民造成伤害", false, false, true),
|
||||
VILLAGER_SPAWN("villager_spawn", "村民繁殖", "是否允许村民繁殖", true, true, true),
|
||||
WITHER_SPAWN("wither_spawn", "凋零生成", "凋零生成", false, true, true),
|
||||
;
|
||||
private final String flag_name;
|
||||
|
|
|
@ -1,180 +0,0 @@
|
|||
package cn.lunadeer.dominion.dtos;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class GroupDTO {
|
||||
|
||||
Field id = new Field("id", FieldType.INT);
|
||||
Field domID = new Field("dom_id", FieldType.INT);
|
||||
Field name = new Field("name", FieldType.STRING);
|
||||
Field admin = new Field("admin", FieldType.BOOLEAN);
|
||||
private final Map<Flag, Boolean> flags = new HashMap<>();
|
||||
|
||||
public Integer getId() {
|
||||
return (Integer) id.value;
|
||||
}
|
||||
|
||||
public Integer getDomID() {
|
||||
return (Integer) domID.value;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return (String) name.value;
|
||||
}
|
||||
|
||||
public Boolean getAdmin() {
|
||||
return (Boolean) admin.value;
|
||||
}
|
||||
|
||||
public Boolean getFlagValue(Flag flag) {
|
||||
if (!flags.containsKey(flag)) return flag.getDefaultValue();
|
||||
return flags.get(flag);
|
||||
}
|
||||
|
||||
public GroupDTO setName(String name) {
|
||||
this.name.value = name;
|
||||
UpdateRow updateRow = new UpdateRow().field(this.name);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public GroupDTO setAdmin(Boolean admin) {
|
||||
this.admin.value = admin;
|
||||
UpdateRow updateRow = new UpdateRow().field(this.admin);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public GroupDTO setFlagValue(Flag flag, Boolean value) {
|
||||
flags.put(flag, value);
|
||||
Field f = new Field(flag.getFlagName(), value);
|
||||
UpdateRow updateRow = new UpdateRow().field(f);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public static GroupDTO create(String name, DominionDTO dominionDTO) {
|
||||
GroupDTO group = new GroupDTO(name, dominionDTO.getId());
|
||||
InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null));
|
||||
insertRow.table("dominion_group")
|
||||
.field(group.domID)
|
||||
.field(group.name)
|
||||
.field(group.admin);
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
insertRow.field(new Field(f.getFlagName(), dominionDTO.getFlagValue(f)));
|
||||
}
|
||||
try (ResultSet rs = insertRow.execute()) {
|
||||
List<GroupDTO> groups = getDTOFromRS(rs);
|
||||
if (groups.size() == 0) return null;
|
||||
Cache.instance.loadGroups(groups.get(0).getId());
|
||||
return groups.get(0);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("创建权限组失败: ", e, "");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
delete(getId());
|
||||
}
|
||||
|
||||
public static void delete(Integer id) {
|
||||
String sql = "DELETE FROM dominion_group WHERE id = ?;";
|
||||
DatabaseManager.instance.query(sql, id);
|
||||
Cache.instance.loadGroups(id);
|
||||
List<MemberDTO> players = MemberDTO.selectByGroupId(id);
|
||||
for (MemberDTO player : players) {
|
||||
player.setGroupId(-1);
|
||||
}
|
||||
}
|
||||
|
||||
public static GroupDTO select(Integer id) {
|
||||
String sql = "SELECT * FROM dominion_group WHERE id = ?;";
|
||||
List<GroupDTO> groups = getDTOFromRS(DatabaseManager.instance.query(sql, id));
|
||||
if (groups.size() == 0) return null;
|
||||
return groups.get(0);
|
||||
}
|
||||
|
||||
public static GroupDTO select(Integer domID, String name) {
|
||||
String sql = "SELECT * FROM dominion_group WHERE dom_id = ? AND name = ?;";
|
||||
List<GroupDTO> groups = getDTOFromRS(DatabaseManager.instance.query(sql, domID, name));
|
||||
if (groups.size() == 0) return null;
|
||||
return groups.get(0);
|
||||
}
|
||||
|
||||
public static List<GroupDTO> selectAll() {
|
||||
String sql = "SELECT * FROM dominion_group;";
|
||||
return getDTOFromRS(DatabaseManager.instance.query(sql));
|
||||
}
|
||||
|
||||
public static List<GroupDTO> selectByDominionId(Integer domID) {
|
||||
String sql = "SELECT * FROM dominion_group WHERE dom_id = ?;";
|
||||
return getDTOFromRS(DatabaseManager.instance.query(sql, domID));
|
||||
}
|
||||
|
||||
private GroupDTO(String name, Integer domID) {
|
||||
this.domID.value = domID;
|
||||
this.name.value = name;
|
||||
this.admin.value = false;
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
flags.put(f, f.getDefaultValue());
|
||||
}
|
||||
}
|
||||
|
||||
private GroupDTO(Integer id, Integer domID, String name, Boolean admin, Map<Flag, Boolean> flags) {
|
||||
this.id.value = id;
|
||||
this.domID.value = domID;
|
||||
this.name.value = name;
|
||||
this.admin.value = admin;
|
||||
this.flags.putAll(flags);
|
||||
}
|
||||
|
||||
private static List<GroupDTO> getDTOFromRS(ResultSet rs) {
|
||||
List<GroupDTO> list = new ArrayList<>();
|
||||
if (rs == null) return list;
|
||||
try {
|
||||
while (rs.next()) {
|
||||
Map<Flag, Boolean> flags = new HashMap<>();
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
flags.put(f, rs.getBoolean(f.getFlagName()));
|
||||
}
|
||||
GroupDTO group = new GroupDTO(
|
||||
rs.getInt("id"),
|
||||
rs.getInt("dom_id"),
|
||||
rs.getString("name"),
|
||||
rs.getBoolean("admin"),
|
||||
flags
|
||||
);
|
||||
list.add(group);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("查询权限组失败: ", e, "");
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private GroupDTO doUpdate(UpdateRow updateRow) {
|
||||
updateRow.returningAll(id)
|
||||
.table("dominion_group")
|
||||
.where("id = ?", id.value);
|
||||
try (ResultSet rs = updateRow.execute()) {
|
||||
List<GroupDTO> groups = getDTOFromRS(rs);
|
||||
if (groups.size() == 0) return null;
|
||||
Cache.instance.loadGroups((Integer) id.value);
|
||||
return groups.get(0);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("更新权限组失败: ", e, "");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,204 +0,0 @@
|
|||
package cn.lunadeer.dominion.dtos;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.util.*;
|
||||
|
||||
public class MemberDTO {
|
||||
|
||||
private static List<MemberDTO> query(String sql, Object... params) {
|
||||
List<MemberDTO> players = new ArrayList<>();
|
||||
try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
|
||||
return getDTOFromRS(rs);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("查询玩家权限失败: ", e, sql);
|
||||
}
|
||||
return players;
|
||||
}
|
||||
|
||||
private static List<MemberDTO> getDTOFromRS(ResultSet rs) {
|
||||
List<MemberDTO> players = new ArrayList<>();
|
||||
if (rs == null) return players;
|
||||
try {
|
||||
while (rs.next()) {
|
||||
Map<Flag, Boolean> flags = new HashMap<>();
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
flags.put(f, rs.getBoolean(f.getFlagName()));
|
||||
}
|
||||
MemberDTO player = new MemberDTO(
|
||||
rs.getInt("id"),
|
||||
UUID.fromString(rs.getString("player_uuid")),
|
||||
rs.getBoolean("admin"),
|
||||
rs.getInt("dom_id"),
|
||||
flags,
|
||||
rs.getInt("group_id")
|
||||
);
|
||||
players.add(player);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("查询玩家权限失败: ", e, "");
|
||||
}
|
||||
return players;
|
||||
}
|
||||
|
||||
private MemberDTO doUpdate(UpdateRow updateRow) {
|
||||
updateRow.returningAll(id)
|
||||
.table("dominion_member")
|
||||
.where("id = ?", id.value);
|
||||
try (ResultSet rs = updateRow.execute()) {
|
||||
List<MemberDTO> players = getDTOFromRS(rs);
|
||||
if (players.size() == 0) return null;
|
||||
Cache.instance.loadMembers(getPlayerUUID());
|
||||
return players.get(0);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("更新玩家权限失败: ", e, "");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static MemberDTO insert(MemberDTO player) {
|
||||
InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null))
|
||||
.table("dominion_member")
|
||||
.field(player.playerUUID)
|
||||
.field(player.admin)
|
||||
.field(player.domID);
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f)));
|
||||
}
|
||||
try (ResultSet rs = insertRow.execute()) {
|
||||
Cache.instance.loadMembers(player.getPlayerUUID());
|
||||
List<MemberDTO> players = getDTOFromRS(rs);
|
||||
if (players.size() == 0) return null;
|
||||
return players.get(0);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("插入玩家权限失败: ", e, "");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static MemberDTO select(UUID playerUUID, Integer dom_id) {
|
||||
String sql = "SELECT * FROM dominion_member WHERE player_uuid = ? AND dom_id = ?;";
|
||||
List<MemberDTO> p = query(sql, playerUUID.toString(), dom_id);
|
||||
if (p.size() == 0) return null;
|
||||
return p.get(0);
|
||||
}
|
||||
|
||||
public static List<MemberDTO> select(Integer dom_id) {
|
||||
String sql = "SELECT * FROM dominion_member WHERE dom_id = ?;";
|
||||
return query(sql, dom_id);
|
||||
}
|
||||
|
||||
public static void delete(UUID player, Integer domID) {
|
||||
String sql = "DELETE FROM dominion_member WHERE player_uuid = ? AND dom_id = ?;";
|
||||
query(sql, player.toString(), domID);
|
||||
Cache.instance.loadMembers(player);
|
||||
}
|
||||
|
||||
public static List<MemberDTO> selectAll() {
|
||||
String sql = "SELECT * FROM dominion_member;";
|
||||
return query(sql);
|
||||
}
|
||||
|
||||
public static List<MemberDTO> selectAll(UUID player) {
|
||||
String sql = "SELECT * FROM dominion_member WHERE player_uuid = ?;";
|
||||
return query(sql, player.toString());
|
||||
}
|
||||
|
||||
public static List<MemberDTO> selectByGroupId(Integer groupId) {
|
||||
String sql = "SELECT * FROM dominion_member WHERE group_id = ?;";
|
||||
return query(sql, groupId);
|
||||
}
|
||||
|
||||
public static List<MemberDTO> selectByDomGroupId(Integer domId, Integer groupId) {
|
||||
String sql = "SELECT * FROM dominion_member WHERE group_id = ? AND dom_id = ?;";
|
||||
return query(sql, groupId, domId);
|
||||
}
|
||||
|
||||
Field id = new Field("id", FieldType.INT);
|
||||
Field playerUUID = new Field("player_uuid", FieldType.STRING);
|
||||
Field admin = new Field("admin", FieldType.BOOLEAN);
|
||||
Field domID = new Field("dom_id", FieldType.INT);
|
||||
Field groupId = new Field("group_id", FieldType.INT);
|
||||
|
||||
public Integer getId() {
|
||||
return (Integer) id.value;
|
||||
}
|
||||
|
||||
public UUID getPlayerUUID() {
|
||||
return UUID.fromString((String) playerUUID.value);
|
||||
}
|
||||
|
||||
public Boolean getAdmin() {
|
||||
return (Boolean) admin.value;
|
||||
}
|
||||
|
||||
public Integer getDomID() {
|
||||
return (Integer) domID.value;
|
||||
}
|
||||
|
||||
public Integer getGroupId() {
|
||||
return (Integer) groupId.value;
|
||||
}
|
||||
|
||||
private final Map<Flag, Boolean> flags = new HashMap<>();
|
||||
|
||||
public Boolean getFlagValue(Flag flag) {
|
||||
if (!flags.containsKey(flag)) return flag.getDefaultValue();
|
||||
return flags.get(flag);
|
||||
}
|
||||
|
||||
public MemberDTO setFlagValue(Flag flag, Boolean value) {
|
||||
flags.put(flag, value);
|
||||
Field f = new Field(flag.getFlagName(), value);
|
||||
UpdateRow updateRow = new UpdateRow().field(f);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public MemberDTO setAdmin(Boolean admin) {
|
||||
this.admin.value = admin;
|
||||
UpdateRow updateRow = new UpdateRow().field(this.admin);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public MemberDTO setGroupId(Integer groupId) {
|
||||
this.groupId.value = groupId;
|
||||
UpdateRow updateRow = new UpdateRow().field(this.groupId);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public MemberDTO applyTemplate(PrivilegeTemplateDTO template) {
|
||||
this.admin.value = template.getAdmin();
|
||||
UpdateRow updateRow = new UpdateRow().field(admin);
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
this.flags.put(f, template.getFlagValue(f));
|
||||
updateRow.field(new Field(f.getFlagName(), template.getFlagValue(f)));
|
||||
}
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
private MemberDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map<Flag, Boolean> flags, Integer groupId) {
|
||||
this.id.value = id;
|
||||
this.playerUUID.value = playerUUID.toString();
|
||||
this.admin.value = admin;
|
||||
this.domID.value = domID;
|
||||
this.groupId.value = groupId;
|
||||
this.flags.putAll(flags);
|
||||
}
|
||||
|
||||
public MemberDTO(UUID playerUUID, DominionDTO dom) {
|
||||
this.id.value = null;
|
||||
this.playerUUID.value = playerUUID.toString();
|
||||
this.admin.value = false;
|
||||
this.domID.value = dom.getId();
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
this.flags.put(f, dom.getFlagValue(f));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -4,10 +4,8 @@ import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
|||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Timestamp;
|
||||
|
@ -26,17 +24,6 @@ public class PlayerDTO {
|
|||
return re;
|
||||
}
|
||||
|
||||
public static @Nullable PlayerDTO get(OfflinePlayer player) {
|
||||
if (player.getName() == null) {
|
||||
return null;
|
||||
}
|
||||
PlayerDTO re = select(player.getUniqueId());
|
||||
if (re == null) {
|
||||
re = insert(new PlayerDTO(player.getUniqueId(), player.getName(), System.currentTimeMillis()));
|
||||
}
|
||||
return re;
|
||||
}
|
||||
|
||||
public static List<PlayerDTO> all() {
|
||||
String sql = "SELECT * FROM player_name WHERE id > 0;";
|
||||
return query(sql);
|
||||
|
|
|
@ -0,0 +1,186 @@
|
|||
package cn.lunadeer.dominion.dtos;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.util.*;
|
||||
|
||||
public class PlayerPrivilegeDTO {
|
||||
|
||||
private static List<PlayerPrivilegeDTO> query(String sql, Object... params) {
|
||||
List<PlayerPrivilegeDTO> players = new ArrayList<>();
|
||||
try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
|
||||
return getDTOFromRS(rs);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("查询玩家权限失败: ", e, sql);
|
||||
}
|
||||
return players;
|
||||
}
|
||||
|
||||
private static List<PlayerPrivilegeDTO> getDTOFromRS(ResultSet rs) {
|
||||
List<PlayerPrivilegeDTO> players = new ArrayList<>();
|
||||
if (rs == null) return players;
|
||||
try {
|
||||
while (rs.next()) {
|
||||
Map<Flag, Boolean> flags = new HashMap<>();
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
flags.put(f, rs.getBoolean(f.getFlagName()));
|
||||
}
|
||||
PlayerPrivilegeDTO player = new PlayerPrivilegeDTO(
|
||||
rs.getInt("id"),
|
||||
UUID.fromString(rs.getString("player_uuid")),
|
||||
rs.getBoolean("admin"),
|
||||
rs.getInt("dom_id"),
|
||||
flags
|
||||
);
|
||||
players.add(player);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("查询玩家权限失败: ", e, "");
|
||||
}
|
||||
return players;
|
||||
}
|
||||
|
||||
private PlayerPrivilegeDTO doUpdate(UpdateRow updateRow) {
|
||||
Field id = new Field("id", this.id);
|
||||
updateRow.returningAll(id)
|
||||
.table("player_privilege")
|
||||
.where("id = ?", id.value);
|
||||
try (ResultSet rs = updateRow.execute()) {
|
||||
List<PlayerPrivilegeDTO> players = getDTOFromRS(rs);
|
||||
if (players.size() == 0) return null;
|
||||
Cache.instance.loadPlayerPrivileges(playerUUID);
|
||||
return players.get(0);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("更新玩家权限失败: ", e, "");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) {
|
||||
Field playerUUID = new Field("player_uuid", player.getPlayerUUID().toString());
|
||||
Field admin = new Field("admin", player.getAdmin());
|
||||
Field domID = new Field("dom_id", player.getDomID());
|
||||
InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null))
|
||||
.table("player_privilege")
|
||||
.field(playerUUID)
|
||||
.field(admin)
|
||||
.field(domID);
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f)));
|
||||
}
|
||||
try (ResultSet rs = insertRow.execute()) {
|
||||
Cache.instance.loadPlayerPrivileges(player.getPlayerUUID());
|
||||
List<PlayerPrivilegeDTO> players = getDTOFromRS(rs);
|
||||
if (players.size() == 0) return null;
|
||||
return players.get(0);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("插入玩家权限失败: ", e, "");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static PlayerPrivilegeDTO select(UUID playerUUID, Integer dom_id) {
|
||||
String sql = "SELECT * FROM player_privilege WHERE player_uuid = ? AND dom_id = ?;";
|
||||
List<PlayerPrivilegeDTO> p = query(sql, playerUUID.toString(), dom_id);
|
||||
if (p.size() == 0) return null;
|
||||
return p.get(0);
|
||||
}
|
||||
|
||||
public static List<PlayerPrivilegeDTO> select(Integer dom_id) {
|
||||
String sql = "SELECT * FROM player_privilege WHERE dom_id = ?;";
|
||||
return query(sql, dom_id);
|
||||
}
|
||||
|
||||
public static void delete(UUID player, Integer domID) {
|
||||
String sql = "DELETE FROM player_privilege WHERE player_uuid = ? AND dom_id = ?;";
|
||||
query(sql, player.toString(), domID);
|
||||
Cache.instance.loadPlayerPrivileges(player);
|
||||
}
|
||||
|
||||
public static List<PlayerPrivilegeDTO> selectAll() {
|
||||
String sql = "SELECT * FROM player_privilege;";
|
||||
return query(sql);
|
||||
}
|
||||
|
||||
public static List<PlayerPrivilegeDTO> selectAll(UUID player) {
|
||||
String sql = "SELECT * FROM player_privilege WHERE player_uuid = ?;";
|
||||
return query(sql, player.toString());
|
||||
}
|
||||
|
||||
private final Integer id;
|
||||
private final UUID playerUUID;
|
||||
private Boolean admin;
|
||||
private final Integer domID;
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public UUID getPlayerUUID() {
|
||||
return playerUUID;
|
||||
}
|
||||
|
||||
public Boolean getAdmin() {
|
||||
return admin;
|
||||
}
|
||||
|
||||
public Integer getDomID() {
|
||||
return domID;
|
||||
}
|
||||
|
||||
private final Map<Flag, Boolean> flags = new HashMap<>();
|
||||
|
||||
public Boolean getFlagValue(Flag flag) {
|
||||
if (!flags.containsKey(flag)) return flag.getDefaultValue();
|
||||
return flags.get(flag);
|
||||
}
|
||||
|
||||
public PlayerPrivilegeDTO setFlagValue(Flag flag, Boolean value) {
|
||||
flags.put(flag, value);
|
||||
Field f = new Field(flag.getFlagName(), value);
|
||||
UpdateRow updateRow = new UpdateRow().field(f);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public PlayerPrivilegeDTO setAdmin(Boolean admin) {
|
||||
this.admin = admin;
|
||||
Field f = new Field("admin", admin);
|
||||
UpdateRow updateRow = new UpdateRow().field(f);
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
public PlayerPrivilegeDTO applyTemplate(PrivilegeTemplateDTO template) {
|
||||
this.admin = template.getAdmin();
|
||||
UpdateRow updateRow = new UpdateRow().field(new Field("admin", admin));
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
this.flags.put(f, template.getFlagValue(f));
|
||||
updateRow.field(new Field(f.getFlagName(), template.getFlagValue(f)));
|
||||
}
|
||||
return doUpdate(updateRow);
|
||||
}
|
||||
|
||||
private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map<Flag, Boolean> flags) {
|
||||
this.id = id;
|
||||
this.playerUUID = playerUUID;
|
||||
this.admin = admin;
|
||||
this.domID = domID;
|
||||
this.flags.putAll(flags);
|
||||
}
|
||||
|
||||
public PlayerPrivilegeDTO(UUID playerUUID, DominionDTO dom) {
|
||||
this.id = null;
|
||||
this.playerUUID = playerUUID;
|
||||
this.admin = false;
|
||||
this.domID = dom.getId();
|
||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||
this.flags.put(f, dom.getFlagValue(f));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -4,8 +4,7 @@ import cn.lunadeer.dominion.Cache;
|
|||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
|
@ -17,7 +16,7 @@ import org.bukkit.event.Cancellable;
|
|||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
public class Apis {
|
||||
public static boolean canByPass(Player player, DominionDTO dom, MemberDTO prev) {
|
||||
public static boolean canByPass(Player player, DominionDTO dom, PlayerPrivilegeDTO prev) {
|
||||
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||
return true;
|
||||
}
|
||||
|
@ -48,24 +47,14 @@ public class Apis {
|
|||
if (dom == null) {
|
||||
return true;
|
||||
}
|
||||
MemberDTO prev = Cache.instance.getMember(player, dom);
|
||||
PlayerPrivilegeDTO prev = Cache.instance.getPlayerPrivilege(player, dom);
|
||||
if (canByPass(player, dom, prev)) {
|
||||
return true;
|
||||
}
|
||||
if (prev != null) {
|
||||
if (prev.getGroupId() == -1) {
|
||||
if (prev.getFlagValue(flag)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
GroupDTO group = Cache.instance.getGroup(prev.getGroupId());
|
||||
if (group == null) {
|
||||
return false;
|
||||
}
|
||||
if (group.getFlagValue(flag)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (dom.getFlagValue(flag)) {
|
||||
return true;
|
||||
|
|
|
@ -97,9 +97,6 @@ public class EnvironmentEvents implements Listener {
|
|||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // trample
|
||||
public void onFarmlandTrample(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.PHYSICAL) {
|
||||
return;
|
||||
}
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
|
@ -107,7 +104,11 @@ public class EnvironmentEvents implements Listener {
|
|||
if (block.getType() != FARMLAND) {
|
||||
return;
|
||||
}
|
||||
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||
if (event.getAction() != Action.PHYSICAL) {
|
||||
return;
|
||||
}
|
||||
Location location = block.getLocation();
|
||||
DominionDTO dom = Cache.instance.getDominion(location);
|
||||
checkFlag(dom, Flag.TRAMPLE, event);
|
||||
}
|
||||
|
||||
|
@ -160,14 +161,4 @@ public class EnvironmentEvents implements Listener {
|
|||
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||
checkFlag(dom, Flag.ANIMAL_SPAWN, event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // villager_spawn
|
||||
public void onVillagerSpawn(CreatureSpawnEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
if (entity.getType() != EntityType.VILLAGER) {
|
||||
return;
|
||||
}
|
||||
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||
checkFlag(dom, Flag.VILLAGER_SPAWN, event);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,13 +8,15 @@ import cn.lunadeer.minecraftpluginutils.Notification;
|
|||
import cn.lunadeer.minecraftpluginutils.Teleport;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.*;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockIgniteEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.block.SignChangeEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityPlaceEvent;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
|
@ -25,7 +27,6 @@ import org.bukkit.event.inventory.InventoryType;
|
|||
import org.bukkit.event.player.*;
|
||||
import org.bukkit.event.vehicle.VehicleDestroyEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.material.Colorable;
|
||||
import org.spigotmc.event.entity.EntityMountEvent;
|
||||
|
||||
import static cn.lunadeer.dominion.events.Apis.checkFlag;
|
||||
|
@ -102,19 +103,9 @@ public class PlayerEvents implements Listener {
|
|||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // bed
|
||||
public void onBedUse(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
return;
|
||||
}
|
||||
public void onBedUse(PlayerBedEnterEvent event) {
|
||||
Player bukkitPlayer = event.getPlayer();
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
if (!(Tag.BEDS.isTagged(block.getType()))) {
|
||||
return;
|
||||
}
|
||||
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||
DominionDTO dom = Cache.instance.getDominion(event.getBed().getLocation());
|
||||
checkFlag(dom, Flag.BED, bukkitPlayer, event);
|
||||
}
|
||||
|
||||
|
@ -165,30 +156,36 @@ public class PlayerEvents implements Listener {
|
|||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // button
|
||||
public void onButton(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
if (event.getClickedBlock() == null) {
|
||||
return;
|
||||
}
|
||||
Block block = event.getClickedBlock();
|
||||
if (!Tag.BUTTONS.isTagged(block.getType())) {
|
||||
Material clicked = event.getClickedBlock().getType();
|
||||
if (clicked != Material.STONE_BUTTON &&
|
||||
clicked != Material.BAMBOO_BUTTON &&
|
||||
clicked != Material.OAK_BUTTON &&
|
||||
clicked != Material.SPRUCE_BUTTON &&
|
||||
clicked != Material.BIRCH_BUTTON &&
|
||||
clicked != Material.JUNGLE_BUTTON &&
|
||||
clicked != Material.ACACIA_BUTTON &&
|
||||
clicked != Material.DARK_OAK_BUTTON &&
|
||||
clicked != Material.CRIMSON_BUTTON &&
|
||||
clicked != Material.WARPED_BUTTON &&
|
||||
clicked != Material.POLISHED_BLACKSTONE_BUTTON &&
|
||||
clicked != Material.MANGROVE_BUTTON &&
|
||||
clicked != Material.CHERRY_BUTTON) {
|
||||
return;
|
||||
}
|
||||
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
||||
checkFlag(dom, Flag.BUTTON, player, event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // cake
|
||||
public void eatCake(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
if (event.getClickedBlock() == null) {
|
||||
return;
|
||||
}
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
Material clicked = block.getType();
|
||||
if (clicked != Material.CAKE) {
|
||||
return;
|
||||
|
@ -280,11 +277,7 @@ public class PlayerEvents implements Listener {
|
|||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // comparer
|
||||
public void comparerChange(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
return;
|
||||
}
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
if (event.getClickedBlock() == null) {
|
||||
return;
|
||||
}
|
||||
Material clicked = event.getClickedBlock().getType();
|
||||
|
@ -298,14 +291,45 @@ public class PlayerEvents implements Listener {
|
|||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // door
|
||||
public void doorUse(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
if (event.getClickedBlock() == null) {
|
||||
return;
|
||||
}
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
if (!Tag.DOORS.isTagged(block.getType())) {
|
||||
Material clicked = event.getClickedBlock().getType();
|
||||
if (clicked != Material.IRON_DOOR &&
|
||||
clicked != Material.OAK_DOOR &&
|
||||
clicked != Material.SPRUCE_DOOR &&
|
||||
clicked != Material.BIRCH_DOOR &&
|
||||
clicked != Material.JUNGLE_DOOR &&
|
||||
clicked != Material.ACACIA_DOOR &&
|
||||
clicked != Material.CHERRY_DOOR &&
|
||||
clicked != Material.DARK_OAK_DOOR &&
|
||||
clicked != Material.MANGROVE_DOOR &&
|
||||
clicked != Material.BAMBOO_DOOR &&
|
||||
clicked != Material.CRIMSON_DOOR &&
|
||||
clicked != Material.WARPED_DOOR &&
|
||||
clicked != Material.IRON_TRAPDOOR &&
|
||||
clicked != Material.OAK_TRAPDOOR &&
|
||||
clicked != Material.SPRUCE_TRAPDOOR &&
|
||||
clicked != Material.BIRCH_TRAPDOOR &&
|
||||
clicked != Material.JUNGLE_TRAPDOOR &&
|
||||
clicked != Material.ACACIA_TRAPDOOR &&
|
||||
clicked != Material.CHERRY_TRAPDOOR &&
|
||||
clicked != Material.DARK_OAK_TRAPDOOR &&
|
||||
clicked != Material.MANGROVE_TRAPDOOR &&
|
||||
clicked != Material.BAMBOO_TRAPDOOR &&
|
||||
clicked != Material.CRIMSON_TRAPDOOR &&
|
||||
clicked != Material.WARPED_TRAPDOOR &&
|
||||
clicked != Material.OAK_FENCE_GATE &&
|
||||
clicked != Material.SPRUCE_FENCE_GATE &&
|
||||
clicked != Material.BIRCH_FENCE_GATE &&
|
||||
clicked != Material.JUNGLE_FENCE_GATE &&
|
||||
clicked != Material.ACACIA_FENCE_GATE &&
|
||||
clicked != Material.CHERRY_FENCE_GATE &&
|
||||
clicked != Material.DARK_OAK_FENCE_GATE &&
|
||||
clicked != Material.MANGROVE_FENCE_GATE &&
|
||||
clicked != Material.BAMBOO_FENCE_GATE &&
|
||||
clicked != Material.CRIMSON_FENCE_GATE &&
|
||||
clicked != Material.WARPED_FENCE_GATE) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
|
@ -313,53 +337,23 @@ public class PlayerEvents implements Listener {
|
|||
checkFlag(dom, Flag.DOOR, player, event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // dragon_egg
|
||||
public void touchDragonEdd(PlayerInteractEvent event) {
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
if (block.getType() != Material.DRAGON_EGG) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||
checkFlag(dom, Flag.DRAGON_EGG, player, event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // dye
|
||||
public void dyeEvent(PlayerInteractEntityEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
Entity entity = event.getRightClicked();
|
||||
if (!(entity instanceof Colorable)) {
|
||||
if (!(entity instanceof Sheep)
|
||||
&& !(entity instanceof Wolf)
|
||||
&& !(entity instanceof Cat)) {
|
||||
return;
|
||||
}
|
||||
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||
checkFlag(dom, Flag.DYE, player, event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // edit sign
|
||||
public void onSignOpen(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
if (!(Tag.SIGNS.isTagged(block.getType()))) {
|
||||
return;
|
||||
}
|
||||
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||
checkFlag(dom, Flag.EDIT_SIGN, player, event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // edit sign
|
||||
public void onSignEdit(SignChangeEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
Block block = event.getBlock();
|
||||
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||
DominionDTO dom = Cache.instance.getDominion(event.getBlock().getLocation());
|
||||
checkFlag(dom, Flag.EDIT_SIGN, player, event);
|
||||
}
|
||||
|
||||
|
@ -407,10 +401,6 @@ public class PlayerEvents implements Listener {
|
|||
if (!(event.getRightClicked() instanceof Animals)) {
|
||||
return;
|
||||
}
|
||||
// if shearing sheep instead
|
||||
if (event.getPlayer().getInventory().getItem(event.getHand()).getType() == Material.SHEARS) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
DominionDTO dom = Cache.instance.getDominion(event.getRightClicked().getLocation());
|
||||
checkFlag(dom, Flag.FEED, player, event);
|
||||
|
@ -444,13 +434,10 @@ public class PlayerEvents implements Listener {
|
|||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // honey
|
||||
public void honeyInteractive(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
if (event.getClickedBlock() == null) {
|
||||
return;
|
||||
}
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
Material clicked = block.getType();
|
||||
if (clicked != Material.BEEHIVE && clicked != Material.BEE_NEST) {
|
||||
return;
|
||||
|
@ -502,13 +489,10 @@ public class PlayerEvents implements Listener {
|
|||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // lever
|
||||
public void onLever(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
if (event.getClickedBlock() == null) {
|
||||
return;
|
||||
}
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
Material clicked = block.getType();
|
||||
if (clicked != Material.LEVER) {
|
||||
return;
|
||||
|
@ -607,14 +591,26 @@ public class PlayerEvents implements Listener {
|
|||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // pressure
|
||||
public void onPressure(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.PHYSICAL) {
|
||||
if (event.getClickedBlock() == null) {
|
||||
return;
|
||||
}
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
if (!Tag.PRESSURE_PLATES.isTagged(block.getType())) {
|
||||
Material clicked = block.getType();
|
||||
if (clicked != Material.STONE_PRESSURE_PLATE &&
|
||||
clicked != Material.LIGHT_WEIGHTED_PRESSURE_PLATE &&
|
||||
clicked != Material.HEAVY_WEIGHTED_PRESSURE_PLATE &&
|
||||
clicked != Material.OAK_PRESSURE_PLATE &&
|
||||
clicked != Material.SPRUCE_PRESSURE_PLATE &&
|
||||
clicked != Material.BIRCH_PRESSURE_PLATE &&
|
||||
clicked != Material.JUNGLE_PRESSURE_PLATE &&
|
||||
clicked != Material.ACACIA_PRESSURE_PLATE &&
|
||||
clicked != Material.DARK_OAK_PRESSURE_PLATE &&
|
||||
clicked != Material.CRIMSON_PRESSURE_PLATE &&
|
||||
clicked != Material.WARPED_PRESSURE_PLATE &&
|
||||
clicked != Material.POLISHED_BLACKSTONE_PRESSURE_PLATE &&
|
||||
clicked != Material.MANGROVE_PRESSURE_PLATE &&
|
||||
clicked != Material.CHERRY_PRESSURE_PLATE &&
|
||||
clicked != Material.BAMBOO_PRESSURE_PLATE) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
|
@ -705,17 +701,4 @@ public class PlayerEvents implements Listener {
|
|||
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||
checkFlag(dom, Flag.VEHICLE_SPAWN, player, event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // villager_killing
|
||||
public void onVillagerKilling(EntityDamageByEntityEvent event) {
|
||||
if (!(event.getDamager() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
if (!(event.getEntity() instanceof Villager)) {
|
||||
return;
|
||||
}
|
||||
Player player = (Player) event.getDamager();
|
||||
DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
|
||||
checkFlag(dom, Flag.VILLAGER_KILLING, player, event);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package cn.lunadeer.dominion.managers;
|
|||
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.minecraftpluginutils.VaultConnect;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
@ -83,11 +82,7 @@ public class ConfigManager {
|
|||
_economy_price = (float) _file.getDouble("Economy.Price", 10.0);
|
||||
_economy_only_xz = _file.getBoolean("Economy.OnlyXZ", false);
|
||||
_economy_refund = (float) _file.getDouble("Economy.Refund", 0.85);
|
||||
if (getEconomyEnable()) {
|
||||
new VaultConnect(this._plugin);
|
||||
}
|
||||
_fly_permission_nodes = _file.getStringList("FlyPermissionNodes");
|
||||
_residence_migration = _file.getBoolean("ResidenceMigration", false);
|
||||
saveAll(); // 回写文件 防止文件中的数据不完整
|
||||
Flag.loadFromJson();
|
||||
}
|
||||
|
@ -116,7 +111,6 @@ public class ConfigManager {
|
|||
_file.set("Economy.OnlyXZ", _economy_only_xz);
|
||||
_file.set("Economy.Refund", _economy_refund);
|
||||
_file.set("FlyPermissionNodes", _fly_permission_nodes);
|
||||
_file.set("ResidenceMigration", _residence_migration);
|
||||
_plugin.saveConfig();
|
||||
}
|
||||
|
||||
|
@ -394,16 +388,6 @@ public class ConfigManager {
|
|||
_plugin.saveConfig();
|
||||
}
|
||||
|
||||
public Boolean getResidenceMigration() {
|
||||
return _residence_migration;
|
||||
}
|
||||
|
||||
public void setResidenceMigration(Boolean residence_migration) {
|
||||
_residence_migration = residence_migration;
|
||||
_file.set("ResidenceMigration", residence_migration);
|
||||
_plugin.saveConfig();
|
||||
}
|
||||
|
||||
private final Dominion _plugin;
|
||||
private FileConfiguration _file;
|
||||
private Boolean _debug;
|
||||
|
@ -442,5 +426,4 @@ public class ConfigManager {
|
|||
private Boolean _economy_only_xz;
|
||||
private Float _economy_refund;
|
||||
private List<String> _fly_permission_nodes;
|
||||
private Boolean _residence_migration;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
package cn.lunadeer.dominion.managers;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.*;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.TableColumn;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.AddColumn;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.CreateTable;
|
||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
|
||||
public class DatabaseTables {
|
||||
public static void migrate() {
|
||||
// player name
|
||||
|
@ -58,13 +58,7 @@ public class DatabaseTables {
|
|||
.foreignKey(dominion_parent_dom_id_fk);
|
||||
dominion.execute();
|
||||
|
||||
for (Flag flag : Flag.getAllDominionFlags()) {
|
||||
TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
|
||||
new AddColumn(column).table("dominion").ifNotExists().execute();
|
||||
}
|
||||
|
||||
// player privilege
|
||||
if (!Common.IsTableExist("dominion_member")) {
|
||||
TableColumn player_privilege_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
||||
TableColumn player_privilege_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, false, "''");
|
||||
TableColumn player_privilege_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1);
|
||||
|
@ -82,12 +76,6 @@ public class DatabaseTables {
|
|||
.unique(player_privilege_player_uuid, player_privilege_dom_id);
|
||||
player_privilege.execute();
|
||||
|
||||
for (Flag flag : Flag.getAllPrivilegeFlags()) {
|
||||
TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
|
||||
new AddColumn(column).table("player_privilege").ifNotExists().execute();
|
||||
}
|
||||
}
|
||||
|
||||
// server root player name
|
||||
Field server_player_name_id_field = new Field("id", -1);
|
||||
Field server_player_name_uuid_field = new Field("uuid", "00000000-0000-0000-0000-000000000000");
|
||||
|
@ -128,11 +116,21 @@ public class DatabaseTables {
|
|||
.field(server_dom_leave_message_field);
|
||||
insert_server_dom.execute();
|
||||
|
||||
// 1.18.0 dominion add tp_location
|
||||
for (Flag flag : Flag.getAllDominionFlags()) {
|
||||
TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
|
||||
new AddColumn(column).table("dominion").ifNotExists().execute();
|
||||
}
|
||||
|
||||
for (Flag flag : Flag.getAllPrivilegeFlags()) {
|
||||
TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
|
||||
new AddColumn(column).table("player_privilege").ifNotExists().execute();
|
||||
}
|
||||
|
||||
// 1.18.0
|
||||
TableColumn dominion_tp_location = new TableColumn("tp_location", FieldType.STRING, false, false, true, false, "'default'");
|
||||
new AddColumn(dominion_tp_location).table("dominion").ifNotExists().execute();
|
||||
|
||||
// 1.31.0 add privilege_template
|
||||
// 1.31.0
|
||||
TableColumn privilege_template_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
||||
TableColumn privilege_template_creator = new TableColumn("creator", FieldType.STRING, false, false, true, false, "''");
|
||||
TableColumn privilege_template_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'");
|
||||
|
@ -154,82 +152,8 @@ public class DatabaseTables {
|
|||
new AddColumn(column).table("privilege_template").ifNotExists().execute();
|
||||
}
|
||||
|
||||
// 1.31.6 dominion add blue-map tile color
|
||||
// 1.31.6
|
||||
TableColumn dominion_color = new TableColumn("color", FieldType.STRING, false, false, true, false, "'#00BFFF'");
|
||||
new AddColumn(dominion_color).table("dominion").ifNotExists().execute();
|
||||
|
||||
// 1.34.0 add dominion_group
|
||||
if (!Common.IsTableExist("dominion_member")) {
|
||||
TableColumn player_privilege_group_id = new TableColumn("group_id", FieldType.INT, false, false, true, false, -1);
|
||||
new AddColumn(player_privilege_group_id).table("player_privilege").ifNotExists().execute();
|
||||
}
|
||||
|
||||
TableColumn dominion_group_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
||||
TableColumn dominion_group_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1);
|
||||
TableColumn dominion_group_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'");
|
||||
TableColumn dominion_group_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
|
||||
CreateTable.ForeignKey group_dom_id_fk = new CreateTable.ForeignKey(dominion_group_dom_id, "dominion", dominion_id, true);
|
||||
CreateTable group = new CreateTable().ifNotExists();
|
||||
group.table("dominion_group")
|
||||
.field(dominion_group_id)
|
||||
.field(dominion_group_dom_id)
|
||||
.field(dominion_group_name)
|
||||
.field(dominion_group_admin)
|
||||
.foreignKey(group_dom_id_fk)
|
||||
.unique(dominion_group_dom_id, dominion_group_name);
|
||||
group.execute();
|
||||
for (Flag flag : Flag.getAllPrivilegeFlags()) {
|
||||
TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
|
||||
new AddColumn(column).table("dominion_group").ifNotExists().execute();
|
||||
}
|
||||
|
||||
// 1.35.0 migrate player_privilege -> dominion_member
|
||||
TableColumn dominion_member_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
||||
TableColumn dominion_member_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, false, "''");
|
||||
TableColumn dominion_member_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1);
|
||||
TableColumn dominion_member_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
|
||||
TableColumn dominion_member_group_id = new TableColumn("group_id", FieldType.INT, false, false, true, false, -1);
|
||||
CreateTable.ForeignKey dominion_member_player_uuid_fk = new CreateTable.ForeignKey(dominion_member_player_uuid, "player_name", player_name_uuid, true);
|
||||
CreateTable.ForeignKey dominion_member_dom_id_fk = new CreateTable.ForeignKey(dominion_member_dom_id, "dominion", dominion_id, true);
|
||||
CreateTable dominion_member = new CreateTable().ifNotExists();
|
||||
dominion_member.table("dominion_member")
|
||||
.field(dominion_member_id)
|
||||
.field(dominion_member_player_uuid)
|
||||
.field(dominion_member_dom_id)
|
||||
.field(dominion_member_admin)
|
||||
.field(dominion_member_group_id)
|
||||
.foreignKey(dominion_member_player_uuid_fk)
|
||||
.foreignKey(dominion_member_dom_id_fk)
|
||||
.unique(dominion_member_player_uuid, dominion_member_dom_id);
|
||||
dominion_member.execute();
|
||||
for (Flag flag : Flag.getAllPrivilegeFlags()) {
|
||||
TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
|
||||
new AddColumn(column).table("dominion_member").ifNotExists().execute();
|
||||
}
|
||||
if (Common.IsTableExist("player_privilege")) {
|
||||
// migrate from player_privilege to dominion_member
|
||||
String sql = "SELECT * FROM player_privilege;";
|
||||
try (ResultSet rs = DatabaseManager.instance.query(sql)) {
|
||||
while (rs.next()) {
|
||||
String player_uuid = rs.getString("player_uuid");
|
||||
int dom_id = rs.getInt("dom_id");
|
||||
boolean admin = rs.getBoolean("admin");
|
||||
int group_id = rs.getInt("group_id");
|
||||
InsertRow insert = new InsertRow().table("dominion_member")
|
||||
.field(new Field("player_uuid", player_uuid))
|
||||
.field(new Field("dom_id", dom_id))
|
||||
.field(new Field("group_id", group_id))
|
||||
.field(new Field("admin", admin));
|
||||
for (Flag flag : Flag.getAllPrivilegeFlags()) {
|
||||
insert.field(new Field(flag.getFlagName(), rs.getBoolean(flag.getFlagName())));
|
||||
}
|
||||
insert.execute();
|
||||
}
|
||||
sql = "DROP TABLE player_privilege;";
|
||||
DatabaseManager.instance.query(sql);
|
||||
} catch (Exception e) {
|
||||
DatabaseManager.handleDatabaseError("迁移 player_privilege 到 dominion_member 失败", e, sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ import java.util.List;
|
|||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.notOp;
|
||||
import static cn.lunadeer.dominion.tuis.dominion.DominionList.BuildTreeLines;
|
||||
import static cn.lunadeer.dominion.tuis.ListDominion.BuildTreeLines;
|
||||
|
||||
public class AllDominion {
|
||||
|
||||
|
@ -21,7 +21,7 @@ public class AllDominion {
|
|||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
if (notOp(player)) return;
|
||||
int page = getPage(args, 1);
|
||||
int page = getPage(args);
|
||||
|
||||
List<DominionNode> allDominions = Cache.instance.getAllDominionTree();
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ package cn.lunadeer.dominion.tuis;
|
|||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
|
@ -14,11 +14,11 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
|||
|
||||
public class Apis {
|
||||
|
||||
public static int getPage(String[] args, int pos) {
|
||||
public static int getPage(String[] args) {
|
||||
int page = 1;
|
||||
if (args.length > pos) {
|
||||
if (args.length == 2) {
|
||||
try {
|
||||
page = Integer.parseInt(args[pos]);
|
||||
page = Integer.parseInt(args[1]);
|
||||
} catch (Exception e) {
|
||||
return 1;
|
||||
}
|
||||
|
@ -42,10 +42,26 @@ public class Apis {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 尝试从 arg[2] 获取领地名称
|
||||
* 如果没有此参数则会尝试获取玩家当前所在位置
|
||||
*
|
||||
* @param player 玩家
|
||||
* @param args 参数
|
||||
* @return 领地信息
|
||||
*/
|
||||
public static DominionDTO getDominionNameArg_2(Player player, String[] args) {
|
||||
if (args.length >= 3) {
|
||||
return DominionDTO.select(args[2]);
|
||||
} else {
|
||||
return Cache.instance.getPlayerCurrentDominion(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean noAuthToManage(Player player, DominionDTO dominion) {
|
||||
if (player.isOp()) return false;
|
||||
if (!dominion.getOwner().equals(player.getUniqueId())) {
|
||||
MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId());
|
||||
PlayerPrivilegeDTO privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId());
|
||||
if (privileges == null || !privileges.getAdmin()) {
|
||||
Notification.error(player, "你不是领地 %s 的拥有者或管理员,无权访问此页面", dominion.getName());
|
||||
return true;
|
||||
|
@ -65,11 +81,11 @@ public class Apis {
|
|||
public static void printHelp(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
int page = getPage(args, 1);
|
||||
int page = getPage(args);
|
||||
ListView view = ListView.create(10, "/dominion help");
|
||||
view.title("领地插件命令帮助 <>表示必填参数 []表示可选参数")
|
||||
.add(Line.create().append("打开交互菜单").append("/dominion menu"))
|
||||
.add(Line.create().append("查看帮助").append("/dominion help [页码]"))
|
||||
.add(Line.create().append("打开交互菜单").append(Button.create("/dominion menu").setExecuteCommand("/dominion menu").build()))
|
||||
.add(Line.create().append("查看帮助").append(Button.create("/dominion help [页码]").setExecuteCommand("/dominion help 1").build()))
|
||||
.add(Line.create().append("创建领地").append("/dominion create <领地名称>"))
|
||||
.add(Line.create().append("自动创建领地").append("/dominion auto_create <领地名称>"))
|
||||
.add(Line.create().append("创建子领地").append("/dominion create_sub <子领地名称> [父领地名称]"))
|
||||
|
@ -88,6 +104,18 @@ public class Apis {
|
|||
.add(Line.create().append("---[管理员指令]---"))
|
||||
.add(Line.create().append("刷新缓存").append(Button.create("/dominion reload_cache").setExecuteCommand("/dominion reload_cache").build()))
|
||||
.add(Line.create().append("重载配置").append(Button.create("/dominion reload_config").setExecuteCommand("/dominion reload_config").build()))
|
||||
// 以下指令主要被用于 ui 触发
|
||||
.add(Line.create().append("---[以下主要用于UI触发]---"))
|
||||
.add(Line.create().append("列出所有领地").append(Button.create("/dominion list [页码]").setExecuteCommand("/dominion list").build()))
|
||||
.add(Line.create().append("查看领地信息").append(Button.create("/dominion info [领地名称]").setExecuteCommand("/dominion info").build()))
|
||||
.add(Line.create().append("查看领地权限信息").append(Button.create("/dominion flag_info <领地名称> [页码]").setExecuteCommand("/dominion flag_info").build()))
|
||||
.add(Line.create().append("设置领地权限").append("/dominion set <权限名称> <true/false> [领地名称]"))
|
||||
.add(Line.create().append("创建玩家特权").append("/dominion create_privilege <玩家名称> [领地名称]"))
|
||||
.add(Line.create().append("设置玩家特权").append("/dominion set_privilege <玩家名称> <权限名称> <true/false> [领地名称]"))
|
||||
.add(Line.create().append("重置玩家特权").append("/dominion clear_privilege <玩家名称> [领地名称]"))
|
||||
.add(Line.create().append("查看领地玩家特权列表").append("/dominion privilege_list [领地名称] [页码]"))
|
||||
.add(Line.create().append("查看玩家特权信息").append("/dominion privilege_info <玩家名称> [领地名称] [页码]"))
|
||||
.add(Line.create().append("系统配置").append(Button.create("/dominion config [页码]").setExecuteCommand("/dominion config").build()))
|
||||
.showOn(player, page);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,13 +15,13 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
|||
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.notOp;
|
||||
|
||||
public class SysConfig {
|
||||
public class DominionConfig {
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
if (notOp(player)) return;
|
||||
int page = getPage(args, 1);
|
||||
ListView view = ListView.create(10, "/dominion sys_config");
|
||||
int page = getPage(args);
|
||||
ListView view = ListView.create(10, "/dominion config");
|
||||
view.title("系统配置");
|
||||
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("系统配置"));
|
||||
|
||||
|
@ -151,15 +151,6 @@ public class SysConfig {
|
|||
.append(NumChanger.create(Dominion.config.getEconomyRefund(), "/dominion set_config economy_refund", 0.01).setPageNumber(page).build());
|
||||
view.add(refund);
|
||||
}
|
||||
if (Dominion.config.getResidenceMigration()) {
|
||||
view.add(Line.create()
|
||||
.append("是否允许从Residence迁移数据")
|
||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_config residence_migration false " + page).build()));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append("是否允许从Residence迁移数据")
|
||||
.append(Button.createRed("☐").setExecuteCommand("/dominion set_config residence_migration true " + page).build()));
|
||||
}
|
||||
view.showOn(player, page);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion.manage;
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
|
@ -11,24 +11,29 @@ 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.getPage;
|
||||
|
||||
public class EnvSetting {
|
||||
public class DominionEnvInfo {
|
||||
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 2) {
|
||||
Notification.error(sender, "用法: /dominion env_setting <领地名称> [页码]");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
if (args.length < 2) {
|
||||
Notification.error(sender, "用法: /dominion env_info <领地名称> [页码]");
|
||||
return;
|
||||
}
|
||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地 %s 不存在", args[1]);
|
||||
return;
|
||||
}
|
||||
int page = getPage(args, 2);
|
||||
ListView view = ListView.create(10, "/dominion env_setting " + dominion.getName());
|
||||
int page = 1;
|
||||
if (args.length == 3) {
|
||||
try {
|
||||
page = Integer.parseInt(args[2]);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
ListView view = ListView.create(10, "/dominion env_info " + dominion.getName());
|
||||
view.title("领地 " + dominion.getName() + " 环境设置")
|
||||
.navigator(Line.create()
|
||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
|
@ -1,4 +1,4 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion.manage;
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
|
@ -11,24 +11,29 @@ 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.getPage;
|
||||
|
||||
public class GuestSetting {
|
||||
public class DominionFlagInfo {
|
||||
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 2) {
|
||||
Notification.error(sender, "用法: /dominion guest_setting <领地名称> [页码]");
|
||||
return;
|
||||
}
|
||||
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, "领地 %s 不存在", args[1]);
|
||||
return;
|
||||
}
|
||||
int page = getPage(args, 2);
|
||||
ListView view = ListView.create(10, "/dominion guest_setting " + dominion.getName());
|
||||
int page = 1;
|
||||
if (args.length == 3) {
|
||||
try {
|
||||
page = Integer.parseInt(args[2]);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
ListView view = ListView.create(10, "/dominion flag_info " + dominion.getName());
|
||||
view.title("领地 " + dominion.getName() + " 访客权限")
|
||||
.navigator(Line.create()
|
||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
|
@ -1,4 +1,4 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion;
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
|
@ -12,7 +12,8 @@ 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.*;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||
|
||||
public class DominionManage {
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
|
@ -24,22 +25,18 @@ public class DominionManage {
|
|||
return;
|
||||
}
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
int page = getPage(args, 2);
|
||||
Line size_info = Line.create()
|
||||
.append(Button.create("详细信息").setExecuteCommand("/dominion info " + dominion.getName()).build())
|
||||
.append("查看领地详细信息");
|
||||
Line env_info = Line.create()
|
||||
.append(Button.create("环境设置").setExecuteCommand("/dominion env_setting " + dominion.getName()).build())
|
||||
.append(Button.create("环境设置").setExecuteCommand("/dominion env_info " + dominion.getName()).build())
|
||||
.append("设置领地内的一些非玩家相关效果");
|
||||
Line flag_info = Line.create()
|
||||
.append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build())
|
||||
.append(Button.create("访客权限").setExecuteCommand("/dominion flag_info " + dominion.getName()).build())
|
||||
.append("访客在此领地的权限");
|
||||
Line privilege_list = Line.create()
|
||||
.append(Button.create("成员管理").setExecuteCommand("/dominion member list " + dominion.getName()).build())
|
||||
.append(Button.create("成员权限").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build())
|
||||
.append("管理此领地成员的权限");
|
||||
Line group_list = Line.create()
|
||||
.append(Button.create("权限组").setExecuteCommand("/dominion group list " + dominion.getName()).build())
|
||||
.append("管理此领地的权限组");
|
||||
Line set_tp = Line.create()
|
||||
.append(Button.create("设置传送点").setExecuteCommand("/dominion set_tp_location " + dominion.getName()).build())
|
||||
.append("设置当前位置为此领地传送点");
|
||||
|
@ -67,7 +64,6 @@ public class DominionManage {
|
|||
.add(env_info)
|
||||
.add(flag_info)
|
||||
.add(privilege_list)
|
||||
.add(group_list)
|
||||
.add(set_tp)
|
||||
.add(rename)
|
||||
.add(join_msg)
|
||||
|
@ -75,6 +71,6 @@ public class DominionManage {
|
|||
if (Dominion.config.getBlueMap()) {
|
||||
view.add(map_color);
|
||||
}
|
||||
view.showOn(player, page);
|
||||
view.showOn(player, 1);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.format.Style;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
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.getDominionNameArg_1;
|
||||
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 = getDominionNameArg_1(player, args);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_list <领地名称>");
|
||||
return;
|
||||
}
|
||||
ListView view = ListView.create(10, "/dominion privilege_list " + dominion.getName());
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(dominion.getId());
|
||||
view.title("领地 " + dominion.getName() + " 成员列表");
|
||||
view.navigator(
|
||||
Line.create()
|
||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||
.append("成员列表")
|
||||
);
|
||||
view.add(Line.create().append(Button.create("添加成员").setExecuteCommand("/dominion select_player_create_privilege " + dominion.getName()).build()));
|
||||
for (PlayerPrivilegeDTO privilege : privileges) {
|
||||
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
|
||||
if (p_player == null) continue;
|
||||
Line line = Line.create();
|
||||
|
||||
if (privilege.getAdmin()) {
|
||||
line.append(adminTag);
|
||||
} else {
|
||||
if (!privilege.getFlagValue(Flag.MOVE)) {
|
||||
line.append(banTag);
|
||||
} else {
|
||||
line.append(normalTag);
|
||||
}
|
||||
}
|
||||
|
||||
line.append(Button.createGreen("权限")
|
||||
.setHoverText("配置成员权限")
|
||||
.setExecuteCommand("/dominion privilege_info " + p_player.getLastKnownName() + " " + dominion.getName()).build());
|
||||
if ((!player.getName().equals(p_player.getLastKnownName()) && !privilege.getAdmin()) || dominion.getOwner().equals(player.getUniqueId())) {
|
||||
line.append(Button.createRed("移除")
|
||||
.setHoverText("将此成员移出(变为访客)")
|
||||
.setExecuteCommand("/dominion clear_privilege " + p_player.getLastKnownName() + " " + dominion.getName() + " b").build());
|
||||
line.append(Button.createGreen("模板")
|
||||
.setHoverText("套用权限模板")
|
||||
.setExecuteCommand("/dominion select_template " + p_player.getLastKnownName() + " " + dominion.getName() + " " + page).build());
|
||||
}
|
||||
line.append(p_player.getLastKnownName());
|
||||
view.add(line);
|
||||
}
|
||||
view.showOn(player, page);
|
||||
}
|
||||
|
||||
private static final TextComponent adminTag = Component.text("[A]", Style.style(TextColor.color(97, 97, 210)))
|
||||
.hoverEvent(Component.text("这是一个管理员"));
|
||||
private static final TextComponent normalTag = Component.text("[N]", Style.style(TextColor.color(255, 255, 255)))
|
||||
.hoverEvent(Component.text("这是一个普通成员"));
|
||||
private static final TextComponent banTag = Component.text("[B]", Style.style(TextColor.color(255, 67, 0)))
|
||||
.hoverEvent(Component.text("这是一个黑名单成员"));
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion.manage;
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.controllers.PlayerController;
|
||||
|
@ -15,7 +15,7 @@ import org.bukkit.entity.Player;
|
|||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1;
|
||||
|
||||
public class SizeInfo {
|
||||
public class DominionSizeInfo {
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
|
@ -47,7 +47,7 @@ public class SizeInfo {
|
|||
))
|
||||
.actionBar(Line.create()
|
||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||
.append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build()))
|
||||
.append(Button.create("权限列表").setExecuteCommand("/dominion flag_info " + dominion.getName()).build()))
|
||||
.showOn(player);
|
||||
ParticleRender.showBoxFace(Dominion.instance, player,
|
||||
dominion.getLocation1(),
|
|
@ -1,4 +1,4 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion;
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.DominionNode;
|
||||
|
@ -18,11 +18,11 @@ import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
|||
import static cn.lunadeer.dominion.commands.Helper.playerAdminDominions;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||
|
||||
public class DominionList {
|
||||
public class ListDominion {
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
int page = getPage(args, 1);
|
||||
int page = getPage(args);
|
||||
ListView view = ListView.create(10, "/dominion list");
|
||||
|
||||
view.title("我的领地列表");
|
|
@ -1,6 +1,5 @@
|
|||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ViewStyles;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
|
@ -31,7 +30,7 @@ public class Menu {
|
|||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
||||
.append("查看我的领地");
|
||||
Line template = Line.create()
|
||||
.append(Button.create("模板列表").setExecuteCommand("/dominion template list").build())
|
||||
.append(Button.create("模板列表").setExecuteCommand("/dominion template_list").build())
|
||||
.append("成员权限模板列表");
|
||||
Line help = Line.create()
|
||||
.append(Button.create("指令帮助").setExecuteCommand("/dominion help").build())
|
||||
|
@ -39,9 +38,6 @@ public class Menu {
|
|||
Line link = Line.create()
|
||||
.append(Button.create("使用文档").setOpenURL("https://ssl.lunadeer.cn:14448/doc/23/").build())
|
||||
.append("在浏览器中打开使用文档");
|
||||
Line migrate = Line.create()
|
||||
.append(Button.create("迁移数据").setExecuteCommand("/dominion migrate_list").build())
|
||||
.append("把你的领地从Residence迁移到Dominion");
|
||||
Line all = Line.create()
|
||||
.append(Button.create("所有领地").setExecuteCommand("/dominion all_dominion").build())
|
||||
.append("查看所有领地");
|
||||
|
@ -62,9 +58,6 @@ public class Menu {
|
|||
.add(template)
|
||||
.add(help)
|
||||
.add(link);
|
||||
if (Dominion.config.getResidenceMigration()) {
|
||||
view.add(migrate);
|
||||
}
|
||||
if (player.isOp()) {
|
||||
view.add(Line.create().append(""));
|
||||
view.add(Line.create().append(Component.text("--- 以下选项仅OP可见 ---", ViewStyles.main_color)));
|
||||
|
|
|
@ -1,75 +0,0 @@
|
|||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.utils.ResMigration;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.format.Style;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
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.playerOnly;
|
||||
|
||||
public class MigrateList {
|
||||
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
|
||||
if (!Dominion.config.getResidenceMigration()) {
|
||||
Notification.error(sender, "Residence 迁移功能没有开启");
|
||||
return;
|
||||
}
|
||||
|
||||
int page = Apis.getPage(args, 1);
|
||||
|
||||
ListView view = ListView.create(10, "/dominion migrate_list");
|
||||
|
||||
view.title("从 Residence 迁移数据");
|
||||
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("Res数据"));
|
||||
|
||||
List<ResMigration.ResidenceNode> res_data = Cache.instance.getResidenceData(player.getUniqueId());
|
||||
|
||||
if (res_data == null) {
|
||||
view.add(Line.create().append("你没有可迁移的数据"));
|
||||
} else {
|
||||
view.addLines(BuildTreeLines(res_data, 0, page));
|
||||
}
|
||||
|
||||
view.showOn(player, page);
|
||||
}
|
||||
|
||||
public static List<Line> BuildTreeLines(List<ResMigration.ResidenceNode> dominionTree, Integer depth, int page) {
|
||||
List<Line> lines = new ArrayList<>();
|
||||
StringBuilder prefix = new StringBuilder();
|
||||
for (int i = 0; i < depth; i++) {
|
||||
prefix.append(" | ");
|
||||
}
|
||||
for (ResMigration.ResidenceNode node : dominionTree) {
|
||||
TextComponent migrate = Button.create("迁移").setExecuteCommand("/dominion migrate " + node.name + " " + page).build();
|
||||
Line line = Line.create();
|
||||
if (depth == 0) {
|
||||
line.append(migrate);
|
||||
} else {
|
||||
line.append(Component.text("[迁移]",
|
||||
Style.style(TextColor.color(190, 190, 190),
|
||||
TextDecoration.STRIKETHROUGH))
|
||||
.hoverEvent(Component.text("子领地无法手动迁移,会随父领地自动迁移")));
|
||||
}
|
||||
line.append(prefix + node.name);
|
||||
lines.add(line);
|
||||
lines.addAll(BuildTreeLines(node.children, depth + 1, page));
|
||||
}
|
||||
return lines;
|
||||
}
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion.manage.member;
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
|
@ -13,40 +13,35 @@ 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.getPage;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_2;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||
|
||||
public class MemberSetting {
|
||||
public static void show(CommandSender sender, String dominionName, String playerName, Integer page) {
|
||||
show(sender, new String[]{"", "", dominionName, playerName, page.toString()});
|
||||
}
|
||||
|
||||
public static void show(CommandSender sender, String dominionName, String playerName) {
|
||||
show(sender, new String[]{"", "", dominionName, playerName});
|
||||
}
|
||||
|
||||
public class PrivilegeInfo {
|
||||
// /dominion privilege_info <玩家名称> [领地名称] [页码]
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 3) {
|
||||
Notification.error(sender, "用法: /dominion member setting <领地名称> <玩家名称> [页码]");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = DominionDTO.select(args[2]);
|
||||
DominionDTO dominion = getDominionNameArg_2(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, "领地 %s 不存在", args[2]);
|
||||
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion privilege_info <玩家名称> [领地名称]");
|
||||
return;
|
||||
}
|
||||
ListView view = ListView.create(10, "/dominion privilege_info " + playerName + " " + dominion.getName());
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
int page = getPage(args, 4);
|
||||
String playerName = args[3];
|
||||
ListView view = ListView.create(10, "/dominion member setting " + dominion.getName() + " " + playerName);
|
||||
PlayerDTO playerDTO = PlayerDTO.select(playerName);
|
||||
if (playerDTO == null) {
|
||||
Notification.error(sender, "玩家 %s 不存在", playerName);
|
||||
return;
|
||||
}
|
||||
MemberDTO privilege = MemberDTO.select(playerDTO.getUuid(), dominion.getId());
|
||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(playerDTO.getUuid(), dominion.getId());
|
||||
if (privilege == null) {
|
||||
Notification.warn(sender, "玩家 %s 不是领地 %s 的成员", playerName, dominion.getName());
|
||||
return;
|
||||
|
@ -57,24 +52,16 @@ public class MemberSetting {
|
|||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||
.append(Button.create("成员列表").setExecuteCommand("/dominion member list " + dominion.getName()).build())
|
||||
.append(Button.create("成员列表").setExecuteCommand("/dominion privilege_list " + dominion.getName()).build())
|
||||
.append("成员权限")
|
||||
);
|
||||
view.add(Line.create().append(Button.createGreen("套用模板")
|
||||
.setHoverText("选择一个权限模板套用")
|
||||
.setExecuteCommand("/dominion member select_template " + dominion.getName() + " " + playerName).build()));
|
||||
if (privilege.getAdmin()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑").setExecuteCommand(
|
||||
parseCommand(dominion.getName(), playerName, "admin", false, page)
|
||||
).build())
|
||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + playerName + " admin false " + dominion.getName() + " " + page).build())
|
||||
.append("管理员"));
|
||||
view.add(createOption(Flag.GLOW, privilege.getFlagValue(Flag.GLOW), playerName, dominion.getName(), page));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐").setExecuteCommand(
|
||||
parseCommand(dominion.getName(), playerName, "admin", true, page)
|
||||
).build())
|
||||
.append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + playerName + " admin true " + dominion.getName() + " " + page).build())
|
||||
.append("管理员"));
|
||||
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
||||
view.add(createOption(flag, privilege.getFlagValue(flag), playerName, dominion.getName(), page));
|
||||
|
@ -86,20 +73,12 @@ public class MemberSetting {
|
|||
private static Line createOption(Flag flag, boolean value, String player_name, String dominion_name, int page) {
|
||||
if (value) {
|
||||
return Line.create()
|
||||
.append(Button.createGreen("☑").setExecuteCommand(
|
||||
parseCommand(dominion_name, player_name, flag.getFlagName(), false, page)
|
||||
).build())
|
||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_privilege " + player_name + " " + flag.getFlagName() + " false " + dominion_name + " " + page).build())
|
||||
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
|
||||
} else {
|
||||
return Line.create()
|
||||
.append(Button.createRed("☐").setExecuteCommand(
|
||||
parseCommand(dominion_name, player_name, flag.getFlagName(), true, page)
|
||||
).build())
|
||||
.append(Button.createRed("☐").setExecuteCommand("/dominion set_privilege " + player_name + " " + flag.getFlagName() + " true " + dominion_name + " " + page).build())
|
||||
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
|
||||
}
|
||||
}
|
||||
|
||||
private static String parseCommand(String dominionName, String playerName, String flagName, boolean value, int page) {
|
||||
return String.format("/dominion member set_flag %s %s %s %s %d", dominionName, playerName, flagName, value, page);
|
||||
}
|
||||
}
|
|
@ -1,8 +1,7 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion.manage.member;
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.controllers.PlayerController;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
|
@ -11,29 +10,26 @@ import org.bukkit.entity.Player;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.CommandParser;
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||
|
||||
public class SelectPlayer {
|
||||
public static void show(CommandSender sender, String dominionName, Integer page) {
|
||||
show(sender, new String[]{"", "", dominionName, page.toString()});
|
||||
}
|
||||
|
||||
// /dominion select_player_create_privilege <领地名称> [页码]
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 3) {
|
||||
Notification.error(sender, "用法: /dominion member select_player <领地名称> [页码]");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
int page = getPage(args, 3);
|
||||
String dominion_name = args[2];
|
||||
ListView view = ListView.create(10, "/dominion member select_player " + dominion_name);
|
||||
int page = 1;
|
||||
if (args.length == 3) {
|
||||
try {
|
||||
page = Integer.parseInt(args[2]);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
String dominion_name = args[1];
|
||||
ListView view = ListView.create(10, "/dominion select_player_create_privilege " + dominion_name);
|
||||
Line sub = Line.create()
|
||||
.append("只能选择已经登录过的玩家")
|
||||
.append(Button.create("搜索").setExecuteCommand("/dominion cui_member_add " + dominion_name).build())
|
||||
.append(Button.create("返回").setExecuteCommand("/dominion member list " + dominion_name).build());
|
||||
.append(Button.create("搜索").setExecuteCommand("/dominion cui_create_privilege " + dominion_name).build())
|
||||
.append(Button.create("返回").setExecuteCommand("/dominion privilege_list " + dominion_name).build());
|
||||
view.title("选择玩家添加为成员").subtitle(sub);
|
||||
List<PlayerDTO> players = PlayerController.allPlayers();
|
||||
for (PlayerDTO p : players) {
|
||||
|
@ -42,7 +38,7 @@ public class SelectPlayer {
|
|||
}
|
||||
view.add(Line.create().
|
||||
append(Button.create(p.getLastKnownName())
|
||||
.setExecuteCommand(CommandParser("/dominion member add %s %s", dominion_name, p.getLastKnownName()))
|
||||
.setExecuteCommand("/dominion create_privilege " + p.getLastKnownName() + " " + dominion_name + " b")
|
||||
.build()));
|
||||
}
|
||||
view.showOn(player, page);
|
|
@ -1,7 +1,6 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion.manage.member;
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
|
@ -11,42 +10,40 @@ import org.bukkit.entity.Player;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.CommandParser;
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||
|
||||
public class SelectTemplate {
|
||||
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 4) {
|
||||
// /dominion member select_template <领地名称> <玩家名称> [页码]
|
||||
Notification.error(sender, "用法: /dominion member select_template <领地名称> <玩家名称> [页码]");
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
|
||||
String playerName = args[1];
|
||||
String dominionName = args[2];
|
||||
String playerName = args[3];
|
||||
String backPage = args[3];
|
||||
|
||||
|
||||
int page = getPage(args, 4);
|
||||
int page = 1;
|
||||
if (args.length == 5) {
|
||||
try {
|
||||
page = Integer.parseInt(args[4]);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
|
||||
|
||||
ListView view = ListView.create(10, "/dominion member select_template " + dominionName + " " + playerName);
|
||||
ListView view = ListView.create(10, "/dominion select_template " + playerName + " " + dominionName + " " + backPage);
|
||||
view.title("选择一个模板");
|
||||
Line sub = Line.create()
|
||||
.append("套用在领地 " + dominionName + " 的成员 " + playerName + " 身上")
|
||||
.append(Button.create("返回").setExecuteCommand("/dominion member setting " + dominionName + " " + playerName).build());
|
||||
.append(Button.create("返回").setExecuteCommand("/dominion privilege_list " + dominionName + " " + backPage).build());
|
||||
view.subtitle(sub);
|
||||
|
||||
for (PrivilegeTemplateDTO template : templates) {
|
||||
// /dominion member apply_template <领地名称> <成员名称> <模板名称>
|
||||
// /dominion apply_template <玩家名称> <领地名称> <模板名称>
|
||||
view.add(Line.create()
|
||||
.append(Button.create("选择")
|
||||
.setExecuteCommand(CommandParser("/dominion member apply_template %s %s %s", dominionName, playerName, template.getName()))
|
||||
.setExecuteCommand("/dominion apply_template " + playerName + " " + dominionName + " " + template.getName() + " " + backPage)
|
||||
.build())
|
||||
.append(Component.text(template.getName())));
|
||||
}
|
|
@ -1,9 +1,10 @@
|
|||
package cn.lunadeer.dominion.tuis.template;
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
@ -14,19 +15,11 @@ import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
|||
|
||||
public class TemplateList {
|
||||
|
||||
public static void show(CommandSender sender) {
|
||||
show(sender, 1);
|
||||
}
|
||||
|
||||
public static void show(CommandSender sender, int page) {
|
||||
show(sender, new String[]{"", "", String.valueOf(page)});
|
||||
}
|
||||
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
int page = getPage(args, 2);
|
||||
ListView view = ListView.create(10, "/dominion template list");
|
||||
int page = getPage(args);
|
||||
ListView view = ListView.create(10, "/dominion template_list");
|
||||
|
||||
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
|
||||
view.title("成员权限模板列表");
|
||||
|
@ -38,8 +31,8 @@ public class TemplateList {
|
|||
view.add(Line.create().append(create.build()));
|
||||
|
||||
for (PrivilegeTemplateDTO template : templates) {
|
||||
Button manage = Button.createGreen("配置").setExecuteCommand("/dominion template setting " + template.getName());
|
||||
Button delete = Button.createRed("删除").setExecuteCommand("/dominion template delete " + template.getName());
|
||||
Button manage = Button.createGreen("配置").setExecuteCommand("/dominion template_manage " + template.getName());
|
||||
Button delete = Button.createRed("删除").setExecuteCommand("/dominion template_delete " + template.getName());
|
||||
Line line = Line.create()
|
||||
.append(delete.build())
|
||||
.append(manage.build())
|
|
@ -1,4 +1,4 @@
|
|||
package cn.lunadeer.dominion.tuis.template;
|
||||
package cn.lunadeer.dominion.tuis;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||
|
@ -10,35 +10,35 @@ import net.kyori.adventure.text.Component;
|
|||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||
|
||||
public class TemplateSetting {
|
||||
|
||||
// /dominion template setting <模板名称> [页码]
|
||||
public static void show(CommandSender sender, String templateName, int page) {
|
||||
show(sender, new String[]{"", "", templateName, String.valueOf(page)});
|
||||
}
|
||||
|
||||
public static void show(CommandSender sender, String templateName) {
|
||||
show(sender, new String[]{"", "", templateName});
|
||||
}
|
||||
public class TemplateManage {
|
||||
|
||||
// /dominion template_manage <模板名称> [页码]
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
int page = getPage(args, 3);
|
||||
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(player.getUniqueId(), args[2]);
|
||||
int page = 1;
|
||||
if (args.length == 3) {
|
||||
try {
|
||||
page = Integer.parseInt(args[2]);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(player.getUniqueId(), args[1]);
|
||||
if (template == null) {
|
||||
Notification.error(sender, "模板 %s 不存在", args[2]);
|
||||
Notification.error(sender, "模板 %s 不存在", args[1]);
|
||||
return;
|
||||
}
|
||||
|
||||
ListView view = ListView.create(10, "/dominion template setting " + template.getName());
|
||||
ListView view = ListView.create(10, "/dominion template_manage " + template.getName());
|
||||
view.title("模板 " + args[1] + " 权限管理");
|
||||
view.navigator(Line.create()
|
||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
||||
.append(Button.create("模板列表").setExecuteCommand("/dominion template list").build())
|
||||
.append(Button.create("模板列表").setExecuteCommand("/dominion template_list").build())
|
||||
.append("模板管理")
|
||||
);
|
||||
|
||||
|
@ -46,11 +46,11 @@ public class TemplateSetting {
|
|||
|
||||
if (template.getAdmin()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion template set_flag " + template.getName() + " admin false " + page).build())
|
||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion template_set_flag " + template.getName() + " admin false " + page).build())
|
||||
.append("管理员"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐").setExecuteCommand("/dominion template set_flag " + template.getName() + " admin true " + page).build())
|
||||
.append(Button.createRed("☐").setExecuteCommand("/dominion template_set_flag " + template.getName() + " admin true " + page).build())
|
||||
.append("管理员"));
|
||||
}
|
||||
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
||||
|
@ -62,11 +62,11 @@ public class TemplateSetting {
|
|||
private static Line createOption(Flag flag, boolean value, String templateName, int page) {
|
||||
if (value) {
|
||||
return Line.create()
|
||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion template set_flag " + templateName + " " + flag.getFlagName() + " false " + page).build())
|
||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion template_set_flag " + templateName + " " + flag.getFlagName() + " false " + page).build())
|
||||
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
|
||||
} else {
|
||||
return Line.create()
|
||||
.append(Button.createRed("☐").setExecuteCommand("/dominion template set_flag " + templateName + " " + flag.getFlagName() + " true " + page).build())
|
||||
.append(Button.createRed("☐").setExecuteCommand("/dominion template_set_flag " + templateName + " " + flag.getFlagName() + " true " + page).build())
|
||||
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
|
||||
}
|
||||
}
|
|
@ -1,93 +0,0 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion.manage.group;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.tuis.Apis;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||
|
||||
public class GroupList {
|
||||
|
||||
public static void show(CommandSender sender, String dominionName) {
|
||||
show(sender, new String[]{"", "", dominionName});
|
||||
}
|
||||
|
||||
public static void show(CommandSender sender, String dominionName, int page) {
|
||||
show(sender, new String[]{"", "", dominionName, String.valueOf(page)});
|
||||
}
|
||||
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 3) {
|
||||
Notification.error(sender, "用法: /dominion group list <领地名称> [页码]");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = DominionDTO.select(args[2]);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地 %s 不存在", args[2]);
|
||||
return;
|
||||
}
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
int page = Apis.getPage(args, 3);
|
||||
List<GroupDTO> groups = GroupDTO.selectByDominionId(dominion.getId());
|
||||
ListView view = ListView.create(10, "/dominion group list " + dominion.getName());
|
||||
view.title("权限组列表");
|
||||
view.navigator(
|
||||
Line.create()
|
||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||
.append("权限组列表")
|
||||
);
|
||||
|
||||
Button create_btn = Button.createGreen("创建权限组")
|
||||
.setHoverText("创建一个新的权限组")
|
||||
.setExecuteCommand("/dominion cui_create_group " + dominion.getName());
|
||||
view.add(new Line().append(create_btn.build()));
|
||||
|
||||
for (GroupDTO group : groups) {
|
||||
Line line = new Line();
|
||||
Button del = Button.createRed("删除")
|
||||
.setHoverText("删除权限组 " + group.getName())
|
||||
.setExecuteCommand("/dominion group delete " + dominion.getName() + " " + group.getName());
|
||||
Button edit = Button.create("编辑")
|
||||
.setHoverText("编辑权限组 " + group.getName())
|
||||
.setExecuteCommand("/dominion group setting " + dominion.getName() + " " + group.getName());
|
||||
Button add = Button.createGreen("+")
|
||||
.setHoverText("添加成员到权限组 " + group.getName())
|
||||
.setExecuteCommand("/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + page);
|
||||
line.append(del.build()).append(edit.build()).append(group.getName()).append(add.build());
|
||||
view.add(line);
|
||||
List<MemberDTO> players = MemberDTO.selectByGroupId(group.getId());
|
||||
XLogger.debug("players: " + players.size());
|
||||
for (MemberDTO playerPrivilege : players) {
|
||||
PlayerDTO p = PlayerDTO.select(playerPrivilege.getPlayerUUID());
|
||||
if (p == null) continue;
|
||||
Button remove = Button.createRed("-")
|
||||
.setHoverText("把 " + p.getLastKnownName() + " 移出权限组 " + group.getName())
|
||||
.setExecuteCommand("/dominion group remove_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + page);
|
||||
Line playerLine = new Line().setDivider("");
|
||||
playerLine.append(Component.text(" "));
|
||||
playerLine.append(remove.build()).append(" | " + p.getLastKnownName());
|
||||
view.add(playerLine);
|
||||
}
|
||||
view.add(new Line().append(""));
|
||||
}
|
||||
view.showOn(player, page);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,101 +0,0 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion.manage.group;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.Flag;
|
||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||
import cn.lunadeer.dominion.tuis.Apis;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||
|
||||
public class GroupSetting {
|
||||
public static void show(CommandSender sender, String dominionName, String groupName) {
|
||||
show(sender, new String[]{"", "", dominionName, groupName});
|
||||
}
|
||||
|
||||
public static void show(CommandSender sender, String dominionName, String groupName, Integer page) {
|
||||
show(sender, new String[]{"", "", dominionName, groupName, page.toString()});
|
||||
}
|
||||
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 4) {
|
||||
Notification.error(sender, "用法: /dominion group setting <领地名称> <权限组名称> [页码]");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = DominionDTO.select(args[2]);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地 %s 不存在", args[2]);
|
||||
return;
|
||||
}
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
int page = Apis.getPage(args, 4);
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), args[3]);
|
||||
if (group == null) {
|
||||
Notification.error(sender, "权限组 %s 不存在", args[3]);
|
||||
return;
|
||||
}
|
||||
|
||||
ListView view = ListView.create(10, "/dominion group setting " + dominion.getName() + " " + group.getName());
|
||||
view.title("权限组 " + group.getName() + " 管理");
|
||||
view.navigator(
|
||||
Line.create()
|
||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||
.append(Button.create("权限组列表").setExecuteCommand("/dominion group list " + dominion.getName()).build())
|
||||
.append("权限组管理")
|
||||
);
|
||||
Button rename_btn = Button.create("重命名此权限组")
|
||||
.setHoverText("重命名权限组 " + group.getName())
|
||||
.setExecuteCommand("/dominion cui_rename_group " + dominion.getName() + " " + group.getName());
|
||||
view.add(Line.create().append(rename_btn.build()));
|
||||
|
||||
if (group.getAdmin()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑")
|
||||
.setExecuteCommand(parseCommand(dominion.getName(), group.getName(), "admin", false, page))
|
||||
.build())
|
||||
.append("管理员"));
|
||||
view.add(createOption(Flag.GLOW, group.getFlagValue(Flag.GLOW), dominion.getName(), group.getName(), page));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐")
|
||||
.setExecuteCommand(parseCommand(dominion.getName(), group.getName(), "admin", true, page))
|
||||
.build())
|
||||
.append("管理员"));
|
||||
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
||||
view.add(createOption(flag, group.getFlagValue(flag), dominion.getName(), group.getName(), page));
|
||||
}
|
||||
}
|
||||
view.showOn(player, page);
|
||||
}
|
||||
|
||||
private static Line createOption(Flag flag, boolean value, String DominionName, String groupName, int page) {
|
||||
if (value) {
|
||||
return Line.create()
|
||||
.append(Button.createGreen("☑")
|
||||
.setExecuteCommand(parseCommand(DominionName, groupName, flag.getFlagName(), false, page))
|
||||
.build())
|
||||
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
|
||||
} else {
|
||||
return Line.create()
|
||||
.append(Button.createRed("☐")
|
||||
.setExecuteCommand(parseCommand(DominionName, groupName, flag.getFlagName(), true, page))
|
||||
.build())
|
||||
.append(Component.text(flag.getDisplayName()).hoverEvent(Component.text(flag.getDescription())));
|
||||
}
|
||||
}
|
||||
|
||||
private static String parseCommand(String dominionName, String groupName, String flagName, boolean value, int page) {
|
||||
return String.format("/dominion group set_flag %s %s %s %s %d", dominionName, groupName, flagName, value, page);
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion.manage.group;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import 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.getPage;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||
|
||||
public class SelectMember {
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 4) {
|
||||
Notification.error(sender, "用法: /dominion group select_member <领地名称> <权限组名称> [回显页码] [页码]");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = DominionDTO.select(args[2]);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地 %s 不存在", args[2]);
|
||||
return;
|
||||
}
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
GroupDTO group = GroupDTO.select(dominion.getId(), args[3]);
|
||||
if (group == null) {
|
||||
Notification.error(sender, "权限组不存在");
|
||||
return;
|
||||
}
|
||||
int backPage = getPage(args, 4);
|
||||
int page = getPage(args, 5);
|
||||
ListView view = ListView.create(10, "/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + backPage);
|
||||
view.title("选择成员");
|
||||
Line sub = Line.create().append("选择成员添加到权限组 " + group.getName())
|
||||
.append(Button.create("返回").setExecuteCommand("/dominion group list " + dominion.getName() + " " + backPage).build());
|
||||
view.subtitle(sub);
|
||||
List<MemberDTO> members = MemberDTO.selectByDomGroupId(dominion.getId(), -1);
|
||||
for (MemberDTO member : members) {
|
||||
PlayerDTO p = PlayerDTO.select(member.getPlayerUUID());
|
||||
if (p == null) continue;
|
||||
view.add(Line.create()
|
||||
.append(Button.create(p.getLastKnownName())
|
||||
.setExecuteCommand("/dominion group add_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + backPage)
|
||||
.build()));
|
||||
}
|
||||
view.showOn(player, page);
|
||||
}
|
||||
}
|
|
@ -1,119 +0,0 @@
|
|||
package cn.lunadeer.dominion.tuis.dominion.manage.member;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.dtos.*;
|
||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.format.Style;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.CommandParser;
|
||||
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||
|
||||
public class MemberList {
|
||||
|
||||
public static void show(CommandSender sender, String dominionName, Integer page) {
|
||||
show(sender, new String[]{"", "", dominionName, page.toString()});
|
||||
}
|
||||
|
||||
public static void show(CommandSender sender, String dominionName) {
|
||||
show(sender, new String[]{"", "", dominionName});
|
||||
}
|
||||
|
||||
public static void show(CommandSender sender, String[] args) {
|
||||
if (args.length < 3) {
|
||||
Notification.error(sender, "用法: /dominion member list <领地名称> [页码]");
|
||||
return;
|
||||
}
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
DominionDTO dominion = DominionDTO.select(args[2]);
|
||||
if (dominion == null) {
|
||||
Notification.error(sender, "领地 %s 不存在", args[2]);
|
||||
return;
|
||||
}
|
||||
int page = getPage(args, 3);
|
||||
ListView view = ListView.create(10, "/dominion member list " + dominion.getName());
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
List<MemberDTO> privileges = MemberDTO.select(dominion.getId());
|
||||
view.title("领地 " + dominion.getName() + " 成员列表");
|
||||
view.navigator(
|
||||
Line.create()
|
||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||
.append("成员列表")
|
||||
);
|
||||
view.add(Line.create().append(Button.create("添加成员")
|
||||
.setExecuteCommand(CommandParser("/dominion member select_player %s", dominion.getName())).build()));
|
||||
for (MemberDTO privilege : privileges) {
|
||||
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
|
||||
if (p_player == null) continue;
|
||||
GroupDTO group = Cache.instance.getGroup(privilege.getGroupId());
|
||||
Line line = Line.create();
|
||||
|
||||
if (group != null) {
|
||||
line.append(groupTag);
|
||||
} else if (privilege.getAdmin()) {
|
||||
line.append(adminTag);
|
||||
} else {
|
||||
if (!privilege.getFlagValue(Flag.MOVE)) {
|
||||
line.append(banTag);
|
||||
} else {
|
||||
line.append(normalTag);
|
||||
}
|
||||
}
|
||||
|
||||
Button prev = Button.createGreen("权限")
|
||||
.setHoverText("配置成员权限")
|
||||
.setExecuteCommand(CommandParser("/dominion member setting %s %s", dominion.getName(), p_player.getLastKnownName()));
|
||||
Button remove = Button.createRed("移除")
|
||||
.setHoverText("将此成员移出(变为访客)")
|
||||
.setExecuteCommand(CommandParser("/dominion member remove %s %s", dominion.getName(), p_player.getLastKnownName()));
|
||||
|
||||
if (!player.getUniqueId().equals(dominion.getOwner())) {
|
||||
boolean disable = false;
|
||||
if (group == null) {
|
||||
if (privilege.getAdmin()) {
|
||||
disable = true;
|
||||
}
|
||||
} else {
|
||||
if (group.getAdmin()) {
|
||||
disable = true;
|
||||
}
|
||||
}
|
||||
if (disable) {
|
||||
prev.setDisabled("你不是领地主人,无法编辑管理员权限");
|
||||
remove.setDisabled("你不是领地主人,无法移除管理员");
|
||||
}
|
||||
}
|
||||
if (group != null) {
|
||||
prev.setDisabled(String.format("此成员属于权限组 %s 无法单独编辑权限", group.getName()));
|
||||
}
|
||||
line.append(remove.build());
|
||||
line.append(prev.build());
|
||||
line.append(p_player.getLastKnownName());
|
||||
view.add(line);
|
||||
}
|
||||
view.showOn(player, page);
|
||||
}
|
||||
|
||||
private static final TextComponent adminTag = Component.text("[A]", Style.style(TextColor.color(97, 97, 210)))
|
||||
.hoverEvent(Component.text("这是一个管理员"));
|
||||
private static final TextComponent normalTag = Component.text("[N]", Style.style(TextColor.color(255, 255, 255)))
|
||||
.hoverEvent(Component.text("这是一个普通成员"));
|
||||
private static final TextComponent banTag = Component.text("[B]", Style.style(TextColor.color(255, 67, 0)))
|
||||
.hoverEvent(Component.text("这是一个黑名单成员"));
|
||||
private static final TextComponent groupTag = Component.text("[G]", Style.style(TextColor.color(0, 185, 153)))
|
||||
.hoverEvent(Component.text("这个成员在一个权限组里"));
|
||||
}
|
|
@ -1,155 +0,0 @@
|
|||
package cn.lunadeer.dominion.utils;
|
||||
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||
import cn.lunadeer.dominion.utils.Residence.Message;
|
||||
import cn.lunadeer.dominion.utils.Residence.Permission;
|
||||
import cn.lunadeer.dominion.utils.Residence.Residence;
|
||||
import cn.lunadeer.dominion.utils.Residence.SaveFile;
|
||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.*;
|
||||
|
||||
public class ResMigration {
|
||||
public static class ResidenceNode {
|
||||
public UUID owner;
|
||||
public World world;
|
||||
public String name;
|
||||
public Location loc1;
|
||||
public Location loc2;
|
||||
public Location tpLoc;
|
||||
public String joinMessage;
|
||||
public String leaveMessage;
|
||||
public List<ResidenceNode> children = new ArrayList<>();
|
||||
}
|
||||
|
||||
public static List<ResidenceNode> extractFromResidence(JavaPlugin plugin) {
|
||||
List<ResidenceNode> dominions = new ArrayList<>();
|
||||
File resSave = new File(plugin.getDataFolder().getParent(), "Residence");
|
||||
resSave = new File(resSave, "Save");
|
||||
resSave = new File(resSave, "Worlds");
|
||||
if (!resSave.exists()) {
|
||||
XLogger.info("Residence Save not found, skipping migration");
|
||||
return dominions;
|
||||
}
|
||||
// list .yml files
|
||||
File[] files = resSave.listFiles((dir, name) -> name.endsWith(".yml"));
|
||||
if (files == null || files.length == 0) {
|
||||
XLogger.info("No save files found");
|
||||
return dominions;
|
||||
}
|
||||
for (File file : files) {
|
||||
try {
|
||||
dominions.addAll(processWorld(file));
|
||||
} catch (Exception e) {
|
||||
XLogger.err("Failed to process file: %s, %s", file.getName(), e.getMessage());
|
||||
}
|
||||
}
|
||||
XLogger.info("Extract %d residences", dominions.size());
|
||||
return dominions;
|
||||
}
|
||||
|
||||
private static ResidenceNode parseDominion(String name, World world, Residence res, SaveFile save) {
|
||||
OfflinePlayer bukkitOwner = Dominion.instance.getServer().getOfflinePlayer(UUID.fromString(res.Permissions.OwnerUUID));
|
||||
PlayerDTO owner = PlayerDTO.get(bukkitOwner);
|
||||
if (owner == null) {
|
||||
XLogger.warn("Owner not found: " + res.Permissions.OwnerUUID);
|
||||
return null;
|
||||
}
|
||||
String[] loc = res.Areas.values().toArray()[0].toString().split(":");
|
||||
if (loc.length != 6) {
|
||||
XLogger.warn("Invalid location: " + res.Areas.get("main"));
|
||||
return null;
|
||||
}
|
||||
ResidenceNode dominionNode = new ResidenceNode();
|
||||
dominionNode.owner = owner.getUuid();
|
||||
dominionNode.world = world;
|
||||
dominionNode.name = name;
|
||||
dominionNode.joinMessage = save.Messages.get(res.Messages).EnterMessage;
|
||||
dominionNode.leaveMessage = save.Messages.get(res.Messages).LeaveMessage;
|
||||
dominionNode.loc1 = new Location(world, Double.parseDouble(loc[0]), Double.parseDouble(loc[1]), Double.parseDouble(loc[2]));
|
||||
dominionNode.loc2 = new Location(world, Double.parseDouble(loc[3]), Double.parseDouble(loc[4]), Double.parseDouble(loc[5]));
|
||||
if (res.TPLoc != null) {
|
||||
String[] tpLocStr = res.TPLoc.split(":");
|
||||
if (tpLocStr.length >= 3) {
|
||||
dominionNode.tpLoc = new Location(world, Double.parseDouble(tpLocStr[0]), Double.parseDouble(tpLocStr[1]), Double.parseDouble(tpLocStr[2]));
|
||||
}
|
||||
}
|
||||
if (res.Subzones != null) {
|
||||
for (Map.Entry<String, Residence> entry : res.Subzones.entrySet()) {
|
||||
ResidenceNode sub = parseDominion(entry.getKey(), world, entry.getValue(), save);
|
||||
if (sub != null) {
|
||||
dominionNode.children.add(sub);
|
||||
}
|
||||
}
|
||||
}
|
||||
return dominionNode;
|
||||
}
|
||||
|
||||
private static Map<String, Residence> parseResYml(Map<String, Object> zones) {
|
||||
Map<String, Residence> res = new HashMap<>();
|
||||
for (Map.Entry<String, Object> entry : zones.entrySet()) {
|
||||
Map<String, Object> zone = (Map<String, Object>) entry.getValue();
|
||||
Residence residence = new Residence();
|
||||
if (zone.containsKey("TPLoc")) {
|
||||
residence.setTPLoc((String) zone.get("TPLoc"));
|
||||
}
|
||||
residence.setMessages((int) zone.get("Messages"));
|
||||
Permission permission = new Permission();
|
||||
permission.OwnerUUID = ((Map<String, Object>) zone.get("Permissions")).get("OwnerUUID").toString();
|
||||
permission.OwnerLastKnownName = ((Map<String, Object>) zone.get("Permissions")).get("OwnerLastKnownName").toString();
|
||||
residence.setPermissions(permission);
|
||||
residence.setAreas((Map<String, String>) zone.get("Areas"));
|
||||
if (zone.containsKey("Subzones")) {
|
||||
residence.setSubzones(parseResYml((Map<String, Object>) zone.get("Subzones")));
|
||||
}
|
||||
res.put(entry.getKey(), residence);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
private static List<ResidenceNode> processWorld(File saveFile) throws Exception {
|
||||
XLogger.debug("=====================================");
|
||||
XLogger.debug("Processing file: %s", saveFile.getName());
|
||||
String worldName = saveFile.getName().replace("res_", "").replace(".yml", "");
|
||||
World world = Dominion.instance.getServer().getWorld(worldName);
|
||||
InputStream inputStream = Files.newInputStream(saveFile.toPath());
|
||||
|
||||
Map<String, Object> yaml = new Yaml().load(inputStream);
|
||||
|
||||
SaveFile save = new SaveFile();
|
||||
|
||||
Map<Integer, Object> Messages = (Map<Integer, Object>) yaml.get("Messages");
|
||||
Map<Integer, Message> messages = new HashMap<>();
|
||||
for (Map.Entry<Integer, Object> entry : Messages.entrySet()) {
|
||||
Map<String, String> message = (Map<String, String>) entry.getValue();
|
||||
Message msg = new Message();
|
||||
msg.EnterMessage = (String) message.get("EnterMessage");
|
||||
msg.LeaveMessage = (String) message.get("LeaveMessage");
|
||||
messages.put(entry.getKey(), msg);
|
||||
}
|
||||
save.setMessages(messages);
|
||||
|
||||
Map<String, Object> Residences = (Map<String, Object>) yaml.get("Residences");
|
||||
save.Residences = parseResYml(Residences);
|
||||
|
||||
inputStream.close();
|
||||
List<ResidenceNode> dominions = new ArrayList<>();
|
||||
for (Map.Entry<String, Residence> entry : save.Residences.entrySet()) {
|
||||
String name = entry.getKey();
|
||||
Residence residence = entry.getValue();
|
||||
ResidenceNode dominion = parseDominion(name, world, residence, save);
|
||||
dominions.add(dominion);
|
||||
}
|
||||
return dominions;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
package cn.lunadeer.dominion.utils.Residence;
|
||||
|
||||
public class Message {
|
||||
public String LeaveMessage;
|
||||
public String EnterMessage;
|
||||
|
||||
// getters and setters
|
||||
|
||||
public String getLeaveMessage() {
|
||||
return LeaveMessage;
|
||||
}
|
||||
|
||||
public void setLeaveMessage(String leaveMessage) {
|
||||
LeaveMessage = leaveMessage;
|
||||
}
|
||||
|
||||
public String getEnterMessage() {
|
||||
return EnterMessage;
|
||||
}
|
||||
|
||||
public void setEnterMessage(String enterMessage) {
|
||||
EnterMessage = enterMessage;
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
package cn.lunadeer.dominion.utils.Residence;
|
||||
|
||||
public class Permission {
|
||||
public String OwnerUUID;
|
||||
public String OwnerLastKnownName;
|
||||
|
||||
// getters and setters
|
||||
|
||||
public String getOwnerUUID() {
|
||||
return OwnerUUID;
|
||||
}
|
||||
|
||||
public void setOwnerUUID(String ownerUUID) {
|
||||
OwnerUUID = ownerUUID;
|
||||
}
|
||||
|
||||
public String getOwnerLastKnownName() {
|
||||
return OwnerLastKnownName;
|
||||
}
|
||||
|
||||
public void setOwnerLastKnownName(String ownerLastKnownName) {
|
||||
OwnerLastKnownName = ownerLastKnownName;
|
||||
}
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
package cn.lunadeer.dominion.utils.Residence;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class Residence {
|
||||
public String TPLoc;
|
||||
public Map<String, Residence> Subzones;
|
||||
public int Messages;
|
||||
public Permission Permissions;
|
||||
public Map<String, String> Areas;
|
||||
|
||||
// getters and setters
|
||||
|
||||
public String getTPLoc() {
|
||||
return TPLoc;
|
||||
}
|
||||
|
||||
public void setTPLoc(String TPLoc) {
|
||||
this.TPLoc = TPLoc;
|
||||
}
|
||||
|
||||
public Map<String, Residence> getSubzones() {
|
||||
return Subzones;
|
||||
}
|
||||
|
||||
public void setSubzones(Map<String, Residence> subzones) {
|
||||
Subzones = subzones;
|
||||
}
|
||||
|
||||
public int getMessages() {
|
||||
return Messages;
|
||||
}
|
||||
|
||||
public void setMessages(int messages) {
|
||||
Messages = messages;
|
||||
}
|
||||
|
||||
public Permission getPermissions() {
|
||||
return Permissions;
|
||||
}
|
||||
|
||||
public void setPermissions(Permission permissions) {
|
||||
Permissions = permissions;
|
||||
}
|
||||
|
||||
public Map<String, String> getAreas() {
|
||||
return Areas;
|
||||
}
|
||||
|
||||
public void setAreas(Map<String, String> areas) {
|
||||
Areas = areas;
|
||||
}
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
package cn.lunadeer.dominion.utils.Residence;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class SaveFile {
|
||||
public Map<String, Residence> Residences;
|
||||
public Map<Integer, Message> Messages;
|
||||
|
||||
// getters and setters
|
||||
public Map<String, Residence> getResidences() {
|
||||
return Residences;
|
||||
}
|
||||
|
||||
public void setResidences(Map<String, Residence> residences) {
|
||||
Residences = residences;
|
||||
}
|
||||
|
||||
public Map<Integer, Message> getMessages() {
|
||||
return Messages;
|
||||
}
|
||||
|
||||
public void setMessages(Map<Integer, Message> messages) {
|
||||
Messages = messages;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package cn.lunadeer.dominion.utils;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
public class Time {
|
||||
|
||||
public static String nowStr() {
|
||||
// yyyy-MM-dd HH:mm:ss
|
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
||||
}
|
||||
|
||||
/**
|
||||
* 尝试获取folia的调度器
|
||||
*
|
||||
* @return 是否成功
|
||||
*/
|
||||
private static boolean tryFolia() {
|
||||
try {
|
||||
Bukkit.getAsyncScheduler();
|
||||
return true;
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static Boolean IS_FOLIA = null;
|
||||
|
||||
/**
|
||||
* 判断是否是folia核心
|
||||
*
|
||||
* @return 是否是folia核心
|
||||
*/
|
||||
public static Boolean isFolia() {
|
||||
if (IS_FOLIA == null) IS_FOLIA = tryFolia();
|
||||
return IS_FOLIA;
|
||||
}
|
||||
}
|
|
@ -49,9 +49,6 @@ FlyPermissionNodes:
|
|||
- essentials.fly
|
||||
- cmi.command.fly
|
||||
|
||||
# 是否允许玩家从 Residence 迁移领地数据
|
||||
ResidenceMigration: false
|
||||
|
||||
BlueMap: true
|
||||
|
||||
CheckUpdate: true
|
||||
|
|
Loading…
Reference in New Issue