From 62a42e561edd605aec1113e249a655826f2c2842 Mon Sep 17 00:00:00 2001 From: jannis Date: Tue, 6 Oct 2026 20:48:33 +0200 Subject: [PATCH 1/2] added New Year Firework --- .../newYearFirework/NewYearFirework.java | 43 +++++++++++++++++++ .../NewYearFireworkListener.java | 23 ++++++++++ 2 files changed, 66 insertions(+) create mode 100644 craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFirework.java create mode 100644 craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFireworkListener.java diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFirework.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFirework.java new file mode 100644 index 0000000..00298a7 --- /dev/null +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFirework.java @@ -0,0 +1,43 @@ +package eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.newYearFirework; + +import eu.mhsl.craftattack.spawn.core.appliance.Appliance; +import org.bukkit.Color; +import org.bukkit.FireworkEffect; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Firework; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.inventory.meta.FireworkMeta; +import org.bukkit.persistence.PersistentDataType; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Locale; + +public class NewYearFirework extends Appliance { + private static final String namespace = NewYearFirework.class.getSimpleName().toLowerCase(Locale.ROOT); + public static NamespacedKey fireworkKey = new NamespacedKey(namespace, "newyear_firework".toLowerCase()); + + public void spawnFirework(Player player) { + for (int i = 0; i < 5; i++) { + Firework firework = player.getWorld().spawn(player.getLocation(), Firework.class); + firework.getPersistentDataContainer().set(fireworkKey, PersistentDataType.BOOLEAN, true); + FireworkMeta fireworkMeta = firework.getFireworkMeta(); + fireworkMeta.addEffect(FireworkEffect.builder() + .with(FireworkEffect.Type.BALL) + .withColor(Color.AQUA, Color.RED, Color.LIME, Color.ORANGE, Color.YELLOW) + .withFade(Color.FUCHSIA, Color.WHITE) + .trail(true) + .flicker(true) + .build() + ); + fireworkMeta.setPower((int) (i % 3 + 0.25)); + firework.setFireworkMeta(fireworkMeta); + } + } + + @Override + protected @NotNull List listeners() { + return List.of(new NewYearFireworkListener()); + } +} diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFireworkListener.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFireworkListener.java new file mode 100644 index 0000000..120b8f9 --- /dev/null +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFireworkListener.java @@ -0,0 +1,23 @@ +package eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.newYearFirework; + +import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener; +import org.bukkit.entity.Firework; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerJoinEvent; + +import java.time.LocalDate; + +public class NewYearFireworkListener extends ApplianceListener { + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + if(LocalDate.now().getDayOfYear() != 1) return; + this.getAppliance().spawnFirework(event.getPlayer()); + } + @EventHandler + public void onDamage(EntityDamageByEntityEvent event) { + if(!(event.getDamager() instanceof Firework firework)) return; + if(!firework.getPersistentDataContainer().has(NewYearFirework.fireworkKey)) return; + event.setCancelled(true); + } +} -- 2.47.3 From 252758797dbe5626b794d53eff2c2aa84e4802e3 Mon Sep 17 00:00:00 2001 From: jannis Date: Tue, 13 Oct 2026 22:52:42 +0200 Subject: [PATCH 2/2] fixed issues in NewYearFirework and QuarzRecipe --- .../gameplay/newYearFirework/NewYearFirework.java | 5 +++++ .../gameplay/newYearFirework/NewYearFireworkListener.java | 6 ++---- .../gameplay/quarzRecipe/QuarzRecipeListener.java | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFirework.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFirework.java index 00298a7..c02e1b4 100644 --- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFirework.java +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFirework.java @@ -11,6 +11,7 @@ import org.bukkit.inventory.meta.FireworkMeta; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; +import java.time.LocalDate; import java.util.List; import java.util.Locale; @@ -36,6 +37,10 @@ public class NewYearFirework extends Appliance { } } + public boolean shouldSpawnFirework() { + return LocalDate.now().getDayOfYear() == 1; + } + @Override protected @NotNull List listeners() { return List.of(new NewYearFireworkListener()); diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFireworkListener.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFireworkListener.java index 120b8f9..4a8f2ec 100644 --- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFireworkListener.java +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/newYearFirework/NewYearFireworkListener.java @@ -6,12 +6,10 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.player.PlayerJoinEvent; -import java.time.LocalDate; - -public class NewYearFireworkListener extends ApplianceListener { +class NewYearFireworkListener extends ApplianceListener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { - if(LocalDate.now().getDayOfYear() != 1) return; + if(!this.getAppliance().shouldSpawnFirework()) return; this.getAppliance().spawnFirework(event.getPlayer()); } @EventHandler diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/quarzRecipe/QuarzRecipeListener.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/quarzRecipe/QuarzRecipeListener.java index a24181a..80d5c3b 100644 --- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/quarzRecipe/QuarzRecipeListener.java +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/quarzRecipe/QuarzRecipeListener.java @@ -4,7 +4,7 @@ import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerJoinEvent; -public class QuarzRecipeListener extends ApplianceListener { +class QuarzRecipeListener extends ApplianceListener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { this.getAppliance().unlock(event.getPlayer()); -- 2.47.3