added New Year Firework #15

Merged
MineTec merged 4 commits from feature/NewYearFirework into master 2026-10-13 21:58:04 +00:00
2 changed files with 66 additions and 0 deletions
Showing only changes of commit 62a42e561e - Show all commits

No files matched your search

@@ -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<Listener> listeners() {
return List.of(new NewYearFireworkListener());
}
}
@@ -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<NewYearFirework> {
MineTec marked this conversation as resolved
Review

package private

package private
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
if(LocalDate.now().getDayOfYear() != 1) return;
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`
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);
}
}