mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Composite generator use only iris worlds
This commit is contained in:
parent
fe2de5d8ae
commit
6618cdc0ad
@ -33,6 +33,7 @@ import com.volmit.iris.engine.hunk.Hunk;
|
||||
import com.volmit.iris.engine.object.IrisBiome;
|
||||
import com.volmit.iris.engine.object.IrisDimension;
|
||||
import com.volmit.iris.engine.object.IrisPosition;
|
||||
import com.volmit.iris.engine.object.common.IrisWorld;
|
||||
import com.volmit.iris.engine.parallel.BurstExecutor;
|
||||
import com.volmit.iris.engine.parallel.MultiBurst;
|
||||
import com.volmit.iris.util.collection.KList;
|
||||
@ -79,9 +80,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
private long mst = 0;
|
||||
private int generated = 0;
|
||||
private int lgenerated = 0;
|
||||
private final KMap<Long, PregeneratedData> chunkCache;
|
||||
private final ChronoLatch hotloadcd;
|
||||
private final AtomicBoolean fake;
|
||||
@Getter
|
||||
private double generatedPerSecond = 0;
|
||||
private final int art;
|
||||
@ -93,8 +92,6 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
|
||||
public EngineCompositeGenerator(String query, boolean production) {
|
||||
super();
|
||||
chunkCache = new KMap<>();
|
||||
fake = new AtomicBoolean(true);
|
||||
hotloadcd = new ChronoLatch(3500);
|
||||
mst = M.ms();
|
||||
this.production = production;
|
||||
@ -113,6 +110,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hotload() {
|
||||
if (isStudio()) {
|
||||
Iris.proj.updateWorkspace();
|
||||
@ -158,14 +156,14 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized IrisDimension getDimension(World world) {
|
||||
private synchronized IrisDimension getDimension(IrisWorld world) {
|
||||
String query = dimensionQuery;
|
||||
query = Iris.linkMultiverseCore.getWorldNameType(world.getName(), query);
|
||||
query = Iris.linkMultiverseCore.getWorldNameType(world.name(), query);
|
||||
|
||||
IrisDimension dim = null;
|
||||
|
||||
if (query == null) {
|
||||
File iris = new File(world.getWorldFolder(), "iris");
|
||||
File iris = new File(world.worldFolder(), "iris");
|
||||
|
||||
if (iris.exists() && iris.isDirectory()) {
|
||||
for (File i : iris.listFiles()) {
|
||||
@ -191,7 +189,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
}
|
||||
|
||||
if (query == null) {
|
||||
Iris.error("Cannot find iris dimension data for world: " + world.getName() + "! Assuming " + IrisSettings.get().getGenerator().getDefaultWorldType() + "!");
|
||||
Iris.error("Cannot find iris dimension data for world: " + world.name() + "! Assuming " + IrisSettings.get().getGenerator().getDefaultWorldType() + "!");
|
||||
query = IrisSettings.get().getGenerator().getDefaultWorldType();
|
||||
}
|
||||
|
||||
@ -213,8 +211,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
dim = new IrisDataManager(getDataFolder(world)).getDimensionLoader().load(od.getLoadKey());
|
||||
|
||||
if (dim == null) {
|
||||
Iris.info("Installing Iris pack " + od.getName() + " into world " + world.getName() + "...");
|
||||
Iris.proj.installIntoWorld(new VolmitSender(Bukkit.getConsoleSender(), Iris.instance.getTag()), od.getLoadKey(), world.getWorldFolder());
|
||||
Iris.info("Installing Iris pack " + od.getName() + " into world " + world.name() + "...");
|
||||
Iris.proj.installIntoWorld(new VolmitSender(Bukkit.getConsoleSender(), Iris.instance.getTag()), od.getLoadKey(), world.worldFolder());
|
||||
dim = new IrisDataManager(getDataFolder(world)).getDimensionLoader().load(od.getLoadKey());
|
||||
|
||||
if (dim == null) {
|
||||
@ -294,20 +292,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
return dim;
|
||||
}
|
||||
|
||||
public synchronized void initialize(World world) {
|
||||
if (!(world instanceof FakeWorld) && fake.get() && this.compound.get() != null) {
|
||||
fake.set(false);
|
||||
this.compound.get().updateWorld(world);
|
||||
getTarget().updateWorld(world);
|
||||
placeStrongholds(world);
|
||||
|
||||
for (int i = 0; i < getComposite().getSize(); i++) {
|
||||
getComposite().getEngine(i).getTarget().updateWorld(world);
|
||||
}
|
||||
|
||||
Iris.info("Attached Real World to Engine Target");
|
||||
}
|
||||
|
||||
public synchronized void initialize(IrisWorld world) {
|
||||
if (initialized.get()) {
|
||||
return;
|
||||
}
|
||||
@ -445,8 +430,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
);
|
||||
}
|
||||
|
||||
private File getDataFolder(World world) {
|
||||
return new File(world.getWorldFolder(), "iris/pack");
|
||||
private File getDataFolder(IrisWorld world) {
|
||||
return new File(world.worldFolder(), "iris/pack");
|
||||
}
|
||||
|
||||
private File getDataFolder(String world) {
|
||||
@ -458,7 +443,13 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
public ChunkData generateChunkData(@NotNull World world, @NotNull Random ignored, int x, int z, @NotNull BiomeGrid biome) {
|
||||
PrecisionStopwatch ps = PrecisionStopwatch.start();
|
||||
TerrainChunk tc = TerrainChunk.create(world, biome);
|
||||
generateChunkRawData(world, x, z, tc).run();
|
||||
|
||||
if(!getComposite().getWorld().hasRealWorld())
|
||||
{
|
||||
getComposite().getWorld().bind(world);
|
||||
}
|
||||
|
||||
generateChunkRawData(getComposite().getWorld(), x, z, tc).run();
|
||||
generated++;
|
||||
ps.end();
|
||||
|
||||
@ -469,7 +460,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
return tc.getRaw();
|
||||
}
|
||||
|
||||
public void directWriteMCA(World w, int x, int z, NBTWorld writer, MultiBurst burst) {
|
||||
@Override
|
||||
public void directWriteMCA(IrisWorld w, int x, int z, NBTWorld writer, MultiBurst burst) {
|
||||
BurstExecutor e = burst.burst(1024);
|
||||
int mcaox = x << 5;
|
||||
int mcaoz = z << 5;
|
||||
@ -485,7 +477,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
e.complete();
|
||||
}
|
||||
|
||||
public void directWriteChunk(World w, int x, int z, NBTWorld writer) {
|
||||
@Override
|
||||
public void directWriteChunk(IrisWorld w, int x, int z, NBTWorld writer) {
|
||||
int ox = x << 4;
|
||||
int oz = z << 4;
|
||||
com.volmit.iris.engine.data.mca.Chunk cc = writer.getChunk(x, z);
|
||||
@ -526,12 +519,12 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
|
||||
@Override
|
||||
public int getMinHeight() {
|
||||
return w.getMinHeight();
|
||||
return w.minHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxHeight() {
|
||||
return w.getMaxHeight();
|
||||
return w.maxHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -614,50 +607,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
}).run();
|
||||
}
|
||||
|
||||
public Chunk generatePaper(World world, int x, int z) {
|
||||
precache(world, x, z);
|
||||
Chunk c = PaperLib.getChunkAtAsync(world, x, z, true).join();
|
||||
chunkCache.remove(Cache.key(x, z));
|
||||
return c;
|
||||
}
|
||||
|
||||
public void precache(World world, int x, int z) {
|
||||
synchronized (this) {
|
||||
initialize(world);
|
||||
}
|
||||
|
||||
synchronized (chunkCache) {
|
||||
if (chunkCache.containsKey(Cache.key(x, z))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
PregeneratedData data = new PregeneratedData(getComposite().getHeight() - 1);
|
||||
compound.get().generate(x * 16, z * 16, data.getBlocks(), data.getPost(), data.getBiomes());
|
||||
synchronized (chunkCache) {
|
||||
chunkCache.put(Cache.key(x, z), data);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPrecacheSize() {
|
||||
return chunkCache.size();
|
||||
}
|
||||
|
||||
public int getCachedChunks() {
|
||||
return chunkCache.size();
|
||||
}
|
||||
|
||||
public Runnable generateChunkRawData(World world, int x, int z, TerrainChunk tc) {
|
||||
public Runnable generateChunkRawData(IrisWorld world, int x, int z, TerrainChunk tc) {
|
||||
initialize(world);
|
||||
|
||||
synchronized (chunkCache) {
|
||||
long g = Cache.key(x, z);
|
||||
if (chunkCache.containsKey(g)) {
|
||||
return chunkCache.remove(g).inject(tc);
|
||||
}
|
||||
}
|
||||
|
||||
Hunk<BlockData> blocks = Hunk.view((ChunkData) tc);
|
||||
Hunk<Biome> biomes = Hunk.view((BiomeGrid) tc);
|
||||
Hunk<BlockData> post = Hunk.newAtomicHunk(biomes.getWidth(), biomes.getHeight(), biomes.getDepth());
|
||||
@ -783,146 +734,15 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
||||
// TODO: DO IT
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearRegeneratedLists(int x, int z) {
|
||||
for (int i = 0; i < getComposite().getSize(); i++) {
|
||||
getComposite().getEngine(i).getParallax().delete(x, z);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void regenerate(int x, int z) {
|
||||
|
||||
clearRegeneratedLists(x, z);
|
||||
int xx = x * 16;
|
||||
int zz = z * 16;
|
||||
BiomeBaseInjector inj = (a, b, c, d) -> {
|
||||
};
|
||||
//noinspection deprecation
|
||||
generateChunkRawData(getComposite().getWorld(), x, z, new TerrainChunk() {
|
||||
@Override
|
||||
public BiomeBaseInjector getBiomeBaseInjector() {
|
||||
return inj;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRaw(ChunkData data) {
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Biome getBiome(int x, int z) {
|
||||
return Biome.THE_VOID;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@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 getMinHeight() {
|
||||
return getComposite().getWorld().getMinHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxHeight() {
|
||||
return getComposite().getWorld().getMaxHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlock(int x, int y, int z, BlockData blockData) {
|
||||
if (!getBlockData(x, y, z).matches(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.get().getWorld(), x + xx, y, z + zz);
|
||||
}
|
||||
|
||||
@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();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
J.car(art);
|
||||
if (getComposite() != null) {
|
||||
getComposite().close();
|
||||
|
||||
|
||||
if (isStudio()) {
|
||||
IrisWorlds.evacuate(getComposite().getWorld());
|
||||
Bukkit.unloadWorld(getComposite().getWorld(), !isStudio());
|
||||
if (isStudio() && getComposite().getWorld().hasRealWorld()) {
|
||||
getComposite().getWorld().evacuate();
|
||||
Bukkit.unloadWorld(getComposite().getWorld().realWorld(), !isStudio());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user