@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) // event has MONITOR priority and will be skipped if it has been cancelled before
    public void onPlayerJoin(PlayerJoinEvent event)
    {      
        final PlayerJoinEvent pjEvent = event;        

        // Check if player has unfulfilled assignments to pick up
        final int assRdyForPickup = plugin.getCompletedAssignmentsFromDB(event.getPlayer().getName());

        if(assRdyForPickup > 0)
        {
            if(assRdyForPickup == 1) // there are completed assignments for this player to pick up
            { 
                // DELAYED TASK (only called once)
                plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable()
                {
                    public void run()
                    {
                        pjEvent.getPlayer().sendMessage(ChatColor.GREEN + "Du hast noch einen erfuellten Auftrag. Du kannst am Schild deine Waren abholen.");
                        pjEvent.getPlayer().sendMessage(ChatColor.GREEN + "Mit " + ChatColor.WHITE + "/ass list" + ChatColor.GREEN + " kannst du deine Auftraege ansehen.");
                    }
                }, 200L); 

            }
            else
            {
                // DELAYED TASK (only called once)
                plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable()
                {
                    public void run()
                    {
                        pjEvent.getPlayer().sendMessage(ChatColor.GREEN + "Du hast noch " + Integer.toString(assRdyForPickup) + " erfuellte Auftraege. Bitte hole deine Waren ab.");
                        pjEvent.getPlayer().sendMessage(ChatColor.GREEN + "Mit " + ChatColor.WHITE + "/ass list" + ChatColor.GREEN + " kannst du deine Auftraege ansehen.");
                    }
                }, 200L);                
            } 
        }
        // --------------------------------------------             
    }