From 4955e943067e221439a78d10a2a2a0046af92d13 Mon Sep 17 00:00:00 2001 From: lars Date: Fri, 17 Oct 2025 19:38:10 +0200 Subject: [PATCH] started bloodmoon appliance --- .../gameplay/bloodmoon/Bloodmoon.java | 54 +++++++++++++++++++ .../BloodmoonMonsterDeathListener.java | 19 +++++++ 2 files changed, 73 insertions(+) create mode 100644 craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/Bloodmoon.java create mode 100644 craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/listener/BloodmoonMonsterDeathListener.java diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/Bloodmoon.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/Bloodmoon.java new file mode 100644 index 0000000..c7a5394 --- /dev/null +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/Bloodmoon.java @@ -0,0 +1,54 @@ +package eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.bloodmoon; + +import eu.mhsl.craftattack.spawn.core.appliance.Appliance; +import eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.bloodmoon.listener.BloodmoonMonsterDeathListener; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; + +public class Bloodmoon extends Appliance { + // für alle Dimensionen? einstellbar machen? + + public final Set affectedMobs = Set.of( + EntityType.ZOMBIE, + EntityType.SKELETON, + EntityType.SPIDER, + EntityType.CREEPER, + EntityType.HUSK, + EntityType.DROWNED, + EntityType.WITCH, + EntityType.ZOMBIE_VILLAGER, + EntityType.PHANTOM, + EntityType.ENDERMAN + ); + public final int expMultiplier = 4; + public final boolean summonLightning = true; + + private final int minBonusDrops = 1; + private final int maxBonusDrops = 4; + + public boolean bloodmoonIsActive() { + return true; + } + + public Set getRandomBonusDrops() { + int itemCount = ThreadLocalRandom.current().nextInt(this.minBonusDrops, this.maxBonusDrops + 1); + return Set.of( + new ItemStack(Material.DIAMOND_BLOCK, 2), + new ItemStack(Material.IRON_BARS, 3) + ); + } + + @Override + protected @NotNull List listeners() { + return List.of( + new BloodmoonMonsterDeathListener() + ); + } +} diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/listener/BloodmoonMonsterDeathListener.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/listener/BloodmoonMonsterDeathListener.java new file mode 100644 index 0000000..32cec35 --- /dev/null +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/listener/BloodmoonMonsterDeathListener.java @@ -0,0 +1,19 @@ +package eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.bloodmoon.listener; + +import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener; +import eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.bloodmoon.Bloodmoon; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDeathEvent; + +public class BloodmoonMonsterDeathListener extends ApplianceListener { + @EventHandler + public void onMonsterDeath(EntityDeathEvent event) { + if(!this.getAppliance().bloodmoonIsActive()) return; + LivingEntity entity = event.getEntity(); + if(!this.getAppliance().affectedMobs.contains(entity.getType())) return; + + event.setDroppedExp(event.getDroppedExp() * this.getAppliance().expMultiplier); + event.getDrops().addAll(this.getAppliance().getRandomBonusDrops()); + } +}