mirror of
https://github.com/songoda/UltimateStacker.git
synced 2024-09-27 14:12:59 +02:00
Improve stacking task speed
This commit is contained in:
parent
732062fb61
commit
bc25500bce
@ -14,6 +14,7 @@ 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;
|
||||
@ -78,8 +79,6 @@ public class StackingTask extends TimerTask {
|
||||
private final ConfigurationSection configurationSection = UltimateStacker.getInstance().getMobFile();
|
||||
private final List<UUID> processed = new ArrayList<>();
|
||||
|
||||
private final Map<CachedChunk, Entity[]> cachedChunks = new HashMap<>();
|
||||
|
||||
private final Map<EntityType, Integer> entityStackSizes = new HashMap<>();
|
||||
private final int maxEntityStackSize = Settings.MAX_STACK_ENTITIES.getInt(),
|
||||
minEntityStackSize = Settings.MIN_STACK_ENTITIES.getInt(),
|
||||
@ -134,6 +133,7 @@ public class StackingTask extends TimerTask {
|
||||
}
|
||||
Collections.reverse(entities);
|
||||
|
||||
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||
// Loop through the entities.
|
||||
for (LivingEntity entity : entities) {
|
||||
// Make sure our entity has not already been processed.
|
||||
@ -151,10 +151,10 @@ public class StackingTask extends TimerTask {
|
||||
// Process the entity.
|
||||
this.processEntity(entity, sWorld, location);
|
||||
}
|
||||
});
|
||||
}
|
||||
// Clear caches in preparation for the next run.
|
||||
this.processed.clear();
|
||||
this.cachedChunks.clear();
|
||||
} catch (Exception ignored) {}
|
||||
}
|
||||
|
||||
@ -167,8 +167,7 @@ public class StackingTask extends TimerTask {
|
||||
|
||||
private Future<Entity[]> getEntitiesInChunkSync(CachedChunk cachedChunk) {
|
||||
CompletableFuture<Entity[]> future = new CompletableFuture<>();
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, () -> future.complete(cachedChunk.getEntities()));
|
||||
|
||||
Bukkit.getScheduler().runTask(this.plugin, () -> future.complete(cachedChunk.getEntities()));
|
||||
return future;
|
||||
}
|
||||
|
||||
@ -255,7 +254,8 @@ public class StackingTask extends TimerTask {
|
||||
|
||||
// Get similar entities around our entity and make sure those entities are both compatible and stackable.
|
||||
List<LivingEntity> stackableFriends = new LinkedList<>();
|
||||
for (LivingEntity entity : getSimilarEntitiesAroundEntity(baseEntity, sWorld, location)) {
|
||||
List<LivingEntity> list = getSimilarEntitiesAroundEntity(baseEntity, sWorld, location);
|
||||
for (LivingEntity entity : list) {
|
||||
// Check to see if entity is not stackable.
|
||||
if (!isEntityStackable(entity))
|
||||
continue;
|
||||
@ -358,7 +358,7 @@ public class StackingTask extends TimerTask {
|
||||
try {
|
||||
Set<CachedChunk> chunks = getNearbyChunks(new SWorld(entity.getWorld()), entity.getLocation(), radius, singleChunk);
|
||||
for (CachedChunk chunk : chunks) {
|
||||
Entity[] entityList = getEntitiesInChunkSync(chunk).get();
|
||||
Entity[] entityList = chunk.getEntities();
|
||||
for (Entity e : entityList) {
|
||||
if (!processed.contains(e.getUniqueId()) && e.getType() == entity.getType() && e instanceof LivingEntity && e.isValid() && e.getLocation().distance(entity.getLocation()) <= radius) {
|
||||
entities.add((LivingEntity) e);
|
||||
@ -373,6 +373,7 @@ public class StackingTask extends TimerTask {
|
||||
}
|
||||
|
||||
public List<LivingEntity> getSimilarEntitiesAroundEntity(LivingEntity initialEntity, SWorld sWorld, Location location) {
|
||||
try {
|
||||
// Create a list of all entities around the initial entity of the same type.
|
||||
List<LivingEntity> entityList = new LinkedList<>(getFriendlyStacksNearby(initialEntity, searchRadius, stackWholeChunk));
|
||||
|
||||
@ -623,8 +624,11 @@ public class StackingTask extends TimerTask {
|
||||
if (initialEntity.hasMetadata("breedCooldown")) {
|
||||
entityList.removeIf(entity -> !entity.hasMetadata("breedCooldown"));
|
||||
}
|
||||
|
||||
return entityList;
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
public boolean isEquipped(LivingEntity initialEntity) {
|
||||
|
@ -49,7 +49,7 @@ public class CachedChunk {
|
||||
return new Entity[0];
|
||||
}
|
||||
Chunk chunk = getChunk();
|
||||
return chunk == null ? new Entity[0] : sWorld.getEntitiesFromChunk(x, z);
|
||||
return chunk == null ? new Entity[0] : chunk.getEntities();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user