diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 89aecae..9f3be73 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,7 +4,7 @@ stages:
variables:
name: "UltimateStacker"
path: "/builds/$CI_PROJECT_PATH"
- version: "1.6.7"
+ version: "1.6.8"
build:
stage: build
diff --git a/pom.xml b/pom.xml
index 5c863e9..54752df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,7 +91,7 @@
com.bgsoftware
WildStacker
- 2.8.1
+ 2-9-0
uk.antiperson
diff --git a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
index b112e9a..f1d15d6 100644
--- a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
+++ b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
@@ -174,6 +174,7 @@ public class UltimateStacker extends JavaPlugin {
pluginManager.registerEvents(new EntityListeners(this), this);
pluginManager.registerEvents(new ItemListeners(this), this);
pluginManager.registerEvents(new TameListeners(this), this);
+ pluginManager.registerEvents(new SpawnerListeners(this), this);
pluginManager.registerEvents(new SheepDyeListeners(this), this);
if (Setting.CLEAR_LAG.getBoolean() && pluginManager.isPluginEnabled("ClearLag"))
diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/EntityListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/EntityListeners.java
index 3933822..996b39e 100644
--- a/src/main/java/com/songoda/ultimatestacker/listeners/EntityListeners.java
+++ b/src/main/java/com/songoda/ultimatestacker/listeners/EntityListeners.java
@@ -8,7 +8,6 @@ import com.songoda.ultimatestacker.utils.Methods;
import com.songoda.ultimatestacker.utils.ServerVersion;
import com.songoda.ultimatestacker.utils.settings.Setting;
import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java
new file mode 100644
index 0000000..29bb40a
--- /dev/null
+++ b/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java
@@ -0,0 +1,33 @@
+package com.songoda.ultimatestacker.listeners;
+
+import com.songoda.ultimatestacker.UltimateStacker;
+import com.songoda.ultimatestacker.entity.EntityStack;
+import com.songoda.ultimatestacker.spawner.SpawnerStack;
+import com.songoda.ultimatestacker.spawner.SpawnerStackManager;
+import com.songoda.ultimatestacker.utils.settings.Setting;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.SpawnerSpawnEvent;
+
+public class SpawnerListeners implements Listener {
+
+ private final UltimateStacker instance;
+
+ public SpawnerListeners(UltimateStacker instance) {
+ this.instance = instance;
+ }
+
+ @EventHandler
+ public void onSpawn(SpawnerSpawnEvent event) {
+ if (!Setting.STACK_ENTITIES.getBoolean()) return;
+ SpawnerStackManager spawnerStackManager = instance.getSpawnerStackManager();
+ if (!spawnerStackManager.isSpawner(event.getSpawner().getLocation())) return;
+
+ SpawnerStack spawnerStack = spawnerStackManager.getSpawner(event.getSpawner().getLocation());
+
+ EntityStack stack = instance.getEntityStackManager().addStack(event.getEntity().getUniqueId(), spawnerStack.calculateSpawnCount());
+
+ instance.getStackingTask().attemptSplit(stack, (LivingEntity)event.getEntity());
+ }
+}
diff --git a/src/main/java/com/songoda/ultimatestacker/spawner/SpawnerStack.java b/src/main/java/com/songoda/ultimatestacker/spawner/SpawnerStack.java
index bb591c0..dae4a8f 100644
--- a/src/main/java/com/songoda/ultimatestacker/spawner/SpawnerStack.java
+++ b/src/main/java/com/songoda/ultimatestacker/spawner/SpawnerStack.java
@@ -3,10 +3,13 @@ package com.songoda.ultimatestacker.spawner;
import com.songoda.ultimatestacker.UltimateStacker;
import com.songoda.ultimatestacker.utils.Reflection;
import com.songoda.ultimatestacker.utils.ServerVersion;
+import com.songoda.ultimatestacker.utils.settings.Setting;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.block.CreatureSpawner;
+import java.util.Random;
+
public class SpawnerStack {
private final Location location;
@@ -30,7 +33,7 @@ public class SpawnerStack {
Bukkit.getScheduler().runTaskLater(UltimateStacker.getInstance(), () -> {
if (!(location.getBlock().getState() instanceof CreatureSpawner)) return;
- int count = 4 * amount;
+ int count = Setting.STACK_ENTITIES.getBoolean() ? 1 : calculateSpawnCount();
int maxNearby = amount > 6 ? amount + 3 : 6;
CreatureSpawner creatureSpawner = (CreatureSpawner) location.getBlock().getState();
if (UltimateStacker.getInstance().isServerVersionAtLeast(ServerVersion.V1_12)) {
@@ -55,4 +58,13 @@ public class SpawnerStack {
+ "}"
+ "}";
}
+
+ public int calculateSpawnCount() {
+ Random random = new Random();
+ int count = 0;
+ for (int i = 0; i < getAmount(); i ++) {
+ count += random.nextInt(3 - 1 + 1) + 1;
+ }
+ return count;
+ }
}
diff --git a/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java b/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java
index efa4ec2..2ad75c2 100644
--- a/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java
+++ b/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java
@@ -182,6 +182,19 @@ public class StackingTask extends BukkitRunnable {
return false;
}
+ public void attemptSplit(EntityStack stack, LivingEntity entity) {
+ int stackSize = stack.getAmount();
+ int maxEntityStackAmount = Setting.MAX_STACK_ENTITIES.getInt();
+
+ if (stackSize <= maxEntityStackAmount) return;
+
+ for (int i = stackSize; i > 0; i -= maxEntityStackAmount) {
+ instance.getEntityStackManager().addStack(Methods.newEntity(entity), i > 25 ? 25 : i);
+ }
+ entity.remove();
+
+ }
+
private void fixHealth(LivingEntity entity, LivingEntity initialEntity) {
if (!Setting.STACK_ENTITY_HEALTH.getBoolean() && Setting.CARRY_OVER_LOWEST_HEALTH.getBoolean() && initialEntity.getHealth() < entity.getHealth())
entity.setHealth(initialEntity.getHealth());
@@ -191,5 +204,4 @@ public class StackingTask extends BukkitRunnable {
if (Setting.STACK_ENTITY_HEALTH.getBoolean())
stack.updateHealth(stack.getEntity());
}
-
}