diff --git a/pom.xml b/pom.xml
index 699075c..a9048b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
cn.lunadeer
Dominion
- 1.23.8-beta
+ 1.23.9-beta
jar
Dominion
diff --git a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
index ffa8ab1..2a0069b 100644
--- a/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
+++ b/src/main/java/cn/lunadeer/dominion/commands/DominionOperate.java
@@ -6,9 +6,13 @@ 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 org.bukkit.entity.Wolf;
+import org.bukkit.event.player.PlayerTeleportEvent;
import java.time.LocalDateTime;
import java.util.Map;
@@ -376,12 +380,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 +394,25 @@ 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) -> {
+ location.setY(chunk.getWorld().getHighestBlockYAt(location) + 1);
+ player.teleportAsync(location, PlayerTeleportEvent.TeleportCause.PLUGIN);
+ });
+ }
}