@Override public boolean execute(CommandSender sender, String currentAlias, String[] args) { if (!testPermission(sender)) return true; if (args.length < 2) { sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); return false; } if (!args[0].equalsIgnoreCase("give")) { sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); return false; } String statisticString = args[1]; Player player = null; if (args.length > 2) { player = Bukkit.getPlayer(args[1]); } else if (sender instanceof Player) { player = (Player) sender; } if (player == null) { sender.sendMessage("You must specify which player you wish to perform this action on."); return true; } if (statisticString.equals("*")) { for (Achievement achievement : Achievement.values()) { if (player.hasAchievement(achievement)) { continue; } PlayerAchievementAwardedEvent event = new PlayerAchievementAwardedEvent(player, achievement); Bukkit.getServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { player.awardAchievement(achievement); } } Command.broadcastCommandMessage( sender, String.format("Successfully given all achievements to %s", player.getName())); return true; } Achievement achievement = Bukkit.getUnsafe().getAchievementFromInternalName(statisticString); Statistic statistic = Bukkit.getUnsafe().getStatisticFromInternalName(statisticString); if (achievement != null) { if (player.hasAchievement(achievement)) { sender.sendMessage( String.format("%s already has achievement %s", player.getName(), statisticString)); return true; } PlayerAchievementAwardedEvent event = new PlayerAchievementAwardedEvent(player, achievement); Bukkit.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { sender.sendMessage( String.format( "Unable to award %s the achievement %s", player.getName(), statisticString)); return true; } player.awardAchievement(achievement); Command.broadcastCommandMessage( sender, String.format("Successfully given %s the stat %s", player.getName(), statisticString)); return true; } if (statistic == null) { sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString)); return true; } if (statistic.getType() == Type.UNTYPED) { PlayerStatisticIncrementEvent event = new PlayerStatisticIncrementEvent( player, statistic, player.getStatistic(statistic), player.getStatistic(statistic) + 1); Bukkit.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { sender.sendMessage( String.format("Unable to increment %s for %s", statisticString, player.getName())); return true; } player.incrementStatistic(statistic); Command.broadcastCommandMessage( sender, String.format("Successfully given %s the stat %s", player.getName(), statisticString)); return true; } if (statistic.getType() == Type.ENTITY) { EntityType entityType = EntityType.fromName(statisticString.substring(statisticString.lastIndexOf(".") + 1)); if (entityType == null) { sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString)); return true; } PlayerStatisticIncrementEvent event = new PlayerStatisticIncrementEvent( player, statistic, player.getStatistic(statistic), player.getStatistic(statistic) + 1, entityType); Bukkit.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { sender.sendMessage( String.format("Unable to increment %s for %s", statisticString, player.getName())); return true; } try { player.incrementStatistic(statistic, entityType); } catch (IllegalArgumentException e) { sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString)); return true; } } else { int id; try { id = getInteger( sender, statisticString.substring(statisticString.lastIndexOf(".") + 1), 0, Integer.MAX_VALUE, true); } catch (NumberFormatException e) { sender.sendMessage(e.getMessage()); return true; } Material material = Material.getMaterial(id); if (material == null) { sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString)); return true; } PlayerStatisticIncrementEvent event = new PlayerStatisticIncrementEvent( player, statistic, player.getStatistic(statistic), player.getStatistic(statistic) + 1, material); Bukkit.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { sender.sendMessage( String.format("Unable to increment %s for %s", statisticString, player.getName())); return true; } try { player.incrementStatistic(statistic, material); } catch (IllegalArgumentException e) { sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString)); return true; } } Command.broadcastCommandMessage( sender, String.format("Successfully given %s the stat %s", player.getName(), statisticString)); return true; }
public void awardAchievement(Achievement achievement) { sendStatistic(achievement.getId(), 1); }
public static at.pcgamingfreaks.TestClasses.NMS.Achievement getNMSAchievement( Achievement achievement) { return new at.pcgamingfreaks.TestClasses.NMS.Achievement(achievement.name()); }