diff --git a/UltimateStacker-API/pom.xml b/UltimateStacker-API/pom.xml
index d2914f8..1494d13 100644
--- a/UltimateStacker-API/pom.xml
+++ b/UltimateStacker-API/pom.xml
@@ -7,7 +7,7 @@
com.craftaro
UltimateStacker-Parent
- 3.1.2
+ 3.1.3
UltimateStacker-API
1.0.0-SNAPSHOT
diff --git a/UltimateStacker-Plugin/pom.xml b/UltimateStacker-Plugin/pom.xml
index 62980ac..8e4d370 100644
--- a/UltimateStacker-Plugin/pom.xml
+++ b/UltimateStacker-Plugin/pom.xml
@@ -7,7 +7,7 @@
com.craftaro
UltimateStacker-Parent
- 3.1.2
+ 3.1.3
UltimateStacker-Plugin
diff --git a/UltimateStacker-Plugin/src/main/java/com.craftaro.ultimatestacker/tasks/StackingTask.java b/UltimateStacker-Plugin/src/main/java/com.craftaro.ultimatestacker/tasks/StackingTask.java
index 242a69c..04270f2 100644
--- a/UltimateStacker-Plugin/src/main/java/com.craftaro.ultimatestacker/tasks/StackingTask.java
+++ b/UltimateStacker-Plugin/src/main/java/com.craftaro.ultimatestacker/tasks/StackingTask.java
@@ -11,15 +11,19 @@ import com.craftaro.ultimatestacker.settings.Settings;
import com.craftaro.ultimatestacker.stackable.entity.Check;
import com.craftaro.ultimatestacker.stackable.entity.custom.CustomEntity;
import com.craftaro.ultimatestacker.utils.CachedChunk;
-import org.bukkit.*;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.World;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.*;
import org.bukkit.inventory.EntityEquipment;
-import org.bukkit.persistence.PersistentDataContainer;
-import org.bukkit.persistence.PersistentDataType;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
import java.util.stream.Collectors;
import static com.craftaro.ultimatestacker.stackable.entity.Check.getChecks;
@@ -64,7 +68,7 @@ public class StackingTask extends BukkitRunnable {
}
int tickRate = Settings.STACK_SEARCH_TICK_SPEED.getInt();
- runTaskTimer(plugin, tickRate, tickRate);
+ runTaskTimerAsynchronously(plugin, tickRate, tickRate);
}
@Override
@@ -75,7 +79,12 @@ public class StackingTask extends BukkitRunnable {
for (SWorld sWorld : loadedWorlds) {
List entities;
// Get the loaded entities from the current world and reverse them.
- entities = sWorld.getLivingEntities();
+ try {
+ entities = getLivingEntitiesSync(sWorld).get();
+ } catch (ExecutionException | InterruptedException ex) {
+ ex.printStackTrace();
+ continue;
+ }
//Filter non-stackable entities to improve performance on main thread
entities.removeIf(this::isEntityNotStackable);
@@ -87,28 +96,35 @@ public class StackingTask extends BukkitRunnable {
entities.removeIf(entity1 -> entity1.getUniqueId().equals(entity.getUniqueId()));
}
- // Loop through the entities.
- for (LivingEntity entity : entities) {
- // Make sure our entity has not already been processed.
- // Skip it if it has been.
- if (processed.contains(entity.getUniqueId())) continue;
+ Bukkit.getScheduler().runTask(plugin, () -> {
+ // Loop through the entities.
+ for (LivingEntity entity : entities) {
+ // Make sure our entity has not already been processed.
+ // Skip it if it has been.
+ if (processed.contains(entity.getUniqueId())) continue;
- // Get entity location to pass around as its faster this way.
- Location location = entity.getLocation();
+ // Get entity location to pass around as its faster this way.
+ Location location = entity.getLocation();
- // Process the entity.
- processEntity(entity, location, entities);
- }
+ // Process the entity.
+ processEntity(entity, location, entities);
+ }
+ });
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// Make sure we clear the processed list.
this.processed.clear();
-
}
}
+ private Future> getLivingEntitiesSync(SWorld sWorld) {
+ CompletableFuture> future = new CompletableFuture<>();
+ Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, () -> future.complete(sWorld.getLivingEntities()));
+ return future;
+ }
+
public boolean isWorldDisabled(World world) {
return disabledWorlds.stream().anyMatch(worldStr -> world.getName().equalsIgnoreCase(worldStr));
}
diff --git a/pom.xml b/pom.xml
index e03a41d..1cef2c9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
com.craftaro
UltimateStacker-Parent
pom
- 3.1.2
+ 3.1.3
UltimateStacker-API