From 51e787c57e4f686dee493a9fa5ad7158e62c00f6 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 14 Feb 2022 19:30:43 +0300 Subject: [PATCH] Hexmap chunk managment enhancements --- gradle.properties | 2 +- .../world/generator/map/hex/HexBiomeMap.java | 28 ++++++------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/gradle.properties b/gradle.properties index 2bb2cfae..c02fc0cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ loader_version= 0.12.12 fabric_version = 0.46.2+1.18 # Mod Properties -mod_version = 1.3.1 +mod_version = 1.3.2 maven_group = ru.bclib archives_base_name = bclib diff --git a/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeMap.java b/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeMap.java index 6913839d..85331593 100644 --- a/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeMap.java +++ b/src/main/java/ru/bclib/world/generator/map/hex/HexBiomeMap.java @@ -1,5 +1,6 @@ package ru.bclib.world.generator.map.hex; +import net.minecraft.world.level.ChunkPos; import ru.bclib.interfaces.BiomeChunk; import ru.bclib.interfaces.BiomeMap; import ru.bclib.interfaces.TriConsumer; @@ -18,12 +19,10 @@ public class HexBiomeMap implements BiomeMap { private static final float COEF_HALF = COEF * 0.5F; private static final float SIN = (float) Math.sin(0.4); private static final float COS = (float) Math.cos(0.4); - private static final Random RANDOM = new Random(); private static final float[] EDGE_CIRCLE_X; private static final float[] EDGE_CIRCLE_Z; - private final HashMap chunks = new HashMap<>(); - private final Point selector = new Point(); + private final HashMap chunks = new HashMap<>(); private final BiomePicker picker; private final OpenSimplexNoise[] noises = new OpenSimplexNoise[2]; @@ -75,26 +74,15 @@ public BCLBiome getBiome(double x, double y, double z) { @Override public BiomeChunk getChunk(int cx, int cz, boolean update) { - HexBiomeChunk chunk; - - synchronized (selector) { - selector.setLocation(cx, cz); - chunk = chunks.get(selector); - } - - if (chunk == null) { - synchronized (RANDOM) { - RANDOM.setSeed(MHelper.getSeed(seed, cx, cz)); - chunk = new HexBiomeChunk(RANDOM, picker); - } - chunks.put(new Point(cx, cz), chunk); - + ChunkPos pos = new ChunkPos(cx, cz); + return chunks.computeIfAbsent(pos, i -> { + Random random = new Random(MHelper.getSeed(seed, cx, cz)); + HexBiomeChunk chunk = new HexBiomeChunk(random, picker); if (update && processor != null) { processor.accept(cx, cz, chunk.getSide()); } - } - - return chunk; + return chunk; + }); } @Override