From 1aebae6cd521af3c168f338f06597ce4b799f665 Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 28 Sep 2024 15:43:14 +0200 Subject: [PATCH 1/3] added fleischerchest and pixelblock advancements --- .../CustomAdvancements.java | 7 ++++- ...ustomAdvancementsDamageEntityListener.java | 27 +++++++++++++++++++ .../FleischerchestCraftItemListener.java | 6 ++--- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java index 9a92105..4b22c1f 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java @@ -1,5 +1,6 @@ package eu.mhsl.craftattack.spawn.appliances.customAdvancements; +import eu.mhsl.craftattack.spawn.Main; import eu.mhsl.craftattack.spawn.appliance.Appliance; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; @@ -12,7 +13,11 @@ import java.util.Objects; public class CustomAdvancements extends Appliance { public void grantAdvancement(String advancementName, Player player) { - player.getAdvancementProgress(Objects.requireNonNull(Bukkit.getAdvancement(Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName))))).awardCriteria("criteria"); + try { + player.getAdvancementProgress(Objects.requireNonNull(Bukkit.getAdvancement(Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName))))).awardCriteria("criteria"); + } catch (Exception e) { + Main.logger().info("Custom Advancements Datapack not found!"); + } } @Override diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java index 047d34a..6c1aa7e 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java @@ -1,10 +1,14 @@ package eu.mhsl.craftattack.spawn.appliances.customAdvancements; import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import org.bukkit.inventory.ItemStack; public class CustomAdvancementsDamageEntityListener extends ApplianceListener { @EventHandler @@ -16,4 +20,27 @@ public class CustomAdvancementsDamageEntityListener extends ApplianceListener Date: Sat, 28 Sep 2024 23:48:52 +0200 Subject: [PATCH 2/3] added more custom advancements, added pending advancements --- .../customAdvancements/Advancements.java | 11 ++++++ .../CustomAdvancements.java | 39 +++++++++++++++++-- .../ApplyPendingAdvancementsListener.java | 13 +++++++ .../CustomAdvancementsListener.java} | 15 ++++--- .../spawn/appliances/event/Event.java | 9 +++++ .../appliances/projectStart/ProjectStart.java | 7 ++++ 6 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/Advancements.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/ApplyPendingAdvancementsListener.java rename src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/{CustomAdvancementsDamageEntityListener.java => listener/CustomAdvancementsListener.java} (64%) diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/Advancements.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/Advancements.java new file mode 100644 index 0000000..85682de --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/Advancements.java @@ -0,0 +1,11 @@ +package eu.mhsl.craftattack.spawn.appliances.customAdvancements; + +public class Advancements { + public static String searchTrouble = "search_trouble"; + public static String fleischerchest = "fleischerchest"; + public static String craftPixelblock = "craft_pixelblock"; + public static String usePixelblock = "use_pixelblock"; + public static String start = "start"; + public static String winner = "winner"; + public static String participateEvent = "participate_event"; +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java index 4b22c1f..6ef7ae8 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java @@ -2,27 +2,60 @@ package eu.mhsl.craftattack.spawn.appliances.customAdvancements; import eu.mhsl.craftattack.spawn.Main; import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener.ApplyPendingAdvancementsListener; +import eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener.CustomAdvancementsListener; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; +import org.bukkit.advancement.Advancement; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.UUID; public class CustomAdvancements extends Appliance { - public void grantAdvancement(String advancementName, Player player) { + record PendingAdvancement(UUID receiver, String advancement) { + } + + private final List pendingAdvancements = new ArrayList<>(); + + public void grantAdvancement(String advancementName, UUID playerUUID) { + Player player = Bukkit.getPlayer(playerUUID); + if(player == null) { + addPendingAdvancement(playerUUID, advancementName); + return; + } + try { - player.getAdvancementProgress(Objects.requireNonNull(Bukkit.getAdvancement(Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName))))).awardCriteria("criteria"); + NamespacedKey namespacedKey = Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName)); + Advancement advancement = Objects.requireNonNull(Bukkit.getAdvancement(namespacedKey)); + player.getAdvancementProgress(advancement).awardCriteria("criteria"); } catch (Exception e) { Main.logger().info("Custom Advancements Datapack not found!"); } } + public void applyPendingAdvancements(Player player) { + if(this.pendingAdvancements.isEmpty()) return; + List grantedAdvancements = pendingAdvancements.stream() + .filter(pendingAdvancement -> pendingAdvancement.receiver.equals(player.getUniqueId())).toList(); + this.pendingAdvancements.removeAll(grantedAdvancements); + grantedAdvancements.forEach(pendingAdvancement -> grantAdvancement(pendingAdvancement.advancement(), player.getUniqueId())); + } + + public void addPendingAdvancement(UUID receiver, String advancement) { + pendingAdvancements.add(new PendingAdvancement(receiver, advancement)); + } + @Override @NotNull protected List listeners() { - return List.of(new CustomAdvancementsDamageEntityListener()); + return List.of( + new CustomAdvancementsListener(), + new ApplyPendingAdvancementsListener() + ); } } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/ApplyPendingAdvancementsListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/ApplyPendingAdvancementsListener.java new file mode 100644 index 0000000..4390fdf --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/ApplyPendingAdvancementsListener.java @@ -0,0 +1,13 @@ +package eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; + +public class ApplyPendingAdvancementsListener extends ApplianceListener { + @EventHandler + public void onJoin(PlayerJoinEvent event) { + getAppliance().applyPendingAdvancements(event.getPlayer()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/CustomAdvancementsListener.java similarity index 64% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/CustomAdvancementsListener.java index 6c1aa7e..0389bda 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancementsDamageEntityListener.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/CustomAdvancementsListener.java @@ -1,6 +1,8 @@ -package eu.mhsl.craftattack.spawn.appliances.customAdvancements; +package eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener; import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import eu.mhsl.craftattack.spawn.appliances.customAdvancements.Advancements; +import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements; import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -10,7 +12,7 @@ import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.inventory.ItemStack; -public class CustomAdvancementsDamageEntityListener extends ApplianceListener { +public class CustomAdvancementsListener extends ApplianceListener { @EventHandler public void onEntityDamageEntity(EntityDamageByEntityEvent event) { if(!(event.getEntity() instanceof Player damaged)) return; @@ -18,7 +20,7 @@ public class CustomAdvancementsDamageEntityListener extends ApplianceListener Main.instance().getAppliance(CustomAdvancements.class) + .grantAdvancement(Advancements.winner, uuid)); } private void giveReward(Reward reward) { diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/projectStart/ProjectStart.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/projectStart/ProjectStart.java index e12abce..6cdc0dd 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/projectStart/ProjectStart.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/projectStart/ProjectStart.java @@ -1,7 +1,10 @@ package eu.mhsl.craftattack.spawn.appliances.projectStart; +import eu.mhsl.craftattack.spawn.Main; import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import eu.mhsl.craftattack.spawn.appliances.customAdvancements.Advancements; +import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements; import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartCancelCommand; import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartCommand; import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartResetCommand; @@ -140,6 +143,10 @@ public class ProjectStart extends Appliance { ) ); + Bukkit.getOnlinePlayers().forEach( + player -> Main.instance().getAppliance(CustomAdvancements.class).grantAdvancement(Advancements.start, player.getUniqueId()) + ); + blockCycle.reset(); } -- 2.30.2 From e3b07aa62f1ac7c070030e20d50db3e326b29715 Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 5 Oct 2024 18:37:04 +0200 Subject: [PATCH 3/3] solved pr comments --- .../customAdvancements/CustomAdvancements.java | 9 +++++---- .../listener/CustomAdvancementsListener.java | 11 +++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java index 6ef7ae8..1dc82d2 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/CustomAdvancements.java @@ -30,11 +30,12 @@ public class CustomAdvancements extends Appliance { } try { - NamespacedKey namespacedKey = Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName)); - Advancement advancement = Objects.requireNonNull(Bukkit.getAdvancement(namespacedKey)); + NamespacedKey namespacedKey = Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName), "NamespacedKey is invalid!"); + Advancement advancement = Objects.requireNonNull(Bukkit.getAdvancement(namespacedKey), "The advancement does not exist!"); player.getAdvancementProgress(advancement).awardCriteria("criteria"); } catch (Exception e) { - Main.logger().info("Custom Advancements Datapack not found!"); + Main.logger().info("Advancement " + advancementName + " not found! (is Custom Advancements data pack loaded?)"); + throw e; } } @@ -46,7 +47,7 @@ public class CustomAdvancements extends Appliance { grantedAdvancements.forEach(pendingAdvancement -> grantAdvancement(pendingAdvancement.advancement(), player.getUniqueId())); } - public void addPendingAdvancement(UUID receiver, String advancement) { + private void addPendingAdvancement(UUID receiver, String advancement) { pendingAdvancements.add(new PendingAdvancement(receiver, advancement)); } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/CustomAdvancementsListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/CustomAdvancementsListener.java index 0389bda..ace859e 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/CustomAdvancementsListener.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/customAdvancements/listener/CustomAdvancementsListener.java @@ -30,12 +30,11 @@ public class CustomAdvancementsListener extends ApplianceListener