新增安全传送机制,现在即使没有手动设置具体传送点也可以进行传送
All checks were successful
Java CI-CD with Maven / build (push) Successful in 29m12s
All checks were successful
Java CI-CD with Maven / build (push) Successful in 29m12s
This commit is contained in:
parent
dd963f764c
commit
7ebd2c5ea9
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>cn.lunadeer</groupId>
|
<groupId>cn.lunadeer</groupId>
|
||||||
<artifactId>Dominion</artifactId>
|
<artifactId>Dominion</artifactId>
|
||||||
<version>1.23.8-beta</version>
|
<version>1.23.9-beta</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>Dominion</name>
|
<name>Dominion</name>
|
||||||
|
@ -6,9 +6,13 @@ 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.World;
|
||||||
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 +380,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 +394,25 @@ 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) -> {
|
||||||
|
location.setY(chunk.getWorld().getHighestBlockYAt(location) + 1);
|
||||||
|
player.teleportAsync(location, PlayerTeleportEvent.TeleportCause.PLUGIN);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user