mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-04 00:46:08 +00:00
improve headless speed
This commit is contained in:
parent
c3ed7080dc
commit
08ab82216d
@ -0,0 +1,48 @@
|
|||||||
|
package com.volmit.iris.util.hunk.view;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.util.hunk.storage.ArrayHunk;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
|
|
||||||
|
public class SyncChunkDataHunkHolder extends ArrayHunk<BlockData> {
|
||||||
|
private static final BlockData AIR = Material.AIR.createBlockData();
|
||||||
|
private final ChunkGenerator.ChunkData chunk;
|
||||||
|
private final Thread mainThread = Thread.currentThread();
|
||||||
|
|
||||||
|
public SyncChunkDataHunkHolder(ChunkGenerator.ChunkData chunk) {
|
||||||
|
super(16, chunk.getMaxHeight() - chunk.getMinHeight(), 16);
|
||||||
|
this.chunk = chunk;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRaw(int x, int y, int z, BlockData data) {
|
||||||
|
if (Thread.currentThread() != mainThread)
|
||||||
|
Iris.warn("SyncChunkDataHunkHolder is not on the main thread");
|
||||||
|
super.setRaw(x, y, z, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockData getRaw(int x, int y, int z) {
|
||||||
|
if (Thread.currentThread() != mainThread)
|
||||||
|
Iris.warn("SyncChunkDataHunkHolder is not on the main thread");
|
||||||
|
BlockData b = super.getRaw(x, y, z);
|
||||||
|
|
||||||
|
return b != null ? b : AIR;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void apply() {
|
||||||
|
for (int i = 0; i < getHeight(); i++) {
|
||||||
|
for (int j = 0; j < getWidth(); j++) {
|
||||||
|
for (int k = 0; k < getDepth(); k++) {
|
||||||
|
BlockData b = super.getRaw(j, i, k);
|
||||||
|
|
||||||
|
if (b != null) {
|
||||||
|
chunk.setBlock(j, i + chunk.getMinHeight(), k, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -37,7 +37,6 @@ import com.volmit.iris.util.documentation.BlockCoordinates;
|
|||||||
import com.volmit.iris.util.documentation.RegionCoordinates;
|
import com.volmit.iris.util.documentation.RegionCoordinates;
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
import com.volmit.iris.util.hunk.Hunk;
|
||||||
import com.volmit.iris.util.hunk.view.BiomeGridHunkHolder;
|
import com.volmit.iris.util.hunk.view.BiomeGridHunkHolder;
|
||||||
import com.volmit.iris.util.hunk.view.ChunkDataHunkHolder;
|
|
||||||
import com.volmit.iris.util.hunk.view.SyncChunkDataHunkHolder;
|
import com.volmit.iris.util.hunk.view.SyncChunkDataHunkHolder;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
@ -168,7 +167,7 @@ public class Headless implements IHeadless, LevelHeightAccessor {
|
|||||||
var tc = new MCATerrainChunk(chunk);
|
var tc = new MCATerrainChunk(chunk);
|
||||||
loadedChunks.incrementAndGet();
|
loadedChunks.incrementAndGet();
|
||||||
|
|
||||||
ChunkDataHunkHolder blocks = new ChunkDataHunkHolder(tc);
|
SyncChunkDataHunkHolder blocks = new SyncChunkDataHunkHolder(tc);
|
||||||
BiomeGridHunkHolder biomes = new BiomeGridHunkHolder(tc, tc.getMinHeight(), tc.getMaxHeight());
|
BiomeGridHunkHolder biomes = new BiomeGridHunkHolder(tc, tc.getMinHeight(), tc.getMaxHeight());
|
||||||
ChunkContext ctx = generate(engine, pos.x << 4, pos.z << 4, blocks, biomes);
|
ChunkContext ctx = generate(engine, pos.x << 4, pos.z << 4, blocks, biomes);
|
||||||
blocks.apply();
|
blocks.apply();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user