@Override public SpellResult start(CastContext context) { Mage mage = context.getMage(); MageController controller = context.getController(); Player player = mage.getPlayer(); if (player == null) { return SpellResult.PLAYER_REQUIRED; } List<Player> allPlayers = null; players.clear(); if (allowCrossWorld) { allPlayers = new ArrayList<>(controller.getPlugin().getServer().getOnlinePlayers()); } else { allPlayers = context.getLocation().getWorld().getPlayers(); } Collections.sort( allPlayers, new Comparator<Player>() { @Override public int compare(Player p1, Player p2) { return p1.getDisplayName().compareTo(p2.getDisplayName()); } }); int index = 0; for (Player targetPlayer : allPlayers) { if (!context.getTargetsCaster() && targetPlayer == player) continue; if (targetPlayer.hasPotionEffect(PotionEffectType.INVISIBILITY)) continue; if (!context.canTarget(targetPlayer)) continue; players.put(index++, new WeakReference<>(targetPlayer)); } if (players.size() == 0) return SpellResult.NO_TARGET; String inventoryTitle = context.getMessage("title", "Select Player"); int invSize = ((players.size() + 9) / 9) * 9; Inventory displayInventory = CompatibilityUtils.createInventory(null, invSize, inventoryTitle); for (Map.Entry<Integer, WeakReference<Player>> entry : players.entrySet()) { Player targetPlayer = entry.getValue().get(); if (targetPlayer == null) continue; String name = targetPlayer.getName(); String displayName = targetPlayer.getDisplayName(); ItemStack playerItem = InventoryUtils.getPlayerSkull(targetPlayer, displayName); if (!name.equals(displayName)) { ItemMeta meta = playerItem.getItemMeta(); List<String> lore = new ArrayList<>(); lore.add(name); meta.setLore(lore); playerItem.setItemMeta(meta); } displayInventory.setItem(entry.getKey(), playerItem); } active = true; mage.activateGUI(this, displayInventory); return SpellResult.NO_ACTION; }