/** * Awards advancements created by Advanced Achievements. This method can be seen as a synchronisation to give * advancements which were generated after the corresponding achievement was received for a given player. * * @param player */ private void awardAdvancements(Player player) { Advancement advancement = Bukkit.getServer() .getAdvancement(new NamespacedKey(plugin, AdvancementManager.ADVANCED_ACHIEVEMENTS_PARENT)); // If no parent, user has not used /aach generate, do not do anything. if (advancement != null) { AdvancementProgress advancementProgress = player.getAdvancementProgress(advancement); if (!advancementProgress.isDone()) { advancementProgress.awardCriteria(AchievementAdvancement.CRITERIA_NAME); } for (String achName : plugin.getDatabaseManager().getPlayerAchievementNamesList(player.getUniqueId())) { advancement = Bukkit.getServer() .getAdvancement(new NamespacedKey(plugin, AdvancementManager.getKey(achName))); // Matching advancement might not exist if user has not called /aach generate. if (advancement != null) { advancementProgress = player.getAdvancementProgress(advancement); if (!advancementProgress.isDone()) { advancementProgress.awardCriteria(AchievementAdvancement.CRITERIA_NAME); } } } } }
public AdvancementAPI grant(Player... players) { Advancement advancement = getAdvancement(); for (Player player : players) { if (!player.getAdvancementProgress(advancement).isDone()) { Collection<String> remainingCriteria = player.getAdvancementProgress(advancement).getRemainingCriteria(); Bukkit.getLogger().info(remainingCriteria.toString()); for (String remainingCriterion : remainingCriteria) player.getAdvancementProgress(getAdvancement()) .awardCriteria(remainingCriterion); } } return this; }
public AdvancementAPI revoke(Player... players) { Advancement advancement = getAdvancement(); for (Player player : players) { if (player.getAdvancementProgress(advancement).isDone()) { Collection<String> awardedCriteria = player.getAdvancementProgress(advancement).getAwardedCriteria(); Bukkit.getLogger().info(awardedCriteria.toString()); for (String awardedCriterion : awardedCriteria) player.getAdvancementProgress(getAdvancement()) .revokeCriteria(awardedCriterion); } } return this; }
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerAdvancedAchievementReception(PlayerAdvancedAchievementEvent event) { Player player = event.getPlayer(); String uuid = player.getUniqueId().toString(); // Check before updating caches; achievement could have already been received if MultiCommand is set to true in // the configuration. if (!plugin.getCacheManager().hasPlayerAchievement(player.getUniqueId(), event.getName())) { plugin.getCacheManager().getReceivedAchievementsCache().put(uuid, event.getName()); plugin.getCacheManager().getNotReceivedAchievementsCache().remove(uuid, event.getName()); plugin.getCacheManager().getTotalPlayerAchievementsCache().put(uuid, plugin.getCacheManager().getPlayerTotalAchievements(player.getUniqueId()) + 1); if (plugin.getServerVersion() >= 12) { Advancement advancement = Bukkit.getServer() .getAdvancement(new NamespacedKey(plugin, AdvancementManager.getKey(event.getName()))); // Matching advancement might not exist if user has not called /aach generate. if (advancement != null) { player.getAdvancementProgress(advancement).awardCriteria(AchievementAdvancement.CRITERIA_NAME); } } } plugin.getDatabaseManager().registerAchievement(player.getUniqueId(), event.getName(), event.getMessage()); List<String> rewardTexts = giveRewardsAndPrepareTexts(player, event.getCommandRewards(), event.getCommandMessage(), event.getItemReward(), event.getMoneyReward(), event.getExperienceReward(), event.getMaxHealthReward(), event.getMaxOxygenReward()); displayAchievement(player, event.getName(), event.getDisplayName(), event.getMessage(), rewardTexts); if (plugin.getCacheManager().getPlayerTotalAchievements(player.getUniqueId()) == plugin .getAchievementsAndDisplayNames().size()) { handleAllAchievementsReceived(player); } }
/** * Removes all advancements previously generated by the plugin. */ private void cleanupOldAchievementAdvancements() { int achievementsCleaned = 0; Iterator<Advancement> advancements = Bukkit.getServer().advancementIterator(); while (advancements.hasNext()) { NamespacedKey namespacedKey = advancements.next().getKey(); if ("advancedachievements".equals(namespacedKey.getNamespace()) && !ADVANCED_ACHIEVEMENTS_PARENT.equals(namespacedKey.getKey())) { ++achievementsCleaned; unsafeValues.removeAdvancement(namespacedKey); } } Bukkit.getServer().reloadData(); plugin.getLogger().info("Cleaned " + achievementsCleaned + " old advancements."); }
public Advancement getAdvancement() { return Bukkit.getAdvancement(id); }
@Override public AdvancementProgress getAdvancementProgress(Advancement advancement) { return implementation.getAdvancementProgress(advancement); }
@Override public AdvancementProgress getAdvancementProgress(Advancement advancement) { // TODO Auto-generated method stub throw new UnimplementedOperationException(); }
@Override public Advancement getAdvancement(NamespacedKey key) { // TODO Auto-generated method stub throw new UnimplementedOperationException(); }
@Override public Iterator<Advancement> advancementIterator() { // TODO Auto-generated method stub throw new UnimplementedOperationException(); }
/** * Return the number of advancements the player has completed. * @param player * @return count */ private static int getAdvancements(Player player) { List<Advancement> advancements = new ArrayList<>(); Bukkit.advancementIterator().forEachRemaining(advancements::add); return (int) advancements.stream().map(player::getAdvancementProgress).filter(AdvancementProgress::isDone).count(); }
@Override public AdvancementProgress getAdvancementProgress( Advancement advancement ) { return null; }
@Override public Advancement getAdvancement( NamespacedKey namespacedKey ) { throw new UnsupportedOperationException(); }
@Override public Iterator<Advancement> advancementIterator() { return Collections.<Advancement>emptyList().iterator(); }
@Override public AdvancementProgress getAdvancementProgress(Advancement advancement) { return player.getAdvancementProgress(advancement); }
@Override public AdvancementProgress getAdvancementProgress(Advancement advancement) { return null; }
@Override public Advancement getAdvancement(NamespacedKey key) { return null; // TODO: Link with Sponge. }
@Override public Iterator<Advancement> advancementIterator() { return null; // TODO: Link with Sponge. }
@Override public Advancement getAdvancement(NamespacedKey key) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. }
@Override public Iterator<Advancement> advancementIterator() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. }
@Override public AdvancementProgress getAdvancementProgress(Advancement arg0) { return null; }
@Override public Advancement getAdvancement(NamespacedKey key) { return null; }
@Override public Iterator<Advancement> advancementIterator() { return null; }
@Override public Advancement getAdvancement(NamespacedKey key) { // TODO Auto-generated method stub return null; }
@Override public Iterator<Advancement> advancementIterator() { // TODO Auto-generated method stub return null; }
@Override public Advancement getAdvancement(NamespacedKey namespacedKey) { return null; }
@Override public AdvancementProgress getAdvancementProgress(Advancement advancement) { throw Pokkit.unsupported(); }
@Override public Advancement loadAdvancement(NamespacedKey key, String advancementJson) { throw Pokkit.unsupported(); }
@Override public Iterator<Advancement> advancementIterator() { // Advancements not implemented return Collections.emptyIterator(); }
@Override public Advancement getAdvancement(NamespacedKey key) { // Advancements not implemented return null; }
@Override public AdvancementProgress getAdvancementProgress(Advancement arg0) { throw new UnsupportedOperationException(); }