mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-14 03:36:03 +00:00
noriver
This commit is contained in:
@@ -5,12 +5,17 @@ import java.util.Random;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockDropItemEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
@@ -34,9 +39,11 @@ import com.volmit.iris.object.IrisObject;
|
||||
import com.volmit.iris.object.IrisRegion;
|
||||
import com.volmit.iris.object.IrisStructure;
|
||||
import com.volmit.iris.util.B;
|
||||
import com.volmit.iris.util.BlockPosition;
|
||||
import com.volmit.iris.util.C;
|
||||
import com.volmit.iris.util.ChronoLatch;
|
||||
import com.volmit.iris.util.J;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.M;
|
||||
import com.volmit.iris.util.RNG;
|
||||
|
||||
@@ -47,6 +54,8 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public abstract class ContextualChunkGenerator extends ChunkGenerator implements Listener
|
||||
{
|
||||
private KList<BlockPosition> noLoot;
|
||||
private BlockPosition allowLoot;
|
||||
private AtomicMulticache cache;
|
||||
private IrisDataManager data;
|
||||
protected boolean failing;
|
||||
@@ -79,10 +88,12 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
|
||||
ticks = 0;
|
||||
task = -1;
|
||||
initialized = false;
|
||||
allowLoot = new BlockPosition(0, 0, 0);
|
||||
failing = false;
|
||||
pregenDone = false;
|
||||
dimCache = new AtomicCache<>();
|
||||
dev = false;
|
||||
noLoot = new KList<>(1285);
|
||||
}
|
||||
|
||||
protected abstract void onGenerate(RNG masterRandom, int x, int z, ChunkData data, BiomeGrid grid);
|
||||
@@ -174,6 +185,14 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
|
||||
}
|
||||
|
||||
checkHotload();
|
||||
|
||||
if(noLoot.size() > 1024)
|
||||
{
|
||||
for(int i = 0; i < 64; i++)
|
||||
{
|
||||
noLoot.remove(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,7 +205,59 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
|
||||
onTick(ticks++);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void on(BlockBreakEvent e)
|
||||
{
|
||||
if(!e.getBlock().getWorld().equals(getWorld()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BlockPosition bp = new BlockPosition(e.getBlock().getX(), e.getBlock().getY(), e.getBlock().getZ());
|
||||
|
||||
if(!noLoot.contains(bp))
|
||||
{
|
||||
noLoot.add(bp);
|
||||
|
||||
if(e.isDropItems() && e.getPlayer().getGameMode().equals(GameMode.SURVIVAL))
|
||||
{
|
||||
allowLoot = new BlockPosition(e.getBlock().getX(), e.getBlock().getY(), e.getBlock().getZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void on(BlockPlaceEvent e)
|
||||
{
|
||||
if(!e.getBlock().getWorld().equals(getWorld()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
noLoot.addIfMissing(new BlockPosition(e.getBlock().getX(), e.getBlock().getY(), e.getBlock().getZ()));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void on(BlockDropItemEvent e)
|
||||
{
|
||||
if(!e.getBlock().getWorld().equals(getWorld()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BlockPosition bp = new BlockPosition(e.getBlock().getX(), e.getBlock().getY(), e.getBlock().getZ());
|
||||
|
||||
if(noLoot.contains(bp) && !allowLoot.equals(bp))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
handleDrops(e);
|
||||
}
|
||||
|
||||
protected abstract void handleDrops(BlockDropItemEvent e);
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void on(PlayerTeleportEvent e)
|
||||
{
|
||||
if(e.getFrom().getWorld().equals(world) && !e.getTo().getWorld().equals(world))
|
||||
@@ -202,7 +273,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void on(PlayerQuitEvent e)
|
||||
{
|
||||
if(e.getPlayer().getWorld().equals(world))
|
||||
@@ -212,7 +283,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void on(PlayerJoinEvent e)
|
||||
{
|
||||
if(e.getPlayer().getWorld().equals(world))
|
||||
@@ -222,7 +293,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void on(ChunkLoadEvent e)
|
||||
{
|
||||
if(e.getWorld().equals(world))
|
||||
@@ -232,7 +303,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void on(ChunkUnloadEvent e)
|
||||
{
|
||||
if(e.getWorld().equals(world))
|
||||
@@ -242,7 +313,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void on(WorldUnloadEvent e)
|
||||
{
|
||||
if(world != null && e.getWorld().equals(world))
|
||||
@@ -253,6 +324,8 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
|
||||
|
||||
public void close()
|
||||
{
|
||||
noLoot.clear();
|
||||
noLoot.trimToSize();
|
||||
HandlerList.unregisterAll(this);
|
||||
Bukkit.getScheduler().cancelTask(getTask());
|
||||
onClose();
|
||||
|
||||
@@ -9,19 +9,25 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.block.BlockDropItemEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.IrisContext;
|
||||
import com.volmit.iris.IrisSettings;
|
||||
import com.volmit.iris.gen.atomics.AtomicRegionData;
|
||||
import com.volmit.iris.gui.Renderer;
|
||||
import com.volmit.iris.noise.CNG;
|
||||
import com.volmit.iris.object.IrisBiome;
|
||||
import com.volmit.iris.object.IrisBlockDrops;
|
||||
import com.volmit.iris.object.IrisDimension;
|
||||
import com.volmit.iris.object.IrisEffect;
|
||||
import com.volmit.iris.object.IrisRegion;
|
||||
import com.volmit.iris.util.BiomeResult;
|
||||
import com.volmit.iris.util.Form;
|
||||
import com.volmit.iris.util.Function2;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.KMap;
|
||||
import com.volmit.iris.util.PrecisionStopwatch;
|
||||
import com.volmit.iris.util.RNG;
|
||||
@@ -254,7 +260,7 @@ public class IrisChunkGenerator extends PostBlockChunkGenerator implements IrisC
|
||||
return getDimension().isVanillaStructures();
|
||||
}
|
||||
|
||||
public Function2<Double, Double, Color> createRenderer()
|
||||
public Renderer createRenderer()
|
||||
{
|
||||
return (x, z) -> render(x, z);
|
||||
}
|
||||
@@ -267,22 +273,20 @@ public class IrisChunkGenerator extends PostBlockChunkGenerator implements IrisC
|
||||
IrisRegion region = sampleRegion(ix, iz);
|
||||
IrisBiome biome = sampleTrueBiome(ix, iz, height).getBiome();
|
||||
|
||||
if(biome.getCachedColor() != null)
|
||||
{
|
||||
return biome.getCachedColor();
|
||||
}
|
||||
|
||||
float shift = (biome.hashCode() % 32) / 32f / 14f;
|
||||
float shift2 = (region.hashCode() % 9) / 9f / 14f;
|
||||
shift -= shift2;
|
||||
float sat = 0;
|
||||
float h = (biome.isLand() ? 0.233f : 0.644f) - shift;
|
||||
float s = 0.25f + shift + sat;
|
||||
float b = (float) (Math.max(0, Math.min(height + getFluidHeight(), 255)) / 255);
|
||||
|
||||
if(hr.getLoadKey().equals(region.getLoadKey()))
|
||||
{
|
||||
sat += 0.2;
|
||||
}
|
||||
|
||||
if(hb.getLoadKey().equals(biome.getLoadKey()))
|
||||
{
|
||||
sat += 0.3;
|
||||
}
|
||||
|
||||
Color c = Color.getHSBColor((biome.isLand() ? 0.233f : 0.644f) - shift, 0.25f + shift + sat, (float) (Math.max(0, Math.min(height + getFluidHeight(), 255)) / 255));
|
||||
Color c = Color.getHSBColor(h, s, b);
|
||||
|
||||
return c;
|
||||
|
||||
@@ -290,7 +294,6 @@ public class IrisChunkGenerator extends PostBlockChunkGenerator implements IrisC
|
||||
|
||||
public String textFor(double x, double z)
|
||||
{
|
||||
|
||||
int ix = (int) x;
|
||||
int iz = (int) z;
|
||||
double height = getTerrainHeight(ix, iz);
|
||||
@@ -312,4 +315,119 @@ public class IrisChunkGenerator extends PostBlockChunkGenerator implements IrisC
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleDrops(BlockDropItemEvent e)
|
||||
{
|
||||
int x = e.getBlock().getX();
|
||||
int y = e.getBlock().getY();
|
||||
int z = e.getBlock().getZ();
|
||||
IrisDimension dim = getDimension();
|
||||
IrisRegion reg = sampleRegion(x, z);
|
||||
IrisBiome bio = sampleTrueBiome(x, z).getBiome();
|
||||
IrisBiome cbio = y < getFluidHeight() ? sampleTrueBiome(x, y, z).getBiome() : null;
|
||||
|
||||
if(cbio != null && bio.equals(cbio))
|
||||
{
|
||||
cbio = null;
|
||||
}
|
||||
|
||||
if(dim.getBlockDrops().isEmpty() && reg.getBlockDrops().isEmpty() && bio.getBlockDrops().isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BlockData data = e.getBlockState().getBlockData();
|
||||
KList<ItemStack> drops = new KList<>();
|
||||
boolean skipParents = false;
|
||||
|
||||
if(!skipParents && cbio != null)
|
||||
{
|
||||
for(IrisBlockDrops i : cbio.getBlockDrops())
|
||||
{
|
||||
if(i.shouldDropFor(data))
|
||||
{
|
||||
if(!skipParents && i.isSkipParents())
|
||||
{
|
||||
skipParents = true;
|
||||
}
|
||||
|
||||
if(i.isReplaceVanillaDrops())
|
||||
{
|
||||
e.getItems().clear();
|
||||
}
|
||||
|
||||
i.fillDrops(isDev(), drops);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!skipParents)
|
||||
{
|
||||
for(IrisBlockDrops i : bio.getBlockDrops())
|
||||
{
|
||||
if(i.shouldDropFor(data))
|
||||
{
|
||||
if(!skipParents && i.isSkipParents())
|
||||
{
|
||||
skipParents = true;
|
||||
}
|
||||
|
||||
if(i.isReplaceVanillaDrops())
|
||||
{
|
||||
e.getItems().clear();
|
||||
}
|
||||
|
||||
i.fillDrops(isDev(), drops);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!skipParents)
|
||||
{
|
||||
for(IrisBlockDrops i : reg.getBlockDrops())
|
||||
{
|
||||
if(i.shouldDropFor(data))
|
||||
{
|
||||
if(!skipParents && i.isSkipParents())
|
||||
{
|
||||
skipParents = true;
|
||||
}
|
||||
|
||||
if(i.isReplaceVanillaDrops())
|
||||
{
|
||||
e.getItems().clear();
|
||||
}
|
||||
|
||||
i.fillDrops(isDev(), drops);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!skipParents)
|
||||
{
|
||||
for(IrisBlockDrops i : dim.getBlockDrops())
|
||||
{
|
||||
if(i.shouldDropFor(data))
|
||||
{
|
||||
if(i.isReplaceVanillaDrops())
|
||||
{
|
||||
e.getItems().clear();
|
||||
}
|
||||
|
||||
i.fillDrops(isDev(), drops);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(drops.isNotEmpty())
|
||||
{
|
||||
Location l = e.getBlock().getLocation();
|
||||
|
||||
for(ItemStack i : drops)
|
||||
{
|
||||
e.getBlock().getWorld().dropItemNaturally(l, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator implements IObjectPlacer
|
||||
{
|
||||
private short cacheID = 0;
|
||||
protected KMap<ChunkPosition, AtomicSliver> sliverCache;
|
||||
protected AtomicWorldData parallaxMap;
|
||||
private MasterLock masterLock;
|
||||
@@ -93,6 +94,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
|
||||
public void onHotload()
|
||||
{
|
||||
super.onHotload();
|
||||
cacheID = RNG.r.simax();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -66,7 +66,12 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
|
||||
{
|
||||
super.onInit(world, rng);
|
||||
loadGenerators();
|
||||
glBiome = new GenLayerBiome(this, masterRandom.nextParallelRNG(1));
|
||||
buildGenLayers(masterRandom);
|
||||
}
|
||||
|
||||
private void buildGenLayers(RNG rng)
|
||||
{
|
||||
glBiome = new GenLayerBiome(this, rng.nextParallelRNG(24671));
|
||||
masterFracture = CNG.signature(rng.nextParallelRNG(13)).scale(0.12);
|
||||
rockRandom = getMasterRandom().nextParallelRNG(2858678);
|
||||
glCave = new GenLayerCave(this, rng.nextParallelRNG(238948));
|
||||
@@ -638,7 +643,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
|
||||
{
|
||||
super.onHotload();
|
||||
loadGenerators();
|
||||
glBiome = new GenLayerBiome(this, masterRandom.nextParallelRNG(1));
|
||||
buildGenLayers(masterRandom);
|
||||
}
|
||||
|
||||
public void registerGenerator(IrisGenerator g, IrisDimension dim)
|
||||
@@ -661,7 +666,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
|
||||
return generators;
|
||||
}
|
||||
|
||||
protected double getBiomeHeight(double rrx, double rrz)
|
||||
protected double getRawBiomeHeight(double rrx, double rrz)
|
||||
{
|
||||
double rx = rrx;
|
||||
double rz = rrz;
|
||||
@@ -675,6 +680,13 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
|
||||
return h;
|
||||
}
|
||||
|
||||
protected double getBiomeHeight(double rrx, double rrz)
|
||||
{
|
||||
double h = getRawBiomeHeight(rrx, rrz);
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
protected double interpolateGenerator(double rx, double rz, IrisGenerator gen)
|
||||
{
|
||||
double hi = IrisInterpolation.getNoise(gen.getInterpolationFunction(), (int) Math.round(rx), (int) Math.round(rz), gen.getInterpolationScale(), (xx, zz) ->
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.volmit.iris.util.KMap;
|
||||
|
||||
public class AtomicMulticache
|
||||
{
|
||||
public static boolean broken = false;
|
||||
private final AtomicInteger x;
|
||||
private final AtomicInteger z;
|
||||
private final KMap<Long, Double> height;
|
||||
@@ -29,6 +30,11 @@ public class AtomicMulticache
|
||||
|
||||
public void targetChunk(int x, int z)
|
||||
{
|
||||
if(broken)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this.x.set(x);
|
||||
this.z.set(z);
|
||||
|
||||
@@ -40,6 +46,11 @@ public class AtomicMulticache
|
||||
|
||||
public double getHeight(int x, int z, Supplier<Double> g)
|
||||
{
|
||||
if(broken)
|
||||
{
|
||||
return -5784;
|
||||
}
|
||||
|
||||
Long pos = pos(x, z);
|
||||
Double r = height.get(pos);
|
||||
|
||||
@@ -82,6 +93,10 @@ public class AtomicMulticache
|
||||
|
||||
public BiomeResult getRawBiome(int x, int z, Supplier<BiomeResult> g)
|
||||
{
|
||||
if(broken)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Long pos = pos(x, z);
|
||||
BiomeResult r = rawBiome.get(pos);
|
||||
|
||||
@@ -96,11 +111,19 @@ public class AtomicMulticache
|
||||
|
||||
private long pos(int x, int z)
|
||||
{
|
||||
if(broken)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return (((long) x) << 32) | (z & 0xffffffffL);
|
||||
}
|
||||
|
||||
public void updateHeight(int x, int z, int h)
|
||||
{
|
||||
if(broken)
|
||||
{
|
||||
return;
|
||||
}
|
||||
height.put(pos(x, z), (double) h);
|
||||
}
|
||||
|
||||
@@ -111,6 +134,11 @@ public class AtomicMulticache
|
||||
|
||||
public void drop()
|
||||
{
|
||||
if(broken)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
height.clear();
|
||||
region.clear();
|
||||
biome.clear();
|
||||
|
||||
@@ -25,6 +25,7 @@ import lombok.Data;
|
||||
public class AtomicSliver
|
||||
{
|
||||
public static final BlockData AIR = B.getBlockData("AIR");
|
||||
public static boolean forgetful = false;
|
||||
private transient KMap<Integer, IrisBiome> truebiome;
|
||||
private transient KMap<Integer, Biome> biome;
|
||||
private transient IrisLock lock = new IrisLock("Sliver");
|
||||
@@ -59,16 +60,30 @@ public class AtomicSliver
|
||||
|
||||
public void update(int y)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
blockUpdates.add(y);
|
||||
}
|
||||
|
||||
public void dontUpdate(int y)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
blockUpdates.remove(y);
|
||||
}
|
||||
|
||||
public BlockData get(int h)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
BlockData b = block.get(h);
|
||||
last = M.ms();
|
||||
|
||||
@@ -82,6 +97,10 @@ public class AtomicSliver
|
||||
|
||||
public BlockData getOrNull(int h)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
BlockData b = block.get(h);
|
||||
last = M.ms();
|
||||
|
||||
@@ -95,6 +114,10 @@ public class AtomicSliver
|
||||
|
||||
public void set(int h, BlockData d)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
setSilently(h, d);
|
||||
modified = true;
|
||||
lock.lock();
|
||||
@@ -104,6 +127,11 @@ public class AtomicSliver
|
||||
|
||||
public void setSilently(int h, BlockData d)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(d == null)
|
||||
{
|
||||
return;
|
||||
@@ -133,6 +161,11 @@ public class AtomicSliver
|
||||
|
||||
public Biome getBiome(int h)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return Biome.THE_VOID;
|
||||
}
|
||||
|
||||
last = M.ms();
|
||||
return biome.containsKey(h) ? biome.get(h) : Biome.THE_VOID;
|
||||
}
|
||||
@@ -162,7 +195,13 @@ public class AtomicSliver
|
||||
|
||||
public void write(ChunkData d)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lock.lock();
|
||||
|
||||
for(int i = 0; i <= highestBlock; i++)
|
||||
{
|
||||
if(block.get(i) == null)
|
||||
@@ -180,6 +219,10 @@ public class AtomicSliver
|
||||
|
||||
public void write(BiomeGrid d)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
lock.lock();
|
||||
for(int i = 0; i <= highestBiome; i++)
|
||||
{
|
||||
@@ -193,6 +236,10 @@ public class AtomicSliver
|
||||
|
||||
public void write(HeightMap height)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
lock.lock();
|
||||
height.setHeight(x, z, highestBlock);
|
||||
lock.unlock();
|
||||
@@ -200,6 +247,10 @@ public class AtomicSliver
|
||||
|
||||
public void read(DataInputStream din) throws IOException
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
lock.lock();
|
||||
this.block = new KMap<Integer, BlockData>();
|
||||
|
||||
@@ -234,6 +285,10 @@ public class AtomicSliver
|
||||
|
||||
public void write(DataOutputStream dos) throws IOException
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
lock.lock();
|
||||
|
||||
// Block Palette
|
||||
@@ -278,6 +333,10 @@ public class AtomicSliver
|
||||
|
||||
public void insert(AtomicSliver atomicSliver)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
lock.lock();
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
@@ -297,6 +356,10 @@ public class AtomicSliver
|
||||
|
||||
public void inject(ChunkData currentData)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
lock.lock();
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
@@ -311,11 +374,21 @@ public class AtomicSliver
|
||||
|
||||
public boolean isOlderThan(long m)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return M.ms() - last > m;
|
||||
}
|
||||
|
||||
public void inject(KSet<Integer> updatables)
|
||||
{
|
||||
if(forgetful)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
blockUpdates.addAll(updatables);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.volmit.iris.util.RNG;
|
||||
|
||||
public class GenLayerCave extends GenLayer
|
||||
{
|
||||
public static boolean bad = false;
|
||||
public static final BlockData CAVE_AIR = B.getBlockData("CAVE_AIR");
|
||||
public static final BlockData AIR = B.getBlockData("AIR");
|
||||
private static final KList<CaveResult> EMPTY = new KList<>();
|
||||
|
||||
Reference in New Issue
Block a user