From d40db23f2f9faad3621e2b858bc6ac454688e007 Mon Sep 17 00:00:00 2001 From: ceze88 Date: Fri, 5 May 2023 10:57:07 +0200 Subject: [PATCH] Fix spawner stacking disabled mobs --- .../ultimatestacker/listeners/SpawnerListeners.java | 7 +++---- .../stackable/entity/EntityStackManager.java | 10 +--------- .../stackable/spawner/SpawnerStack.java | 7 ++++++- .../songoda/ultimatestacker/tasks/StackingTask.java | 12 ++++-------- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java index 130cd2d..850264c 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java +++ b/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java @@ -51,7 +51,6 @@ public class SpawnerListeners implements Listener { if (entity.getType() == EntityType.FIREWORK) return; if (entity.getVehicle() != null) { entity.getVehicle().remove(); - entity.remove(); } if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) { @@ -59,16 +58,16 @@ public class SpawnerListeners implements Listener { for (Entity e : entity.getPassengers()) { e.remove(); } - entity.remove(); } } - entity.remove(); Location location = event.getSpawner().getLocation(); SpawnerStack spawnerStack = spawnerStackManager.getSpawner(location); - int amountToSpawn = spawnerStack.calculateSpawnCount(); + int amountToSpawn = spawnerStack.calculateSpawnCount(entity.getType()); + if (amountToSpawn <= 1) return; + entity.remove(); spawnerStack.spawn(amountToSpawn, "EXPLOSION_NORMAL", null, (e) -> { if (Settings.NO_AI.getBoolean()) diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStackManager.java b/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStackManager.java index 19192bb..c3a0c7b 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStackManager.java +++ b/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStackManager.java @@ -1,21 +1,12 @@ package com.songoda.ultimatestacker.stackable.entity; import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.utils.Methods; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Chunk; -import org.bukkit.World; import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.metadata.FixedMetadataValue; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; import java.util.UUID; public class EntityStackManager { @@ -132,6 +123,7 @@ public class EntityStackManager { } public void setStack(LivingEntity newEntity, int amount) { + if (amount <= 0) return; if (isStackedEntity(newEntity)) { EntityStack stack = getStack(newEntity); stack.setAmount(amount); diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java b/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java index 8b657ae..d83d067 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java +++ b/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java @@ -10,6 +10,7 @@ import com.songoda.ultimatestacker.utils.Stackable; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.CreatureSpawner; +import org.bukkit.entity.EntityType; import java.util.Random; import java.util.UUID; @@ -47,7 +48,11 @@ public class SpawnerStack extends SSpawner implements Stackable, Hologramable { plugin.getDataManager().updateSpawner(this); } - public int calculateSpawnCount() { + public int calculateSpawnCount(EntityType type) { + if (!UltimateStacker.getInstance().getMobFile().getBoolean("Mobs." + type.name() + ".Enabled")) { + return 0; + } + Random random = new Random(); int count = 0; for (int i = 0; i < getAmount(); i++) { diff --git a/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java b/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java index b9661ef..ea2ec18 100644 --- a/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java +++ b/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java @@ -9,12 +9,9 @@ import com.songoda.ultimatestacker.settings.Settings; import com.songoda.ultimatestacker.stackable.entity.Check; import com.songoda.ultimatestacker.stackable.entity.EntityStack; import com.songoda.ultimatestacker.stackable.entity.EntityStackManager; -import com.songoda.ultimatestacker.stackable.entity.StackedEntity; import com.songoda.ultimatestacker.stackable.entity.custom.CustomEntity; -import com.songoda.ultimatestacker.utils.Async; import com.songoda.ultimatestacker.utils.CachedChunk; import org.bukkit.Bukkit; -import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -45,16 +42,12 @@ import org.bukkit.entity.TropicalFish; import org.bukkit.entity.Villager; import org.bukkit.entity.Wolf; import org.bukkit.entity.Zombie; -import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.inventory.EntityEquipment; -import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -67,7 +60,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; public class StackingTask extends TimerTask { @@ -187,6 +179,10 @@ public class StackingTask extends TimerTask { || entity.hasMetadata("breedCooldown")) return false; + if (!configurationSection.getBoolean("Mobs." + entity.getType().name() + ".Enabled")) { + return false; + } + // Allow spawn if stackreasons are set and match, or if from a spawner final String spawnReason = entity.hasMetadata("US_REASON") && !entity.getMetadata("US_REASON").isEmpty() ? entity.getMetadata("US_REASON").get(0).asString() : null;