Fixed end portal not linking to normal end world

Fixes #306
This commit is contained in:
Florian CUNY 2019-02-17 14:29:12 +01:00
parent bce17ce467
commit 028785c4b0

View File

@ -47,32 +47,61 @@ public class PortalTeleportationListener implements Listener {
* @param e - event * @param e - event
*/ */
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onEndIslandPortal(PlayerPortalEvent e) { public boolean onEndIslandPortal(PlayerPortalEvent e) {
if (!e.getCause().equals(TeleportCause.END_PORTAL) || !plugin.getIWM().inWorld(e.getFrom())) { if (e.getFrom() == null) {
return; return false;
}
World fromWorld = e.getFrom().getWorld();
if (e.getCause() != TeleportCause.END_PORTAL || !plugin.getIWM().isEndGenerate(fromWorld)) {
// Do nothing special
return false;
} }
World overWorld = Util.getWorld(e.getFrom().getWorld());
// If entering a portal in the end, teleport home if you have one, else do nothing // STANDARD END
if (e.getFrom().getWorld().getEnvironment().equals(Environment.THE_END)) { if (!plugin.getIWM().isEndIslands(fromWorld)) {
if (plugin.getIslands().hasIsland(overWorld, e.getPlayer().getUniqueId())) { System.out.println("standard end");
e.setCancelled(true); if (fromWorld.getEnvironment() != Environment.THE_END) {
plugin.getIslands().homeTeleport(overWorld, e.getPlayer()); System.out.println("teleporting!");
// To Standard end
e.setTo(plugin.getIWM().getEndWorld(fromWorld).getSpawnLocation());
//e.useTravelAgent(true);
} }
return; // From standard end
else {
e.setCancelled(true);
plugin.getIslands().homeTeleport(Util.getWorld(fromWorld), e.getPlayer());
}
return false;
} }
// Going to the end, then go to the same location in the end world
if (plugin.getIWM().isEndGenerate(overWorld) && plugin.getIWM().isEndIslands(overWorld)) { // FROM END
World endWorld = plugin.getIWM().getEndWorld(overWorld); World overWorld = Util.getWorld(fromWorld);
// End exists and end islands are being used
Location to = plugin.getIslands().getIslandAt(e.getFrom()).map(i -> i.getSpawnPoint(Environment.THE_END)).orElse(e.getFrom().toVector().toLocation(endWorld)); // If entering an ender portal in the End.
if (fromWorld.getEnvironment() == Environment.THE_END) {
// If this is from the island nether, then go to the same vector, otherwise try island home location
Location to = plugin.getIslands().getIslandAt(e.getFrom()).map(i -> i.getSpawnPoint(Environment.NORMAL)).orElse(e.getFrom().toVector().toLocation(overWorld));
e.setCancelled(true); e.setCancelled(true);
// Else other worlds teleport to the nether
new SafeSpotTeleport.Builder(plugin) new SafeSpotTeleport.Builder(plugin)
.entity(e.getPlayer()) .entity(e.getPlayer())
.location(to) .location(to)
.portal() .portal()
.build(); .build();
return true;
} }
// TO END
World endWorld = plugin.getIWM().getNetherWorld(overWorld);
// If this is to island End, then go to the same vector, otherwise try spawn
Location to = plugin.getIslands().getIslandAt(e.getFrom()).map(i -> i.getSpawnPoint(Environment.THE_END)).orElse(e.getFrom().toVector().toLocation(endWorld));
e.setCancelled(true);
// Else other worlds teleport to the nether
new SafeSpotTeleport.Builder(plugin)
.entity(e.getPlayer())
.location(to)
.portal()
.build();
return true;
} }
/** /**
@ -91,14 +120,14 @@ public class PortalTeleportationListener implements Listener {
} }
// STANDARD NETHER // STANDARD NETHER
if (plugin.getIWM().isNetherGenerate(fromWorld) && !plugin.getIWM().isNetherIslands(fromWorld)) { if (!plugin.getIWM().isNetherIslands(fromWorld)) {
if (fromWorld.getEnvironment() == Environment.NORMAL) { if (fromWorld.getEnvironment() != Environment.NETHER) {
// To Standard Nether // To Standard Nether
e.setTo(plugin.getIWM().getNetherWorld(fromWorld).getSpawnLocation()); e.setTo(plugin.getIWM().getNetherWorld(fromWorld).getSpawnLocation());
e.useTravelAgent(true); e.useTravelAgent(true);
} }
// From standard nether // From standard nether
else if (fromWorld.getEnvironment() == Environment.NETHER) { else {
e.setCancelled(true); e.setCancelled(true);
plugin.getIslands().homeTeleport(Util.getWorld(fromWorld), e.getPlayer()); plugin.getIslands().homeTeleport(Util.getWorld(fromWorld), e.getPlayer());
} }