From 19dca8c5bb98c91608f755ed82362ba8933e8eb8 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Fri, 16 Jul 2021 00:50:58 -0400 Subject: [PATCH] Fix gen crash --- .../engine/EngineCompositeGenerator.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java b/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java index dce11a2c8..33b6caaab 100644 --- a/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java +++ b/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java @@ -55,9 +55,10 @@ import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; public class EngineCompositeGenerator extends ChunkGenerator implements IrisAccess { - private EngineCompound compound = null; + private final AtomicReference compound = new AtomicReference<>(); private final AtomicBoolean initialized; private final String dimensionQuery; private final boolean production; @@ -91,7 +92,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce @Override public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { if (compound != null) { - for (BlockPopulator i : compound.getPopulators()) { + for (BlockPopulator i : compound.get().getPopulators()) { i.populate(world, random, chunk); } } @@ -107,7 +108,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce try { for (Player i : getTarget().getWorld().getPlayers()) { new MortarSender(i, Iris.instance.getTag()).sendMessage("Dimension Hotloaded"); - i.playSound(i.getLocation(), Sound.BLOCK_BEACON_ACTIVATE, 1f, 1.25f); + i.playSound(i.getLocation(), Sound.BLOCK_BEACON_POWER_SELECT, 1f, 1.25f); } } catch (Throwable e) {Iris.reportError(e); @@ -282,7 +283,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce public synchronized void initialize(World world) { if (!(world instanceof FakeWorld) && fake.get() && this.compound != null) { fake.set(false); - this.compound.updateWorld(world); + this.compound.get().updateWorld(world); getTarget().updateWorld(world); placeStrongholds(world); @@ -301,10 +302,10 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce initialized.set(true); IrisDimension dim = getDimension(world); IrisDataManager data = production ? new IrisDataManager(getDataFolder(world)) : dim.getLoader().copy(); - compound = new IrisEngineCompound(world, dim, data, Iris.getThreadCount()); - compound.setStudio(!production); + compound.set(new IrisEngineCompound(world, dim, data, Iris.getThreadCount())); + compound.get().setStudio(!production); populators.clear(); - populators.addAll(compound.getPopulators()); + populators.addAll(compound.get().getPopulators()); hotloader = new ReactiveFolder(data.getDataFolder(), (a, c, d) -> hotload()); dim.installDataPack(() -> data, Iris.instance.getDatapacksFolder()); } catch (Throwable e) {Iris.reportError(e); @@ -438,9 +439,9 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce @NotNull @Override public ChunkData generateChunkData(@NotNull World world, @NotNull Random ignored, int x, int z, @NotNull BiomeGrid biome) { - long key = Cache.key(x, z); TerrainChunk tc = TerrainChunk.create(world, biome); generateChunkRawData(world, x, z, tc).run(); + generated++; return tc.getRaw(); } @@ -608,7 +609,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce } PregeneratedData data = new PregeneratedData(getComposite().getHeight() - 1); - compound.generate(x * 16, z * 16, data.getBlocks(), data.getPost(), data.getBiomes()); + compound.get().generate(x * 16, z * 16, data.getBlocks(), data.getPost(), data.getBiomes()); synchronized (chunkCache) { chunkCache.put(Cache.key(x, z), data); } @@ -629,7 +630,6 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce synchronized (chunkCache) { long g = Cache.key(x, z); if (chunkCache.containsKey(g)) { - generated++; return chunkCache.remove(g).inject(tc); } } @@ -637,8 +637,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce Hunk blocks = Hunk.view((ChunkData) tc); Hunk biomes = Hunk.view((BiomeGrid) tc); Hunk post = Hunk.newAtomicHunk(biomes.getWidth(), biomes.getHeight(), biomes.getDepth()); - compound.generate(x * 16, z * 16, blocks, post, biomes); - generated++; + compound.get().generate(x * 16, z * 16, blocks, post, biomes); return () -> blocks.insertSoftly(0, 0, 0, post, (b) -> b == null || B.isAirOrFluid(b)); } @@ -698,7 +697,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce } public EngineCompound getComposite() { - return compound; + return compound.get(); } @Override @@ -822,14 +821,14 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce @Override public void setBlock(int x, int y, int z, BlockData blockData) { if (!getBlockData(x, y, z).matches(blockData)) { - Iris.edit.set(compound.getWorld(), x + xx, y, z + zz, blockData); + Iris.edit.set(compound.get().getWorld(), x + xx, y, z + zz, blockData); } } @NotNull @Override public BlockData getBlockData(int x, int y, int z) { - return Iris.edit.get(compound.getWorld(), x + xx, y, z + zz); + return Iris.edit.get(compound.get().getWorld(), x + xx, y, z + zz); } @Override