mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 09:47:38 +00:00
MCAFile is chunk based extent
This commit is contained in:
parent
54a9e03cd6
commit
5f4af7958f
@ -1,6 +1,7 @@
|
|||||||
package com.boydti.fawe.beta;
|
package com.boydti.fawe.beta;
|
||||||
|
|
||||||
import com.boydti.fawe.FaweCache;
|
import com.boydti.fawe.FaweCache;
|
||||||
|
import com.boydti.fawe.beta.implementation.IChunkExtent;
|
||||||
import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock;
|
import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock;
|
||||||
import com.boydti.fawe.beta.implementation.processors.IBatchProcessorHolder;
|
import com.boydti.fawe.beta.implementation.processors.IBatchProcessorHolder;
|
||||||
import com.sk89q.jnbt.CompoundTag;
|
import com.sk89q.jnbt.CompoundTag;
|
||||||
@ -24,7 +25,7 @@ import java.util.concurrent.Future;
|
|||||||
* TODO: implement Extent (need to refactor Extent first) Interface for a queue based extent which
|
* TODO: implement Extent (need to refactor Extent first) Interface for a queue based extent which
|
||||||
* uses chunks
|
* uses chunks
|
||||||
*/
|
*/
|
||||||
public interface IQueueExtent extends Flushable, Trimable, Extent, IBatchProcessorHolder {
|
public interface IQueueExtent extends Flushable, Trimable, IChunkExtent, IBatchProcessorHolder {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
default boolean isQueueEnabled() {
|
default boolean isQueueEnabled() {
|
||||||
@ -71,15 +72,6 @@ public interface IQueueExtent extends Flushable, Trimable, Extent, IBatchProcess
|
|||||||
*/
|
*/
|
||||||
IChunkSet getCachedSet(int x, int z);
|
IChunkSet getCachedSet(int x, int z);
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the IChunk at a position (and cache it if it's not already)
|
|
||||||
*
|
|
||||||
* @param x
|
|
||||||
* @param z
|
|
||||||
* @return IChunk
|
|
||||||
*/
|
|
||||||
IChunk getOrCreateChunk(int x, int z);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Submit the chunk so that it's changes are applied to the world
|
* Submit the chunk so that it's changes are applied to the world
|
||||||
*
|
*
|
||||||
@ -88,43 +80,6 @@ public interface IQueueExtent extends Flushable, Trimable, Extent, IBatchProcess
|
|||||||
*/
|
*/
|
||||||
<T extends Future<T>> T submit(IChunk<T> chunk);
|
<T extends Future<T>> T submit(IChunk<T> chunk);
|
||||||
|
|
||||||
// standard get / set
|
|
||||||
|
|
||||||
@Override
|
|
||||||
default boolean setBlock(int x, int y, int z, BlockStateHolder state) {
|
|
||||||
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
|
||||||
return chunk.setBlock(x & 15, y, z & 15, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
default boolean setTile(int x, int y, int z, CompoundTag tile) throws WorldEditException {
|
|
||||||
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
|
||||||
return chunk.setTile(x & 15, y, z & 15, tile);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
default boolean setBiome(int x, int y, int z, BiomeType biome) {
|
|
||||||
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
|
||||||
return chunk.setBiome(x & 15, y, z & 15, biome);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
default BlockState getBlock(int x, int y, int z) {
|
|
||||||
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
|
||||||
return chunk.getBlock(x & 15, y, z & 15);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
default BaseBlock getFullBlock(int x, int y, int z) {
|
|
||||||
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
|
||||||
return chunk.getFullBlock(x & 15, y, z & 15);
|
|
||||||
}
|
|
||||||
|
|
||||||
default BiomeType getBiome(int x, int z) {
|
|
||||||
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
|
||||||
return chunk.getBiomeType(x & 15, z & 15);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
default BlockVector3 getMinimumPoint() {
|
default BlockVector3 getMinimumPoint() {
|
||||||
return BlockVector3.at(-30000000, 0, -30000000);
|
return BlockVector3.at(-30000000, 0, -30000000);
|
||||||
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.boydti.fawe.beta.implementation;
|
||||||
|
|
||||||
|
import com.boydti.fawe.beta.IChunk;
|
||||||
|
import com.sk89q.jnbt.CompoundTag;
|
||||||
|
import com.sk89q.worldedit.WorldEditException;
|
||||||
|
import com.sk89q.worldedit.extent.Extent;
|
||||||
|
import com.sk89q.worldedit.world.biome.BiomeType;
|
||||||
|
import com.sk89q.worldedit.world.block.BaseBlock;
|
||||||
|
import com.sk89q.worldedit.world.block.BlockState;
|
||||||
|
import com.sk89q.worldedit.world.block.BlockStateHolder;
|
||||||
|
|
||||||
|
public interface IChunkExtent extends Extent {
|
||||||
|
/**
|
||||||
|
* Get the IChunk at a position (and cache it if it's not already)
|
||||||
|
*
|
||||||
|
* @param x
|
||||||
|
* @param z
|
||||||
|
* @return IChunk
|
||||||
|
*/
|
||||||
|
IChunk getOrCreateChunk(int chunkX, int chunkZ);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default boolean setBlock(int x, int y, int z, BlockStateHolder state) {
|
||||||
|
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
||||||
|
return chunk.setBlock(x & 15, y, z & 15, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default boolean setTile(int x, int y, int z, CompoundTag tile) throws WorldEditException {
|
||||||
|
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
||||||
|
return chunk.setTile(x & 15, y, z & 15, tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default boolean setBiome(int x, int y, int z, BiomeType biome) {
|
||||||
|
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
||||||
|
return chunk.setBiome(x & 15, y, z & 15, biome);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default BlockState getBlock(int x, int y, int z) {
|
||||||
|
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
||||||
|
return chunk.getBlock(x & 15, y, z & 15);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default BaseBlock getFullBlock(int x, int y, int z) {
|
||||||
|
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
||||||
|
return chunk.getFullBlock(x & 15, y, z & 15);
|
||||||
|
}
|
||||||
|
|
||||||
|
default BiomeType getBiome(int x, int z) {
|
||||||
|
final IChunk chunk = getOrCreateChunk(x >> 4, z >> 4);
|
||||||
|
return chunk.getBiomeType(x & 15, z & 15);
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ import com.boydti.fawe.Fawe;
|
|||||||
import com.boydti.fawe.FaweCache;
|
import com.boydti.fawe.FaweCache;
|
||||||
import com.boydti.fawe.beta.IChunk;
|
import com.boydti.fawe.beta.IChunk;
|
||||||
import com.boydti.fawe.beta.Trimable;
|
import com.boydti.fawe.beta.Trimable;
|
||||||
|
import com.boydti.fawe.beta.implementation.IChunkExtent;
|
||||||
import com.boydti.fawe.beta.implementation.processors.ExtentBatchProcessorHolder;
|
import com.boydti.fawe.beta.implementation.processors.ExtentBatchProcessorHolder;
|
||||||
import com.boydti.fawe.jnbt.streamer.StreamDelegate;
|
import com.boydti.fawe.jnbt.streamer.StreamDelegate;
|
||||||
import com.boydti.fawe.object.RunnableVal4;
|
import com.boydti.fawe.object.RunnableVal4;
|
||||||
@ -41,7 +42,7 @@ import java.util.zip.InflaterInputStream;
|
|||||||
* e.g.: `.Level.Entities.#` (Starts with a . as the root tag is unnamed)
|
* e.g.: `.Level.Entities.#` (Starts with a . as the root tag is unnamed)
|
||||||
* Note: This class isn't thread safe. You can use it in an async thread, but not multiple at the same time
|
* Note: This class isn't thread safe. You can use it in an async thread, but not multiple at the same time
|
||||||
*/
|
*/
|
||||||
public class MCAFile extends ExtentBatchProcessorHolder implements Trimable, Extent {
|
public class MCAFile extends ExtentBatchProcessorHolder implements Trimable, IChunkExtent {
|
||||||
|
|
||||||
private static Field fieldBuf2;
|
private static Field fieldBuf2;
|
||||||
private static Field fieldBuf3;
|
private static Field fieldBuf3;
|
||||||
@ -255,6 +256,16 @@ public class MCAFile extends ExtentBatchProcessorHolder implements Trimable, Ext
|
|||||||
chunks[pair] = chunk;
|
chunks[pair] = chunk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MCAChunk getOrCreateChunk(int chunkX, int chunkZ) {
|
||||||
|
try {
|
||||||
|
return getChunk(chunkX, chunkZ);
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO generate?
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public MCAChunk getChunk(int cx, int cz) throws IOException {
|
public MCAChunk getChunk(int cx, int cz) throws IOException {
|
||||||
int pair = getIndex(cx, cz);
|
int pair = getIndex(cx, cz);
|
||||||
MCAChunk chunk = chunks[pair];
|
MCAChunk chunk = chunks[pair];
|
||||||
|
Loading…
Reference in New Issue
Block a user