Merge remote-tracking branch 'origin/master'
# Conflicts: # pom.xml
This commit is contained in:
commit
17af6a43be
6
pom.xml
6
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>cn.lunadeer</groupId>
|
<groupId>cn.lunadeer</groupId>
|
||||||
<artifactId>Dominion</artifactId>
|
<artifactId>Dominion</artifactId>
|
||||||
<version>1.23.9-beta</version>
|
<version>1.23.11-beta</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>Dominion</name>
|
<name>Dominion</name>
|
||||||
@ -78,12 +78,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.xerial</groupId>
|
<groupId>org.xerial</groupId>
|
||||||
<artifactId>sqlite-jdbc</artifactId>
|
<artifactId>sqlite-jdbc</artifactId>
|
||||||
<version>3.34.0</version>
|
<version>3.41.2.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.postgresql</groupId>
|
<groupId>org.postgresql</groupId>
|
||||||
<artifactId>postgresql</artifactId>
|
<artifactId>postgresql</artifactId>
|
||||||
<version>42.6.0</version>
|
<version>42.7.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.BlueMap-Minecraft</groupId>
|
<groupId>com.github.BlueMap-Minecraft</groupId>
|
||||||
|
@ -3,7 +3,11 @@ package cn.lunadeer.dominion;
|
|||||||
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;
|
||||||
import cn.lunadeer.dominion.utils.*;
|
import cn.lunadeer.dominion.managers.ConfigManager;
|
||||||
|
import cn.lunadeer.dominion.managers.DatabaseManager;
|
||||||
|
import cn.lunadeer.dominion.utils.GiteaReleaseCheck;
|
||||||
|
import cn.lunadeer.dominion.utils.Scheduler;
|
||||||
|
import cn.lunadeer.dominion.utils.XLogger;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
@ -22,8 +26,8 @@ public final class Dominion extends JavaPlugin {
|
|||||||
// Plugin startup logic
|
// Plugin startup logic
|
||||||
instance = this;
|
instance = this;
|
||||||
config = new ConfigManager(this);
|
config = new ConfigManager(this);
|
||||||
dbConnection = Database.createConnection();
|
dbConnection = DatabaseManager.createConnection();
|
||||||
Database.migrate();
|
DatabaseManager.migrate();
|
||||||
scheduler = new Scheduler(this);
|
scheduler = new Scheduler(this);
|
||||||
AutoClean.run();
|
AutoClean.run();
|
||||||
Cache.instance = new Cache();
|
Cache.instance = new Cache();
|
||||||
|
@ -6,9 +6,16 @@ import cn.lunadeer.dominion.controllers.DominionController;
|
|||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||||
import cn.lunadeer.dominion.utils.Notification;
|
import cn.lunadeer.dominion.utils.Notification;
|
||||||
|
import cn.lunadeer.dominion.utils.XLogger;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.Wolf;
|
||||||
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -376,12 +383,6 @@ public class DominionOperate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Location location = dominionDTO.getTpLocation();
|
|
||||||
if (location == null) {
|
|
||||||
Notification.error(sender, "此领地没有设置传送点");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
LocalDateTime next_time = Cache.instance.NextTimeAllowTeleport.get(player.getUniqueId());
|
LocalDateTime next_time = Cache.instance.NextTimeAllowTeleport.get(player.getUniqueId());
|
||||||
if (next_time != null) {
|
if (next_time != null) {
|
||||||
@ -396,10 +397,51 @@ public class DominionOperate {
|
|||||||
}
|
}
|
||||||
Cache.instance.NextTimeAllowTeleport.put(player.getUniqueId(), now.plusSeconds(Dominion.config.getTpCoolDown()));
|
Cache.instance.NextTimeAllowTeleport.put(player.getUniqueId(), now.plusSeconds(Dominion.config.getTpCoolDown()));
|
||||||
Dominion.scheduler.region.runDelayed(Dominion.instance, (instance) -> {
|
Dominion.scheduler.region.runDelayed(Dominion.instance, (instance) -> {
|
||||||
|
Location location = dominionDTO.getTpLocation();
|
||||||
|
if (location == null) {
|
||||||
|
int x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;
|
||||||
|
int z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
||||||
|
World world = Dominion.instance.getServer().getWorld(dominionDTO.getWorld());
|
||||||
|
location = new Location(world, x, player.getY(), z);
|
||||||
|
XLogger.warn("领地 " + dominionDTO.getName() + " 没有设置传送点,将传送到中心点");
|
||||||
|
}
|
||||||
if (player.isOnline()) {
|
if (player.isOnline()) {
|
||||||
player.teleportAsync(location);
|
doTeleportSafely(player, location);
|
||||||
Notification.info(player, "已将你传送到 " + dominionDTO.getName());
|
Notification.info(player, "已将你传送到 " + dominionDTO.getName());
|
||||||
}
|
}
|
||||||
}, Dominion.config.getTpDelay() == 0 ? 1 : 20L * Dominion.config.getTpDelay());
|
}, Dominion.config.getTpDelay() == 0 ? 1 : 20L * Dominion.config.getTpDelay());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void doTeleportSafely(Player player, Location location) {
|
||||||
|
location.getWorld().getChunkAtAsyncUrgently(location).thenAccept((chunk) -> {
|
||||||
|
int max_attempts = 512;
|
||||||
|
while (location.getBlock().isPassable()) {
|
||||||
|
location.setY(location.getY() - 1);
|
||||||
|
max_attempts--;
|
||||||
|
if (max_attempts <= 0) {
|
||||||
|
Notification.error(player, "传送目的地不安全,已取消传送");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Block up1 = location.getBlock().getRelative(BlockFace.UP);
|
||||||
|
Block up2 = up1.getRelative(BlockFace.UP);
|
||||||
|
max_attempts = 512;
|
||||||
|
while (!(up1.isPassable() && !up1.isLiquid()) || !(up2.isPassable() && !up2.isLiquid())) {
|
||||||
|
location.setY(location.getY() + 1);
|
||||||
|
up1 = location.getBlock().getRelative(BlockFace.UP);
|
||||||
|
up2 = up1.getRelative(BlockFace.UP);
|
||||||
|
max_attempts--;
|
||||||
|
if (max_attempts <= 0) {
|
||||||
|
Notification.error(player, "传送目的地不安全,已取消传送");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
location.setY(location.getY() + 1);
|
||||||
|
if (location.getBlock().getRelative(BlockFace.DOWN).getType() == Material.LAVA) {
|
||||||
|
Notification.error(player, "传送目的地不安全,已取消传送");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
player.teleportAsync(location, PlayerTeleportEvent.TeleportCause.PLUGIN);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ package cn.lunadeer.dominion.dtos;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
import cn.lunadeer.dominion.utils.Database;
|
import cn.lunadeer.dominion.managers.DatabaseManager;
|
||||||
import cn.lunadeer.dominion.utils.XLogger;
|
import cn.lunadeer.dominion.utils.XLogger;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -18,7 +18,7 @@ public class DominionDTO {
|
|||||||
|
|
||||||
private static List<DominionDTO> query(String sql) {
|
private static List<DominionDTO> query(String sql) {
|
||||||
List<DominionDTO> dominions = new ArrayList<>();
|
List<DominionDTO> dominions = new ArrayList<>();
|
||||||
try (ResultSet rs = Database.query(sql)) {
|
try (ResultSet rs = DatabaseManager.query(sql)) {
|
||||||
if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
|
if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
|
||||||
// 如果是更新操作,重新加载缓存
|
// 如果是更新操作,重新加载缓存
|
||||||
Cache.instance.loadDominions();
|
Cache.instance.loadDominions();
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cn.lunadeer.dominion.dtos;
|
package cn.lunadeer.dominion.dtos;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.utils.Database;
|
import cn.lunadeer.dominion.managers.DatabaseManager;
|
||||||
import cn.lunadeer.dominion.utils.XLogger;
|
import cn.lunadeer.dominion.utils.XLogger;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ public class PlayerDTO {
|
|||||||
|
|
||||||
private static List<PlayerDTO> query(String sql) {
|
private static List<PlayerDTO> query(String sql) {
|
||||||
List<PlayerDTO> players = new ArrayList<>();
|
List<PlayerDTO> players = new ArrayList<>();
|
||||||
try (ResultSet rs = Database.query(sql)) {
|
try (ResultSet rs = DatabaseManager.query(sql)) {
|
||||||
if (rs == null) return players;
|
if (rs == null) return players;
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
Integer id = rs.getInt("id");
|
Integer id = rs.getInt("id");
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cn.lunadeer.dominion.dtos;
|
package cn.lunadeer.dominion.dtos;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.utils.Database;
|
import cn.lunadeer.dominion.managers.DatabaseManager;
|
||||||
import cn.lunadeer.dominion.utils.XLogger;
|
import cn.lunadeer.dominion.utils.XLogger;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
@ -582,7 +582,7 @@ public class PlayerPrivilegeDTO {
|
|||||||
|
|
||||||
private static List<PlayerPrivilegeDTO> query(String sql) {
|
private static List<PlayerPrivilegeDTO> query(String sql) {
|
||||||
List<PlayerPrivilegeDTO> players = new ArrayList<>();
|
List<PlayerPrivilegeDTO> players = new ArrayList<>();
|
||||||
try (ResultSet rs = Database.query(sql)) {
|
try (ResultSet rs = DatabaseManager.query(sql)) {
|
||||||
if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
|
if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
|
||||||
// 如果是更新操作,重新加载缓存
|
// 如果是更新操作,重新加载缓存
|
||||||
Cache.instance.loadPlayerPrivileges();
|
Cache.instance.loadPlayerPrivileges();
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion.managers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.utils.XLogger;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
|
@ -1,10 +1,11 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion.managers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.utils.XLogger;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
|
||||||
public class Database {
|
public class DatabaseManager {
|
||||||
|
|
||||||
public static Connection createConnection() {
|
public static Connection createConnection() {
|
||||||
try {
|
try {
|
Reference in New Issue
Block a user