diff --git a/src/main/java/ca/recrown/islandsurvivalcraft/Utilities.java b/src/main/java/ca/recrown/islandsurvivalcraft/Utilities.java index 5436d3f..c542e32 100644 --- a/src/main/java/ca/recrown/islandsurvivalcraft/Utilities.java +++ b/src/main/java/ca/recrown/islandsurvivalcraft/Utilities.java @@ -3,11 +3,15 @@ package ca.recrown.islandsurvivalcraft; import java.util.ArrayList; import java.util.HashMap; import java.util.Map.Entry; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; import ca.recrown.islandsurvivalcraft.datatypes.Point2; public class Utilities { public final static int CHUNK_SIZE = 16; + public final static ExecutorService ISC_EXECUTOR = Executors.newFixedThreadPool(2, createThreadFactory()); public static HashMap> invertHashMap(HashMap hashMap) { HashMap> res = new HashMap<>(); @@ -71,4 +75,14 @@ public class Utilities { public static Point2 worldToLocalChunkCoordinates(Point2 worldCoordinates) { return worldToLocalChunkCoordinates(worldCoordinates.x, worldCoordinates.y); } + + public static ThreadFactory createThreadFactory() { + return new ThreadFactory(){ + @Override + public Thread newThread(Runnable r) { + Thread thread = new Thread(r, "ISC-worker"); + return thread; + } + }; + } } \ No newline at end of file diff --git a/src/main/java/ca/recrown/islandsurvivalcraft/world/generation/IslandWorldChunkGenerator.java b/src/main/java/ca/recrown/islandsurvivalcraft/world/generation/IslandWorldChunkGenerator.java index 86107b9..9fed7f1 100644 --- a/src/main/java/ca/recrown/islandsurvivalcraft/world/generation/IslandWorldChunkGenerator.java +++ b/src/main/java/ca/recrown/islandsurvivalcraft/world/generation/IslandWorldChunkGenerator.java @@ -28,7 +28,7 @@ public class IslandWorldChunkGenerator extends ChunkGenerator implements Listene private final Cache blockValueCache = new Cache<>(102400); private final Cache biomeCache = new Cache<>(102400); private final Cache chunkExistenceCache = new Cache<>(16384); - private final ExecutorService executor = Executors.newFixedThreadPool(2); + private final ExecutorService executor = Utilities.ISC_EXECUTOR; private volatile World currentWorld; @Override @@ -43,7 +43,7 @@ public class IslandWorldChunkGenerator extends ChunkGenerator implements Listene BiomeGenerator biomeGenerator = new UniBiomeIslandGenerator(); int maxHeight = world.getMaxHeight(); - LinkedList> biomeColumns = new LinkedList<>(); + LinkedList> tasks = new LinkedList<>(); ChunkData chunkData = createChunkData(world); Biome[][] biomes = new Biome[Utilities.CHUNK_SIZE][Utilities.CHUNK_SIZE]; @@ -57,23 +57,23 @@ public class IslandWorldChunkGenerator extends ChunkGenerator implements Listene final int biomeX = localX; final int biomeZ = localZ; - biomeColumns.add(executor.submit(() -> { + tasks.add(executor.submit(() -> { for (int y = 0; y < maxHeight; y++) { biomeGrid.setBiome(biomeX, y, biomeZ, biomes[biomeX][biomeZ]); } return true; })); - int worldX = 16 * chunkX + localX; - int worldZ = 16 * chunkZ + localZ; + final int worldX = 16 * chunkX + localX; + final int worldZ = 16 * chunkZ + localZ; int height = heightShader.getAltitude(worldX, worldZ, biomes[localX][localZ]); chunkData.setRegion(localX, 1, localZ, localX + 1, height, localZ + 1, Material.DIAMOND_BLOCK); } } chunkData.setRegion(0, 0, 0, 16, 1, 16, Material.BEDROCK); - while (!biomeColumns.isEmpty()) { + while (!tasks.isEmpty()) { try { - biomeColumns.poll().get(); + tasks.poll().get(); } catch (ExecutionException | InterruptedException e) { e.printStackTrace(); throw new IllegalStateException(e.getCause().getMessage()); @@ -81,7 +81,7 @@ public class IslandWorldChunkGenerator extends ChunkGenerator implements Listene } return chunkData; } - + @EventHandler(priority = EventPriority.MONITOR) public void onChunkLoaded(ChunkLoadEvent event) { if (event.isNewChunk()) {