mirror of
https://github.com/ColdeZhang/Dominion.git
synced 2024-10-18 21:16:45 +08:00
新增领地tp功能
This commit is contained in:
parent
002304884a
commit
28735eff4c
11
README.md
11
README.md
@ -3,7 +3,9 @@
|
||||
<img src="https://ssl.lunadeer.cn:14437/i/2024/03/28/6604f0cec0f0e.png" alt="" width="70%">
|
||||
|
||||
### [开源地址](https://ssl.lunadeer.cn:14446/zhangyuheng/Dominion) | [文档地址](https://ssl.lunadeer.cn:14448/doc/23/)
|
||||
|
||||
### [下载页面](https://ssl.lunadeer.cn:14446/zhangyuheng/Dominion/releases)
|
||||
|
||||
### [统计页面](https://bstats.org/plugin/bukkit/Dominion/21445) | [Hangar](https://hangar.papermc.io/zhangyuheng/Dominion)
|
||||
|
||||
</div>
|
||||
@ -147,6 +149,8 @@
|
||||
| 缩小领地 | `/dominion contract [大小] [领地名称]` |
|
||||
| 设置进入领地的提示语 | `/dominion set_enter_msg <提示语> [领地名称]` |
|
||||
| 设置离开领地的提示语 | `/dominion set_leave_msg <提示语> [领地名称]` |
|
||||
| 设置领地传送点 | `/dominion set_tp_location [领地名称]` |
|
||||
| 传送到领地传送点 | `/dominion tp <领地名称>` |
|
||||
| 重命名领地 | `/dominion rename <原领地名称> <新领地名称>` |
|
||||
| 转让领地 | `/dominion give <领地名称> <玩家名称>` |
|
||||
| 删除领地 | `/dominion delete <领地名称>` |
|
||||
@ -198,6 +202,13 @@ AutoCleanAfterDays: 180
|
||||
|
||||
BlueMap: true
|
||||
|
||||
Teleport:
|
||||
Enable: true
|
||||
# 传送延迟 秒
|
||||
Delay: 0
|
||||
# 冷却时间 秒
|
||||
CoolDown: 0
|
||||
|
||||
CheckUpdate: true
|
||||
|
||||
Debug: false
|
||||
|
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>cn.lunadeer</groupId>
|
||||
<artifactId>Dominion</artifactId>
|
||||
<version>1.17.2-beta</version>
|
||||
<version>1.18.3-beta</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Dominion</name>
|
||||
|
@ -9,6 +9,7 @@ import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@ -270,4 +271,6 @@ public class Cache {
|
||||
private final AtomicLong _last_update_privilege = new AtomicLong(0);
|
||||
private final AtomicBoolean _update_privilege_is_scheduled = new AtomicBoolean(false);
|
||||
private static final long UPDATE_INTERVAL = 1000 * 4;
|
||||
|
||||
public final Map<UUID, LocalDateTime> NextTimeAllowTeleport = new java.util.HashMap<>();
|
||||
}
|
||||
|
@ -125,6 +125,12 @@ public class Commands implements TabExecutor {
|
||||
case "set_leave_msg":
|
||||
DominionOperate.setLeaveMessage(sender, args);
|
||||
break;
|
||||
case "set_tp_location":
|
||||
DominionOperate.setTpLocation(sender, args);
|
||||
break;
|
||||
case "tp":
|
||||
DominionOperate.teleportToDominion(sender, args);
|
||||
break;
|
||||
case "rename":
|
||||
DominionOperate.renameDominion(sender, args);
|
||||
break;
|
||||
@ -167,6 +173,8 @@ public class Commands implements TabExecutor {
|
||||
"create_privilege", "set_privilege", "clear_privilege", "list", "privilege_info",
|
||||
"set_enter_msg",
|
||||
"set_leave_msg",
|
||||
"set_tp_location",
|
||||
"tp",
|
||||
"rename",
|
||||
"give",
|
||||
"reload_cache",
|
||||
@ -189,7 +197,10 @@ public class Commands implements TabExecutor {
|
||||
case "privilege_list":
|
||||
case "rename":
|
||||
case "give":
|
||||
case "set_tp_location":
|
||||
return playerDominions(sender);
|
||||
case "tp":
|
||||
return allDominions();
|
||||
case "set":
|
||||
return dominionFlags();
|
||||
case "create_privilege":
|
||||
|
@ -30,6 +30,7 @@ public class Apis {
|
||||
Notification.info(sender, " 大小为" + (x2 - x1) + " x" + (y2 - y1) + " x" + (z2 - z1));
|
||||
Notification.info(sender, " 中心坐标为 " + (x1 + (x2 - x1) / 2) + " " + (y1 + (y2 - y1) / 2) + " " + (z1 + (z2 - z1) / 2));
|
||||
Notification.info(sender, " 高度为 " + (y2 - y1));
|
||||
Notification.info(sender, " Y1=" + y1 + " Y2=" + y2);
|
||||
Notification.info(sender, " 体积为 " + (x2 - x1) * (y2 - y1) * (z2 - z1));
|
||||
Notification.info(sender, " 领地的世界为 " + dominionDTO.getWorld());
|
||||
Notification.info(sender, " 领地的对角点坐标为 x1=" + x1 + " y1=" + y1 + " z1=" + z1 + " x2=" + x2 + " y2=" + y2 + " z2=" + z2);
|
||||
|
@ -1,13 +1,18 @@
|
||||
package cn.lunadeer.dominion.commands;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.controllers.DominionController;
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.dominion.utils.Notification;
|
||||
import cn.lunadeer.dominion.utils.XLogger;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.lunadeer.dominion.commands.Apis.*;
|
||||
@ -272,6 +277,27 @@ public class DominionOperate {
|
||||
Notification.error(sender, "用法: /dominion set_leave_msg <提示语> [领地名称]");
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置领地传送点
|
||||
* /dominion set_tp_location [领地名称]
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void setTpLocation(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
if (args.length == 1) {
|
||||
DominionController.setTpLocation(player);
|
||||
return;
|
||||
}
|
||||
if (args.length == 2) {
|
||||
DominionController.setTpLocation(player, args[1]);
|
||||
return;
|
||||
}
|
||||
Notification.error(sender, "用法: /dominion set_tp_location [领地名称]");
|
||||
}
|
||||
|
||||
/**
|
||||
* 重命名领地
|
||||
* /dominion rename <原领地名称> <新领地名称>
|
||||
@ -315,4 +341,76 @@ public class DominionOperate {
|
||||
}
|
||||
Notification.error(sender, "用法: /dominion give <领地名称> <玩家名称>");
|
||||
}
|
||||
|
||||
/**
|
||||
* 传送到领地
|
||||
* /dominion tp <领地名称>
|
||||
*
|
||||
* @param sender 命令发送者
|
||||
* @param args 命令参数
|
||||
*/
|
||||
public static void teleportToDominion(CommandSender sender, String[] args) {
|
||||
Player player = playerOnly(sender);
|
||||
if (player == null) return;
|
||||
if (args.length != 2) {
|
||||
Notification.error(sender, "用法: /dominion tp <领地名称>");
|
||||
return;
|
||||
}
|
||||
if (!Dominion.config.getTpEnable()) {
|
||||
Notification.error(sender, "管理员没有开启领地传送功能");
|
||||
return;
|
||||
}
|
||||
DominionDTO dominionDTO = DominionDTO.select(args[1]);
|
||||
if (dominionDTO == null) {
|
||||
Notification.error(sender, "领地不存在");
|
||||
return;
|
||||
}
|
||||
PlayerPrivilegeDTO privilegeDTO = PlayerPrivilegeDTO.select(player.getUniqueId(), dominionDTO.getId());
|
||||
if (privilegeDTO == null) {
|
||||
if (!dominionDTO.getTeleport()) {
|
||||
Notification.error(sender, "此领地禁止传送");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (!privilegeDTO.getTeleport()) {
|
||||
Notification.error(sender, "你不被允许传送到这个领地");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Location location = dominionDTO.getTpLocation();
|
||||
if (location == null) {
|
||||
Notification.error(sender, "此领地没有设置传送点");
|
||||
return;
|
||||
// int center_x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;
|
||||
// int center_z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
||||
// // find safe location
|
||||
// World world = Dominion.instance.getServer().getWorld(dominionDTO.getWorld());
|
||||
// if (world == null) {
|
||||
// Notification.error(sender, "此领地所在世界不存在");
|
||||
// XLogger.warn("领地 " + dominionDTO.getName() + " 所在世界不存在");
|
||||
// return;
|
||||
// }
|
||||
// location = world.getHighestBlockAt(center_x, center_z).getLocation();
|
||||
}
|
||||
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
LocalDateTime next_time = Cache.instance.NextTimeAllowTeleport.get(player.getUniqueId());
|
||||
if (next_time != null) {
|
||||
if (now.isBefore(next_time)) {
|
||||
long secs_until_next = now.until(next_time, java.time.temporal.ChronoUnit.SECONDS);
|
||||
Notification.error(player, "请等待 " + secs_until_next + " 秒后再次传送");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Notification.info(player, "传送将在 " + Dominion.config.getTpDelay() + " 秒后执行");
|
||||
Cache.instance.NextTimeAllowTeleport.put(player.getUniqueId(), now.plusSeconds(Dominion.config.getTpCoolDown()));
|
||||
Dominion.scheduler.region.runDelayed(Dominion.instance, (instance) -> {
|
||||
if (player.isOnline()) {
|
||||
player.teleportAsync(location);
|
||||
Notification.info(player, "已将你传送到 " + dominionDTO.getName());
|
||||
}
|
||||
}, Dominion.config.getTpDelay() == 0 ? 1 : 20L * Dominion.config.getTpDelay());
|
||||
}
|
||||
}
|
||||
|
@ -97,5 +97,13 @@ public class Helper {
|
||||
return dominions_name;
|
||||
}
|
||||
|
||||
public static List<String> allDominions() {
|
||||
List<String> dominions_name = new ArrayList<>();
|
||||
List<DominionDTO> dominions = DominionController.all();
|
||||
for (DominionDTO dominion : dominions) {
|
||||
dominions_name.add(dominion.getName());
|
||||
}
|
||||
return dominions_name;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -23,6 +23,10 @@ public class DominionController {
|
||||
return DominionDTO.selectAll(owner.getUniqueId());
|
||||
}
|
||||
|
||||
public static List<DominionDTO> all() {
|
||||
return DominionDTO.selectAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建领地
|
||||
*
|
||||
@ -427,6 +431,55 @@ public class DominionController {
|
||||
Notification.info(operator, "成功设置领地 " + dominion_name + " 的离开消息");
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置领地的传送点
|
||||
*
|
||||
* @param operator 操作者
|
||||
*/
|
||||
public static void setTpLocation(Player operator) {
|
||||
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
||||
if (dominion == null) {
|
||||
return;
|
||||
}
|
||||
setTpLocation(operator, dominion.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置领地的传送点
|
||||
*
|
||||
* @param operator 操作者
|
||||
* @param dominion_name 领地名称
|
||||
*/
|
||||
public static void setTpLocation(Player operator, String dominion_name) {
|
||||
DominionDTO dominion = DominionDTO.select(dominion_name);
|
||||
if (dominion == null) {
|
||||
Notification.error(operator, "领地 " + dominion_name + " 不存在");
|
||||
return;
|
||||
}
|
||||
if (notOwner(operator, dominion)) {
|
||||
Notification.error(operator, "你不是领地 " + dominion_name + " 的拥有者,无法执行此操作");
|
||||
return;
|
||||
}
|
||||
// 检查是否在领地内
|
||||
if (operator.getWorld().getName().equals(dominion.getWorld()) &&
|
||||
operator.getLocation().getBlockX() >= dominion.getX1() &&
|
||||
operator.getLocation().getBlockX() <= dominion.getX2() &&
|
||||
operator.getLocation().getBlockY() >= dominion.getY1() &&
|
||||
operator.getLocation().getBlockY() <= dominion.getY2() &&
|
||||
operator.getLocation().getBlockZ() >= dominion.getZ1() &&
|
||||
operator.getLocation().getBlockZ() <= dominion.getZ2()) {
|
||||
Location loc = operator.getLocation();
|
||||
loc.setY(loc.getY() + 1.5);
|
||||
dominion.setTpLocation(loc);
|
||||
Notification.info(operator, "成功设置领地 " + dominion_name + " 的传送点," +
|
||||
"当前位置为 " + operator.getLocation().getBlockX() + " " +
|
||||
operator.getLocation().getBlockY() + 1 + " " +
|
||||
operator.getLocation().getBlockZ());
|
||||
} else {
|
||||
Notification.error(operator, "你不在领地 " + dominion_name + " 内,无法设置传送点");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 重命名领地
|
||||
*
|
||||
|
@ -75,6 +75,7 @@ public class FlagsController {
|
||||
case "repeater": return dominion.setRepeater(value);
|
||||
case "shear": return dominion.setShear(value);
|
||||
case "shoot": return dominion.setShoot(value);
|
||||
case "teleport": return dominion.setTeleport(value);
|
||||
case "tnt_explode": return dominion.setTntExplode(value);
|
||||
case "trade": return dominion.setTrade(value);
|
||||
case "trample": return dominion.setTrample(value);
|
||||
|
@ -205,6 +205,9 @@ public class PrivilegeController {
|
||||
case "shoot":
|
||||
privilege.setShoot(value);
|
||||
break;
|
||||
case "teleport":
|
||||
privilege.setTeleport(value);
|
||||
break;
|
||||
case "trade":
|
||||
privilege.setTrade(value);
|
||||
break;
|
||||
@ -266,7 +269,7 @@ public class PrivilegeController {
|
||||
dom.getPlace(), dom.getPressure(),
|
||||
dom.getRiding(), dom.getRepeater(),
|
||||
dom.getShear(), dom.getShoot(),
|
||||
dom.getTrade(),
|
||||
dom.getTeleport(), dom.getTrade(),
|
||||
dom.getVehicleDestroy(),
|
||||
dom.getVehicleSpawn());
|
||||
privilege = PlayerPrivilegeDTO.insert(privilege);
|
||||
|
@ -1,13 +1,17 @@
|
||||
package cn.lunadeer.dominion.dtos;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.Dominion;
|
||||
import cn.lunadeer.dominion.utils.Database;
|
||||
import cn.lunadeer.dominion.utils.XLogger;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
public class DominionDTO {
|
||||
@ -32,6 +36,7 @@ public class DominionDTO {
|
||||
Integer y2 = rs.getInt("y2");
|
||||
Integer z2 = rs.getInt("z2");
|
||||
Integer parentDomId = rs.getInt("parent_dom_id");
|
||||
String tp_location = rs.getString("tp_location");
|
||||
DominionDTO dominion = new DominionDTO(id, owner, name, world, x1, y1, z1, x2, y2, z2, parentDomId,
|
||||
rs.getString("join_message"),
|
||||
rs.getString("leave_message"),
|
||||
@ -73,12 +78,14 @@ public class DominionDTO {
|
||||
rs.getBoolean("repeater"),
|
||||
rs.getBoolean("shear"),
|
||||
rs.getBoolean("shoot"),
|
||||
rs.getBoolean("teleport"),
|
||||
rs.getBoolean("tnt_explode"),
|
||||
rs.getBoolean("trade"),
|
||||
rs.getBoolean("trample"),
|
||||
rs.getBoolean("vehicle_destroy"),
|
||||
rs.getBoolean("vehicle_spawn"),
|
||||
rs.getBoolean("wither_spawn")
|
||||
rs.getBoolean("wither_spawn"),
|
||||
tp_location
|
||||
);
|
||||
dominions.add(dominion);
|
||||
}
|
||||
@ -168,6 +175,13 @@ public class DominionDTO {
|
||||
}
|
||||
|
||||
private static DominionDTO update(DominionDTO dominion) {
|
||||
String tp_location;
|
||||
if (dominion.getTpLocation() == null) {
|
||||
tp_location = "default";
|
||||
} else {
|
||||
Location loc = dominion.getTpLocation();
|
||||
tp_location = loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ();
|
||||
}
|
||||
String sql = "UPDATE dominion SET " +
|
||||
"owner = '" + dominion.getOwner().toString() + "', " +
|
||||
"name = '" + dominion.getName() + "', " +
|
||||
@ -219,12 +233,14 @@ public class DominionDTO {
|
||||
"repeater = " + dominion.getRepeater() + ", " +
|
||||
"shear = " + dominion.getShear() + ", " +
|
||||
"shoot = " + dominion.getShoot() + ", " +
|
||||
"teleport = " + dominion.getTeleport() + ", " +
|
||||
"tnt_explode = " + dominion.getTntExplode() + ", " + // dom only
|
||||
"trade = " + dominion.getTrade() + ", " +
|
||||
"trample = " + dominion.getTrample() + ", " + // dom only
|
||||
"vehicle_destroy = " + dominion.getVehicleDestroy() + ", " +
|
||||
"vehicle_spawn = " + dominion.getVehicleSpawn() + ", " +
|
||||
"wither_spawn = " + dominion.getWitherSpawn() + " " + // dom only
|
||||
"wither_spawn = " + dominion.getWitherSpawn() + ", " + // dom only
|
||||
"tp_location = '" + tp_location + "' " +
|
||||
" WHERE id = " + dominion.getId() +
|
||||
" RETURNING *;";
|
||||
List<DominionDTO> dominions = query(sql);
|
||||
@ -250,10 +266,11 @@ public class DominionDTO {
|
||||
Boolean place, Boolean pressure,
|
||||
Boolean riding, Boolean repeater,
|
||||
Boolean shear, Boolean shoot,
|
||||
Boolean tntExplode, Boolean trade, Boolean trample,
|
||||
Boolean teleport, Boolean tntExplode, Boolean trade, Boolean trample,
|
||||
Boolean vehicleDestroy,
|
||||
Boolean vehicleSpawn,
|
||||
Boolean witherSpawn) {
|
||||
Boolean witherSpawn,
|
||||
String tp_location) {
|
||||
this.id = id;
|
||||
this.owner = owner;
|
||||
this.name = name;
|
||||
@ -305,27 +322,43 @@ public class DominionDTO {
|
||||
this.repeater = repeater;
|
||||
this.shear = shear;
|
||||
this.shoot = shoot;
|
||||
this.teleport = teleport;
|
||||
this.tntExplode = tntExplode;
|
||||
this.trade = trade;
|
||||
this.trample = trample;
|
||||
this.vehicleDestroy = vehicleDestroy;
|
||||
this.vehicleSpawn = vehicleSpawn;
|
||||
this.witherSpawn = witherSpawn;
|
||||
if (Objects.equals(tp_location, "default")) {
|
||||
this.tp_location = null;
|
||||
} else {
|
||||
// 0:0:0
|
||||
String[] loc = tp_location.split(":");
|
||||
World w = Dominion.instance.getServer().getWorld(world);
|
||||
if (loc.length == 3 && w != null) {
|
||||
this.tp_location = new Location(w, Integer.parseInt(loc[0]), Integer.parseInt(loc[1]), Integer.parseInt(loc[2]));
|
||||
} else {
|
||||
XLogger.warn("领地传送点数据异常: " + tp_location);
|
||||
this.tp_location = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private DominionDTO(Integer id, UUID owner, String name, String world,
|
||||
Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2,
|
||||
Integer parentDomId) {
|
||||
this(id, owner, name, world, x1, y1, z1, x2, y2, z2, parentDomId,
|
||||
"欢迎", "再见",
|
||||
false, false, false, false, false,
|
||||
false, false, false, false, false,
|
||||
false, false, false, false, false, false,
|
||||
false, false, false, false, false, true,
|
||||
true, false, false, false, false, false, false, true,
|
||||
false, true, false, false, false, false,
|
||||
false, false, false, false, false, false, false, false);
|
||||
this.id = id;
|
||||
this.owner = owner;
|
||||
this.name = name;
|
||||
this.world = world;
|
||||
this.x1 = x1;
|
||||
this.y1 = y1;
|
||||
this.z1 = z1;
|
||||
this.x2 = x2;
|
||||
this.y2 = y2;
|
||||
this.z2 = z2;
|
||||
this.parentDomId = parentDomId;
|
||||
}
|
||||
|
||||
public DominionDTO(UUID owner, String name, String world,
|
||||
@ -383,6 +416,7 @@ public class DominionDTO {
|
||||
private Boolean repeater = false;
|
||||
private Boolean shear = false;
|
||||
private Boolean shoot = false;
|
||||
private Boolean teleport = false;
|
||||
private Boolean tntExplode = false;
|
||||
private Boolean trade = false;
|
||||
private Boolean trample = false;
|
||||
@ -390,6 +424,7 @@ public class DominionDTO {
|
||||
private Boolean vehicleSpawn = false;
|
||||
private Boolean witherSpawn = false;
|
||||
private Boolean harvest = false;
|
||||
private Location tp_location = null;
|
||||
|
||||
// getters and setters
|
||||
public Integer getId() {
|
||||
@ -837,6 +872,15 @@ public class DominionDTO {
|
||||
return update(this);
|
||||
}
|
||||
|
||||
public Boolean getTeleport() {
|
||||
return teleport;
|
||||
}
|
||||
|
||||
public DominionDTO setTeleport(Boolean teleport) {
|
||||
this.teleport = teleport;
|
||||
return update(this);
|
||||
}
|
||||
|
||||
public Boolean getTntExplode() {
|
||||
return tntExplode;
|
||||
}
|
||||
@ -909,4 +953,13 @@ public class DominionDTO {
|
||||
this.z2 = z2;
|
||||
return update(this);
|
||||
}
|
||||
|
||||
public Location getTpLocation() {
|
||||
return tp_location;
|
||||
}
|
||||
|
||||
public DominionDTO setTpLocation(Location loc) {
|
||||
this.tp_location = loc;
|
||||
return update(this);
|
||||
}
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ public class PlayerPrivilegeDTO {
|
||||
"place, pressure, " +
|
||||
"riding, repeater, " +
|
||||
"shear, shoot, " +
|
||||
"trade, " +
|
||||
"teleport, trade, " +
|
||||
"vehicle_destroy, " +
|
||||
"vehicle_spawn" +
|
||||
") VALUES (" +
|
||||
@ -46,7 +46,7 @@ public class PlayerPrivilegeDTO {
|
||||
player.getPlace() + ", " + player.getPressure() + ", " +
|
||||
player.getRiding() + ", " + player.getRepeater() + ", " +
|
||||
player.getShear() + ", " + player.getShoot() + ", " +
|
||||
player.getTrade() + ", " +
|
||||
player.getTeleport() + ", " + player.getTrade() + ", " +
|
||||
player.getVehicleDestroy() + ", " +
|
||||
player.getVehicleSpawn() + " " +
|
||||
") RETURNING *;";
|
||||
@ -121,6 +121,7 @@ public class PlayerPrivilegeDTO {
|
||||
private Boolean repeater;
|
||||
private Boolean shear;
|
||||
private Boolean shoot;
|
||||
private Boolean teleport;
|
||||
private Boolean trade;
|
||||
private Boolean vehicleDestroy;
|
||||
private Boolean vehicleSpawn;
|
||||
@ -273,6 +274,10 @@ public class PlayerPrivilegeDTO {
|
||||
return shoot;
|
||||
}
|
||||
|
||||
public Boolean getTeleport() {
|
||||
return teleport;
|
||||
}
|
||||
|
||||
public Boolean getTrade() {
|
||||
return trade;
|
||||
}
|
||||
@ -445,6 +450,11 @@ public class PlayerPrivilegeDTO {
|
||||
return update(this);
|
||||
}
|
||||
|
||||
public PlayerPrivilegeDTO setTeleport(Boolean teleport) {
|
||||
this.teleport = teleport;
|
||||
return update(this);
|
||||
}
|
||||
|
||||
public PlayerPrivilegeDTO setTrade(Boolean trade) {
|
||||
this.trade = trade;
|
||||
return update(this);
|
||||
@ -485,7 +495,7 @@ public class PlayerPrivilegeDTO {
|
||||
Boolean place, Boolean pressure,
|
||||
Boolean riding, Boolean repeater,
|
||||
Boolean shear, Boolean shoot,
|
||||
Boolean trade,
|
||||
Boolean teleport, Boolean trade,
|
||||
Boolean vehicleDestroy,
|
||||
Boolean vehicleSpawn) {
|
||||
this.id = id;
|
||||
@ -525,6 +535,7 @@ public class PlayerPrivilegeDTO {
|
||||
this.repeater = repeater;
|
||||
this.shear = shear;
|
||||
this.shoot = shoot;
|
||||
this.teleport = teleport;
|
||||
this.trade = trade;
|
||||
this.vehicleDestroy = vehicleDestroy;
|
||||
this.vehicleSpawn = vehicleSpawn;
|
||||
@ -545,7 +556,7 @@ public class PlayerPrivilegeDTO {
|
||||
Boolean place, Boolean pressure,
|
||||
Boolean riding, Boolean repeater,
|
||||
Boolean shear, Boolean shoot,
|
||||
Boolean trade,
|
||||
Boolean teleport, Boolean trade,
|
||||
Boolean vehicleDestroy,
|
||||
Boolean vehicleSpawn
|
||||
) {
|
||||
@ -564,7 +575,7 @@ public class PlayerPrivilegeDTO {
|
||||
place, pressure,
|
||||
riding, repeater,
|
||||
shear, shoot,
|
||||
trade,
|
||||
teleport, trade,
|
||||
vehicleDestroy,
|
||||
vehicleSpawn);
|
||||
}
|
||||
@ -616,6 +627,7 @@ public class PlayerPrivilegeDTO {
|
||||
rs.getBoolean("repeater"),
|
||||
rs.getBoolean("shear"),
|
||||
rs.getBoolean("shoot"),
|
||||
rs.getBoolean("teleport"),
|
||||
rs.getBoolean("trade"),
|
||||
rs.getBoolean("vehicle_destroy"),
|
||||
rs.getBoolean("vehicle_spawn")
|
||||
@ -666,6 +678,7 @@ public class PlayerPrivilegeDTO {
|
||||
"repeater = " + player.getRepeater() + ", " +
|
||||
"shear = " + player.getShear() + ", " +
|
||||
"shoot = " + player.getShoot() + ", " +
|
||||
"teleport = " + player.getTeleport() + ", " +
|
||||
"trade = " + player.getTrade() + ", " +
|
||||
"vehicle_destroy = " + player.getVehicleDestroy() + ", " +
|
||||
"vehicle_spawn = " + player.getVehicleSpawn() + " " +
|
||||
|
@ -87,6 +87,8 @@ public class Apis {
|
||||
.add(Line.create().append("缩小领地").append("/dominion contract [大小] [领地名称]"))
|
||||
.add(Line.create().append("设置进入领地的提示语").append("/dominion set_enter_msg <提示语> [领地名称]"))
|
||||
.add(Line.create().append("设置离开领地的提示语").append("/dominion set_leave_msg <提示语> [领地名称]"))
|
||||
.add(Line.create().append("设置领地传送点").append("/dominion set_tp_location [领地名称]"))
|
||||
.add(Line.create().append("传送到领地").append("/dominion tp <领地名称>"))
|
||||
.add(Line.create().append("重命名领地").append("/dominion rename <原领地名称> <新领地名称>"))
|
||||
.add(Line.create().append("转让领地").append("/dominion give <领地名称> <玩家名称> [force]"))
|
||||
.add(Line.create().append("删除领地").append("/dominion delete <领地名称> [force]"))
|
||||
|
@ -50,11 +50,11 @@ public class DominionFlagInfo {
|
||||
if (dominion.getAnimalKilling()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set animal_killing false " + dominion.getName() + " " + page))
|
||||
.append("动物伤害"));
|
||||
.append("对动物造成伤害"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐", "/dominion set animal_killing true " + dominion.getName() + " " + page))
|
||||
.append("动物伤害"));
|
||||
.append("对动物造成伤害"));
|
||||
}
|
||||
if (dominion.getAnvil()) {
|
||||
view.add(Line.create()
|
||||
@ -131,11 +131,11 @@ public class DominionFlagInfo {
|
||||
if (dominion.getCraft()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set craft false " + dominion.getName() + " " + page))
|
||||
.append("工作台"));
|
||||
.append("使用工作台"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐", "/dominion set craft true " + dominion.getName() + " " + page))
|
||||
.append("工作台"));
|
||||
.append("使用工作台"));
|
||||
}
|
||||
if (dominion.getCreeperExplode()) {
|
||||
view.add(Line.create()
|
||||
@ -230,20 +230,20 @@ public class DominionFlagInfo {
|
||||
if (dominion.getFlowInProtection()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set flow_in_protection false " + dominion.getName() + " " + page))
|
||||
.append("流体保护"));
|
||||
.append("外部流体是否可以进入"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐", "/dominion set flow_in_protection true " + dominion.getName() + " " + page))
|
||||
.append("流体保护"));
|
||||
.append("外部流体是否可以进入"));
|
||||
}
|
||||
if (dominion.getGlow()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set glow false " + dominion.getName() + " " + page))
|
||||
.append("发光"));
|
||||
.append("玩家发光"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐", "/dominion set glow true " + dominion.getName() + " " + page))
|
||||
.append("发光"));
|
||||
.append("玩家发光"));
|
||||
}
|
||||
if (dominion.getHarvest()) {
|
||||
view.add(Line.create()
|
||||
@ -311,11 +311,11 @@ public class DominionFlagInfo {
|
||||
if (dominion.getMonsterKilling()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set monster_killing false " + dominion.getName() + " " + page))
|
||||
.append("怪物伤害"));
|
||||
.append("对怪物造成伤害"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐", "/dominion set monster_killing true " + dominion.getName() + " " + page))
|
||||
.append("怪物伤害"));
|
||||
.append("对怪物造成伤害"));
|
||||
}
|
||||
if (dominion.getMove()) {
|
||||
view.add(Line.create()
|
||||
@ -380,6 +380,15 @@ public class DominionFlagInfo {
|
||||
.append(Button.createRed("☐", "/dominion set shoot true " + dominion.getName() + " " + page))
|
||||
.append("射箭/雪球/三叉戟"));
|
||||
}
|
||||
if (dominion.getTeleport()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set teleport false " + dominion.getName() + " " + page))
|
||||
.append("领地传送"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐", "/dominion set teleport true " + dominion.getName() + " " + page))
|
||||
.append("领地传送"));
|
||||
}
|
||||
if (dominion.getTntExplode()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set tnt_explode false " + dominion.getName() + " " + page))
|
||||
|
@ -24,14 +24,17 @@ public class DominionManage {
|
||||
}
|
||||
if (noAuthToManage(player, dominion)) return;
|
||||
Line size_info = Line.create()
|
||||
.append(Button.create("尺寸信息", "/dominion info " + dominion.getName()))
|
||||
.append("查看领地尺寸信息");
|
||||
.append(Button.create("详细信息", "/dominion info " + dominion.getName()))
|
||||
.append("查看领地详细信息");
|
||||
Line flag_info = Line.create()
|
||||
.append(Button.create("权限设置", "/dominion flag_info " + dominion.getName()))
|
||||
.append("管理领地默认权限");
|
||||
Line privilege_list = Line.create()
|
||||
.append(Button.create("玩家权限", "/dominion privilege_list " + dominion.getName()))
|
||||
.append("管理玩家特权");
|
||||
Line set_tp = Line.create()
|
||||
.append(Button.create("设置传送点", "/dominion set_tp_location " + dominion.getName()))
|
||||
.append("设置当前位置为此领地传送点");
|
||||
ListView view = ListView.create(10, "/dominion manage " + dominion.getName());
|
||||
view.title("领地 " + dominion.getName() + " 管理界面")
|
||||
.navigator(Line.create()
|
||||
@ -41,6 +44,7 @@ public class DominionManage {
|
||||
.add(size_info)
|
||||
.add(flag_info)
|
||||
.add(privilege_list)
|
||||
.add(set_tp)
|
||||
.showOn(player, 1);
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,11 @@ public class DominionSizeInfo {
|
||||
.addLine(Line.create().append("Y轴坐标:").append(y1 + " ~ " + y2))
|
||||
.addLine(Line.create().append("水平面积:").append(String.valueOf((x2 - x1) * (z2 - z1))))
|
||||
.addLine(Line.create().append("领地体积:").append(String.valueOf((x2 - x1) * (y2 - y1) * (z2 - z1))))
|
||||
.addLine(Line.create().append("传送点坐标:").append(
|
||||
dominion.getTpLocation() == null ?
|
||||
"无" :
|
||||
dominion.getTpLocation().getX() + " " + dominion.getTpLocation().getY() + " " + dominion.getTpLocation().getZ()
|
||||
))
|
||||
.actionBar(Line.create()
|
||||
.append(Button.create("管理界面", "/dominion manage " + dominion.getName()))
|
||||
.append(Button.create("权限列表", "/dominion flag_info " + dominion.getName())))
|
||||
|
@ -359,6 +359,15 @@ public class PrivilegeInfo {
|
||||
.append(Button.createRed("☐", "/dominion set_privilege " + playerName + " shoot true " + dominion.getName() + " " + page))
|
||||
.append("射箭/雪球/三叉戟"));
|
||||
}
|
||||
if (privilege.getTeleport()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " teleport false " + dominion.getName() + " " + page))
|
||||
.append("领地传送"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐", "/dominion set_privilege " + playerName + " teleport true " + dominion.getName() + " " + page))
|
||||
.append("领地传送"));
|
||||
}
|
||||
if (privilege.getTrade()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " trade false " + dominion.getName() + " " + page))
|
||||
|
@ -59,6 +59,9 @@ public class ConfigManager {
|
||||
_limit_depth = _file.getInt("Limit.Depth", 10);
|
||||
_world_black_list = _file.getStringList("WorldBlackList");
|
||||
_check_update = _file.getBoolean("CheckUpdate", true);
|
||||
_tp_enable = _file.getBoolean("Teleport.Enable", false);
|
||||
_tp_delay = _file.getInt("Teleport.Delay", 0);
|
||||
_tp_cool_down = _file.getInt("Teleport.CoolDown", 0);
|
||||
}
|
||||
|
||||
public Boolean isDebug() {
|
||||
@ -227,6 +230,36 @@ public class ConfigManager {
|
||||
return _check_update;
|
||||
}
|
||||
|
||||
public Boolean getTpEnable() {
|
||||
return _tp_enable;
|
||||
}
|
||||
|
||||
public void setTpEnable(Boolean tp_enable) {
|
||||
_tp_enable = tp_enable;
|
||||
_file.set("Teleport.Enable", tp_enable);
|
||||
_plugin.saveConfig();
|
||||
}
|
||||
|
||||
public Integer getTpDelay() {
|
||||
return _tp_delay;
|
||||
}
|
||||
|
||||
public void setTpDelay(Integer tp_delay) {
|
||||
_tp_delay = tp_delay;
|
||||
_file.set("Teleport.Delay", tp_delay);
|
||||
_plugin.saveConfig();
|
||||
}
|
||||
|
||||
public Integer getTpCoolDown() {
|
||||
return _tp_cool_down;
|
||||
}
|
||||
|
||||
public void setTpCoolDown(Integer tp_cool_down) {
|
||||
_tp_cool_down = tp_cool_down;
|
||||
_file.set("Teleport.CoolDown", tp_cool_down);
|
||||
_plugin.saveConfig();
|
||||
}
|
||||
|
||||
|
||||
private final Dominion _plugin;
|
||||
private FileConfiguration _file;
|
||||
@ -253,4 +286,8 @@ public class ConfigManager {
|
||||
private Integer _limit_depth;
|
||||
private List<String> _world_black_list;
|
||||
private Boolean _check_update;
|
||||
|
||||
private Boolean _tp_enable;
|
||||
private Integer _tp_delay;
|
||||
private Integer _tp_cool_down;
|
||||
}
|
||||
|
@ -240,5 +240,10 @@ public class Database {
|
||||
|
||||
// 1.12.0
|
||||
addColumnIfNotExists("dominion", "ender_man", "BOOLEAN NOT NULL DEFAULT FAlSE");
|
||||
|
||||
// 1.18.0
|
||||
addColumnIfNotExists("dominion", "tp_location", "TEXT NOT NULL DEFAULT 'default'");
|
||||
addColumnIfNotExists("dominion", "teleport", "BOOLEAN NOT NULL DEFAULT FALSE");
|
||||
addColumnIfNotExists("player_privilege", "teleport", "BOOLEAN NOT NULL DEFAULT FALSE");
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,13 @@ Limit:
|
||||
Depth: 3 # 子领地深度 0:不允许子领地 -1:不限制
|
||||
WorldBlackList: []
|
||||
|
||||
Teleport:
|
||||
Enable: true
|
||||
# 传送延迟 秒
|
||||
Delay: 0
|
||||
# 冷却时间 秒
|
||||
CoolDown: 0
|
||||
|
||||
# -1 表示不开启
|
||||
AutoCleanAfterDays: 180
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user