11package world .bentobox .boxed .listeners ;
22
33import java .io .IOException ;
4+ import java .util .HashSet ;
5+ import java .util .Set ;
46
57import org .bukkit .GameMode ;
68import org .bukkit .Location ;
1517import org .bukkit .event .Listener ;
1618import org .bukkit .event .entity .ProjectileHitEvent ;
1719import org .bukkit .event .player .PlayerTeleportEvent ;
20+ import org .bukkit .event .player .PlayerTeleportEvent .TeleportCause ;
1821
1922import world .bentobox .bentobox .api .user .User ;
2023import world .bentobox .bentobox .database .objects .Island ;
2932public class EnderPearlListener implements Listener {
3033
3134 private final Boxed addon ;
35+ private Set <Player > movingPlayer = new HashSet <>();
3236
3337 /**
3438 * @param addon addon
@@ -38,7 +42,11 @@ public EnderPearlListener(Boxed addon) {
3842 }
3943
4044 @ EventHandler (priority = EventPriority .LOWEST , ignoreCancelled = true )
41- public void onPlayerTeleport (PlayerTeleportEvent e ) {
45+ public void onPlayerTeleport (PlayerTeleportEvent e ) {
46+ if (e .getCause () == TeleportCause .ENDER_PEARL && movingPlayer .contains (e .getPlayer ())) {
47+ movingPlayer .remove (e .getPlayer ());
48+ return ; // Allow the teleport this one time
49+ }
4250 if (!addon .inWorld (e .getFrom ()) || !e .getPlayer ().getGameMode ().equals (GameMode .SURVIVAL )
4351 || (e .getTo () != null && !addon .inWorld (e .getTo ()))
4452 || addon .getIslands ().getSpawn (e .getFrom ().getWorld ()).map (spawn -> spawn .onIsland (e .getTo ())).orElse (false )
@@ -91,7 +99,7 @@ public void onEnderPearlLand(ProjectileHitEvent e) {
9199 if (!toIsland .onIsland (l )) {
92100 // Moving is allowed
93101 moveBox (u , fromIsland , l );
94- Util .teleportAsync (player , l );
102+ Util .teleportAsync (player , l , TeleportCause . ENDER_PEARL );
95103 }
96104 } else {
97105 // Different box. This is never allowed. Cancel the throw
@@ -117,6 +125,7 @@ private void moveBox(User u, Island fromIsland, Location l) {
117125 fromIsland .setProtectionCenter (l );
118126 fromIsland .setSpawnPoint (l .getWorld ().getEnvironment (), l );
119127 u .getPlayer ().playSound (l , Sound .ENTITY_GENERIC_EXPLODE , 2F , 2F );
128+ movingPlayer .add (u .getPlayer ());
120129 } catch (IOException e1 ) {
121130 addon .logError ("Could not move box " + e1 .getMessage ());
122131 }
0 commit comments