Adds a delayed teleport to really force the player respawn for end_portal Stargate
This commit is contained in:
parent
2076fda4d1
commit
1c87d803ff
@ -6,6 +6,7 @@ import net.knarcraft.stargate.portal.Portal;
|
||||
import net.knarcraft.stargate.portal.PortalHandler;
|
||||
import net.knarcraft.stargate.portal.teleporter.PlayerTeleporter;
|
||||
import net.knarcraft.stargate.utility.PermissionHelper;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
@ -67,6 +68,9 @@ public class PortalEventListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
Stargate.debug("PortalEventListener::onEntityPortalEnter",
|
||||
"Found player " + player + " entering END_PORTAL " + portal);
|
||||
|
||||
//Remove any old player teleportations in case weird things happen
|
||||
playersFromTheEnd.removeIf((teleportation -> teleportation.getPlayer() == player));
|
||||
//Decide if the anything stops the player from teleporting
|
||||
@ -74,8 +78,12 @@ public class PortalEventListener implements Listener {
|
||||
portal.getOptions().isBungee()) {
|
||||
//Teleport the player back to the portal they came in, just in case
|
||||
playersFromTheEnd.add(new FromTheEndTeleportation(player, portal));
|
||||
Stargate.debug("PortalEventListener::onEntityPortalEnter",
|
||||
"Sending player back to the entrance");
|
||||
} else {
|
||||
playersFromTheEnd.add(new FromTheEndTeleportation(player, portal.getPortalActivator().getDestination()));
|
||||
Stargate.debug("PortalEventListener::onEntityPortalEnter",
|
||||
"Sending player to destination");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -97,9 +105,18 @@ public class PortalEventListener implements Listener {
|
||||
|
||||
Portal exitPortal = teleportation.getExit();
|
||||
//Overwrite respawn location to respawn in front of the portal
|
||||
event.setRespawnLocation(new PlayerTeleporter(exitPortal, respawningPlayer).getExit());
|
||||
PlayerTeleporter teleporter = new PlayerTeleporter(exitPortal, respawningPlayer);
|
||||
Location respawnLocation = teleporter.getExit();
|
||||
event.setRespawnLocation(respawnLocation);
|
||||
//Try and force the player if for some reason the changing of respawn location isn't properly handled
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () ->
|
||||
respawningPlayer.teleport(respawnLocation), 1);
|
||||
|
||||
//Properly close the portal to prevent it from staying in a locked state until it times out
|
||||
exitPortal.getPortalOpener().closePortal(false);
|
||||
|
||||
Stargate.debug("PortalEventListener::onRespawn", "Overwriting respawn for " + respawningPlayer +
|
||||
" to " + respawnLocation.getWorld() + ":" + respawnLocation);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user