Merge branch 'development'

This commit is contained in:
Brianna O'Keefe 2024-03-12 15:48:11 -05:00
commit d5b16af85f
4 changed files with 35 additions and 19 deletions

View File

@ -7,7 +7,7 @@
<parent>
<groupId>com.craftaro</groupId>
<artifactId>UltimateStacker-Parent</artifactId>
<version>3.1.2</version>
<version>3.1.3</version>
</parent>
<artifactId>UltimateStacker-API</artifactId>
<version>1.0.0-SNAPSHOT</version>

View File

@ -7,7 +7,7 @@
<parent>
<groupId>com.craftaro</groupId>
<artifactId>UltimateStacker-Parent</artifactId>
<version>3.1.2</version>
<version>3.1.3</version>
</parent>
<artifactId>UltimateStacker-Plugin</artifactId>

View File

@ -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<LivingEntity> 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<List<LivingEntity>> getLivingEntitiesSync(SWorld sWorld) {
CompletableFuture<List<LivingEntity>> 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));
}

View File

@ -7,7 +7,7 @@
<groupId>com.craftaro</groupId>
<artifactId>UltimateStacker-Parent</artifactId>
<packaging>pom</packaging>
<version>3.1.2</version>
<version>3.1.3</version>
<modules>
<module>UltimateStacker-API</module>