mirror of
https://github.com/ColdeZhang/Dominion.git
synced 2024-12-20 00:18:52 +08:00
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>
|
||||
<artifactId>Dominion</artifactId>
|
||||
<version>1.23.9-beta</version>
|
||||
<version>1.23.11-beta</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Dominion</name>
|
||||
@ -78,12 +78,12 @@
|
||||
<dependency>
|
||||
<groupId>org.xerial</groupId>
|
||||
<artifactId>sqlite-jdbc</artifactId>
|
||||
<version>3.34.0</version>
|
||||
<version>3.41.2.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<version>42.6.0</version>
|
||||
<version>42.7.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<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.PlayerEvents;
|
||||
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.Location;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
@ -22,8 +26,8 @@ public final class Dominion extends JavaPlugin {
|
||||
// Plugin startup logic
|
||||
instance = this;
|
||||
config = new ConfigManager(this);
|
||||
dbConnection = Database.createConnection();
|
||||
Database.migrate();
|
||||
dbConnection = DatabaseManager.createConnection();
|
||||
DatabaseManager.migrate();
|
||||
scheduler = new Scheduler(this);
|
||||
AutoClean.run();
|
||||
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.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.dominion.utils.Notification;
|
||||
import cn.lunadeer.dominion.utils.XLogger;
|
||||
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.entity.Player;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
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 next_time = Cache.instance.NextTimeAllowTeleport.get(player.getUniqueId());
|
||||
if (next_time != null) {
|
||||
@ -396,10 +397,51 @@ public class DominionOperate {
|
||||
}
|
||||
Cache.instance.NextTimeAllowTeleport.put(player.getUniqueId(), now.plusSeconds(Dominion.config.getTpCoolDown()));
|
||||
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()) {
|
||||
player.teleportAsync(location);
|
||||
doTeleportSafely(player, location);
|
||||
Notification.info(player, "已将你传送到 " + dominionDTO.getName());
|
||||
}
|
||||
}, 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.Dominion;
|
||||
import cn.lunadeer.dominion.utils.Database;
|
||||
import cn.lunadeer.dominion.managers.DatabaseManager;
|
||||
import cn.lunadeer.dominion.utils.XLogger;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
@ -18,7 +18,7 @@ public class DominionDTO {
|
||||
|
||||
private static List<DominionDTO> query(String sql) {
|
||||
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")) {
|
||||
// 如果是更新操作,重新加载缓存
|
||||
Cache.instance.loadDominions();
|
||||
|
@ -1,6 +1,6 @@
|
||||
package cn.lunadeer.dominion.dtos;
|
||||
|
||||
import cn.lunadeer.dominion.utils.Database;
|
||||
import cn.lunadeer.dominion.managers.DatabaseManager;
|
||||
import cn.lunadeer.dominion.utils.XLogger;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@ -31,7 +31,7 @@ public class PlayerDTO {
|
||||
|
||||
private static List<PlayerDTO> query(String sql) {
|
||||
List<PlayerDTO> players = new ArrayList<>();
|
||||
try (ResultSet rs = Database.query(sql)) {
|
||||
try (ResultSet rs = DatabaseManager.query(sql)) {
|
||||
if (rs == null) return players;
|
||||
while (rs.next()) {
|
||||
Integer id = rs.getInt("id");
|
||||
|
@ -1,7 +1,7 @@
|
||||
package cn.lunadeer.dominion.dtos;
|
||||
|
||||
import cn.lunadeer.dominion.Cache;
|
||||
import cn.lunadeer.dominion.utils.Database;
|
||||
import cn.lunadeer.dominion.managers.DatabaseManager;
|
||||
import cn.lunadeer.dominion.utils.XLogger;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
@ -582,7 +582,7 @@ public class PlayerPrivilegeDTO {
|
||||
|
||||
private static List<PlayerPrivilegeDTO> query(String sql) {
|
||||
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")) {
|
||||
// 如果是更新操作,重新加载缓存
|
||||
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.utils.XLogger;
|
||||
import org.bukkit.Material;
|
||||
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.utils.XLogger;
|
||||
|
||||
import java.sql.*;
|
||||
|
||||
public class Database {
|
||||
public class DatabaseManager {
|
||||
|
||||
public static Connection createConnection() {
|
||||
try {
|
Loading…
Reference in New Issue
Block a user