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.PortalHandler;
|
||||||
import net.knarcraft.stargate.portal.teleporter.PlayerTeleporter;
|
import net.knarcraft.stargate.portal.teleporter.PlayerTeleporter;
|
||||||
import net.knarcraft.stargate.utility.PermissionHelper;
|
import net.knarcraft.stargate.utility.PermissionHelper;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -67,6 +68,9 @@ public class PortalEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Stargate.debug("PortalEventListener::onEntityPortalEnter",
|
||||||
|
"Found player " + player + " entering END_PORTAL " + portal);
|
||||||
|
|
||||||
//Remove any old player teleportations in case weird things happen
|
//Remove any old player teleportations in case weird things happen
|
||||||
playersFromTheEnd.removeIf((teleportation -> teleportation.getPlayer() == player));
|
playersFromTheEnd.removeIf((teleportation -> teleportation.getPlayer() == player));
|
||||||
//Decide if the anything stops the player from teleporting
|
//Decide if the anything stops the player from teleporting
|
||||||
@ -74,8 +78,12 @@ public class PortalEventListener implements Listener {
|
|||||||
portal.getOptions().isBungee()) {
|
portal.getOptions().isBungee()) {
|
||||||
//Teleport the player back to the portal they came in, just in case
|
//Teleport the player back to the portal they came in, just in case
|
||||||
playersFromTheEnd.add(new FromTheEndTeleportation(player, portal));
|
playersFromTheEnd.add(new FromTheEndTeleportation(player, portal));
|
||||||
|
Stargate.debug("PortalEventListener::onEntityPortalEnter",
|
||||||
|
"Sending player back to the entrance");
|
||||||
} else {
|
} else {
|
||||||
playersFromTheEnd.add(new FromTheEndTeleportation(player, portal.getPortalActivator().getDestination()));
|
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();
|
Portal exitPortal = teleportation.getExit();
|
||||||
//Overwrite respawn location to respawn in front of the portal
|
//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
|
//Properly close the portal to prevent it from staying in a locked state until it times out
|
||||||
exitPortal.getPortalOpener().closePortal(false);
|
exitPortal.getPortalOpener().closePortal(false);
|
||||||
|
|
||||||
|
Stargate.debug("PortalEventListener::onRespawn", "Overwriting respawn for " + respawningPlayer +
|
||||||
|
" to " + respawnLocation.getWorld() + ":" + respawnLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user