This commit is contained in:
Daniel Mills
2020-09-09 08:38:12 -04:00
parent 265807941a
commit 9bdcd6aace
7 changed files with 101 additions and 40 deletions

View File

@@ -56,6 +56,7 @@ public abstract class ParallaxTerrainProvider extends TopographicTerrainProvider
setSliverCache(new KMap<>());
setSliverBuffer(sliverBuffer);
setMasterLock(new MasterLock());
getMasterLock().disable();
}
public void onInit(RNG rng)
@@ -157,7 +158,7 @@ public abstract class ParallaxTerrainProvider extends TopographicTerrainProvider
return new AtomicSliverMap();
}
@Override
public List<BlockPopulator> getPopulators()
{

View File

@@ -8,6 +8,7 @@ import java.io.IOException;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.scaffold.TerrainTarget;
import com.volmit.iris.util.ChunkPosition;
import com.volmit.iris.util.IrisLock;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.M;
@@ -21,6 +22,7 @@ public class AtomicWorldData
private KMap<ChunkPosition, Long> lastChunk;
private KList<ChunkPosition> unloadRegions;
private KList<ChunkPosition> unloadChunks;
private IrisLock lock = new IrisLock("ULLock");
private long last = M.ms();
public AtomicWorldData(TerrainTarget world)
@@ -263,8 +265,10 @@ public class AtomicWorldData
public void clean(int j)
{
lock.lock();
if(M.ms() - last < getUnloadBatchSpeed())
{
lock.unlock();
return;
}
@@ -331,6 +335,7 @@ public class AtomicWorldData
}
unloadChunks.clear();
lock.unlock();
}
private int getUnloadBatchSize()

View File

@@ -7,9 +7,11 @@ public class MasterLock
{
private KMap<String, IrisLock> locks;
private IrisLock lock;
private boolean enabled;
public MasterLock()
{
enabled = true;
locks = new KMap<>();
lock = new IrisLock("MasterLock");
}
@@ -19,8 +21,18 @@ public class MasterLock
locks.clear();
}
public void disable()
{
enabled = false;
}
public void lock(String key)
{
if(!enabled)
{
return;
}
lock.lock();
if(!locks.containsKey(key))
{
@@ -34,6 +46,11 @@ public class MasterLock
public void unlock(String key)
{
if(!enabled)
{
return;
}
lock.lock();
if(!locks.containsKey(key))
{

View File

@@ -2,6 +2,7 @@ package com.volmit.iris.gen.provisions;
import java.util.List;
import java.util.Random;
import java.util.function.Consumer;
import org.bukkit.Location;
import org.bukkit.World;
@@ -13,7 +14,6 @@ import com.volmit.iris.gen.scaffold.Provisioned;
import com.volmit.iris.gen.scaffold.TerrainChunk;
import com.volmit.iris.gen.scaffold.TerrainProvider;
import com.volmit.iris.util.ChunkPosition;
import com.volmit.iris.util.J;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.RNG;
@@ -41,7 +41,7 @@ public class ProvisionBukkit extends ChunkGenerator implements Provisioned
world.unloadChunkRequest(x, z);
}
public void generateAsync(World world, int x, int z)
public void generateAsync(World world, int x, int z, Consumer<Boolean> onDone)
{
ChunkPosition c = new ChunkPosition(x, z);
@@ -50,7 +50,12 @@ public class ProvisionBukkit extends ChunkGenerator implements Provisioned
TerrainChunk snapshot = TerrainChunk.create(world);
snapshot.setRaw(generateChunkData(world, getRNG(world, x, z), x, z, snapshot));
precache.put(c, snapshot);
J.s(() -> generate(world, x, z));
onDone.accept(true);
}
else
{
onDone.accept(false);
}
}
@@ -70,7 +75,7 @@ public class ProvisionBukkit extends ChunkGenerator implements Provisioned
{
TerrainChunk snapshot = precache.remove(c);
snapshot.inject(biome);
return snapshot;
return snapshot.getRaw();
}
}