Buggy code:
public class JoinLeaveEvents implements Listener { private ASkyBlock plugin ; private PlayerCache players ; public JoinLeaveEvents ( ASkyBlock aSkyBlock ) { } @ EventHandler ( priority = EventPriority . NORMAL ) public void onPlayerJoin ( final PlayerJoinEvent event ) { final String pluginVersion = plugin . getDescription ( ) . getVersion ( ) ; <START_BUG> if ( ( plugin . getUpdateCheck ( ) ) != null ) { <END_BUG> String [ ] split = plugin . getUpdateCheck ( ) . getVersionName ( ) . split ( "<seq2seq4repair_space>V" ) ; if ( ( ( split . length ) > 1 ) && ( ! ( pluginVersion . equals ( split [ 1 ] ) ) ) ) { event . getPlayer ( ) . sendMessage ( ( ( ( ( ChatColor . RED ) + ( plugin . getUpdateCheck ( ) . getVersionName ( ) ) ) + "<seq2seq4repair_space>is<seq2seq4repair_space>available!<seq2seq4repair_space>You<seq2seq4repair_space>are<seq2seq4repair_space>running<seq2seq4repair_space>" ) + pluginVersion ) ) ; if ( GAMETYPE . equals ( ASKYBLOCK ) ) { event . getPlayer ( ) . sendMessage ( ( ( ChatColor . RED ) + "Update<seq2seq4repair_space>at:<seq2seq4repair_space>http:////dev.bukkit.org//bukkit-plugins//skyblock" ) ) ; } else { event . getPlayer ( ) . sendMessage ( ( ( ChatColor . RED ) + "Update<seq2seq4repair_space>at:<seq2seq4repair_space>http:////dev.bukkit.org//bukkit-plugins//acidisland" ) ) ; } } } final UUID playerUUID = event . getPlayer ( ) . getUniqueId ( ) ; if ( ( players ) == null ) { plugin . getLogger ( ) . severe ( "players<seq2seq4repair_space>is<seq2seq4repair_space>NULL" ) ; } final List < String > messages = Messages . getMessages ( playerUUID ) ; if ( messages != null ) { plugin . getServer ( ) . getScheduler ( ) . runTaskLater ( plugin , new Runnable ( ) { @ Override public void run ( ) { event . getPlayer ( ) . sendMessage ( ( ( ChatColor . AQUA ) + ( Locale . newsHeadline ) ) ) ; int i = 1 ; for ( String message : messages ) { event . getPlayer ( ) . sendMessage ( ( ( ( i ++ ) + ":<seq2seq4repair_space>" ) + message ) ) ; } Messages . clearMessages ( playerUUID ) ; } } , 40L ) ; } if ( ( ! ( players . hasIsland ( playerUUID ) ) ) && ( ! ( players . inTeam ( playerUUID ) ) ) ) { return ; } UUID leader = null ; Location loc = null ; if ( ( players . inTeam ( playerUUID ) ) && ( ( players . getTeamIslandLocation ( playerUUID ) ) == null ) ) { leader = players . getTeamLeader ( playerUUID ) ; players . setTeamIslandLocation ( playerUUID , players . getIslandLocation ( leader ) ) ; } if ( players . hasIsland ( playerUUID ) ) { loc = players . getIslandLocation ( playerUUID ) ; leader = playerUUID ; } else if ( players . inTeam ( playerUUID ) ) { loc = players . getTeamIslandLocation ( playerUUID ) ; leader = players . getTeamLeader ( playerUUID ) ; } if ( loc != null ) { Island island = plugin . getGrid ( ) . getIsland ( leader ) ; if ( island == null ) { island = plugin . getGrid ( ) . getIslandAt ( loc ) ; if ( island == null ) { plugin . getGrid ( ) . addIsland ( loc . getBlockX ( ) , loc . getBlockZ ( ) , leader ) ; } } else { plugin . getGrid ( ) . setIslandOwner ( island , leader ) ; } if ( Settings . loginLevel ) { if ( ! ( plugin . isCalculatingLevel ( ) ) ) { plugin . setCalculatingLevel ( true ) ; LevelCalc levelCalc = new LevelCalc ( plugin , playerUUID , event . getPlayer ( ) , true ) ; levelCalc . runTaskTimer ( plugin , 0L , 10L ) ; } } } players . setPlayerName ( playerUUID , event . getPlayer ( ) . getName ( ) ) ; players . save ( playerUUID ) ; if ( Settings . logInRemoveMobs ) { plugin . getGrid ( ) . removeMobs ( event . getPlayer ( ) . getLocation ( ) ) ; } } @ EventHandler ( priority = EventPriority . NORMAL ) public void onPlayerQuit ( final PlayerQuitEvent event ) { } No newline ; at end ; of file ; }

Fix:
if ( ( event . getPlayer ( ) . isOp ( ) ) && ( ( plugin . getUpdateCheck ( ) ) != null ) ) {