新增安全传送机制,现在即使没有手动设置具体传送点也可以进行传送
Java CI-CD with Maven / build (push) Successful in 29m12s Details

This commit is contained in:
zhangyuheng 2024-05-11 18:51:50 +08:00
parent dd963f764c
commit 7ebd2c5ea9
2 changed files with 21 additions and 8 deletions

View File

@ -6,7 +6,7 @@
<groupId>cn.lunadeer</groupId>
<artifactId>Dominion</artifactId>
<version>1.23.8-beta</version>
<version>1.23.9-beta</version>
<packaging>jar</packaging>
<name>Dominion</name>

View File

@ -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);
});
}
}