Compare commits
15 Commits
v1.34.6-be
...
master
Author | SHA1 | Date |
---|---|---|
|
fb1736e0f2 | |
|
c858332fbd | |
|
9997fc12a9 | |
|
eb9fd31277 | |
|
e7a5e2b37f | |
|
32c730e28c | |
|
0e1eb53465 | |
|
f08e0f51e2 | |
|
6a3f9fbd20 | |
|
26f87ab835 | |
|
a119cf747f | |
|
4498267c50 | |
|
0d714a402b | |
|
21a5b10a97 | |
|
e690b3f66a |
2
pom.xml
2
pom.xml
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<groupId>cn.lunadeer</groupId>
|
<groupId>cn.lunadeer</groupId>
|
||||||
<artifactId>Dominion</artifactId>
|
<artifactId>Dominion</artifactId>
|
||||||
<version>1.34.6-beta</version>
|
<version>1.35.9-beta</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>Dominion</name>
|
<name>Dominion</name>
|
||||||
|
|
|
@ -24,8 +24,8 @@ public class Cache {
|
||||||
public Cache() {
|
public Cache() {
|
||||||
player_current_dominion_id = new HashMap<>();
|
player_current_dominion_id = new HashMap<>();
|
||||||
loadDominions();
|
loadDominions();
|
||||||
loadPlayerPrivileges();
|
loadMembers();
|
||||||
loadGroup();
|
loadGroups();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -104,71 +104,71 @@ public class Cache {
|
||||||
*
|
*
|
||||||
* @param player_uuid 玩家UUID
|
* @param player_uuid 玩家UUID
|
||||||
*/
|
*/
|
||||||
public void loadPlayerPrivileges(UUID player_uuid) {
|
public void loadMembers(UUID player_uuid) {
|
||||||
if (_last_update_privilege.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
|
if (_last_update_member.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
|
||||||
XLogger.debug("run loadPlayerPrivilegesExecution directly");
|
XLogger.debug("run loadMembersExecution directly");
|
||||||
loadPlayerPrivilegesExecution(player_uuid);
|
loadMembersExecution(player_uuid);
|
||||||
} else {
|
} else {
|
||||||
if (_update_privilege_is_scheduled.get()) return;
|
if (_update_member_is_scheduled.get()) return;
|
||||||
XLogger.debug("schedule loadPlayerPrivilegesExecution");
|
XLogger.debug("schedule loadMembersExecution");
|
||||||
_update_privilege_is_scheduled.set(true);
|
_update_member_is_scheduled.set(true);
|
||||||
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_privilege.get())) / 1000 * 20L;
|
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_member.get())) / 1000 * 20L;
|
||||||
Scheduler.runTaskLaterAsync(() -> {
|
Scheduler.runTaskLaterAsync(() -> {
|
||||||
XLogger.debug("run loadPlayerPrivilegesExecution scheduled");
|
XLogger.debug("run loadMembersExecution scheduled");
|
||||||
loadPlayerPrivilegesExecution(player_uuid);
|
loadMembersExecution(player_uuid);
|
||||||
_update_privilege_is_scheduled.set(false);
|
_update_member_is_scheduled.set(false);
|
||||||
},
|
},
|
||||||
delay_tick);
|
delay_tick);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadPlayerPrivileges() {
|
public void loadMembers() {
|
||||||
loadPlayerPrivileges(null);
|
loadMembers(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadPlayerPrivilegesExecution(UUID player_to_update) {
|
private void loadMembersExecution(UUID player_to_update) {
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
List<PlayerPrivilegeDTO> all_privileges;
|
List<MemberDTO> all_privileges;
|
||||||
if (player_to_update == null) {
|
if (player_to_update == null) {
|
||||||
all_privileges = PlayerPrivilegeDTO.selectAll();
|
all_privileges = MemberDTO.selectAll();
|
||||||
player_uuid_to_privilege = new ConcurrentHashMap<>();
|
player_uuid_to_member = new ConcurrentHashMap<>();
|
||||||
} else {
|
} else {
|
||||||
all_privileges = PlayerPrivilegeDTO.selectAll(player_to_update);
|
all_privileges = MemberDTO.selectAll(player_to_update);
|
||||||
if (!player_uuid_to_privilege.containsKey(player_to_update)) {
|
if (!player_uuid_to_member.containsKey(player_to_update)) {
|
||||||
player_uuid_to_privilege.put(player_to_update, new ConcurrentHashMap<>());
|
player_uuid_to_member.put(player_to_update, new ConcurrentHashMap<>());
|
||||||
}
|
}
|
||||||
player_uuid_to_privilege.get(player_to_update).clear();
|
player_uuid_to_member.get(player_to_update).clear();
|
||||||
}
|
}
|
||||||
for (PlayerPrivilegeDTO privilege : all_privileges) {
|
for (MemberDTO privilege : all_privileges) {
|
||||||
UUID player_uuid = privilege.getPlayerUUID();
|
UUID player_uuid = privilege.getPlayerUUID();
|
||||||
if (!player_uuid_to_privilege.containsKey(player_uuid)) {
|
if (!player_uuid_to_member.containsKey(player_uuid)) {
|
||||||
player_uuid_to_privilege.put(player_uuid, new ConcurrentHashMap<>());
|
player_uuid_to_member.put(player_uuid, new ConcurrentHashMap<>());
|
||||||
}
|
}
|
||||||
player_uuid_to_privilege.get(player_uuid).put(privilege.getDomID(), privilege);
|
player_uuid_to_member.get(player_uuid).put(privilege.getDomID(), privilege);
|
||||||
}
|
}
|
||||||
recheckPlayerState = true;
|
recheckPlayerState = true;
|
||||||
_last_update_privilege.set(System.currentTimeMillis());
|
_last_update_member.set(System.currentTimeMillis());
|
||||||
XLogger.debug("loadPlayerPrivilegesExecution cost: %d ms for %d privileges"
|
XLogger.debug("loadMembersExecution cost: %d ms for %d privileges"
|
||||||
, System.currentTimeMillis() - start, all_privileges.size());
|
, System.currentTimeMillis() - start, all_privileges.size());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadGroup() {
|
public void loadGroups() {
|
||||||
loadGroup(null);
|
loadGroups(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadGroup(Integer groupId) {
|
public void loadGroups(Integer groupId) {
|
||||||
if (_last_update_group.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
|
if (_last_update_group.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
|
||||||
XLogger.debug("run loadGroupExecution directly");
|
XLogger.debug("run loadGroupsExecution directly");
|
||||||
loadGroupExecution(groupId);
|
loadGroupExecution(groupId);
|
||||||
} else {
|
} else {
|
||||||
if (_update_group_is_scheduled.get()) return;
|
if (_update_group_is_scheduled.get()) return;
|
||||||
XLogger.debug("schedule loadGroupExecution");
|
XLogger.debug("schedule loadGroupsExecution");
|
||||||
_update_group_is_scheduled.set(true);
|
_update_group_is_scheduled.set(true);
|
||||||
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_group.get())) / 1000 * 20L;
|
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_group.get())) / 1000 * 20L;
|
||||||
Scheduler.runTaskLaterAsync(() -> {
|
Scheduler.runTaskLaterAsync(() -> {
|
||||||
XLogger.debug("run loadGroupExecution scheduled");
|
XLogger.debug("run loadGroupsExecution scheduled");
|
||||||
loadGroupExecution(groupId);
|
loadGroupExecution(groupId);
|
||||||
_update_group_is_scheduled.set(false);
|
_update_group_is_scheduled.set(false);
|
||||||
},
|
},
|
||||||
|
@ -195,7 +195,7 @@ public class Cache {
|
||||||
}
|
}
|
||||||
recheckPlayerState = true;
|
recheckPlayerState = true;
|
||||||
_last_update_group.set(System.currentTimeMillis());
|
_last_update_group.set(System.currentTimeMillis());
|
||||||
XLogger.debug("loadGroupExecution cost: %d ms", System.currentTimeMillis() - start);
|
XLogger.debug("loadGroupsExecution cost: %d ms", System.currentTimeMillis() - start);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ public class Cache {
|
||||||
player.setGlowing(false);
|
player.setGlowing(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion);
|
MemberDTO privilege = getMember(player, dominion);
|
||||||
if (privilege != null) {
|
if (privilege != null) {
|
||||||
if (privilege.getGroupId() == -1) {
|
if (privilege.getGroupId() == -1) {
|
||||||
player.setGlowing(privilege.getFlagValue(Flag.GLOW));
|
player.setGlowing(privilege.getFlagValue(Flag.GLOW));
|
||||||
|
@ -320,7 +320,7 @@ public class Cache {
|
||||||
player.setAllowFlight(false);
|
player.setAllowFlight(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion);
|
MemberDTO privilege = getMember(player, dominion);
|
||||||
if (privilege != null) {
|
if (privilege != null) {
|
||||||
if (privilege.getGroupId() == -1) {
|
if (privilege.getGroupId() == -1) {
|
||||||
player.setAllowFlight(privilege.getFlagValue(Flag.FLY));
|
player.setAllowFlight(privilege.getFlagValue(Flag.FLY));
|
||||||
|
@ -375,14 +375,14 @@ public class Cache {
|
||||||
* @param dominion 领地
|
* @param dominion 领地
|
||||||
* @return 特权表
|
* @return 特权表
|
||||||
*/
|
*/
|
||||||
public PlayerPrivilegeDTO getPlayerPrivilege(Player player, DominionDTO dominion) {
|
public MemberDTO getMember(Player player, DominionDTO dominion) {
|
||||||
if (!player_uuid_to_privilege.containsKey(player.getUniqueId())) return null;
|
if (!player_uuid_to_member.containsKey(player.getUniqueId())) return null;
|
||||||
return player_uuid_to_privilege.get(player.getUniqueId()).get(dominion.getId());
|
return player_uuid_to_member.get(player.getUniqueId()).get(dominion.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerPrivilegeDTO getPlayerPrivilege(UUID player_uuid, DominionDTO dominion) {
|
public MemberDTO getMember(UUID player_uuid, DominionDTO dominion) {
|
||||||
if (!player_uuid_to_privilege.containsKey(player_uuid)) return null;
|
if (!player_uuid_to_member.containsKey(player_uuid)) return null;
|
||||||
return player_uuid_to_privilege.get(player_uuid).get(dominion.getId());
|
return player_uuid_to_member.get(player_uuid).get(dominion.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isInDominion(@Nullable DominionDTO dominion, Player player) {
|
private static boolean isInDominion(@Nullable DominionDTO dominion, Player player) {
|
||||||
|
@ -433,17 +433,33 @@ public class Cache {
|
||||||
return new ArrayList<>(id_dominions.values());
|
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;
|
public static Cache instance;
|
||||||
private ConcurrentHashMap<Integer, DominionDTO> id_dominions;
|
private ConcurrentHashMap<Integer, DominionDTO> id_dominions;
|
||||||
private ConcurrentHashMap<String, List<DominionNode>> world_dominion_tree;
|
private ConcurrentHashMap<String, List<DominionNode>> world_dominion_tree;
|
||||||
private ConcurrentHashMap<Integer, GroupDTO> id_groups;
|
private ConcurrentHashMap<Integer, GroupDTO> id_groups;
|
||||||
private ConcurrentHashMap<UUID, ConcurrentHashMap<Integer, PlayerPrivilegeDTO>> player_uuid_to_privilege; // 玩家所有的特权
|
private ConcurrentHashMap<UUID, ConcurrentHashMap<Integer, MemberDTO>> player_uuid_to_member; // 玩家所有的特权
|
||||||
private final Map<UUID, Integer> player_current_dominion_id; // 玩家当前所在领地
|
private final Map<UUID, Integer> player_current_dominion_id; // 玩家当前所在领地
|
||||||
private ConcurrentHashMap<Integer, List<Integer>> dominion_children;
|
private ConcurrentHashMap<Integer, List<Integer>> dominion_children;
|
||||||
private final AtomicLong _last_update_dominion = new AtomicLong(0);
|
private final AtomicLong _last_update_dominion = new AtomicLong(0);
|
||||||
private final AtomicBoolean _update_dominion_is_scheduled = new AtomicBoolean(false);
|
private final AtomicBoolean _update_dominion_is_scheduled = new AtomicBoolean(false);
|
||||||
private final AtomicLong _last_update_privilege = new AtomicLong(0);
|
private final AtomicLong _last_update_member = new AtomicLong(0);
|
||||||
private final AtomicBoolean _update_privilege_is_scheduled = new AtomicBoolean(false);
|
private final AtomicBoolean _update_member_is_scheduled = new AtomicBoolean(false);
|
||||||
private final AtomicLong _last_update_group = new AtomicLong(0);
|
private final AtomicLong _last_update_group = new AtomicLong(0);
|
||||||
private final AtomicBoolean _update_group_is_scheduled = new AtomicBoolean(false);
|
private final AtomicBoolean _update_group_is_scheduled = new AtomicBoolean(false);
|
||||||
private static final long UPDATE_INTERVAL = 1000 * 4;
|
private static final long UPDATE_INTERVAL = 1000 * 4;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package cn.lunadeer.dominion;
|
package cn.lunadeer.dominion;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||||
import cn.lunadeer.dominion.events.EnvironmentEvents;
|
import cn.lunadeer.dominion.events.EnvironmentEvents;
|
||||||
import cn.lunadeer.dominion.events.PlayerEvents;
|
import cn.lunadeer.dominion.events.PlayerEvents;
|
||||||
import cn.lunadeer.dominion.events.SelectPointEvents;
|
import cn.lunadeer.dominion.events.SelectPointEvents;
|
||||||
|
@ -27,7 +28,6 @@ public final class Dominion extends JavaPlugin {
|
||||||
new Notification(this);
|
new Notification(this);
|
||||||
new XLogger(this);
|
new XLogger(this);
|
||||||
config = new ConfigManager(this);
|
config = new ConfigManager(this);
|
||||||
XLogger.setDebug(config.isDebug());
|
|
||||||
new DatabaseManager(this,
|
new DatabaseManager(this,
|
||||||
DatabaseType.valueOf(config.getDbType().toUpperCase()),
|
DatabaseType.valueOf(config.getDbType().toUpperCase()),
|
||||||
config.getDbHost(),
|
config.getDbHost(),
|
||||||
|
@ -39,9 +39,6 @@ public final class Dominion extends JavaPlugin {
|
||||||
new Scheduler(this);
|
new Scheduler(this);
|
||||||
AutoClean.run();
|
AutoClean.run();
|
||||||
Cache.instance = new Cache();
|
Cache.instance = new Cache();
|
||||||
if (config.getEconomyEnable()) {
|
|
||||||
new VaultConnect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Bukkit.getPluginManager().registerEvents(new PlayerEvents(), this);
|
Bukkit.getPluginManager().registerEvents(new PlayerEvents(), this);
|
||||||
Bukkit.getPluginManager().registerEvents(new EnvironmentEvents(), this);
|
Bukkit.getPluginManager().registerEvents(new EnvironmentEvents(), this);
|
||||||
|
@ -49,6 +46,11 @@ public final class Dominion extends JavaPlugin {
|
||||||
Objects.requireNonNull(Bukkit.getPluginCommand("dominion")).setExecutor(new Commands());
|
Objects.requireNonNull(Bukkit.getPluginCommand("dominion")).setExecutor(new Commands());
|
||||||
|
|
||||||
bStatsMetrics metrics = new bStatsMetrics(this, 21445);
|
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()) {
|
if (config.getCheckUpdate()) {
|
||||||
giteaReleaseCheck = new GiteaReleaseCheck(this,
|
giteaReleaseCheck = new GiteaReleaseCheck(this,
|
||||||
"https://ssl.lunadeer.cn:14446",
|
"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);
|
Notification.info(sender, " 领地的对角点坐标: x1=%d y1=%d z1=%d, x2=%d y2=%d z2=%d", x1, y1, z1, x2, y2, z2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void autoPoints(Player player) {
|
public static Map<Integer, Location> autoPoints(Player player) {
|
||||||
Integer size = Dominion.config.getAutoCreateRadius();
|
Integer size = Dominion.config.getAutoCreateRadius();
|
||||||
Location location = player.getLocation();
|
Location location = player.getLocation();
|
||||||
Location location1 = new Location(location.getWorld(), location.getX() - size, location.getY() - size, location.getZ() - size);
|
Location location1 = new Location(location.getWorld(), location.getX() - size, location.getY() - size, location.getZ() - size);
|
||||||
|
@ -49,6 +49,7 @@ public class Apis {
|
||||||
points.put(0, location1);
|
points.put(0, location1);
|
||||||
points.put(1, location2);
|
points.put(1, location2);
|
||||||
Dominion.pointsSelect.put(player.getUniqueId(), points);
|
Dominion.pointsSelect.put(player.getUniqueId(), points);
|
||||||
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean notOpOrConsole(CommandSender sender) {
|
public static boolean notOpOrConsole(CommandSender sender) {
|
||||||
|
|
|
@ -6,7 +6,8 @@ import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.DominionController;
|
import cn.lunadeer.dominion.controllers.DominionController;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||||
import cn.lunadeer.minecraftpluginutils.Teleport;
|
import cn.lunadeer.minecraftpluginutils.Teleport;
|
||||||
|
@ -374,7 +375,7 @@ public class DominionOperate {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerPrivilegeDTO privilegeDTO = PlayerPrivilegeDTO.select(player.getUniqueId(), dominionDTO.getId());
|
MemberDTO privilegeDTO = MemberDTO.select(player.getUniqueId(), dominionDTO.getId());
|
||||||
if (!player.getUniqueId().equals(dominionDTO.getOwner())) { // 领地所有人可以传送到自己的领地
|
if (!player.getUniqueId().equals(dominionDTO.getOwner())) { // 领地所有人可以传送到自己的领地
|
||||||
if (privilegeDTO == null) {
|
if (privilegeDTO == null) {
|
||||||
if (!dominionDTO.getFlagValue(Flag.TELEPORT)) {
|
if (!dominionDTO.getFlagValue(Flag.TELEPORT)) {
|
||||||
|
@ -382,9 +383,17 @@ public class DominionOperate {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!privilegeDTO.getFlagValue(Flag.TELEPORT)) {
|
if (privilegeDTO.getGroupId() == -1) {
|
||||||
Notification.error(sender, "你不被允许传送到这个领地");
|
if (!privilegeDTO.getFlagValue(Flag.TELEPORT)) {
|
||||||
return;
|
Notification.error(sender, "你不被允许传送到这个领地");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
GroupDTO groupDTO = Cache.instance.getGroup(privilegeDTO.getGroupId());
|
||||||
|
if (!groupDTO.getFlagValue(Flag.TELEPORT)) {
|
||||||
|
Notification.error(sender, "你所在的权限组组不被允许传送到这个领地");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -424,10 +433,10 @@ public class DominionOperate {
|
||||||
World world = Dominion.instance.getServer().getWorld(dominionDTO.getWorld());
|
World world = Dominion.instance.getServer().getWorld(dominionDTO.getWorld());
|
||||||
if (location == null) {
|
if (location == null) {
|
||||||
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
||||||
XLogger.warn("领地 %s 没有设置传送点,将尝试传送到中心点", dominionDTO.getName());
|
Notification.warn(player, "领地 %s 没有设置传送点,将尝试传送到中心点", dominionDTO.getName());
|
||||||
} else if (!isInDominion(dominionDTO, location)) {
|
} else if (!isInDominion(dominionDTO, location)) {
|
||||||
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
||||||
XLogger.warn("领地 %s 传送点不在领地内,将尝试传送到中心点", dominionDTO.getName());
|
Notification.warn(player, "领地 %s 传送点不在领地内,将尝试传送到中心点", dominionDTO.getName());
|
||||||
}
|
}
|
||||||
if (player.isOnline()) {
|
if (player.isOnline()) {
|
||||||
Teleport.doTeleportSafely(player, location).thenAccept(b -> {
|
Teleport.doTeleportSafely(player, location).thenAccept(b -> {
|
||||||
|
|
|
@ -55,8 +55,8 @@ public class Helper {
|
||||||
if (dominion == null) return players_name;
|
if (dominion == null) return players_name;
|
||||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||||
if (group == null) return players_name;
|
if (group == null) return players_name;
|
||||||
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.selectByDomGroupId(dominion.getId(), group.getId());
|
List<MemberDTO> privileges = MemberDTO.selectByDomGroupId(dominion.getId(), group.getId());
|
||||||
for (PlayerPrivilegeDTO privilege : privileges) {
|
for (MemberDTO privilege : privileges) {
|
||||||
PlayerDTO player = PlayerDTO.select(privilege.getPlayerUUID());
|
PlayerDTO player = PlayerDTO.select(privilege.getPlayerUUID());
|
||||||
if (player == null) continue;
|
if (player == null) continue;
|
||||||
players_name.add(player.getLastKnownName());
|
players_name.add(player.getLastKnownName());
|
||||||
|
@ -79,8 +79,8 @@ public class Helper {
|
||||||
List<String> dominions_name = new ArrayList<>();
|
List<String> dominions_name = new ArrayList<>();
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return dominions_name;
|
if (player == null) return dominions_name;
|
||||||
List<PlayerPrivilegeDTO> dominions_admin = PlayerPrivilegeDTO.selectAll(player.getUniqueId());
|
List<MemberDTO> dominions_admin = MemberDTO.selectAll(player.getUniqueId());
|
||||||
for (PlayerPrivilegeDTO privilege : dominions_admin) {
|
for (MemberDTO privilege : dominions_admin) {
|
||||||
if (privilege.getAdmin()) {
|
if (privilege.getAdmin()) {
|
||||||
DominionDTO dom = DominionDTO.select(privilege.getDomID());
|
DominionDTO dom = DominionDTO.select(privilege.getDomID());
|
||||||
if (dom == null) continue;
|
if (dom == null) continue;
|
||||||
|
|
|
@ -28,12 +28,12 @@ public class Operator {
|
||||||
});
|
});
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
Notification.info(sender, "正在从数据库重新加载玩家权限缓存...");
|
Notification.info(sender, "正在从数据库重新加载玩家权限缓存...");
|
||||||
Cache.instance.loadPlayerPrivileges();
|
Cache.instance.loadMembers();
|
||||||
Notification.info(sender, "玩家权限缓存已重新加载");
|
Notification.info(sender, "玩家权限缓存已重新加载");
|
||||||
});
|
});
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
Notification.info(sender, "正在从数据库重新加载权限组缓存...");
|
Notification.info(sender, "正在从数据库重新加载权限组缓存...");
|
||||||
Cache.instance.loadGroup();
|
Cache.instance.loadGroups();
|
||||||
Notification.info(sender, "权限组缓存已重新加载");
|
Notification.info(sender, "权限组缓存已重新加载");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
|
||||||
public class Apis {
|
public class Apis {
|
||||||
|
@ -15,7 +15,7 @@ public class Apis {
|
||||||
public static boolean noAuthToChangeFlags(AbstractOperator player, DominionDTO dominion) {
|
public static boolean noAuthToChangeFlags(AbstractOperator player, DominionDTO dominion) {
|
||||||
if (player.isOp()) return false;
|
if (player.isOp()) return false;
|
||||||
if (!dominion.getOwner().equals(player.getUniqueId())) {
|
if (!dominion.getOwner().equals(player.getUniqueId())) {
|
||||||
PlayerPrivilegeDTO privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId());
|
MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId());
|
||||||
if (privileges == null || !privileges.getAdmin()) {
|
if (privileges == null || !privileges.getAdmin()) {
|
||||||
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不是领地 %s 的拥有者或管理员,无权修改权限", dominion.getName()));
|
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不是领地 %s 的拥有者或管理员,无权修改权限", dominion.getName()));
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -12,7 +12,9 @@ import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -70,19 +72,20 @@ public class DominionController {
|
||||||
* @param name 领地名称
|
* @param name 领地名称
|
||||||
* @param loc1 位置1
|
* @param loc1 位置1
|
||||||
* @param loc2 位置2
|
* @param loc2 位置2
|
||||||
* @param parent_dominion_name 父领地名称
|
* @param parent_dominion_name 父领地名称(留空表示为根领地)
|
||||||
* @param skipEco 是否跳过经济检查
|
* @param skipEco 是否跳过经济检查
|
||||||
*/
|
*/
|
||||||
public static void create(AbstractOperator operator, String name,
|
public static void create(AbstractOperator operator, String name,
|
||||||
Location loc1, Location loc2,
|
Location loc1, Location loc2,
|
||||||
String parent_dominion_name, boolean skipEco) {
|
@NotNull String parent_dominion_name, boolean skipEco) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建领地失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建领地失败");
|
||||||
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功创建领地 %s", name);
|
||||||
if (name.isEmpty()) {
|
if (name.isEmpty()) {
|
||||||
operator.setResponse(FAIL.addMessage("领地名称不能为空"));
|
operator.setResponse(FAIL.addMessage("领地名称不能为空"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (name.contains(" ")) {
|
if (name.contains(" ") || name.contains(".")) {
|
||||||
operator.setResponse(FAIL.addMessage("领地名称不能包含空格"));
|
operator.setResponse(FAIL.addMessage("领地名称不能包含空格或点"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (DominionDTO.select(name) != null) {
|
if (DominionDTO.select(name) != null) {
|
||||||
|
@ -109,12 +112,8 @@ public class DominionController {
|
||||||
loc2.getBlockX(), loc2.getBlockY(), loc2.getBlockZ())) {
|
loc2.getBlockX(), loc2.getBlockY(), loc2.getBlockZ())) {
|
||||||
return;
|
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;
|
DominionDTO parent_dominion;
|
||||||
if (parent_dominion_name.isEmpty()) {
|
if (parent_dominion_name.isEmpty() || parent_dominion_name.equals("root")) {
|
||||||
parent_dominion = DominionDTO.select(-1);
|
parent_dominion = DominionDTO.select(-1);
|
||||||
} else {
|
} else {
|
||||||
parent_dominion = DominionDTO.select(parent_dominion_name);
|
parent_dominion = DominionDTO.select(parent_dominion_name);
|
||||||
|
@ -133,6 +132,11 @@ public class DominionController {
|
||||||
return;
|
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 检查是否在同一世界
|
// 如果parent_dominion不为-1 检查是否在同一世界
|
||||||
if (parent_dominion.getId() != -1 && !parent_dominion.getWorld().equals(dominion.getWorld())) {
|
if (parent_dominion.getId() != -1 && !parent_dominion.getWorld().equals(dominion.getWorld())) {
|
||||||
operator.setResponse(FAIL.addMessage("父领地与子领地不在同一世界。"));
|
operator.setResponse(FAIL.addMessage("父领地与子领地不在同一世界。"));
|
||||||
|
@ -157,35 +161,16 @@ public class DominionController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 检查经济
|
// 检查经济
|
||||||
if (Dominion.config.getEconomyEnable() && !skipEco) {
|
if (!skipEco)
|
||||||
if (!VaultConnect.instance.economyAvailable()) {
|
handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? dominion.getSquare() : dominion.getVolume(), true, FAIL, SUCCESS);
|
||||||
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);
|
dominion = DominionDTO.insert(dominion);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("创建领地失败,数据库错误,请联系管理员"));
|
operator.setResponse(FAIL.addMessage("创建领地失败,数据库错误,请联系管理员"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (operator instanceof BukkitPlayerOperator) {
|
// 显示粒子效果
|
||||||
ParticleRender.showBoxFace(Dominion.instance, operator.getPlayer(), loc1, loc2);
|
handleParticle(operator, dominion.getWorld(), dominion.getX1(), dominion.getY1(), dominion.getZ1(), dominion.getX2(), dominion.getY2(), dominion.getZ2(), FAIL);
|
||||||
}
|
operator.setResponse(SUCCESS);
|
||||||
dominion.setParentDomId(parent_dominion.getId());
|
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功创建领地 %s", name));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -214,48 +199,12 @@ public class DominionController {
|
||||||
*/
|
*/
|
||||||
public static void expand(AbstractOperator operator, Integer size, String dominion_name) {
|
public static void expand(AbstractOperator operator, Integer size, String dominion_name) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "扩展领地失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "扩展领地失败");
|
||||||
Location location = operator.getLocation();
|
DominionDTO dominion = expandContractPreCheck(operator, getExistDomAndIsOwner(operator, dominion_name), FAIL);
|
||||||
BlockFace face = operator.getDirection();
|
|
||||||
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (location != null) {
|
int[] newCords = expandContractSizeChange(operator, dominion, true, size, FAIL);
|
||||||
if (!location.getWorld().getName().equals(dominion.getWorld())) {
|
if (newCords == null) {
|
||||||
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;
|
return;
|
||||||
}
|
}
|
||||||
// 校验是否超出父领地范围
|
// 校验是否超出父领地范围
|
||||||
|
@ -264,14 +213,14 @@ public class DominionController {
|
||||||
operator.setResponse(FAIL.addMessage("父领地丢失"));
|
operator.setResponse(FAIL.addMessage("父领地丢失"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!isContained(x1, y1, z1, x2, y2, z2, parent_dominion)) {
|
if (!isContained(newCords, parent_dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("超出父领地 %s 范围", parent_dominion.getName()));
|
operator.setResponse(FAIL.addMessage("超出父领地 %s 范围", parent_dominion.getName()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 获取同世界下的所有同级领地
|
// 获取同世界下的所有同级领地
|
||||||
List<DominionDTO> exist_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getParentDomId());
|
List<DominionDTO> exist_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getParentDomId());
|
||||||
for (DominionDTO exist_dominion : exist_dominions) {
|
for (DominionDTO exist_dominion : exist_dominions) {
|
||||||
if (isIntersect(exist_dominion, x1, y1, z1, x2, y2, z2)) {
|
if (isIntersect(exist_dominion, newCords)) {
|
||||||
// 如果是自己,跳过
|
// 如果是自己,跳过
|
||||||
if (exist_dominion.getId().equals(dominion.getId())) continue;
|
if (exist_dominion.getId().equals(dominion.getId())) continue;
|
||||||
operator.setResponse(FAIL.addMessage("与领地 %s 冲突", exist_dominion.getName()));
|
operator.setResponse(FAIL.addMessage("与领地 %s 冲突", exist_dominion.getName()));
|
||||||
|
@ -280,32 +229,11 @@ public class DominionController {
|
||||||
}
|
}
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功扩展领地 %s %d格", dominion_name, size);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功扩展领地 %s %d格", dominion_name, size);
|
||||||
// 检查经济
|
// 检查经济
|
||||||
if (Dominion.config.getEconomyEnable()) {
|
handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? sqr(newCords) - dominion.getSquare() : vol(newCords) - dominion.getVolume()
|
||||||
if (!VaultConnect.instance.economyAvailable()) {
|
, false, FAIL, SUCCESS);
|
||||||
operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。"));
|
// 显示粒子效果
|
||||||
return;
|
handleParticle(operator, dominion.getWorld(), newCords, FAIL);
|
||||||
}
|
dominion.setXYZ(newCords);
|
||||||
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);
|
operator.setResponse(SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,90 +263,48 @@ public class DominionController {
|
||||||
*/
|
*/
|
||||||
public static void contract(AbstractOperator operator, Integer size, String dominion_name) {
|
public static void contract(AbstractOperator operator, Integer size, String dominion_name) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "缩小领地失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "缩小领地失败");
|
||||||
Location location = operator.getLocation();
|
DominionDTO dominion = expandContractPreCheck(operator, getExistDomAndIsOwner(operator, dominion_name), FAIL);
|
||||||
BlockFace face = operator.getDirection();
|
|
||||||
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (location != null) {
|
int[] newCords = expandContractSizeChange(operator, dominion, false, size, FAIL);
|
||||||
if (!location.getWorld().getName().equals(dominion.getWorld())) {
|
if (newCords == null) {
|
||||||
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;
|
return;
|
||||||
}
|
}
|
||||||
// 获取所有的子领地
|
// 获取所有的子领地
|
||||||
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId());
|
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId());
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
if (!isContained(sub_dominion, x1, y1, z1, x2, y2, z2)) {
|
if (!isContained(sub_dominion, newCords)) {
|
||||||
operator.setResponse(FAIL.addMessage("缩小后的领地无法包含子领地 %s", sub_dominion.getName()));
|
operator.setResponse(FAIL.addMessage("缩小后的领地无法包含子领地 %s", sub_dominion.getName()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功缩小领地 %s %d格", dominion_name, size);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功缩小领地 %s %d格", dominion_name, size);
|
||||||
// 退还经济
|
// 退还经济
|
||||||
if (Dominion.config.getEconomyEnable()) {
|
handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? dominion.getSquare() - sqr(newCords) : dominion.getVolume() - vol(newCords)
|
||||||
if (!VaultConnect.instance.economyAvailable()) {
|
, false, FAIL, SUCCESS);
|
||||||
operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。"));
|
// 显示粒子效果
|
||||||
return;
|
handleParticle(operator, dominion.getWorld(), newCords, FAIL);
|
||||||
}
|
dominion.setXYZ(newCords);
|
||||||
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);
|
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]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除领地 会同时删除其所有子领地
|
* 删除领地 会同时删除其所有子领地
|
||||||
*
|
*
|
||||||
|
@ -427,6 +313,8 @@ public class DominionController {
|
||||||
* @param force 是否强制删除
|
* @param force 是否强制删除
|
||||||
*/
|
*/
|
||||||
public static void delete(AbstractOperator operator, String dominion_name, boolean 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);
|
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
return;
|
return;
|
||||||
|
@ -434,14 +322,7 @@ public class DominionController {
|
||||||
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
|
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
|
||||||
if (!force) {
|
if (!force) {
|
||||||
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, "删除领地 %s 会同时删除其所有子领地,是否继续?", dominion_name);
|
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, "删除领地 %s 会同时删除其所有子领地,是否继续?", dominion_name);
|
||||||
String sub_names = "";
|
showSubNamesWarning(sub_dominions, WARNING);
|
||||||
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) {
|
if (operator instanceof BukkitPlayerOperator) {
|
||||||
Notification.warn(operator.getPlayer(), "输入 /dominion delete %s force 确认删除", dominion_name);
|
Notification.warn(operator.getPlayer(), "输入 /dominion delete %s force 确认删除", dominion_name);
|
||||||
}
|
}
|
||||||
|
@ -449,27 +330,18 @@ public class DominionController {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO.delete(dominion);
|
DominionDTO.delete(dominion);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "领地 %s 及其所有子领地已删除", dominion_name);
|
|
||||||
// 退还经济
|
// 退还经济
|
||||||
if (Dominion.config.getEconomyEnable()) {
|
int count = 0;
|
||||||
if (!VaultConnect.instance.economyAvailable()) {
|
if (Dominion.config.getEconomyOnlyXZ()) {
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "退款失败,没有可用的经济插件系统,请联系服主。"));
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
return;
|
count += sub_dominion.getSquare();
|
||||||
}
|
}
|
||||||
int count = 0;
|
} else {
|
||||||
if (Dominion.config.getEconomyOnlyXZ()) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
count += sub_dominion.getVolume();
|
||||||
count += sub_dominion.getSquare();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
|
||||||
count += sub_dominion.getVolume();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
float refund = count * Dominion.config.getEconomyPrice() * Dominion.config.getEconomyRefund();
|
|
||||||
VaultConnect.instance.depositPlayer(operator.getPlayer(), refund);
|
|
||||||
SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural());
|
|
||||||
}
|
}
|
||||||
|
handleEconomy(operator, count, false, FAIL, SUCCESS);
|
||||||
operator.setResponse(SUCCESS);
|
operator.setResponse(SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -553,6 +425,7 @@ public class DominionController {
|
||||||
* @param dominion_name 领地名称
|
* @param dominion_name 领地名称
|
||||||
*/
|
*/
|
||||||
public static void setTpLocation(AbstractOperator operator, int x, int y, int z, String 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);
|
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在", dominion_name));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在", dominion_name));
|
||||||
|
@ -589,8 +462,8 @@ public class DominionController {
|
||||||
operator.setResponse(FAIL.addMessage("新名称不能为空"));
|
operator.setResponse(FAIL.addMessage("新名称不能为空"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (new_name.contains(" ")) {
|
if (new_name.contains(" ") || new_name.contains(".")) {
|
||||||
operator.setResponse(FAIL.addMessage("领地名称不能包含空格"));
|
operator.setResponse(FAIL.addMessage("领地名称不能包含空格或点"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Objects.equals(old_name, new_name)) {
|
if (Objects.equals(old_name, new_name)) {
|
||||||
|
@ -644,14 +517,7 @@ public class DominionController {
|
||||||
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
|
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
|
||||||
if (!force) {
|
if (!force) {
|
||||||
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, "转让领地 %s 给 %s 会同时转让其所有子领地,是否继续?", dom_name, player_name);
|
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, "转让领地 %s 给 %s 会同时转让其所有子领地,是否继续?", dom_name, player_name);
|
||||||
String sub_names = "";
|
showSubNamesWarning(sub_dominions, WARNING);
|
||||||
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) {
|
if (operator instanceof BukkitPlayerOperator) {
|
||||||
Notification.warn(operator.getPlayer(), "输入 /dominion give %s %s force 确认转让", dom_name, player_name);
|
Notification.warn(operator.getPlayer(), "输入 /dominion give %s %s force 确认转让", dom_name, player_name);
|
||||||
}
|
}
|
||||||
|
@ -722,6 +588,10 @@ public class DominionController {
|
||||||
a.getZ1() < z2 && a.getZ2() > z1;
|
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 包裹
|
* 判断 sub 是否完全被 parent 包裹
|
||||||
*/
|
*/
|
||||||
|
@ -729,24 +599,32 @@ public class DominionController {
|
||||||
if (parent.getId() == -1) {
|
if (parent.getId() == -1) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return sub.getX1() >= parent.getX1() && sub.getX2() <= parent.getX2() &&
|
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());
|
||||||
sub.getY1() >= parent.getY1() && sub.getY2() <= parent.getY2() &&
|
}
|
||||||
sub.getZ1() >= parent.getZ1() && sub.getZ2() <= 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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isContained(Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, DominionDTO parent) {
|
private static boolean isContained(Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, DominionDTO parent) {
|
||||||
if (parent.getId() == -1) {
|
if (parent.getId() == -1) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return x1 >= parent.getX1() && x2 <= parent.getX2() &&
|
return isContained(x1, y1, z1, x2, y2, z2, parent.getX1(), parent.getY1(), parent.getZ1(), parent.getX2(), parent.getY2(), parent.getZ2());
|
||||||
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) {
|
private static boolean isContained(DominionDTO sub, Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2) {
|
||||||
return sub.getX1() >= x1 && sub.getX2() <= x2 &&
|
return isContained(sub.getX1(), sub.getY1(), sub.getZ1(), sub.getX2(), sub.getY2(), sub.getZ2(), x1, y1, z1, x2, y2, z2);
|
||||||
sub.getY1() >= y1 && sub.getY2() <= y2 &&
|
}
|
||||||
sub.getZ1() >= z1 && sub.getZ2() <= 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<DominionDTO> getSubDominionsRecursive(DominionDTO dominion) {
|
private static List<DominionDTO> getSubDominionsRecursive(DominionDTO dominion) {
|
||||||
|
@ -759,6 +637,10 @@ public class DominionController {
|
||||||
return sub_dominions;
|
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) {
|
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, "尺寸不合法");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "尺寸不合法");
|
||||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
|
@ -831,7 +713,7 @@ public class DominionController {
|
||||||
level++;
|
level++;
|
||||||
}
|
}
|
||||||
if (level >= Dominion.config.getLimitDepth()) {
|
if (level >= Dominion.config.getLimitDepth()) {
|
||||||
operator.setResponse(FAIL.addMessage("子领地嵌套深度不能超过 %s", Dominion.config.getLimitDepth()));
|
operator.setResponse(FAIL.addMessage("子领地嵌套深度不能超过 %d", Dominion.config.getLimitDepth()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -865,4 +747,150 @@ public class DominionController {
|
||||||
return dominion;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,7 +151,7 @@ public class GroupController {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员,无法直接加入权限组", playerName, domName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员,无法直接加入权限组", playerName, domName));
|
||||||
return;
|
return;
|
||||||
|
@ -198,7 +198,7 @@ public class GroupController {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, domName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, domName));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class MemberController {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
|
||||||
return;
|
return;
|
||||||
|
@ -37,7 +37,7 @@ public class MemberController {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法移除一个领地管理员", dominionName));
|
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法移除一个领地管理员", dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO.delete(player.getUuid(), dominion.getId());
|
MemberDTO.delete(player.getUuid(), dominion.getId());
|
||||||
operator.setResponse(SUCCESS);
|
operator.setResponse(SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public class MemberController {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
|
||||||
return;
|
return;
|
||||||
|
@ -100,7 +100,12 @@ public class MemberController {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.insert(new PlayerPrivilegeDTO(player.getUuid(), dominion));
|
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||||
|
if (privilege != null) {
|
||||||
|
operator.setResponse(FAIL.addMessage("玩家 %s 已经是领地 %s 的成员", player_name, dominionName));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
privilege = MemberDTO.insert(new MemberDTO(player.getUuid(), dominion));
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
operator.setResponse(FAIL);
|
operator.setResponse(FAIL);
|
||||||
} else {
|
} else {
|
||||||
|
@ -122,7 +127,7 @@ public class MemberController {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", playerName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", playerName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(player.getUuid(), dominion.getId());
|
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, dominionName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", playerName, dominionName));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
package cn.lunadeer.dominion.cuis;
|
package cn.lunadeer.dominion.cuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
|
||||||
import cn.lunadeer.dominion.controllers.AbstractOperator;
|
import cn.lunadeer.dominion.controllers.AbstractOperator;
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.DominionController;
|
import cn.lunadeer.dominion.controllers.DominionController;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
@ -30,13 +28,9 @@ public class CreateDominion {
|
||||||
@Override
|
@Override
|
||||||
public void handleData(String input) {
|
public void handleData(String input) {
|
||||||
XLogger.debug("createDominionCB.run: %s", input);
|
XLogger.debug("createDominionCB.run: %s", input);
|
||||||
autoPoints(sender);
|
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
Map<Integer, Location> points = Dominion.pointsSelect.get(sender.getUniqueId());
|
Map<Integer, Location> points = autoPoints(sender);
|
||||||
if (points == null || points.get(0) == null || points.get(1) == null) {
|
|
||||||
Notification.error(sender, "自动选点失败");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
operator.getResponse().thenAccept(result -> {
|
operator.getResponse().thenAccept(result -> {
|
||||||
if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)) {
|
if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)) {
|
||||||
DominionManage.show(sender, new String[]{"list"});
|
DominionManage.show(sender, new String[]{"list"});
|
||||||
|
|
|
@ -191,6 +191,11 @@ public class DominionDTO {
|
||||||
this(null, owner, name, world, x1, y1, z1, x2, y2, z2, -1);
|
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 id = new Field("id", FieldType.INT);
|
||||||
private final Field owner = new Field("owner", FieldType.STRING);
|
private final Field owner = new Field("owner", FieldType.STRING);
|
||||||
private final Field name = new Field("name", FieldType.STRING);
|
private final Field name = new Field("name", FieldType.STRING);
|
||||||
|
@ -329,11 +334,6 @@ public class DominionDTO {
|
||||||
return (Integer) parentDomId.value;
|
return (Integer) parentDomId.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DominionDTO setParentDomId(Integer parentDomId) {
|
|
||||||
this.parentDomId.value = parentDomId;
|
|
||||||
return doUpdate(new UpdateRow().field(this.parentDomId));
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getJoinMessage() {
|
public String getJoinMessage() {
|
||||||
return (String) joinMessage.value;
|
return (String) joinMessage.value;
|
||||||
}
|
}
|
||||||
|
@ -373,8 +373,18 @@ 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));
|
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() {
|
public Location getTpLocation() {
|
||||||
if (Objects.equals(tp_location, "default")) {
|
if (Objects.equals(tp_location.value, "default")) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
// 0:0:0
|
// 0:0:0
|
||||||
|
|
|
@ -28,6 +28,7 @@ public enum Flag {
|
||||||
CREEPER_EXPLODE("creeper_explode", "实体爆炸", "包含:苦力怕/凋零头颅/水晶爆炸", false, true, true),
|
CREEPER_EXPLODE("creeper_explode", "实体爆炸", "包含:苦力怕/凋零头颅/水晶爆炸", false, true, true),
|
||||||
COMPARER("comparer", "比较器交互", "是否可以修改比较器状态", false, false, true),
|
COMPARER("comparer", "比较器交互", "是否可以修改比较器状态", false, false, true),
|
||||||
DOOR("door", "门交互", "是否可以使用各种材质的门(包括活板门)", false, false, true),
|
DOOR("door", "门交互", "是否可以使用各种材质的门(包括活板门)", false, false, true),
|
||||||
|
DRAGON_EGG("dragon_egg", "触碰龙蛋", "是否可以触碰龙蛋", false, false, true),
|
||||||
DYE("dye", "染色", "是否可以使用染料(对羊、狗项圈、猫项圈)染色", false, false, true),
|
DYE("dye", "染色", "是否可以使用染料(对羊、狗项圈、猫项圈)染色", false, false, true),
|
||||||
EDIT_SIGN("edit_sign", "编辑告示牌", "是否可以编辑告示牌", false, false, true),
|
EDIT_SIGN("edit_sign", "编辑告示牌", "是否可以编辑告示牌", false, false, true),
|
||||||
EGG("egg", "扔鸡蛋", "是否可以扔鸡蛋", false, false, true),
|
EGG("egg", "扔鸡蛋", "是否可以扔鸡蛋", false, false, true),
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class GroupDTO {
|
||||||
try (ResultSet rs = insertRow.execute()) {
|
try (ResultSet rs = insertRow.execute()) {
|
||||||
List<GroupDTO> groups = getDTOFromRS(rs);
|
List<GroupDTO> groups = getDTOFromRS(rs);
|
||||||
if (groups.size() == 0) return null;
|
if (groups.size() == 0) return null;
|
||||||
Cache.instance.loadGroup(groups.get(0).getId());
|
Cache.instance.loadGroups(groups.get(0).getId());
|
||||||
return groups.get(0);
|
return groups.get(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("创建权限组失败: ", e, "");
|
DatabaseManager.handleDatabaseError("创建权限组失败: ", e, "");
|
||||||
|
@ -89,9 +89,9 @@ public class GroupDTO {
|
||||||
public static void delete(Integer id) {
|
public static void delete(Integer id) {
|
||||||
String sql = "DELETE FROM dominion_group WHERE id = ?;";
|
String sql = "DELETE FROM dominion_group WHERE id = ?;";
|
||||||
DatabaseManager.instance.query(sql, id);
|
DatabaseManager.instance.query(sql, id);
|
||||||
Cache.instance.loadGroup(id);
|
Cache.instance.loadGroups(id);
|
||||||
List<PlayerPrivilegeDTO> players = PlayerPrivilegeDTO.selectByGroupId(id);
|
List<MemberDTO> players = MemberDTO.selectByGroupId(id);
|
||||||
for (PlayerPrivilegeDTO player : players) {
|
for (MemberDTO player : players) {
|
||||||
player.setGroupId(-1);
|
player.setGroupId(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,7 +168,7 @@ public class GroupDTO {
|
||||||
try (ResultSet rs = updateRow.execute()) {
|
try (ResultSet rs = updateRow.execute()) {
|
||||||
List<GroupDTO> groups = getDTOFromRS(rs);
|
List<GroupDTO> groups = getDTOFromRS(rs);
|
||||||
if (groups.size() == 0) return null;
|
if (groups.size() == 0) return null;
|
||||||
Cache.instance.loadGroup((Integer) id.value);
|
Cache.instance.loadGroups((Integer) id.value);
|
||||||
return groups.get(0);
|
return groups.get(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("更新权限组失败: ", e, "");
|
DatabaseManager.handleDatabaseError("更新权限组失败: ", e, "");
|
||||||
|
|
|
@ -10,10 +10,10 @@ import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class PlayerPrivilegeDTO {
|
public class MemberDTO {
|
||||||
|
|
||||||
private static List<PlayerPrivilegeDTO> query(String sql, Object... params) {
|
private static List<MemberDTO> query(String sql, Object... params) {
|
||||||
List<PlayerPrivilegeDTO> players = new ArrayList<>();
|
List<MemberDTO> players = new ArrayList<>();
|
||||||
try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
|
try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
|
||||||
return getDTOFromRS(rs);
|
return getDTOFromRS(rs);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -22,8 +22,8 @@ public class PlayerPrivilegeDTO {
|
||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<PlayerPrivilegeDTO> getDTOFromRS(ResultSet rs) {
|
private static List<MemberDTO> getDTOFromRS(ResultSet rs) {
|
||||||
List<PlayerPrivilegeDTO> players = new ArrayList<>();
|
List<MemberDTO> players = new ArrayList<>();
|
||||||
if (rs == null) return players;
|
if (rs == null) return players;
|
||||||
try {
|
try {
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
|
@ -31,7 +31,7 @@ public class PlayerPrivilegeDTO {
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||||
flags.put(f, rs.getBoolean(f.getFlagName()));
|
flags.put(f, rs.getBoolean(f.getFlagName()));
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO player = new PlayerPrivilegeDTO(
|
MemberDTO player = new MemberDTO(
|
||||||
rs.getInt("id"),
|
rs.getInt("id"),
|
||||||
UUID.fromString(rs.getString("player_uuid")),
|
UUID.fromString(rs.getString("player_uuid")),
|
||||||
rs.getBoolean("admin"),
|
rs.getBoolean("admin"),
|
||||||
|
@ -47,14 +47,14 @@ public class PlayerPrivilegeDTO {
|
||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
|
|
||||||
private PlayerPrivilegeDTO doUpdate(UpdateRow updateRow) {
|
private MemberDTO doUpdate(UpdateRow updateRow) {
|
||||||
updateRow.returningAll(id)
|
updateRow.returningAll(id)
|
||||||
.table("player_privilege")
|
.table("dominion_member")
|
||||||
.where("id = ?", id.value);
|
.where("id = ?", id.value);
|
||||||
try (ResultSet rs = updateRow.execute()) {
|
try (ResultSet rs = updateRow.execute()) {
|
||||||
List<PlayerPrivilegeDTO> players = getDTOFromRS(rs);
|
List<MemberDTO> players = getDTOFromRS(rs);
|
||||||
if (players.size() == 0) return null;
|
if (players.size() == 0) return null;
|
||||||
Cache.instance.loadPlayerPrivileges(getPlayerUUID());
|
Cache.instance.loadMembers(getPlayerUUID());
|
||||||
return players.get(0);
|
return players.get(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("更新玩家权限失败: ", e, "");
|
DatabaseManager.handleDatabaseError("更新玩家权限失败: ", e, "");
|
||||||
|
@ -62,9 +62,9 @@ public class PlayerPrivilegeDTO {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) {
|
public static MemberDTO insert(MemberDTO player) {
|
||||||
InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null))
|
InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null))
|
||||||
.table("player_privilege")
|
.table("dominion_member")
|
||||||
.field(player.playerUUID)
|
.field(player.playerUUID)
|
||||||
.field(player.admin)
|
.field(player.admin)
|
||||||
.field(player.domID);
|
.field(player.domID);
|
||||||
|
@ -72,8 +72,8 @@ public class PlayerPrivilegeDTO {
|
||||||
insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f)));
|
insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f)));
|
||||||
}
|
}
|
||||||
try (ResultSet rs = insertRow.execute()) {
|
try (ResultSet rs = insertRow.execute()) {
|
||||||
Cache.instance.loadPlayerPrivileges(player.getPlayerUUID());
|
Cache.instance.loadMembers(player.getPlayerUUID());
|
||||||
List<PlayerPrivilegeDTO> players = getDTOFromRS(rs);
|
List<MemberDTO> players = getDTOFromRS(rs);
|
||||||
if (players.size() == 0) return null;
|
if (players.size() == 0) return null;
|
||||||
return players.get(0);
|
return players.get(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -82,41 +82,41 @@ public class PlayerPrivilegeDTO {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerPrivilegeDTO select(UUID playerUUID, Integer dom_id) {
|
public static MemberDTO select(UUID playerUUID, Integer dom_id) {
|
||||||
String sql = "SELECT * FROM player_privilege WHERE player_uuid = ? AND dom_id = ?;";
|
String sql = "SELECT * FROM dominion_member WHERE player_uuid = ? AND dom_id = ?;";
|
||||||
List<PlayerPrivilegeDTO> p = query(sql, playerUUID.toString(), dom_id);
|
List<MemberDTO> p = query(sql, playerUUID.toString(), dom_id);
|
||||||
if (p.size() == 0) return null;
|
if (p.size() == 0) return null;
|
||||||
return p.get(0);
|
return p.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PlayerPrivilegeDTO> select(Integer dom_id) {
|
public static List<MemberDTO> select(Integer dom_id) {
|
||||||
String sql = "SELECT * FROM player_privilege WHERE dom_id = ?;";
|
String sql = "SELECT * FROM dominion_member WHERE dom_id = ?;";
|
||||||
return query(sql, dom_id);
|
return query(sql, dom_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void delete(UUID player, Integer domID) {
|
public static void delete(UUID player, Integer domID) {
|
||||||
String sql = "DELETE FROM player_privilege WHERE player_uuid = ? AND dom_id = ?;";
|
String sql = "DELETE FROM dominion_member WHERE player_uuid = ? AND dom_id = ?;";
|
||||||
query(sql, player.toString(), domID);
|
query(sql, player.toString(), domID);
|
||||||
Cache.instance.loadPlayerPrivileges(player);
|
Cache.instance.loadMembers(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PlayerPrivilegeDTO> selectAll() {
|
public static List<MemberDTO> selectAll() {
|
||||||
String sql = "SELECT * FROM player_privilege;";
|
String sql = "SELECT * FROM dominion_member;";
|
||||||
return query(sql);
|
return query(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PlayerPrivilegeDTO> selectAll(UUID player) {
|
public static List<MemberDTO> selectAll(UUID player) {
|
||||||
String sql = "SELECT * FROM player_privilege WHERE player_uuid = ?;";
|
String sql = "SELECT * FROM dominion_member WHERE player_uuid = ?;";
|
||||||
return query(sql, player.toString());
|
return query(sql, player.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PlayerPrivilegeDTO> selectByGroupId(Integer groupId) {
|
public static List<MemberDTO> selectByGroupId(Integer groupId) {
|
||||||
String sql = "SELECT * FROM player_privilege WHERE group_id = ?;";
|
String sql = "SELECT * FROM dominion_member WHERE group_id = ?;";
|
||||||
return query(sql, groupId);
|
return query(sql, groupId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PlayerPrivilegeDTO> selectByDomGroupId(Integer domId, Integer groupId) {
|
public static List<MemberDTO> selectByDomGroupId(Integer domId, Integer groupId) {
|
||||||
String sql = "SELECT * FROM player_privilege WHERE group_id = ? AND dom_id = ?;";
|
String sql = "SELECT * FROM dominion_member WHERE group_id = ? AND dom_id = ?;";
|
||||||
return query(sql, groupId, domId);
|
return query(sql, groupId, domId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,26 +153,26 @@ public class PlayerPrivilegeDTO {
|
||||||
return flags.get(flag);
|
return flags.get(flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerPrivilegeDTO setFlagValue(Flag flag, Boolean value) {
|
public MemberDTO setFlagValue(Flag flag, Boolean value) {
|
||||||
flags.put(flag, value);
|
flags.put(flag, value);
|
||||||
Field f = new Field(flag.getFlagName(), value);
|
Field f = new Field(flag.getFlagName(), value);
|
||||||
UpdateRow updateRow = new UpdateRow().field(f);
|
UpdateRow updateRow = new UpdateRow().field(f);
|
||||||
return doUpdate(updateRow);
|
return doUpdate(updateRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerPrivilegeDTO setAdmin(Boolean admin) {
|
public MemberDTO setAdmin(Boolean admin) {
|
||||||
this.admin.value = admin;
|
this.admin.value = admin;
|
||||||
UpdateRow updateRow = new UpdateRow().field(this.admin);
|
UpdateRow updateRow = new UpdateRow().field(this.admin);
|
||||||
return doUpdate(updateRow);
|
return doUpdate(updateRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerPrivilegeDTO setGroupId(Integer groupId) {
|
public MemberDTO setGroupId(Integer groupId) {
|
||||||
this.groupId.value = groupId;
|
this.groupId.value = groupId;
|
||||||
UpdateRow updateRow = new UpdateRow().field(this.groupId);
|
UpdateRow updateRow = new UpdateRow().field(this.groupId);
|
||||||
return doUpdate(updateRow);
|
return doUpdate(updateRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerPrivilegeDTO applyTemplate(PrivilegeTemplateDTO template) {
|
public MemberDTO applyTemplate(PrivilegeTemplateDTO template) {
|
||||||
this.admin.value = template.getAdmin();
|
this.admin.value = template.getAdmin();
|
||||||
UpdateRow updateRow = new UpdateRow().field(admin);
|
UpdateRow updateRow = new UpdateRow().field(admin);
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||||
|
@ -182,7 +182,7 @@ public class PlayerPrivilegeDTO {
|
||||||
return doUpdate(updateRow);
|
return doUpdate(updateRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
private PlayerPrivilegeDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map<Flag, Boolean> flags, Integer groupId) {
|
private MemberDTO(Integer id, UUID playerUUID, Boolean admin, Integer domID, Map<Flag, Boolean> flags, Integer groupId) {
|
||||||
this.id.value = id;
|
this.id.value = id;
|
||||||
this.playerUUID.value = playerUUID.toString();
|
this.playerUUID.value = playerUUID.toString();
|
||||||
this.admin.value = admin;
|
this.admin.value = admin;
|
||||||
|
@ -191,7 +191,7 @@ public class PlayerPrivilegeDTO {
|
||||||
this.flags.putAll(flags);
|
this.flags.putAll(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerPrivilegeDTO(UUID playerUUID, DominionDTO dom) {
|
public MemberDTO(UUID playerUUID, DominionDTO dom) {
|
||||||
this.id.value = null;
|
this.id.value = null;
|
||||||
this.playerUUID.value = playerUUID.toString();
|
this.playerUUID.value = playerUUID.toString();
|
||||||
this.admin.value = false;
|
this.admin.value = false;
|
|
@ -5,7 +5,7 @@ import cn.lunadeer.dominion.Dominion;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
|
@ -17,7 +17,7 @@ import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
|
|
||||||
public class Apis {
|
public class Apis {
|
||||||
public static boolean canByPass(Player player, DominionDTO dom, PlayerPrivilegeDTO prev) {
|
public static boolean canByPass(Player player, DominionDTO dom, MemberDTO prev) {
|
||||||
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ public class Apis {
|
||||||
if (dom == null) {
|
if (dom == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO prev = Cache.instance.getPlayerPrivilege(player, dom);
|
MemberDTO prev = Cache.instance.getMember(player, dom);
|
||||||
if (canByPass(player, dom, prev)) {
|
if (canByPass(player, dom, prev)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,7 +103,7 @@ public class PlayerEvents implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // bed
|
@EventHandler(priority = EventPriority.HIGHEST) // bed
|
||||||
public void onBedUse(PlayerInteractEvent event) {
|
public void onBedUse(PlayerInteractEvent event) {
|
||||||
if (!event.getAction().isRightClick()) {
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player bukkitPlayer = event.getPlayer();
|
Player bukkitPlayer = event.getPlayer();
|
||||||
|
@ -165,7 +165,7 @@ public class PlayerEvents implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // button
|
@EventHandler(priority = EventPriority.HIGHEST) // button
|
||||||
public void onButton(PlayerInteractEvent event) {
|
public void onButton(PlayerInteractEvent event) {
|
||||||
if (!event.getAction().isRightClick()) {
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
@ -182,7 +182,7 @@ public class PlayerEvents implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // cake
|
@EventHandler(priority = EventPriority.HIGHEST) // cake
|
||||||
public void eatCake(PlayerInteractEvent event) {
|
public void eatCake(PlayerInteractEvent event) {
|
||||||
if (!event.getAction().isRightClick()) {
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
|
@ -280,7 +280,7 @@ public class PlayerEvents implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // comparer
|
@EventHandler(priority = EventPriority.HIGHEST) // comparer
|
||||||
public void comparerChange(PlayerInteractEvent event) {
|
public void comparerChange(PlayerInteractEvent event) {
|
||||||
if (!event.getAction().isRightClick()) {
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
|
@ -298,7 +298,7 @@ public class PlayerEvents implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // door
|
@EventHandler(priority = EventPriority.HIGHEST) // door
|
||||||
public void doorUse(PlayerInteractEvent event) {
|
public void doorUse(PlayerInteractEvent event) {
|
||||||
if (!event.getAction().isRightClick()) {
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
|
@ -313,6 +313,20 @@ public class PlayerEvents implements Listener {
|
||||||
checkFlag(dom, Flag.DOOR, player, event);
|
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
|
@EventHandler(priority = EventPriority.HIGHEST) // dye
|
||||||
public void dyeEvent(PlayerInteractEntityEvent event) {
|
public void dyeEvent(PlayerInteractEntityEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
@ -326,7 +340,7 @@ public class PlayerEvents implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // edit sign
|
@EventHandler(priority = EventPriority.HIGHEST) // edit sign
|
||||||
public void onSignOpen(PlayerInteractEvent event) {
|
public void onSignOpen(PlayerInteractEvent event) {
|
||||||
if (!event.getAction().isRightClick()) {
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
@ -430,7 +444,7 @@ public class PlayerEvents implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // honey
|
@EventHandler(priority = EventPriority.HIGHEST) // honey
|
||||||
public void honeyInteractive(PlayerInteractEvent event) {
|
public void honeyInteractive(PlayerInteractEvent event) {
|
||||||
if (!event.getAction().isRightClick()) {
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
|
@ -488,7 +502,7 @@ public class PlayerEvents implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // lever
|
@EventHandler(priority = EventPriority.HIGHEST) // lever
|
||||||
public void onLever(PlayerInteractEvent event) {
|
public void onLever(PlayerInteractEvent event) {
|
||||||
if (!event.getAction().isRightClick()) {
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
|
|
|
@ -2,6 +2,7 @@ package cn.lunadeer.dominion.managers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.VaultConnect;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
@ -82,6 +83,9 @@ public class ConfigManager {
|
||||||
_economy_price = (float) _file.getDouble("Economy.Price", 10.0);
|
_economy_price = (float) _file.getDouble("Economy.Price", 10.0);
|
||||||
_economy_only_xz = _file.getBoolean("Economy.OnlyXZ", false);
|
_economy_only_xz = _file.getBoolean("Economy.OnlyXZ", false);
|
||||||
_economy_refund = (float) _file.getDouble("Economy.Refund", 0.85);
|
_economy_refund = (float) _file.getDouble("Economy.Refund", 0.85);
|
||||||
|
if (getEconomyEnable()) {
|
||||||
|
new VaultConnect(this._plugin);
|
||||||
|
}
|
||||||
_fly_permission_nodes = _file.getStringList("FlyPermissionNodes");
|
_fly_permission_nodes = _file.getStringList("FlyPermissionNodes");
|
||||||
_residence_migration = _file.getBoolean("ResidenceMigration", false);
|
_residence_migration = _file.getBoolean("ResidenceMigration", false);
|
||||||
saveAll(); // 回写文件 防止文件中的数据不完整
|
saveAll(); // 回写文件 防止文件中的数据不完整
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
package cn.lunadeer.dominion.managers;
|
package cn.lunadeer.dominion.managers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
import cn.lunadeer.minecraftpluginutils.databse.*;
|
||||||
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.AddColumn;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.CreateTable;
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.CreateTable;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
|
||||||
public class DatabaseTables {
|
public class DatabaseTables {
|
||||||
public static void migrate() {
|
public static void migrate() {
|
||||||
// player name
|
// player name
|
||||||
|
@ -58,23 +58,35 @@ public class DatabaseTables {
|
||||||
.foreignKey(dominion_parent_dom_id_fk);
|
.foreignKey(dominion_parent_dom_id_fk);
|
||||||
dominion.execute();
|
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
|
// player privilege
|
||||||
TableColumn player_privilege_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
if (!Common.IsTableExist("dominion_member")) {
|
||||||
TableColumn player_privilege_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, false, "''");
|
TableColumn player_privilege_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
||||||
TableColumn player_privilege_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1);
|
TableColumn player_privilege_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, false, "''");
|
||||||
TableColumn player_privilege_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
|
TableColumn player_privilege_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1);
|
||||||
CreateTable.ForeignKey player_privilege_player_uuid_fk = new CreateTable.ForeignKey(player_privilege_player_uuid, "player_name", player_name_uuid, true);
|
TableColumn player_privilege_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
|
||||||
CreateTable.ForeignKey player_privilege_dom_id_fk = new CreateTable.ForeignKey(player_privilege_dom_id, "dominion", dominion_id, true);
|
CreateTable.ForeignKey player_privilege_player_uuid_fk = new CreateTable.ForeignKey(player_privilege_player_uuid, "player_name", player_name_uuid, true);
|
||||||
CreateTable player_privilege = new CreateTable().ifNotExists();
|
CreateTable.ForeignKey player_privilege_dom_id_fk = new CreateTable.ForeignKey(player_privilege_dom_id, "dominion", dominion_id, true);
|
||||||
player_privilege.table("player_privilege")
|
CreateTable player_privilege = new CreateTable().ifNotExists();
|
||||||
.field(player_privilege_id)
|
player_privilege.table("player_privilege")
|
||||||
.field(player_privilege_player_uuid)
|
.field(player_privilege_id)
|
||||||
.field(player_privilege_dom_id)
|
.field(player_privilege_player_uuid)
|
||||||
.field(player_privilege_admin)
|
.field(player_privilege_dom_id)
|
||||||
.foreignKey(player_privilege_player_uuid_fk)
|
.field(player_privilege_admin)
|
||||||
.foreignKey(player_privilege_dom_id_fk)
|
.foreignKey(player_privilege_player_uuid_fk)
|
||||||
.unique(player_privilege_player_uuid, player_privilege_dom_id);
|
.foreignKey(player_privilege_dom_id_fk)
|
||||||
player_privilege.execute();
|
.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
|
// server root player name
|
||||||
Field server_player_name_id_field = new Field("id", -1);
|
Field server_player_name_id_field = new Field("id", -1);
|
||||||
|
@ -116,21 +128,11 @@ public class DatabaseTables {
|
||||||
.field(server_dom_leave_message_field);
|
.field(server_dom_leave_message_field);
|
||||||
insert_server_dom.execute();
|
insert_server_dom.execute();
|
||||||
|
|
||||||
for (Flag flag : Flag.getAllDominionFlags()) {
|
// 1.18.0 dominion add tp_location
|
||||||
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'");
|
TableColumn dominion_tp_location = new TableColumn("tp_location", FieldType.STRING, false, false, true, false, "'default'");
|
||||||
new AddColumn(dominion_tp_location).table("dominion").ifNotExists().execute();
|
new AddColumn(dominion_tp_location).table("dominion").ifNotExists().execute();
|
||||||
|
|
||||||
// 1.31.0
|
// 1.31.0 add privilege_template
|
||||||
TableColumn privilege_template_id = new TableColumn("id", FieldType.INT, true, true, true, true, 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_creator = new TableColumn("creator", FieldType.STRING, false, false, true, false, "''");
|
||||||
TableColumn privilege_template_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'");
|
TableColumn privilege_template_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'");
|
||||||
|
@ -152,31 +154,82 @@ public class DatabaseTables {
|
||||||
new AddColumn(column).table("privilege_template").ifNotExists().execute();
|
new AddColumn(column).table("privilege_template").ifNotExists().execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1.31.6
|
// 1.31.6 dominion add blue-map tile color
|
||||||
TableColumn dominion_color = new TableColumn("color", FieldType.STRING, false, false, true, false, "'#00BFFF'");
|
TableColumn dominion_color = new TableColumn("color", FieldType.STRING, false, false, true, false, "'#00BFFF'");
|
||||||
new AddColumn(dominion_color).table("dominion").ifNotExists().execute();
|
new AddColumn(dominion_color).table("dominion").ifNotExists().execute();
|
||||||
|
|
||||||
// 1.34.0
|
// 1.34.0 add dominion_group
|
||||||
TableColumn player_privilege_group_id = new TableColumn("group_id", FieldType.INT, false, false, true, false, -1);
|
if (!Common.IsTableExist("dominion_member")) {
|
||||||
new AddColumn(player_privilege_group_id).table("player_privilege").ifNotExists().execute();
|
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 group_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
TableColumn dominion_group_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
||||||
TableColumn group_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1);
|
TableColumn dominion_group_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1);
|
||||||
TableColumn group_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'");
|
TableColumn dominion_group_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'");
|
||||||
TableColumn group_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
|
TableColumn dominion_group_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
|
||||||
CreateTable.ForeignKey group_dom_id_fk = new CreateTable.ForeignKey(group_dom_id, "dominion", dominion_id, true);
|
CreateTable.ForeignKey group_dom_id_fk = new CreateTable.ForeignKey(dominion_group_dom_id, "dominion", dominion_id, true);
|
||||||
CreateTable group = new CreateTable().ifNotExists();
|
CreateTable group = new CreateTable().ifNotExists();
|
||||||
group.table("dominion_group")
|
group.table("dominion_group")
|
||||||
.field(group_id)
|
.field(dominion_group_id)
|
||||||
.field(group_dom_id)
|
.field(dominion_group_dom_id)
|
||||||
.field(group_name)
|
.field(dominion_group_name)
|
||||||
.field(group_admin)
|
.field(dominion_group_admin)
|
||||||
.foreignKey(group_dom_id_fk)
|
.foreignKey(group_dom_id_fk)
|
||||||
.unique(group_dom_id, group_name);
|
.unique(dominion_group_dom_id, dominion_group_name);
|
||||||
group.execute();
|
group.execute();
|
||||||
for (Flag flag : Flag.getAllPrivilegeFlags()) {
|
for (Flag flag : Flag.getAllPrivilegeFlags()) {
|
||||||
TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
|
TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
|
||||||
new AddColumn(column).table("dominion_group").ifNotExists().execute();
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package cn.lunadeer.dominion.tuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||||
|
@ -45,7 +45,7 @@ public class Apis {
|
||||||
public static boolean noAuthToManage(Player player, DominionDTO dominion) {
|
public static boolean noAuthToManage(Player player, DominionDTO dominion) {
|
||||||
if (player.isOp()) return false;
|
if (player.isOp()) return false;
|
||||||
if (!dominion.getOwner().equals(player.getUniqueId())) {
|
if (!dominion.getOwner().equals(player.getUniqueId())) {
|
||||||
PlayerPrivilegeDTO privileges = PlayerPrivilegeDTO.select(player.getUniqueId(), dominion.getId());
|
MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId());
|
||||||
if (privileges == null || !privileges.getAdmin()) {
|
if (privileges == null || !privileges.getAdmin()) {
|
||||||
Notification.error(player, "你不是领地 %s 的拥有者或管理员,无权访问此页面", dominion.getName());
|
Notification.error(player, "你不是领地 %s 的拥有者或管理员,无权访问此页面", dominion.getName());
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -2,8 +2,8 @@ package cn.lunadeer.dominion.tuis.dominion.manage.group;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
|
||||||
import cn.lunadeer.dominion.tuis.Apis;
|
import cn.lunadeer.dominion.tuis.Apis;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
|
@ -72,9 +72,9 @@ public class GroupList {
|
||||||
.setExecuteCommand("/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + page);
|
.setExecuteCommand("/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + page);
|
||||||
line.append(del.build()).append(edit.build()).append(group.getName()).append(add.build());
|
line.append(del.build()).append(edit.build()).append(group.getName()).append(add.build());
|
||||||
view.add(line);
|
view.add(line);
|
||||||
List<PlayerPrivilegeDTO> players = PlayerPrivilegeDTO.selectByGroupId(group.getId());
|
List<MemberDTO> players = MemberDTO.selectByGroupId(group.getId());
|
||||||
XLogger.debug("players: " + players.size());
|
XLogger.debug("players: " + players.size());
|
||||||
for (PlayerPrivilegeDTO playerPrivilege : players) {
|
for (MemberDTO playerPrivilege : players) {
|
||||||
PlayerDTO p = PlayerDTO.select(playerPrivilege.getPlayerUUID());
|
PlayerDTO p = PlayerDTO.select(playerPrivilege.getPlayerUUID());
|
||||||
if (p == null) continue;
|
if (p == null) continue;
|
||||||
Button remove = Button.createRed("-")
|
Button remove = Button.createRed("-")
|
||||||
|
|
|
@ -2,8 +2,8 @@ package cn.lunadeer.dominion.tuis.dominion.manage.group;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||||
|
@ -43,8 +43,8 @@ public class SelectMember {
|
||||||
Line sub = Line.create().append("选择成员添加到权限组 " + group.getName())
|
Line sub = Line.create().append("选择成员添加到权限组 " + group.getName())
|
||||||
.append(Button.create("返回").setExecuteCommand("/dominion group list " + dominion.getName() + " " + backPage).build());
|
.append(Button.create("返回").setExecuteCommand("/dominion group list " + dominion.getName() + " " + backPage).build());
|
||||||
view.subtitle(sub);
|
view.subtitle(sub);
|
||||||
List<PlayerPrivilegeDTO> members = PlayerPrivilegeDTO.selectByDomGroupId(dominion.getId(), -1);
|
List<MemberDTO> members = MemberDTO.selectByDomGroupId(dominion.getId(), -1);
|
||||||
for (PlayerPrivilegeDTO member : members) {
|
for (MemberDTO member : members) {
|
||||||
PlayerDTO p = PlayerDTO.select(member.getPlayerUUID());
|
PlayerDTO p = PlayerDTO.select(member.getPlayerUUID());
|
||||||
if (p == null) continue;
|
if (p == null) continue;
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class MemberList {
|
||||||
int page = getPage(args, 3);
|
int page = getPage(args, 3);
|
||||||
ListView view = ListView.create(10, "/dominion member list " + dominion.getName());
|
ListView view = ListView.create(10, "/dominion member list " + dominion.getName());
|
||||||
if (noAuthToManage(player, dominion)) return;
|
if (noAuthToManage(player, dominion)) return;
|
||||||
List<PlayerPrivilegeDTO> privileges = PlayerPrivilegeDTO.select(dominion.getId());
|
List<MemberDTO> privileges = MemberDTO.select(dominion.getId());
|
||||||
view.title("领地 " + dominion.getName() + " 成员列表");
|
view.title("领地 " + dominion.getName() + " 成员列表");
|
||||||
view.navigator(
|
view.navigator(
|
||||||
Line.create()
|
Line.create()
|
||||||
|
@ -56,7 +56,7 @@ public class MemberList {
|
||||||
);
|
);
|
||||||
view.add(Line.create().append(Button.create("添加成员")
|
view.add(Line.create().append(Button.create("添加成员")
|
||||||
.setExecuteCommand(CommandParser("/dominion member select_player %s", dominion.getName())).build()));
|
.setExecuteCommand(CommandParser("/dominion member select_player %s", dominion.getName())).build()));
|
||||||
for (PlayerPrivilegeDTO privilege : privileges) {
|
for (MemberDTO privilege : privileges) {
|
||||||
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
|
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
|
||||||
if (p_player == null) continue;
|
if (p_player == null) continue;
|
||||||
GroupDTO group = Cache.instance.getGroup(privilege.getGroupId());
|
GroupDTO group = Cache.instance.getGroup(privilege.getGroupId());
|
||||||
|
|
|
@ -2,8 +2,8 @@ package cn.lunadeer.dominion.tuis.dominion.manage.member;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||||
|
@ -46,7 +46,7 @@ public class MemberSetting {
|
||||||
Notification.error(sender, "玩家 %s 不存在", playerName);
|
Notification.error(sender, "玩家 %s 不存在", playerName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerPrivilegeDTO privilege = PlayerPrivilegeDTO.select(playerDTO.getUuid(), dominion.getId());
|
MemberDTO privilege = MemberDTO.select(playerDTO.getUuid(), dominion.getId());
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
Notification.warn(sender, "玩家 %s 不是领地 %s 的成员", playerName, dominion.getName());
|
Notification.warn(sender, "玩家 %s 不是领地 %s 的成员", playerName, dominion.getName());
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class TemplateSetting {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ListView view = ListView.create(10, "/dominion template manage " + template.getName());
|
ListView view = ListView.create(10, "/dominion template setting " + template.getName());
|
||||||
view.title("模板 " + args[1] + " 权限管理");
|
view.title("模板 " + args[1] + " 权限管理");
|
||||||
view.navigator(Line.create()
|
view.navigator(Line.create()
|
||||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
||||||
|
|
Loading…
Reference in New Issue