diff --git a/common/src/main/java/com/dfsek/terra/config/builder/GeneratorBuilder.java b/common/src/main/java/com/dfsek/terra/config/builder/GeneratorBuilder.java index c3244bf4d..4b56dd61c 100644 --- a/common/src/main/java/com/dfsek/terra/config/builder/GeneratorBuilder.java +++ b/common/src/main/java/com/dfsek/terra/config/builder/GeneratorBuilder.java @@ -5,11 +5,12 @@ import com.dfsek.terra.generation.config.NoiseBuilder; import com.dfsek.terra.generation.config.WorldGenerator; import parsii.eval.Scope; +import java.util.Collections; import java.util.HashMap; import java.util.Map; public class GeneratorBuilder { - private final Map gens = new HashMap<>(); + private final Map gens = Collections.synchronizedMap(new HashMap<>()); private String noiseEquation; @@ -35,7 +36,9 @@ public class GeneratorBuilder { public WorldGenerator build(long seed) { - return gens.computeIfAbsent(seed, k -> new WorldGenerator(seed, noiseEquation, elevationEquation, varScope, noiseBuilderMap, palettes, slantPalettes, interpolateElevation, noise2d, base, biomeNoise.build((int) seed))); + synchronized(gens) { + return gens.computeIfAbsent(seed, k -> new WorldGenerator(seed, noiseEquation, elevationEquation, varScope, noiseBuilderMap, palettes, slantPalettes, interpolateElevation, noise2d, base, biomeNoise.build((int) seed))); + } } public void setBiomeNoise(NoiseBuilder biomeNoise) { diff --git a/common/src/main/java/com/dfsek/terra/generation/math/SamplerCache.java b/common/src/main/java/com/dfsek/terra/generation/math/SamplerCache.java index 10d72e027..06964ca04 100644 --- a/common/src/main/java/com/dfsek/terra/generation/math/SamplerCache.java +++ b/common/src/main/java/com/dfsek/terra/generation/math/SamplerCache.java @@ -10,6 +10,7 @@ import com.google.common.cache.LoadingCache; import net.jafama.FastMath; import org.jetbrains.annotations.NotNull; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -18,16 +19,20 @@ public class SamplerCache { private final TerraPlugin main; public SamplerCache(TerraPlugin main) { - containerMap = new HashMap<>(); + containerMap = Collections.synchronizedMap(new HashMap<>()); this.main = main; } public Sampler get(World world, int x, int z) { - return containerMap.computeIfAbsent(world.getSeed(), seed -> new Container(world)).get(x, z); + synchronized(containerMap) { + return containerMap.computeIfAbsent(world.getSeed(), seed -> new Container(world)).get(x, z); + } } public Sampler getChunk(World world, int chunkX, int chunkZ) { - return containerMap.computeIfAbsent(world.getSeed(), seed -> new Container(world)).getChunk(chunkX, chunkZ); + synchronized(containerMap) { + return containerMap.computeIfAbsent(world.getSeed(), seed -> new Container(world)).getChunk(chunkX, chunkZ); + } } public void clear() {