added New Year Firework #15

Merged
MineTec merged 4 commits from feature/NewYearFirework into master 2026-10-13 21:58:04 +00:00
3 changed files with 70 additions and 1 deletions

No files matched your search

@@ -0,0 +1,48 @@
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.time.LocalDate;
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);
}
}
public boolean shouldSpawnFirework() {
return LocalDate.now().getDayOfYear() == 1;
}
@Override
protected @NotNull List<Listener> listeners() {
return List.of(new NewYearFireworkListener());
}
}
@@ -0,0 +1,21 @@
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;
class NewYearFireworkListener extends ApplianceListener<NewYearFirework> {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
MineTec marked this conversation as resolved
Review

package private

package private
if(!this.getAppliance().shouldSpawnFirework()) return;
this.getAppliance().spawnFirework(event.getPlayer());
}
MineTec marked this conversation as resolved
Review

der Check, ob heute Neujahr ist, gilt als Logik, und sollte daher in die Appliance ausgelagert werden. Einfach eine Methode, die true zurück gibt, wenn Feuerwerk kommen soll. Und hier dann einfach (!Appliance#shouldSpawnFirework) return

der Check, ob heute Neujahr ist, gilt als Logik, und sollte daher in die Appliance ausgelagert werden. Einfach eine Methode, die `true` zurück gibt, wenn Feuerwerk kommen soll. Und hier dann einfach `(!Appliance#shouldSpawnFirework) return`
@EventHandler
public void onDamage(EntityDamageByEntityEvent event) {
if(!(event.getDamager() instanceof Firework firework)) return;
if(!firework.getPersistentDataContainer().has(NewYearFirework.fireworkKey)) return;
event.setCancelled(true);
}
}
@@ -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<QuarzRecipe> {
class QuarzRecipeListener extends ApplianceListener<QuarzRecipe> {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
this.getAppliance().unlock(event.getPlayer());