3636import org .mvplugins .multiverse .core .dynamiclistener .annotations .DefaultEventPriority ;
3737import org .mvplugins .multiverse .core .dynamiclistener .annotations .EventMethod ;
3838import org .mvplugins .multiverse .core .dynamiclistener .annotations .EventPriorityKey ;
39+ import org .mvplugins .multiverse .core .dynamiclistener .annotations .IgnoreIfCancelled ;
3940import org .mvplugins .multiverse .core .economy .MVEconomist ;
4041import org .mvplugins .multiverse .core .event .MVRespawnEvent ;
4142import org .mvplugins .multiverse .core .locale .PluginLocales ;
@@ -269,12 +270,28 @@ void playerChangedWorld(PlayerChangedWorldEvent event) {
269270 @ EventPriorityKey ("mvcore-player-teleport" )
270271 @ DefaultEventPriority (EventPriority .HIGHEST )
271272 void playerTeleport (PlayerTeleportEvent event ) {
272- Logging . finer ( "Got teleport event for player '"
273- + event . getPlayer (). getName () + "' with cause '" + event . getCause () + "'" );
273+ Player teleportee = event . getPlayer ();
274+
274275 if (event .isCancelled ()) {
276+ Logging .finer ("Teleport event for player '" + teleportee .getName () + "' was already cancelled." );
275277 return ;
276278 }
277- Player teleportee = event .getPlayer ();
279+
280+ Logging .finer ("Got teleport event for player '"
281+ + teleportee .getName () + "' with cause '" + event .getCause () + "'" );
282+
283+ Location fromLocation = event .getFrom ();
284+ if (fromLocation == null || fromLocation .getWorld () == null ) { // should never be null, but just in case
285+ Logging .finer ("Teleport event for player '" + teleportee .getName () + "' has null from-location or world." );
286+ return ;
287+ }
288+
289+ Location toLocation = event .getTo ();
290+ if (toLocation == null || toLocation .getWorld () == null ) { // may be null on spigot
291+ Logging .finer ("Teleport event for player '" + teleportee .getName () + "' has null to-location or world." );
292+ return ;
293+ }
294+
278295 Option <String > teleporterName = teleportQueue .popFromQueue (teleportee .getName ());
279296 CommandSender teleporter = teleporterName .map (name -> {
280297 if (name .equalsIgnoreCase ("CONSOLE" )) {
@@ -295,17 +312,17 @@ void playerTeleport(PlayerTeleportEvent event) {
295312 }
296313
297314 Logging .finer ("Teleporter %s is teleporting %s from %s to %s" , teleporter .getName (), teleportee .getName (),
298- event . getFrom (), event . getTo () );
315+ fromLocation , toLocation );
299316
300- MultiverseWorld fromWorld = getWorldManager ().getLoadedWorld (event . getFrom () .getWorld ()).getOrNull ();
301- LoadedMultiverseWorld toWorld = getWorldManager ().getLoadedWorld (event . getTo () .getWorld ()).getOrNull ();
317+ MultiverseWorld fromWorld = getWorldManager ().getLoadedWorld (fromLocation .getWorld ()).getOrNull ();
318+ LoadedMultiverseWorld toWorld = getWorldManager ().getLoadedWorld (toLocation .getWorld ()).getOrNull ();
302319 if (toWorld == null ) {
303320 Logging .fine ("Player '" + teleportee .getName () + "' is teleporting to world '"
304- + event . getTo () .getWorld ().getName () + "' which is not managed by Multiverse-Core. No further "
321+ + toLocation .getWorld ().getName () + "' which is not managed by Multiverse-Core. No further "
305322 + "actions will be taken by Multiverse-Core." );
306323 return ;
307324 }
308- if (event . getFrom (). getWorld ().equals (event . getTo () .getWorld ())) {
325+ if (fromLocation . getWorld ().equals (toLocation .getWorld ())) {
309326 // The player is Teleporting to the same world.
310327 Logging .finer ("Player '" + teleportee .getName () + "' is teleporting to the same world." );
311328 this .stateSuccess (teleportee .getName (), toWorld .getName ());
@@ -339,20 +356,19 @@ private void stateSuccess(String playerName, String worldName) {
339356 */
340357 @ EventMethod
341358 @ DefaultEventPriority (EventPriority .LOWEST )
359+ @ IgnoreIfCancelled
342360 void playerPortalCheck (PlayerPortalEvent event ) {
343- if (event .isCancelled ()) {
344- return ;
345- }
346- if (event .getFrom ().getWorld () == null ) {
361+ Location fromLocation = event .getFrom ();
362+ if (fromLocation == null || fromLocation .getWorld () == null ) {
347363 Logging .warning ("PlayerPortalEvent's from world is null!" );
348364 return ;
349365 }
350- if (event . getFrom (). getWorld ().getBlockAt (event . getFrom () ).getType () == Material .NETHER_PORTAL ) {
366+ if (fromLocation . getWorld ().getBlockAt (fromLocation ).getType () == Material .NETHER_PORTAL ) {
351367 return ;
352368 }
353369
354370 // Player was actually outside of the portal, adjust the from location
355- Location newLocation = blockSafety .findPortalBlockNextTo (event . getFrom () );
371+ Location newLocation = blockSafety .findPortalBlockNextTo (fromLocation );
356372 if (newLocation != null ) {
357373 event .setFrom (newLocation );
358374 }
@@ -365,28 +381,33 @@ void playerPortalCheck(PlayerPortalEvent event) {
365381 @ EventMethod
366382 @ EventPriorityKey ("mvcore-player-portal" )
367383 @ DefaultEventPriority (EventPriority .HIGH )
384+ @ IgnoreIfCancelled
368385 void playerPortal (PlayerPortalEvent event ) {
369- if (event .isCancelled ()) {
386+ Location fromLocation = event .getFrom ();
387+ if (fromLocation == null || fromLocation .getWorld () == null ) { // should never be null, but just in case
388+ Logging .finer ("PlayerPortalEvent's from world is null!" );
370389 return ;
371390 }
372- if (event .getTo () == null || event .getTo ().getWorld () == null ) {
391+
392+ Location toLocation = event .getTo ();
393+ if (toLocation == null || toLocation .getWorld () == null ) { // may be null on spigot
373394 Logging .finer ("PlayerPortalEvent's to world is null!" );
374395 return ;
375396 }
376397 if (config .isUsingCustomPortalSearch ()) {
377398 event .setSearchRadius (config .getCustomPortalSearchRadius ());
378399 }
379- if (Objects .equals (event . getFrom (). getWorld (), event . getTo () .getWorld ())) {
400+ if (Objects .equals (fromLocation . getWorld (), toLocation .getWorld ())) {
380401 // The player is Portaling to the same world.
381402 Logging .finer ("Player '" + event .getPlayer ().getName () + "' is portaling to the same world." );
382403 return ;
383404 }
384405
385- MultiverseWorld fromWorld = getWorldManager ().getLoadedWorld (event . getFrom () .getWorld ()).getOrNull ();
386- LoadedMultiverseWorld toWorld = getWorldManager ().getLoadedWorld (event . getTo () .getWorld ()).getOrNull ();
406+ MultiverseWorld fromWorld = getWorldManager ().getLoadedWorld (fromLocation .getWorld ()).getOrNull ();
407+ LoadedMultiverseWorld toWorld = getWorldManager ().getLoadedWorld (toLocation .getWorld ()).getOrNull ();
387408 if (toWorld == null ) {
388409 Logging .fine ("Player '" + event .getPlayer ().getName () + "' is portaling to world '"
389- + event . getTo () .getWorld ().getName () + "' which is not managed by Multiverse-Core. No further "
410+ + toLocation .getWorld ().getName () + "' which is not managed by Multiverse-Core. No further "
390411 + "actions will be taken by Multiverse-Core." );
391412 return ;
392413 }
0 commit comments