mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-06 15:56:27 +00:00
Fix
This commit is contained in:
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user