diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index 379ed0f..a214542 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -24,15 +24,18 @@ import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.World; +import org.bukkit.advancement.Advancement; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.UUID; @@ -79,6 +82,7 @@ private static ArrayList not_available_materials = new ArrayList<>(); private static ArrayList materials = new ArrayList<>(); + private static ArrayList advancements = new ArrayList<>(); public static Challenges getPlugin() { return plugin; @@ -205,6 +209,13 @@ } } + for (@NotNull Iterator it = Bukkit.advancementIterator(); it.hasNext(); ) { + Advancement advancement = it.next(); + if (advancement.getDisplay() != null) { + advancements.add(advancement); + } + } + Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> { EventRegistration.pM.callEvent(new ServerStatusChangedEvent(true)); EventRegistration.pM.callEvent(new TimerChangedEvent(timer.isRunning())); @@ -521,4 +532,7 @@ public ArrayList getMaterials() { return materials; } + public ArrayList getAdvancements() { + return advancements; + } } diff --git a/src/main/java/de/fanta/challenges/challenges/AllAdvancementsChallenge.java b/src/main/java/de/fanta/challenges/challenges/AllAdvancementsChallenge.java new file mode 100644 index 0000000..e2a6bbf --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/AllAdvancementsChallenge.java @@ -0,0 +1,31 @@ +package de.fanta.challenges.challenges; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import org.bukkit.Bukkit; +import org.bukkit.advancement.Advancement; +import org.bukkit.advancement.AdvancementProgress; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerAdvancementDoneEvent; + +public class AllAdvancementsChallenge implements Listener { + + Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onAdvancementDone(PlayerAdvancementDoneEvent e) { + if (plugin.getConfig().getBoolean("alladvancements")) { + Advancement advancement = e.getAdvancement(); + if (plugin.getAdvancements().contains(advancement)) { + ChatUtil.sendDebugMessage(e.getPlayer(), e.message()); + + for (Player pp: Bukkit.getOnlinePlayers()) { + AdvancementProgress ap = pp.getAdvancementProgress(advancement); + ap.awardCriteria(advancement.getCriteria().toString()); + } + } + } + } +} diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index 6b20558..859e291 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -2,6 +2,7 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.CoordsTargeter; +import de.fanta.challenges.challenges.AllAdvancementsChallenge; import de.fanta.challenges.challenges.BedrockWallChallenge; import de.fanta.challenges.challenges.ChallengeEvents.BingoChallengeEvent; import de.fanta.challenges.challenges.ChallengeEvents.DeathrunChallengeEvent; @@ -91,6 +92,7 @@ pM.registerEvents(new SammelFieberChallengeEvent(), plugin); pM.registerEvents(new OreBattle(), plugin); pM.registerEvents(new ForceItemChallengeEvent(), plugin); + pM.registerEvents(new AllAdvancementsChallenge(), plugin); if (plugin.getProtocolVersion() >= 759) { pM.registerEvents(new WorldBorderLevelChallenge(), plugin); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 7a9b947..da3af1c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -22,6 +22,7 @@ playerrange: 30 icerunner: false bedrockwall: false +alladvancements: false worldborderlevel: false worldborderlevelnether: false worldborderlevellevel: 0