mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-19 18:55:18 +00:00
Performance!
This commit is contained in:
parent
bf9c4c602b
commit
0dbff85bd8
@ -79,6 +79,14 @@ public class EditManager implements Listener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void flushNow()
|
||||||
|
{
|
||||||
|
for(World i : editors.k())
|
||||||
|
{
|
||||||
|
editors.remove(i).close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public BlockEditor open(World world)
|
public BlockEditor open(World world)
|
||||||
{
|
{
|
||||||
if(editors.containsKey(world))
|
if(editors.containsKey(world))
|
||||||
|
@ -46,10 +46,10 @@ public class CommandIrisRegen extends MortarCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: IrisWorlds.access(world).clearRegeneratedLists();
|
|
||||||
if(args.length == 0)
|
if(args.length == 0)
|
||||||
{
|
{
|
||||||
sender.sendMessage("Regenerating your chunk");
|
sender.sendMessage("Regenerating your chunk");
|
||||||
|
IrisWorlds.access(world).clearRegeneratedLists(p.getLocation().getChunk().getX(), p.getLocation().getChunk().getZ());
|
||||||
IrisWorlds.access(world).regenerate(p.getLocation().getChunk().getX(), p.getLocation().getChunk().getZ());
|
IrisWorlds.access(world).regenerate(p.getLocation().getChunk().getX(), p.getLocation().getChunk().getZ());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -58,6 +58,7 @@ public class CommandIrisRegen extends MortarCommand
|
|||||||
{
|
{
|
||||||
int m = Integer.valueOf(args[0]);
|
int m = Integer.valueOf(args[0]);
|
||||||
sender.sendMessage("Regenerating " + (m * m) + " Chunks Surrounding you");
|
sender.sendMessage("Regenerating " + (m * m) + " Chunks Surrounding you");
|
||||||
|
new Spiraler(m, m, (a, b) -> IrisWorlds.access(world).clearRegeneratedLists(a + p.getLocation().getChunk().getX(), b + p.getLocation().getChunk().getZ())).drain();
|
||||||
new Spiraler(m, m, (a, b) -> IrisWorlds.access(world).regenerate(a + p.getLocation().getChunk().getX(), b + p.getLocation().getChunk().getZ())).drain();
|
new Spiraler(m, m, (a, b) -> IrisWorlds.access(world).regenerate(a + p.getLocation().getChunk().getX(), b + p.getLocation().getChunk().getZ())).drain();
|
||||||
}
|
}
|
||||||
catch(Throwable e)
|
catch(Throwable e)
|
||||||
|
@ -1,8 +1,12 @@
|
|||||||
package com.volmit.iris.scaffold;
|
package com.volmit.iris.scaffold;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.scaffold.engine.IrisAccess;
|
import com.volmit.iris.scaffold.engine.IrisAccess;
|
||||||
import com.volmit.iris.util.KMap;
|
import com.volmit.iris.util.KMap;
|
||||||
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class IrisWorlds
|
public class IrisWorlds
|
||||||
{
|
{
|
||||||
@ -37,4 +41,22 @@ public class IrisWorlds
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean evacuate(World world) {
|
||||||
|
for(World i : Bukkit.getWorlds())
|
||||||
|
{
|
||||||
|
if(!i.getName().equals(world.getName()))
|
||||||
|
{
|
||||||
|
for(Player j : world.getPlayers())
|
||||||
|
{
|
||||||
|
new MortarSender(j, Iris.instance.getTag()).sendMessage("You have been evacuated from this world due to a close request.");
|
||||||
|
j.teleport(i.getSpawnLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
package com.volmit.iris.scaffold.engine;
|
package com.volmit.iris.scaffold.engine;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.manager.IrisDataManager;
|
import com.volmit.iris.manager.IrisDataManager;
|
||||||
import com.volmit.iris.object.*;
|
import com.volmit.iris.object.*;
|
||||||
import com.volmit.iris.scaffold.cache.Cache;
|
import com.volmit.iris.scaffold.cache.Cache;
|
||||||
import com.volmit.iris.scaffold.data.DataProvider;
|
import com.volmit.iris.scaffold.data.DataProvider;
|
||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
import com.volmit.iris.scaffold.parallax.ParallaxAccess;
|
import com.volmit.iris.scaffold.parallax.ParallaxAccess;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.B;
|
||||||
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.RNG;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -138,14 +140,34 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
|
|||||||
Hunk<Boolean> b = getParallax().getUpdatesR(c.getX(), c.getZ());
|
Hunk<Boolean> b = getParallax().getUpdatesR(c.getX(), c.getZ());
|
||||||
|
|
||||||
b.iterateSync((x,y,z,v) -> {
|
b.iterateSync((x,y,z,v) -> {
|
||||||
|
|
||||||
if(v != null && v)
|
if(v != null && v)
|
||||||
{
|
{
|
||||||
|
int vx = x & 15;
|
||||||
|
int vz = z & 15;
|
||||||
update(x,y,z, c, new RNG(Cache.key(c.getX(), c.getZ())));
|
update(x,y,z, c, new RNG(Cache.key(c.getX(), c.getZ())));
|
||||||
|
|
||||||
|
if(vx > 0 && vx < 15 && vz > 0 && vz < 15)
|
||||||
|
{
|
||||||
|
updateLighting(x,y,z,c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public default void updateLighting(int x, int y, int z, Chunk c)
|
||||||
|
{
|
||||||
|
Block block = c.getBlock(x,y,z);
|
||||||
|
BlockData data = block.getBlockData();
|
||||||
|
|
||||||
|
if(B.isLit(data))
|
||||||
|
{
|
||||||
|
block.setType(Material.AIR, false);
|
||||||
|
block.setBlockData(data, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public default void update(int x, int y, int z, Chunk c, RNG rf)
|
public default void update(int x, int y, int z, Chunk c, RNG rf)
|
||||||
{
|
{
|
||||||
@ -179,11 +201,6 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(B.isLit(data))
|
|
||||||
{
|
|
||||||
Iris.linkBK.updateBlock(block);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -6,17 +6,18 @@ import com.volmit.iris.generator.legacy.scaffold.TerrainChunk;
|
|||||||
import com.volmit.iris.manager.IrisDataManager;
|
import com.volmit.iris.manager.IrisDataManager;
|
||||||
import com.volmit.iris.object.IrisBiome;
|
import com.volmit.iris.object.IrisBiome;
|
||||||
import com.volmit.iris.object.IrisDimension;
|
import com.volmit.iris.object.IrisDimension;
|
||||||
|
import com.volmit.iris.scaffold.IrisWorlds;
|
||||||
|
import com.volmit.iris.scaffold.cache.Cache;
|
||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
import com.volmit.iris.util.M;
|
import com.volmit.iris.util.M;
|
||||||
import org.bukkit.Bukkit;
|
import com.volmit.iris.util.RNG;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.*;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.generator.BlockPopulator;
|
import org.bukkit.generator.BlockPopulator;
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
|
import org.bukkit.material.MaterialData;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -260,13 +261,132 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void regenerate(int x, int z) {
|
public void clearRegeneratedLists(int x, int z) {
|
||||||
// TODO: DO IT
|
if (true)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < getComposite().getSize(); i++)
|
||||||
|
{
|
||||||
|
getComposite().getEngine(i).getParallax().delete(x, z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void regenerate(int x, int z) {
|
||||||
|
if (true)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Chunk chunk = getComposite().getWorld().getChunkAt(x, z);
|
||||||
|
generateChunkRawData(getComposite().getWorld(), x, z, new TerrainChunk() {
|
||||||
|
@Override
|
||||||
|
public void setRaw(ChunkData data) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Biome getBiome(int x, int z) {
|
||||||
|
return Biome.THE_VOID;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Biome getBiome(int x, int y, int z) {
|
||||||
|
return Biome.THE_VOID;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBiome(int x, int z, Biome bio) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBiome(int x, int y, int z, Biome bio) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxHeight() {
|
||||||
|
return 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBlock(int x, int y, int z, BlockData blockData) {
|
||||||
|
Iris.edit.set(compound.getWorld(), x, y, z, blockData);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockData getBlockData(int x, int y, int z) {
|
||||||
|
return Iris.edit.get(compound.getWorld(), x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ChunkData getRaw() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void inject(BiomeGrid biome) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBlock(int i, int i1, int i2, @NotNull Material material) {
|
||||||
|
setBlock(i, i1, i2, material.createBlockData());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBlock(int i, int i1, int i2, @NotNull MaterialData materialData) {
|
||||||
|
setBlock(i, i1, i2, materialData.getItemType());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRegion(int i, int i1, int i2, int i3, int i4, int i5, @NotNull Material material) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRegion(int i, int i1, int i2, int i3, int i4, int i5, @NotNull MaterialData materialData) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRegion(int i, int i1, int i2, int i3, int i4, int i5, @NotNull BlockData blockData) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Material getType(int i, int i1, int i2) {
|
||||||
|
return getBlockData(i, i1, i2).getMaterial();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public MaterialData getTypeAndData(int i, int i1, int i2) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte getData(int i, int i1, int i2) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Iris.edit.flushNow();
|
||||||
|
|
||||||
|
for (BlockPopulator i : populators) {
|
||||||
|
i.populate(compound.getWorld(), new RNG(Cache.key(x, z)), chunk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
getComposite().close();
|
getComposite().close();
|
||||||
|
IrisWorlds.evacuate(getComposite().getWorld());
|
||||||
Bukkit.unloadWorld(getComposite().getWorld(), !isStudio());
|
Bukkit.unloadWorld(getComposite().getWorld(), !isStudio());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,4 +206,6 @@ public interface IrisAccess extends Hotloadable, DataProvider {
|
|||||||
triesc.accept(tries.get());
|
triesc.accept(tries.get());
|
||||||
return location.get();
|
return location.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearRegeneratedLists(int x, int z);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
package com.volmit.iris.scaffold.hunk;
|
package com.volmit.iris.scaffold.hunk;
|
||||||
|
|
||||||
|
import com.volmit.iris.scaffold.hunk.io.HunkIOAdapter;
|
||||||
|
import com.volmit.iris.scaffold.hunk.storage.*;
|
||||||
|
import com.volmit.iris.scaffold.hunk.view.*;
|
||||||
|
import com.volmit.iris.scaffold.parallel.BurstExecutor;
|
||||||
|
import com.volmit.iris.scaffold.parallel.MultiBurst;
|
||||||
|
import com.volmit.iris.util.*;
|
||||||
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
|
||||||
|
import org.bukkit.generator.ChunkGenerator.ChunkData;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
@ -7,33 +19,6 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import com.volmit.iris.scaffold.hunk.view.*;
|
|
||||||
import org.bukkit.Chunk;
|
|
||||||
import org.bukkit.block.Biome;
|
|
||||||
import org.bukkit.block.data.BlockData;
|
|
||||||
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
|
|
||||||
import org.bukkit.generator.ChunkGenerator.ChunkData;
|
|
||||||
|
|
||||||
import com.volmit.iris.util.ByteArrayTag;
|
|
||||||
import com.volmit.iris.util.Consumer2;
|
|
||||||
import com.volmit.iris.util.Consumer3;
|
|
||||||
import com.volmit.iris.util.Consumer4;
|
|
||||||
import com.volmit.iris.util.Consumer5;
|
|
||||||
import com.volmit.iris.util.Consumer6;
|
|
||||||
import com.volmit.iris.util.Consumer8;
|
|
||||||
import com.volmit.iris.util.Function3;
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import com.volmit.iris.scaffold.hunk.io.HunkIOAdapter;
|
|
||||||
import com.volmit.iris.scaffold.hunk.storage.ArrayHunk;
|
|
||||||
import com.volmit.iris.scaffold.hunk.storage.AtomicDoubleHunk;
|
|
||||||
import com.volmit.iris.scaffold.hunk.storage.AtomicHunk;
|
|
||||||
import com.volmit.iris.scaffold.hunk.storage.AtomicIntegerHunk;
|
|
||||||
import com.volmit.iris.scaffold.hunk.storage.AtomicLongHunk;
|
|
||||||
import com.volmit.iris.scaffold.hunk.storage.MappedHunk;
|
|
||||||
import com.volmit.iris.scaffold.hunk.storage.SynchronizedArrayHunk;
|
|
||||||
import com.volmit.iris.scaffold.parallel.BurstExecutor;
|
|
||||||
import com.volmit.iris.scaffold.parallel.MultiBurst;
|
|
||||||
|
|
||||||
public interface Hunk<T>
|
public interface Hunk<T>
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -119,6 +104,11 @@ public interface Hunk<T>
|
|||||||
return new MappedHunk<>(w, h, d);
|
return new MappedHunk<>(w, h, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <T> Hunk<T> newMappedHunkSynced(int w, int h, int d)
|
||||||
|
{
|
||||||
|
return new MappedHunk<T>(w, h, d).synchronize();
|
||||||
|
}
|
||||||
|
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public static <T> Hunk<T> newCombinedMappedHunk(Hunk<T>... hunks)
|
public static <T> Hunk<T> newCombinedMappedHunk(Hunk<T>... hunks)
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
package com.volmit.iris.scaffold.hunk.storage;
|
package com.volmit.iris.scaffold.hunk.storage;
|
||||||
|
|
||||||
import com.volmit.iris.util.Consumer4;
|
|
||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
import com.volmit.iris.util.BlockPosition;
|
import com.volmit.iris.util.Consumer4;
|
||||||
import com.volmit.iris.util.KMap;
|
import com.volmit.iris.util.KMap;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@ -14,7 +12,7 @@ import java.util.Map;
|
|||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
public class MappedHunk<T> extends StorageHunk<T> implements Hunk<T>
|
public class MappedHunk<T> extends StorageHunk<T> implements Hunk<T>
|
||||||
{
|
{
|
||||||
private final KMap<BlockPosition, T> data;
|
private final KMap<Integer, T> data;
|
||||||
|
|
||||||
public MappedHunk(int w, int h, int d)
|
public MappedHunk(int w, int h, int d)
|
||||||
{
|
{
|
||||||
@ -25,15 +23,31 @@ public class MappedHunk<T> extends StorageHunk<T> implements Hunk<T>
|
|||||||
@Override
|
@Override
|
||||||
public void setRaw(int x, int y, int z, T t)
|
public void setRaw(int x, int y, int z, T t)
|
||||||
{
|
{
|
||||||
data.put(new BlockPosition(x, y, z), t);
|
if(t == null)
|
||||||
|
{
|
||||||
|
data.remove(index(x,y,z));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data.put(index(x, y, z), t);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer index(int x, int y, int z)
|
||||||
|
{
|
||||||
|
return (z * getWidth() * getHeight()) + (y * getWidth()) + x;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Hunk<T> iterateSync(Consumer4<Integer, Integer, Integer, T> c)
|
public synchronized Hunk<T> iterateSync(Consumer4<Integer, Integer, Integer, T> c)
|
||||||
{
|
{
|
||||||
for(Map.Entry<BlockPosition, T> g : data.entrySet())
|
int idx, z;
|
||||||
|
|
||||||
|
for(Map.Entry<Integer, T> g : data.entrySet())
|
||||||
{
|
{
|
||||||
c.accept( g.getKey().getX(), g.getKey().getY(), g.getKey().getZ(), g.getValue());
|
idx = g.getKey();
|
||||||
|
z = idx / (getWidth() * getHeight());
|
||||||
|
idx -= (z * getWidth() * getHeight());
|
||||||
|
c.accept(idx % getWidth(), idx / getWidth(), z, g.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
@ -42,6 +56,6 @@ public class MappedHunk<T> extends StorageHunk<T> implements Hunk<T>
|
|||||||
@Override
|
@Override
|
||||||
public T getRaw(int x, int y, int z)
|
public T getRaw(int x, int y, int z)
|
||||||
{
|
{
|
||||||
return data.get(new BlockPosition(x, y, z));
|
return data.get(index(x, y, z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,46 +3,37 @@ package com.volmit.iris.scaffold.parallax;
|
|||||||
import com.volmit.iris.scaffold.hunk.Hunk;
|
import com.volmit.iris.scaffold.hunk.Hunk;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
public interface ParallaxAccess
|
public interface ParallaxAccess {
|
||||||
{
|
default BlockData getBlock(int x, int y, int z) {
|
||||||
default BlockData getBlock(int x, int y, int z)
|
return getBlocksR(x >> 4, z >> 4).get(x & 15, y, z & 15);
|
||||||
{
|
|
||||||
return getBlocksR(x>>4,z>>4).get(x & 15,y,z & 15);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default void setBlock(int x, int y, int z, BlockData d)
|
default void setBlock(int x, int y, int z, BlockData d) {
|
||||||
{
|
getBlocksRW(x >> 4, z >> 4).set(x & 15, y, z & 15, d);
|
||||||
getBlocksRW(x>>4, z>>4).set(x&15, y, z&15, d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default String getObject(int x, int y, int z)
|
default String getObject(int x, int y, int z) {
|
||||||
{
|
return getObjectsR(x >> 4, z >> 4).get(x & 15, y, z & 15);
|
||||||
return getObjectsR(x>>4,z>>4).get(x & 15,y,z & 15);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default void setObject(int x, int y, int z, String d)
|
default void setObject(int x, int y, int z, String d) {
|
||||||
{
|
getObjectsRW(x >> 4, z >> 4).set(x & 15, y, z & 15, d);
|
||||||
getObjectsRW(x>>4, z>>4).set(x&15, y, z&15, d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default Boolean isUpdate(int x, int y, int z)
|
default Boolean isUpdate(int x, int y, int z) {
|
||||||
{
|
return getUpdatesR(x >> 4, z >> 4).get(x & 15, y, z & 15);
|
||||||
return getUpdatesR(x>>4,z>>4).get(x & 15,y,z & 15);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default void updateBlock(int x, int y, int z)
|
default void updateBlock(int x, int y, int z) {
|
||||||
{
|
|
||||||
setUpdate(x, y, z, true);
|
setUpdate(x, y, z, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
default void setUpdate(int x, int y, int z, boolean d)
|
default void setUpdate(int x, int y, int z, boolean d) {
|
||||||
{
|
getUpdatesRW(x >> 4, z >> 4).set(x & 15, y, z & 15, d);
|
||||||
getUpdatesRW(x>>4, z>>4).set(x&15, y, z&15, d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default boolean isParallaxGenerated(int x, int z)
|
default boolean isParallaxGenerated(int x, int z) {
|
||||||
{
|
return getMetaR(x, z).isParallaxGenerated();
|
||||||
return getMetaR(x,z).isParallaxGenerated();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default boolean isChunkGenerated(int x, int z) {
|
default boolean isChunkGenerated(int x, int z) {
|
||||||
@ -50,11 +41,11 @@ public interface ParallaxAccess
|
|||||||
}
|
}
|
||||||
|
|
||||||
default void setParallaxGenerated(int x, int z) {
|
default void setParallaxGenerated(int x, int z) {
|
||||||
setParallaxGenerated(x,z,true);
|
setParallaxGenerated(x, z, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
default void setChunkGenerated(int x, int z) {
|
default void setChunkGenerated(int x, int z) {
|
||||||
setChunkGenerated(x,z,true);
|
setChunkGenerated(x, z, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
default void setParallaxGenerated(int x, int z, boolean v) {
|
default void setParallaxGenerated(int x, int z, boolean v) {
|
||||||
@ -92,4 +83,11 @@ public interface ParallaxAccess
|
|||||||
public int getRegionCount();
|
public int getRegionCount();
|
||||||
|
|
||||||
public int getChunkCount();
|
public int getChunkCount();
|
||||||
|
|
||||||
|
public default void delete(int x, int z)
|
||||||
|
{
|
||||||
|
getUpdatesRW(x, z).fill(false);
|
||||||
|
getBlocksRW(x, z).fill(null);
|
||||||
|
getObjectsRW(x, z).fill(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,14 @@ public class MultiBurst
|
|||||||
burst(r.length).queue(r).complete();
|
burst(r.length).queue(r).complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sync(Runnable... r)
|
||||||
|
{
|
||||||
|
for(Runnable i : r)
|
||||||
|
{
|
||||||
|
i.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public BurstExecutor burst(int estimate)
|
public BurstExecutor burst(int estimate)
|
||||||
{
|
{
|
||||||
return new BurstExecutor(service, estimate);
|
return new BurstExecutor(service, estimate);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user