Dieser Commit ist enthalten in:
Jesse Boyd 2019-11-07 10:28:17 +00:00
Ursprung fb2f6668b4
Commit 82f5c4ebed
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 59F1DE6293AF6E1F
37 geänderte Dateien mit 316 neuen und 201 gelöschten Zeilen

Datei anzeigen

@ -41,6 +41,15 @@ ext {
buildNumber = index.toString(); buildNumber = index.toString();
} }
} }
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile::class) {
options.compilerArgs.addAll(arrayOf("-Xmaxerrs", "1000"))
}
}
}
//def rootVersion = "1.13" //def rootVersion = "1.13"
//def revision = "" //def revision = ""
//def buildNumber = "" //def buildNumber = ""

Datei anzeigen

@ -8,7 +8,7 @@ fun Project.applyCommonConfiguration() {
repositories { repositories {
mavenCentral() mavenCentral()
mavenLocal() mavenLocal()
maven { url = uri("http://ci.athion.net/job/PlotSquared-Breaking/ws/mvn/") } maven { url = uri("http://ci.athion.net/job/PlotSquared-we/ws/mvn/") }
maven { url = uri("https://maven.sk89q.com/repo/") } maven { url = uri("https://maven.sk89q.com/repo/") }
maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots/") } maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots/") }
maven { url = uri("http://empcraft.com/maven2") } maven { url = uri("http://empcraft.com/maven2") }

Datei anzeigen

@ -2,3 +2,8 @@ group=com.sk89q.worldedit
#version=7.1.0-SNAPSHOT #version=7.1.0-SNAPSHOT
org.gradle.jvmargs=-Xmx1G org.gradle.jvmargs=-Xmx1G
#org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
org.gradle.caching=true

Datei anzeigen

@ -21,12 +21,10 @@ import com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter;
import com.sk89q.worldedit.internal.Constants; import com.sk89q.worldedit.internal.Constants;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypes;
import net.minecraft.server.v1_14_R1.BiomeBase; import net.minecraft.server.v1_14_R1.BiomeBase;
import net.minecraft.server.v1_14_R1.BlockPosition; import net.minecraft.server.v1_14_R1.BlockPosition;
import net.minecraft.server.v1_14_R1.Chunk; import net.minecraft.server.v1_14_R1.Chunk;
import net.minecraft.server.v1_14_R1.ChunkCoordIntPair;
import net.minecraft.server.v1_14_R1.ChunkSection; import net.minecraft.server.v1_14_R1.ChunkSection;
import net.minecraft.server.v1_14_R1.DataBits; import net.minecraft.server.v1_14_R1.DataBits;
import net.minecraft.server.v1_14_R1.DataPalette; import net.minecraft.server.v1_14_R1.DataPalette;
@ -36,11 +34,8 @@ import net.minecraft.server.v1_14_R1.DataPaletteLinear;
import net.minecraft.server.v1_14_R1.Entity; import net.minecraft.server.v1_14_R1.Entity;
import net.minecraft.server.v1_14_R1.EntityTypes; import net.minecraft.server.v1_14_R1.EntityTypes;
import net.minecraft.server.v1_14_R1.IBlockData; import net.minecraft.server.v1_14_R1.IBlockData;
import net.minecraft.server.v1_14_R1.LightEngineThreaded;
import net.minecraft.server.v1_14_R1.NBTTagCompound; import net.minecraft.server.v1_14_R1.NBTTagCompound;
import net.minecraft.server.v1_14_R1.NBTTagInt; import net.minecraft.server.v1_14_R1.NBTTagInt;
import net.minecraft.server.v1_14_R1.SectionPosition;
import net.minecraft.server.v1_14_R1.SystemUtils;
import net.minecraft.server.v1_14_R1.TileEntity; import net.minecraft.server.v1_14_R1.TileEntity;
import net.minecraft.server.v1_14_R1.WorldServer; import net.minecraft.server.v1_14_R1.WorldServer;
import org.bukkit.World; import org.bukkit.World;
@ -51,7 +46,6 @@ import org.bukkit.event.entity.CreatureSpawnEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.lang.reflect.Method;
import java.util.*; import java.util.*;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.Future; import java.util.concurrent.Future;
@ -205,11 +199,6 @@ public class BukkitGetBlocks_1_14 extends CharGetBlocks {
}; };
} }
@Override
public char[] load(int layer) {
return load(layer, null);
}
private void updateGet(BukkitGetBlocks_1_14 get, Chunk nmsChunk, ChunkSection[] sections, ChunkSection section, char[] arr, int layer) { private void updateGet(BukkitGetBlocks_1_14 get, Chunk nmsChunk, ChunkSection[] sections, ChunkSection section, char[] arr, int layer) {
synchronized (get) { synchronized (get) {
if (this.nmsChunk != nmsChunk) { if (this.nmsChunk != nmsChunk) {
@ -271,7 +260,7 @@ public class BukkitGetBlocks_1_14 extends CharGetBlocks {
bitMask |= 1 << layer; bitMask |= 1 << layer;
char[] setArr = set.getArray(layer); char[] setArr = set.load(layer);
ChunkSection newSection; ChunkSection newSection;
ChunkSection existingSection = sections[layer]; ChunkSection existingSection = sections[layer];
if (existingSection == null) { if (existingSection == null) {
@ -506,7 +495,7 @@ public class BukkitGetBlocks_1_14 extends CharGetBlocks {
} }
@Override @Override
public synchronized char[] load(int layer, char[] data) { public synchronized char[] update(int layer, char[] data) {
ChunkSection section = getSections()[layer]; ChunkSection section = getSections()[layer];
// Section is null, return empty array // Section is null, return empty array
if (section == null) { if (section == null) {

Datei anzeigen

@ -7,7 +7,7 @@ plugins {
} }
repositories { repositories {
maven { url = uri("http://ci.athion.net/job/PlotSquared-Breaking/ws/mvn/") } maven { url = uri("http://ci.athion.net/job/PlotSquared-we/ws/mvn/") }
} }
applyPlatformAndCoreConfiguration() applyPlatformAndCoreConfiguration()

Datei anzeigen

@ -219,6 +219,8 @@ public enum FaweCache implements Trimable {
public final CleanableThreadLocal<byte[]> BYTE_BUFFER_8192 = new CleanableThreadLocal<>(() -> new byte[8192]); public final CleanableThreadLocal<byte[]> BYTE_BUFFER_8192 = new CleanableThreadLocal<>(() -> new byte[8192]);
public final CleanableThreadLocal<byte[]> BYTE_BUFFER_256 = new CleanableThreadLocal<>(() -> new byte[256]);
public final CleanableThreadLocal<int[]> BLOCK_TO_PALETTE = new CleanableThreadLocal<>(() -> { public final CleanableThreadLocal<int[]> BLOCK_TO_PALETTE = new CleanableThreadLocal<>(() -> {
int[] result = new int[BlockTypesCache.states.length]; int[] result = new int[BlockTypesCache.states.length];
Arrays.fill(result, Integer.MAX_VALUE); Arrays.fill(result, Integer.MAX_VALUE);

Datei anzeigen

@ -29,7 +29,7 @@ public interface Filter {
* @param chunk * @param chunk
* @return * @return
*/ */
default IChunk applyChunk(IChunk chunk, @Nullable Region region) { default <T extends IChunk> T applyChunk(T chunk, @Nullable Region region) {
return chunk; return chunk;
} }

Datei anzeigen

@ -45,7 +45,7 @@ public interface IBatchProcessor {
for (int layer = 0; layer <= minLayer; layer++) { for (int layer = 0; layer <= minLayer; layer++) {
if (set.hasSection(layer)) { if (set.hasSection(layer)) {
if (layer == minLayer) { if (layer == minLayer) {
char[] arr = set.getArray(layer); char[] arr = set.load(layer);
int index = (minY & 15) << 8; int index = (minY & 15) << 8;
for (int i = 0; i < index; i++) arr[i] = 0; for (int i = 0; i < index; i++) arr[i] = 0;
set.setBlocks(layer, arr); set.setBlocks(layer, arr);
@ -58,7 +58,7 @@ public interface IBatchProcessor {
for (int layer = maxLayer; layer < FaweCache.IMP.CHUNK_LAYERS; layer++) { for (int layer = maxLayer; layer < FaweCache.IMP.CHUNK_LAYERS; layer++) {
if (set.hasSection(layer)) { if (set.hasSection(layer)) {
if (layer == minLayer) { if (layer == minLayer) {
char[] arr = set.getArray(layer); char[] arr = set.load(layer);
int index = ((maxY + 1) & 15) << 8; int index = ((maxY + 1) & 15) << 8;
for (int i = index; i < arr.length; i++) arr[i] = 0; for (int i = index; i < arr.length; i++) arr[i] = 0;
set.setBlocks(layer, arr); set.setBlocks(layer, arr);

Datei anzeigen

@ -2,19 +2,16 @@ package com.boydti.fawe.beta;
import com.boydti.fawe.FaweCache; import com.boydti.fawe.FaweCache;
import com.boydti.fawe.object.FaweOutputStream; import com.boydti.fawe.object.FaweOutputStream;
import com.boydti.fawe.object.collection.BitArray4096;
import com.boydti.fawe.object.io.FastByteArrayOutputStream; import com.boydti.fawe.object.io.FastByteArrayOutputStream;
import com.sk89q.jnbt.CompoundTag; import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.platform.Capability; import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.biome.BiomeTypes;
import com.sk89q.worldedit.world.block.BlockID; import com.sk89q.worldedit.world.block.BlockID;
import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.registry.BlockRegistry; import com.sk89q.worldedit.world.registry.BlockRegistry;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -26,7 +23,7 @@ public interface IBlocks extends Trimable {
boolean hasSection(int layer); boolean hasSection(int layer);
char[] getArray(int layer); char[] load(int layer);
BlockState getBlock(int x, int y, int z); BlockState getBlock(int x, int y, int z);
@ -64,7 +61,7 @@ public interface IBlocks extends Trimable {
for (int layer = 0; layer < FaweCache.IMP.CHUNK_LAYERS; layer++) { for (int layer = 0; layer < FaweCache.IMP.CHUNK_LAYERS; layer++) {
if (!this.hasSection(layer)) continue; if (!this.hasSection(layer)) continue;
char[] ids = this.getArray(layer); char[] ids = this.load(layer);
int nonEmpty = 0; // TODO optimize into same loop as toPalette int nonEmpty = 0; // TODO optimize into same loop as toPalette
for (int i = 0; i < ids.length; i++) { for (int i = 0; i < ids.length; i++) {

Datei anzeigen

@ -7,17 +7,13 @@ import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockStateHolder;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import javax.annotation.Nullable; import javax.annotation.Nullable;
/** /**
* Represents a chunk in the queue {@link IQueueExtent} Used for getting and setting blocks / biomes * Represents a chunk in the queue {@link IQueueExtent} Used for getting and setting blocks / biomes
* / entities * / entities
*/ */
public interface IChunk<T extends Future<T>> extends Trimable, Callable<T>, IChunkGet { public interface IChunk extends Trimable, IChunkGet, IChunkSet {
/** /**
* Initialize at the location * Initialize at the location
* (allows for reuse) * (allows for reuse)
@ -26,8 +22,7 @@ public interface IChunk<T extends Future<T>> extends Trimable, Callable<T>, IChu
* @param x * @param x
* @param z * @param z
*/ */
void init(IQueueExtent extent, int x, int z); default void init(IQueueExtent extent, int x, int z) {}
/** /**
* Get chunkX * Get chunkX
* @return * @return
@ -56,30 +51,6 @@ public interface IChunk<T extends Future<T>> extends Trimable, Callable<T>, IChu
*/ */
boolean isEmpty(); boolean isEmpty();
/**
* Apply the queued changes to the world containing this chunk.
* <p>The future returned may return another future. To ensure completion keep calling {@link
* Future#get()} on each result.</p>
*
* @return Future
*/
@Override
T call();
/**
* Call and join
* - Should be done async, if at all
* @throws ExecutionException
* @throws InterruptedException
*/
default void join() throws ExecutionException, InterruptedException {
T future = call();
while (future != null) {
future = future.get();
}
return;
}
/** /**
* Filter through all the blocks in the chunk * Filter through all the blocks in the chunk
* *
@ -89,14 +60,14 @@ public interface IChunk<T extends Future<T>> extends Trimable, Callable<T>, IChu
*/ */
void filterBlocks(Filter filter, ChunkFilterBlock block, @Nullable Region region); void filterBlocks(Filter filter, ChunkFilterBlock block, @Nullable Region region);
/** // /**
* Flood through all the blocks in the chunk // * Flood through all the blocks in the chunk
* TODO not implemented // * TODO not implemented
* @param flood // * @param flood
* @param mask // * @param mask
* @param block // * @param block
*/ // */
void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block); // void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block);
/* set - queues a change */ /* set - queues a change */
boolean setBiome(int x, int y, int z, BiomeType biome); boolean setBiome(int x, int y, int z, BiomeType biome);
@ -117,13 +88,8 @@ public interface IChunk<T extends Future<T>> extends Trimable, Callable<T>, IChu
@Override @Override
CompoundTag getTag(int x, int y, int z); CompoundTag getTag(int x, int y, int z);
/**
* Reset (defaults to just calling init)
* @return
*/
@Override @Override
default IBlocks reset() { default IChunk reset() {
init(null, getX(), getZ());
return this; return this;
} }
} }

Datei anzeigen

@ -21,13 +21,13 @@ import javax.annotation.Nullable;
* *
* @param <U> parent class * @param <U> parent class
*/ */
public interface IDelegateChunk<U extends IChunk> extends IChunk { public interface IDelegateChunk<U extends IQueueChunk> extends IQueueChunk {
U getParent(); U getParent();
@Override @Override
default IChunk getRoot() { default IQueueChunk getRoot() {
IChunk root = getParent(); IQueueChunk root = getParent();
while (root instanceof IDelegateChunk) { while (root instanceof IDelegateChunk) {
root = ((IDelegateChunk) root).getParent(); root = ((IDelegateChunk) root).getParent();
} }
@ -49,10 +49,10 @@ public interface IDelegateChunk<U extends IChunk> extends IChunk {
return getParent().hasSection(layer); return getParent().hasSection(layer);
} }
@Override // @Override
default void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block) { // default void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block) {
getParent().flood(flood, mask, block); // getParent().flood(flood, mask, block);
} // }
@Override @Override
default boolean setTile(int x, int y, int z, CompoundTag tag) { default boolean setTile(int x, int y, int z, CompoundTag tag) {
@ -84,11 +84,6 @@ public interface IDelegateChunk<U extends IChunk> extends IChunk {
return getParent().getFullBlock(x, y, z); return getParent().getFullBlock(x, y, z);
} }
@Override
default char[] load(int layer) {
return getParent().load(layer);
}
@Override @Override
default void init(IQueueExtent extent, int chunkX, int chunkZ) { default void init(IQueueExtent extent, int chunkX, int chunkZ) {
getParent().init(extent, chunkX, chunkZ); getParent().init(extent, chunkX, chunkZ);
@ -146,8 +141,33 @@ public interface IDelegateChunk<U extends IChunk> extends IChunk {
} }
@Override @Override
default char[] getArray(int layer) { default char[] load(int layer) {
return getParent().getArray(layer); return getParent().load(layer);
}
@Override
default void setBlocks(int layer, char[] data) {
getParent().setBlocks(layer, data);
}
@Override
default void setEntity(CompoundTag tag) {
getParent().setEntity(tag);
}
@Override
default void removeEntity(UUID uuid) {
getParent().removeEntity(uuid);
}
@Override
default Set<UUID> getEntityRemoves() {
return getParent().getEntityRemoves();
}
@Override
default BiomeType[] getBiomes() {
return getParent().getBiomes();
} }
default <T extends IChunk> T findParent(Class<T> clazz) { default <T extends IChunk> T findParent(Class<T> clazz) {

Datei anzeigen

@ -35,9 +35,9 @@ import java.util.concurrent.Future;
/** /**
* Delegate for IQueueExtent * Delegate for IQueueExtent
*/ */
public interface IDelegateQueueExtent extends IQueueExtent { public interface IDelegateQueueExtent<T extends IQueueChunk> extends IQueueExtent<T> {
IQueueExtent getParent(); IQueueExtent<T> getParent();
@Override @Override
default boolean isQueueEnabled() { default boolean isQueueEnabled() {
@ -70,12 +70,12 @@ public interface IDelegateQueueExtent extends IQueueExtent {
} }
@Override @Override
default IChunk getOrCreateChunk(int x, int z) { default T getOrCreateChunk(int x, int z) {
return getParent().getOrCreateChunk(x, z); return getParent().getOrCreateChunk(x, z);
} }
@Override @Override
default <T extends Future<T>> T submit(IChunk<T> chunk) { default <V extends Future<V>> V submit(T chunk) {
return getParent().submit(chunk); return getParent().submit(chunk);
} }
@ -120,12 +120,12 @@ public interface IDelegateQueueExtent extends IQueueExtent {
} }
@Override @Override
default IChunk create(boolean isFull) { default T create(boolean isFull) {
return getParent().create(isFull); return getParent().create(isFull);
} }
@Override @Override
default IChunk wrap(IChunk root) { default T wrap(T root) {
return getParent().wrap(root); return getParent().wrap(root);
} }

Datei anzeigen

@ -0,0 +1,41 @@
package com.boydti.fawe.beta;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public interface IQueueChunk<T extends Future<T>> extends IChunk, Callable<T> {
/**
* Reset (defaults to just calling init)
* @return
*/
@Override
default IQueueChunk reset() {
init(null, getX(), getZ());
return this;
}
/**
* Apply the queued changes to the world containing this chunk.
* <p>The future returned may return another future. To ensure completion keep calling {@link
* Future#get()} on each result.</p>
*
* @return Future
*/
@Override
T call();
/**
* Call and join
* - Should be done async, if at all
* @throws ExecutionException
* @throws InterruptedException
*/
default void join() throws ExecutionException, InterruptedException {
T future = call();
while (future != null) {
future = future.get();
}
return;
}
}

Datei anzeigen

@ -25,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, IChunkExtent, IBatchProcessorHolder { public interface IQueueExtent<T extends IChunk> extends Flushable, Trimable, IChunkExtent<T>, IBatchProcessorHolder {
@Override @Override
default boolean isQueueEnabled() { default boolean isQueueEnabled() {
@ -78,7 +78,7 @@ public interface IQueueExtent extends Flushable, Trimable, IChunkExtent, IBatchP
* @param chunk * @param chunk
* @return result * @return result
*/ */
<T extends Future<T>> T submit(IChunk<T> chunk); <V extends Future<V>> V submit(T chunk);
@Override @Override
default BlockVector3 getMinimumPoint() { default BlockVector3 getMinimumPoint() {
@ -93,12 +93,12 @@ public interface IQueueExtent extends Flushable, Trimable, IChunkExtent, IBatchP
/** /**
* Create a new root IChunk object<br> - Full chunks will be reused, so a more optimized chunk * Create a new root IChunk object<br> - Full chunks will be reused, so a more optimized chunk
* can be returned in that case<br> - Don't wrap the chunk, that should be done in {@link * can be returned in that case<br> - Don't wrap the chunk, that should be done in {@link
* #wrap(IChunk)} * #wrap(T)}
* *
* @param isFull true if a more optimized chunk should be returned * @param isFull true if a more optimized chunk should be returned
* @return a more optimized chunk object * @return a more optimized chunk object
*/ */
IChunk create(boolean isFull); T create(boolean isFull);
/** /**
* Wrap the chunk object (i.e. for region restrictions / limits etc.) * Wrap the chunk object (i.e. for region restrictions / limits etc.)
@ -106,7 +106,7 @@ public interface IQueueExtent extends Flushable, Trimable, IChunkExtent, IBatchP
* @param root * @param root
* @return wrapped chunk * @return wrapped chunk
*/ */
default IChunk wrap(IChunk root) { default T wrap(T root) {
return root; return root;
} }
@ -148,11 +148,11 @@ public interface IQueueExtent extends Flushable, Trimable, IChunkExtent, IBatchP
if (!filter.appliesChunk(chunkX, chunkZ)) { if (!filter.appliesChunk(chunkX, chunkZ)) {
return block; return block;
} }
IChunk chunk = this.getOrCreateChunk(chunkX, chunkZ); T chunk = this.getOrCreateChunk(chunkX, chunkZ);
// Initialize // Initialize
chunk.init(this, chunkX, chunkZ); chunk.init(this, chunkX, chunkZ);
IChunk newChunk = filter.applyChunk(chunk, region); T newChunk = filter.applyChunk(chunk, region);
if (newChunk != null) { if (newChunk != null) {
chunk = newChunk; chunk = newChunk;
if (block == null) { if (block == null) {

Datei anzeigen

@ -9,7 +9,7 @@ import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockStateHolder;
public interface IChunkExtent extends Extent { public interface IChunkExtent<T extends IChunk> extends Extent {
/** /**
* Get the IChunk at a position (and cache it if it's not already) * Get the IChunk at a position (and cache it if it's not already)
* *
@ -17,7 +17,7 @@ public interface IChunkExtent extends Extent {
* @param z * @param z
* @return IChunk * @return IChunk
*/ */
IChunk getOrCreateChunk(int chunkX, int chunkZ); T getOrCreateChunk(int chunkX, int chunkZ);
@Override @Override
default boolean setBlock(int x, int y, int z, BlockStateHolder state) { default boolean setBlock(int x, int y, int z, BlockStateHolder state) {

Datei anzeigen

@ -80,7 +80,7 @@ public class BitSetBlocks implements IChunkSet {
} }
@Override @Override
public char[] getArray(int layer) { public char[] load(int layer) {
char[] arr = FaweCache.IMP.SECTION_BITS_TO_CHAR.get(); char[] arr = FaweCache.IMP.SECTION_BITS_TO_CHAR.get();
MemBlockSet.IRow nullRowY = row.getRow(layer); MemBlockSet.IRow nullRowY = row.getRow(layer);
if (nullRowY instanceof MemBlockSet.RowY) { if (nullRowY instanceof MemBlockSet.RowY) {

Datei anzeigen

@ -2,16 +2,9 @@ package com.boydti.fawe.beta.implementation.blocks;
import com.boydti.fawe.beta.IBlocks; import com.boydti.fawe.beta.IBlocks;
import com.boydti.fawe.beta.IChunkSet; import com.boydti.fawe.beta.IChunkSet;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.block.BlockTypesCache; import com.sk89q.worldedit.world.block.BlockTypesCache;
import java.util.Map;
import java.util.Set;
public abstract class CharBlocks implements IBlocks { public abstract class CharBlocks implements IBlocks {
public static final Section FULL = new Section() { public static final Section FULL = new Section() {
@ -26,9 +19,9 @@ public abstract class CharBlocks implements IBlocks {
blocks.sections[layer] = FULL; blocks.sections[layer] = FULL;
char[] arr = blocks.blocks[layer]; char[] arr = blocks.blocks[layer];
if (arr == null) { if (arr == null) {
arr = blocks.blocks[layer] = blocks.load(layer); arr = blocks.blocks[layer] = blocks.update(layer, null);
} else { } else {
blocks.blocks[layer] = blocks.load(layer, arr); blocks.blocks[layer] = blocks.update(layer, arr);
} }
return arr; return arr;
} }
@ -74,11 +67,10 @@ public abstract class CharBlocks implements IBlocks {
sections[layer] = EMPTY; sections[layer] = EMPTY;
} }
public char[] load(int layer) { public char[] update(int layer, char[] data) {
return new char[4096]; if (data == null) {
} return new char[4096];
}
public char[] load(int layer, char[] data) {
for (int i = 0; i < 4096; i++) { for (int i = 0; i < 4096; i++) {
data[i] = 0; data[i] = 0;
} }
@ -91,7 +83,7 @@ public abstract class CharBlocks implements IBlocks {
} }
@Override @Override
public char[] getArray(int layer) { public char[] load(int layer) {
return sections[layer].get(this, layer); return sections[layer].get(this, layer);
} }

Datei anzeigen

@ -54,8 +54,8 @@ public interface DelegateChunkSet extends IChunkSet {
} }
@Override @Override
default char[] getArray(int layer) { default char[] load(int layer) {
return getParent().getArray(layer); return getParent().load(layer);
} }
@Override @Override

Datei anzeigen

@ -4,7 +4,6 @@ import com.boydti.fawe.FaweCache;
import com.boydti.fawe.beta.IBlocks; import com.boydti.fawe.beta.IBlocks;
import com.boydti.fawe.beta.IChunkGet; import com.boydti.fawe.beta.IChunkGet;
import com.boydti.fawe.beta.IChunkSet; import com.boydti.fawe.beta.IChunkSet;
import com.boydti.fawe.util.MathMan;
import com.sk89q.jnbt.CompoundTag; import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.entity.Entity;
@ -90,7 +89,7 @@ public class FallbackChunkGet implements IChunkGet {
public <T extends Future<T>> T call(IChunkSet set, Runnable finalize) { public <T extends Future<T>> T call(IChunkSet set, Runnable finalize) {
for (int layer = 0; layer < 16; layer++) { for (int layer = 0; layer < 16; layer++) {
if (set.hasSection(layer)) { if (set.hasSection(layer)) {
char[] arr = set.getArray(layer); char[] arr = set.load(layer);
int by = layer << 4; int by = layer << 4;
for (int y = 0, i = 0; y < 16; y++) { for (int y = 0, i = 0; y < 16; y++) {
for (int z = 0; z < 16; z++) { for (int z = 0; z < 16; z++) {
@ -160,11 +159,6 @@ public class FallbackChunkGet implements IChunkGet {
return true; return true;
} }
@Override
public char[] getArray(int layer) {
return new char[0];
}
@Override @Override
public IBlocks reset() { public IBlocks reset() {
return null; return null;

Datei anzeigen

@ -76,11 +76,6 @@ public enum NullChunkGet implements IChunkGet {
return false; return false;
} }
@Override
public char[] getArray(int layer) {
return new char[0];
}
@Override @Override
public IBlocks reset() { public IBlocks reset() {
return null; return null;

Datei anzeigen

@ -1,10 +1,9 @@
package com.boydti.fawe.beta.implementation.chunk; package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.FaweCache; import com.boydti.fawe.FaweCache;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock; import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock;
import com.boydti.fawe.beta.Filter; import com.boydti.fawe.beta.Filter;
import com.boydti.fawe.beta.FilterBlockMask;
import com.boydti.fawe.beta.Flood;
import com.boydti.fawe.beta.IChunk; import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IChunkGet; import com.boydti.fawe.beta.IChunkGet;
import com.boydti.fawe.beta.IChunkSet; import com.boydti.fawe.beta.IChunkSet;
@ -27,7 +26,7 @@ import javax.annotation.Nullable;
/** /**
* An abstract {@link IChunk} class that implements basic get/set blocks * An abstract {@link IChunk} class that implements basic get/set blocks
*/ */
public class ChunkHolder<T extends Future<T>> implements IChunk { public class ChunkHolder<T extends Future<T>> implements IQueueChunk {
private static FaweCache.Pool<ChunkHolder> POOL = FaweCache.IMP.registerPool(ChunkHolder.class, ChunkHolder::new, Settings.IMP.QUEUE.POOL); private static FaweCache.Pool<ChunkHolder> POOL = FaweCache.IMP.registerPool(ChunkHolder.class, ChunkHolder::new, Settings.IMP.QUEUE.POOL);
@ -61,7 +60,32 @@ public class ChunkHolder<T extends Future<T>> implements IChunk {
@Override @Override
public boolean setTile(int x, int y, int z, CompoundTag tag) { public boolean setTile(int x, int y, int z, CompoundTag tag) {
return false; return delegate.set(this).setTile(x, y, z, tag);
}
@Override
public void setEntity(CompoundTag tag) {
delegate.set(this).setEntity(tag);
}
@Override
public void removeEntity(UUID uuid) {
delegate.set(this).removeEntity(uuid);
}
@Override
public Set<UUID> getEntityRemoves() {
return delegate.set(this).getEntityRemoves();
}
@Override
public BiomeType[] getBiomes() {
return delegate.set(this).getBiomes(); // TODO return get?
}
@Override
public void setBlocks(int layer, char[] data) {
delegate.set(this).setBlocks(layer, data);
} }
@Override @Override
@ -259,10 +283,10 @@ public class ChunkHolder<T extends Future<T>> implements IChunk {
} }
}; };
@Override // @Override
public void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block) { // public void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block) {
// block.flood(get, set, mask, block, ); //// block.flood(get, set, mask, block, );
} // }
@Override @Override
public CompoundTag getTag(int x, int y, int z) { public CompoundTag getTag(int x, int y, int z) {
@ -285,11 +309,6 @@ public class ChunkHolder<T extends Future<T>> implements IChunk {
return chunkExisting != null && chunkExisting.hasSection(layer); return chunkExisting != null && chunkExisting.hasSection(layer);
} }
@Override
public char[] getArray(int layer) {
return delegate.get(this).getArray(layer);
}
@Override @Override
public void filterBlocks(Filter filter, ChunkFilterBlock block, @Nullable Region region) { public void filterBlocks(Filter filter, ChunkFilterBlock block, @Nullable Region region) {
final IChunkGet get = getOrCreateGet(); final IChunkGet get = getOrCreateGet();

Datei anzeigen

@ -2,11 +2,17 @@ package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IChunk; import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IDelegateChunk; import com.boydti.fawe.beta.IDelegateChunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.world.biome.BiomeType;
import java.util.Set;
import java.util.UUID;
/** /**
* Implementation of IDelegateChunk * Implementation of IDelegateChunk
*/ */
public class DelegateChunk<T extends IChunk> implements IDelegateChunk<T> { public class DelegateChunk<T extends IQueueChunk> implements IDelegateChunk<T> {
private T parent; private T parent;

Datei anzeigen

@ -1,6 +1,6 @@
package com.boydti.fawe.beta.implementation.chunk; package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IChunk; import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.IQueueExtent; import com.boydti.fawe.beta.IQueueExtent;
/** /**
@ -11,7 +11,7 @@ public class FinalizedChunk extends DelegateChunk {
private final IQueueExtent queueExtent; private final IQueueExtent queueExtent;
public FinalizedChunk(IChunk parent, IQueueExtent queueExtent) { public FinalizedChunk(IQueueChunk parent, IQueueExtent queueExtent) {
super(parent); super(parent);
this.queueExtent = queueExtent; this.queueExtent = queueExtent;
} }

Datei anzeigen

@ -1,5 +1,6 @@
package com.boydti.fawe.beta.implementation.chunk; package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock; import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock;
import com.boydti.fawe.beta.Filter; import com.boydti.fawe.beta.Filter;
import com.boydti.fawe.beta.FilterBlockMask; import com.boydti.fawe.beta.FilterBlockMask;
@ -23,7 +24,7 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.Future; import java.util.concurrent.Future;
public enum NullChunk implements IChunk { public enum NullChunk implements IQueueChunk {
INSTANCE; INSTANCE;
@Override @Override
@ -54,10 +55,10 @@ public enum NullChunk implements IChunk {
} }
@Override // @Override
public void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block) { // public void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block) {
//
} // }
@Override @Override
public boolean setBiome(int x, int y, int z, BiomeType biome) { public boolean setBiome(int x, int y, int z, BiomeType biome) {
@ -69,11 +70,36 @@ public enum NullChunk implements IChunk {
return false; return false;
} }
@Override
public void setEntity(CompoundTag tag) {
}
@Override
public void removeEntity(UUID uuid) {
}
@Override
public Set<UUID> getEntityRemoves() {
return null;
}
@Override
public BiomeType[] getBiomes() {
return null;
}
@Override @Override
public boolean setBlock(int x, int y, int z, BlockStateHolder block) { public boolean setBlock(int x, int y, int z, BlockStateHolder block) {
return false; return false;
} }
@Override
public void setBlocks(int layer, char[] data) {
}
@Override @Override
public BiomeType getBiomeType(int x, int z) { public BiomeType getBiomeType(int x, int z) {
return null; return null;
@ -84,11 +110,6 @@ public enum NullChunk implements IChunk {
return false; return false;
} }
@Override
public char[] getArray(int layer) {
return null;
}
@Override @Override
public BlockState getBlock(int x, int y, int z) { public BlockState getBlock(int x, int y, int z) {
return BlockTypes.__RESERVED__.getDefaultState(); return BlockTypes.__RESERVED__.getDefaultState();

Datei anzeigen

@ -2,6 +2,7 @@ package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IChunk; import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IDelegateChunk; import com.boydti.fawe.beta.IDelegateChunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.IQueueExtent; import com.boydti.fawe.beta.IQueueExtent;
import java.lang.ref.Reference; import java.lang.ref.Reference;
@ -14,14 +15,14 @@ public abstract class ReferenceChunk implements IDelegateChunk {
private final Reference<FinalizedChunk> reference; private final Reference<FinalizedChunk> reference;
public ReferenceChunk(IChunk parent, IQueueExtent queueExtent) { public ReferenceChunk(IQueueChunk parent, IQueueExtent queueExtent) {
this.reference = toReference(new FinalizedChunk(parent, queueExtent)); this.reference = toReference(new FinalizedChunk(parent, queueExtent));
} }
protected abstract Reference<FinalizedChunk> toReference(FinalizedChunk parent); protected abstract Reference<FinalizedChunk> toReference(FinalizedChunk parent);
@Override @Override
public IChunk getParent() { public IQueueChunk getParent() {
final FinalizedChunk finalized = reference.get(); final FinalizedChunk finalized = reference.get();
return finalized != null ? finalized.getParent() : null; return finalized != null ? finalized.getParent() : null;
} }

Datei anzeigen

@ -1,6 +1,7 @@
package com.boydti.fawe.beta.implementation.chunk; package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IChunk; import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.IQueueExtent; import com.boydti.fawe.beta.IQueueExtent;
import java.lang.ref.Reference; import java.lang.ref.Reference;
import java.lang.ref.SoftReference; import java.lang.ref.SoftReference;
@ -10,7 +11,7 @@ import java.lang.ref.SoftReference;
*/ */
public class SoftChunk extends ReferenceChunk { public class SoftChunk extends ReferenceChunk {
public SoftChunk(IChunk parent, IQueueExtent queueExtent) { public SoftChunk(IQueueChunk parent, IQueueExtent queueExtent) {
super(parent, queueExtent); super(parent, queueExtent);
} }

Datei anzeigen

@ -1,6 +1,7 @@
package com.boydti.fawe.beta.implementation.chunk; package com.boydti.fawe.beta.implementation.chunk;
import com.boydti.fawe.beta.IChunk; import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.IQueueExtent; import com.boydti.fawe.beta.IQueueExtent;
import java.lang.ref.Reference; import java.lang.ref.Reference;
@ -11,7 +12,7 @@ import java.lang.ref.WeakReference;
*/ */
public class WeakChunk extends ReferenceChunk { public class WeakChunk extends ReferenceChunk {
public WeakChunk(IChunk parent, IQueueExtent queueExtent) { public WeakChunk(IQueueChunk parent, IQueueExtent queueExtent) {
super(parent, queueExtent); super(parent, queueExtent);
} }

Datei anzeigen

@ -94,7 +94,7 @@ public class CharFilterBlock extends ChunkFilterBlock {
this.set = iset; this.set = iset;
getArr = get.sections[layer].get(get, layer); getArr = get.sections[layer].get(get, layer);
if (set.hasSection(layer)) { if (set.hasSection(layer)) {
setArr = set.getArray(layer); setArr = set.load(layer);
delegate = FULL; delegate = FULL;
} else { } else {
delegate = NULL; delegate = NULL;
@ -409,7 +409,7 @@ public class CharFilterBlock extends ChunkFilterBlock {
Set delegate Set delegate
*/ */
private SetDelegate initSet() { private SetDelegate initSet() {
setArr = set.getArray(layer); setArr = set.load(layer);
return delegate = FULL; return delegate = FULL;
} }

Datei anzeigen

@ -6,6 +6,7 @@ import com.boydti.fawe.beta.IBatchProcessor;
import com.boydti.fawe.beta.IChunk; import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IChunkGet; import com.boydti.fawe.beta.IChunkGet;
import com.boydti.fawe.beta.IChunkSet; import com.boydti.fawe.beta.IChunkSet;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.IQueueExtent; import com.boydti.fawe.beta.IQueueExtent;
import com.boydti.fawe.beta.Trimable; import com.boydti.fawe.beta.Trimable;
import com.boydti.fawe.beta.implementation.cache.ChunkCache; import com.boydti.fawe.beta.implementation.cache.ChunkCache;
@ -228,7 +229,7 @@ public abstract class QueueHandler implements Trimable, Runnable {
} }
} }
public <T extends Future<T>> T submit(IChunk<T> chunk) { public <T extends Future<T>> T submit(IQueueChunk<T> chunk) {
// if (MemUtil.isMemoryFree()) { TODO NOT IMPLEMENTED - optimize this // if (MemUtil.isMemoryFree()) { TODO NOT IMPLEMENTED - optimize this
// return (T) forkJoinPoolSecondary.submit(chunk); // return (T) forkJoinPoolSecondary.submit(chunk);
// } // }

Datei anzeigen

@ -1,6 +1,7 @@
package com.boydti.fawe.beta.implementation.queue; package com.boydti.fawe.beta.implementation.queue;
import com.boydti.fawe.Fawe; import com.boydti.fawe.Fawe;
import com.boydti.fawe.beta.IQueueChunk;
import com.boydti.fawe.beta.implementation.filter.block.CharFilterBlock; import com.boydti.fawe.beta.implementation.filter.block.CharFilterBlock;
import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock; import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock;
import com.boydti.fawe.beta.IBatchProcessor; import com.boydti.fawe.beta.IBatchProcessor;
@ -34,12 +35,12 @@ import java.util.concurrent.Future;
* <p> * <p>
* This queue is reusable {@link #init(IChunkCache)} * This queue is reusable {@link #init(IChunkCache)}
*/ */
public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implements IQueueExtent { public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implements IQueueExtent<IQueueChunk> {
// // Pool discarded chunks for reuse (can safely be cleared by another thread) // // Pool discarded chunks for reuse (can safely be cleared by another thread)
// private static final ConcurrentLinkedQueue<IChunk> CHUNK_POOL = new ConcurrentLinkedQueue<>(); // private static final ConcurrentLinkedQueue<IChunk> CHUNK_POOL = new ConcurrentLinkedQueue<>();
// Chunks currently being queued / worked on // Chunks currently being queued / worked on
private final Long2ObjectLinkedOpenHashMap<IChunk> chunks = new Long2ObjectLinkedOpenHashMap<>(); private final Long2ObjectLinkedOpenHashMap<IQueueChunk> chunks = new Long2ObjectLinkedOpenHashMap<>();
private IChunkCache<IChunkGet> cacheGet; private IChunkCache<IChunkGet> cacheGet;
private IChunkCache<IChunkSet> cacheSet; private IChunkCache<IChunkSet> cacheSet;
@ -48,7 +49,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
private Thread currentThread; private Thread currentThread;
private ConcurrentLinkedQueue<Future> submissions = new ConcurrentLinkedQueue<>(); private ConcurrentLinkedQueue<Future> submissions = new ConcurrentLinkedQueue<>();
// Last access pointers // Last access pointers
private IChunk lastChunk; private IQueueChunk lastChunk;
private long lastPair = Long.MAX_VALUE; private long lastPair = Long.MAX_VALUE;
private boolean enabledQueue = true; private boolean enabledQueue = true;
@ -135,7 +136,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
} }
@Override @Override
public <T extends Future<T>> T submit(IChunk<T> chunk) { public <V extends Future<V>> V submit(IQueueChunk chunk) {
if (lastChunk == chunk) { if (lastChunk == chunk) {
lastPair = Long.MAX_VALUE; lastPair = Long.MAX_VALUE;
lastChunk = null; lastChunk = null;
@ -152,18 +153,18 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
* @param <T> * @param <T>
* @return * @return
*/ */
private <T extends Future<T>> T submitUnchecked(IChunk<T> chunk) { private <V extends Future<V>> V submitUnchecked(IQueueChunk chunk) {
if (chunk.isEmpty()) { if (chunk.isEmpty()) {
chunk.recycle(); chunk.recycle();
Future result = Futures.immediateFuture(null); Future result = Futures.immediateFuture(null);
return (T) result; return (V) result;
} }
if (Fawe.isMainThread()) { if (Fawe.isMainThread()) {
return chunk.call(); return (V) chunk.call();
} }
return Fawe.get().getQueueHandler().submit(chunk); return (V) Fawe.get().getQueueHandler().submit(chunk);
} }
@Override @Override
@ -195,14 +196,14 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
* @param Z * @param Z
* @return IChunk * @return IChunk
*/ */
private IChunk poolOrCreate(int X, int Z) { private ChunkHolder poolOrCreate(int X, int Z) {
IChunk next = create(false); ChunkHolder next = create(false);
next.init(this, X, Z); next.init(this, X, Z);
return next; return next;
} }
@Override @Override
public final IChunk getOrCreateChunk(int x, int z) { public final IQueueChunk getOrCreateChunk(int x, int z) {
final long pair = (long) x << 32 | z & 0xffffffffL; final long pair = (long) x << 32 | z & 0xffffffffL;
if (pair == lastPair) { if (pair == lastPair) {
return lastChunk; return lastChunk;
@ -213,7 +214,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
return NullChunk.INSTANCE; return NullChunk.INSTANCE;
} }
IChunk chunk = chunks.get(pair); IQueueChunk chunk = chunks.get(pair);
if (chunk instanceof ReferenceChunk) { if (chunk instanceof ReferenceChunk) {
chunk = ((ReferenceChunk) chunk).getParent(); chunk = ((ReferenceChunk) chunk).getParent();
} }
@ -251,7 +252,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
} }
@Override @Override
public IChunk create(boolean isFull) { public ChunkHolder create(boolean isFull) {
return ChunkHolder.newInstance(); return ChunkHolder.newInstance();
} }
@ -299,7 +300,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
public synchronized void flush() { public synchronized void flush() {
if (!chunks.isEmpty()) { if (!chunks.isEmpty()) {
if (MemUtil.isMemoryLimited()) { if (MemUtil.isMemoryLimited()) {
for (IChunk chunk : chunks.values()) { for (IQueueChunk chunk : chunks.values()) {
final Future future = submitUnchecked(chunk); final Future future = submitUnchecked(chunk);
if (future != null && !future.isDone()) { if (future != null && !future.isDone()) {
pollSubmissions(Settings.IMP.QUEUE.PARALLEL_THREADS, true); pollSubmissions(Settings.IMP.QUEUE.PARALLEL_THREADS, true);
@ -307,7 +308,7 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen
} }
} }
} else { } else {
for (IChunk chunk : chunks.values()) { for (IQueueChunk chunk : chunks.values()) {
final Future future = submitUnchecked(chunk); final Future future = submitUnchecked(chunk);
if (future != null && !future.isDone()) { if (future != null && !future.isDone()) {
submissions.add(future); submissions.add(future);

Datei anzeigen

@ -1,7 +1,11 @@
package com.boydti.fawe.jnbt.anvil; package com.boydti.fawe.jnbt.anvil;
import com.boydti.fawe.FaweCache; import com.boydti.fawe.FaweCache;
import com.boydti.fawe.beta.Filter;
import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IChunkSet; import com.boydti.fawe.beta.IChunkSet;
import com.boydti.fawe.beta.IQueueExtent;
import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock;
import com.boydti.fawe.jnbt.streamer.StreamDelegate; import com.boydti.fawe.jnbt.streamer.StreamDelegate;
import com.boydti.fawe.jnbt.streamer.ValueReader; import com.boydti.fawe.jnbt.streamer.ValueReader;
import com.boydti.fawe.object.collection.BitArray4096; import com.boydti.fawe.object.collection.BitArray4096;
@ -15,9 +19,11 @@ import com.sk89q.jnbt.NBTInputStream;
import com.sk89q.jnbt.NBTOutputStream; import com.sk89q.jnbt.NBTOutputStream;
import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.registry.state.Property; import com.sk89q.worldedit.registry.state.Property;
import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.biome.BiomeTypes; import com.sk89q.worldedit.world.biome.BiomeTypes;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockID; import com.sk89q.worldedit.world.block.BlockID;
import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockStateHolder;
@ -25,6 +31,7 @@ import com.sk89q.worldedit.world.block.BlockType;
import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.block.BlockTypesCache; import com.sk89q.worldedit.world.block.BlockTypesCache;
import javax.annotation.Nullable;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -34,12 +41,13 @@ import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.Future;
public class MCAChunk implements IChunkSet { public class MCAChunk implements IChunk {
public final boolean[] hasSections = new boolean[16]; public final boolean[] hasSections = new boolean[16];
public boolean hasBiomes = false; public boolean hasBiomes = false;
public final byte[] biomes = new byte[256]; public final BiomeType[] biomes = new BiomeType[256];
public final char[] blocks = new char[65536]; public final char[] blocks = new char[65536];
@ -92,6 +100,13 @@ public class MCAChunk implements IChunkSet {
read(nis, readPos); read(nis, readPos);
} }
@Override
public void init(IQueueExtent extent, int x, int z) {
if (x != chunkX || z != chunkZ) {
throw new UnsupportedOperationException("Not reuse capable");
}
}
public void read(NBTInputStream nis, boolean readPos) throws IOException { public void read(NBTInputStream nis, boolean readPos) throws IOException {
StreamDelegate root = createDelegate(nis, readPos); StreamDelegate root = createDelegate(nis, readPos);
nis.readNamedTagLazy(root); nis.readNamedTagLazy(root);
@ -153,7 +168,7 @@ public class MCAChunk implements IChunkSet {
CompoundTag entity = FaweCache.IMP.asTag(value); CompoundTag entity = FaweCache.IMP.asTag(value);
entities.put(entity.getUUID(), entity); entities.put(entity.getUUID(), entity);
}); });
level.add("Biomes").withInt((index, value) -> biomes[index] = (byte) value); level.add("Biomes").withInt((index, value) -> biomes[index] = BiomeTypes.getLegacy(value));
return root; return root;
} }
@ -177,11 +192,11 @@ public class MCAChunk implements IChunkSet {
} }
@Override @Override
public IChunkSet reset() { public MCAChunk reset() {
return this.reset(true); return this.reset(true);
} }
public IChunkSet reset(boolean full) { public MCAChunk reset(boolean full) {
if (!tiles.isEmpty()) { if (!tiles.isEmpty()) {
tiles.clear(); tiles.clear();
} }
@ -226,7 +241,12 @@ public class MCAChunk implements IChunkSet {
out.writeNamedTag("InhabitedTime", inhabitedTime); out.writeNamedTag("InhabitedTime", inhabitedTime);
out.writeNamedTag("LastUpdate", lastUpdate); out.writeNamedTag("LastUpdate", lastUpdate);
if (hasBiomes) { if (hasBiomes) {
out.writeNamedTag("Biomes", biomes); int type = NBTConstants.TYPE_BYTE_ARRAY;
out.writeNamedTagName("Biomes", type);
out.writeInt(biomes.length);
for (int i = 0; i < biomes.length; i++) {
out.write(biomes[i].getLegacyId());
}
} }
int len = 0; int len = 0;
for (boolean hasSection : hasSections) { for (boolean hasSection : hasSections) {
@ -424,16 +444,12 @@ public class MCAChunk implements IChunkSet {
@Override @Override
public BiomeType getBiomeType(int x, int z) { public BiomeType getBiomeType(int x, int z) {
return BiomeTypes.get(this.biomes[(z << 4) | x] & 0xFF); return this.biomes[(z << 4) | x];
} }
@Override @Override
public BiomeType[] getBiomes() { public BiomeType[] getBiomes() {
BiomeType[] tmp = new BiomeType[256]; return this.biomes;
for (int i = 0; i < 256; i++) {
tmp[i] = BiomeTypes.get(this.biomes[i] & 0xFF);
}
return tmp;
} }
@Override @Override
@ -444,7 +460,7 @@ public class MCAChunk implements IChunkSet {
@Override @Override
public boolean setBiome(int x, int y, int z, BiomeType biome) { public boolean setBiome(int x, int y, int z, BiomeType biome) {
setModified(); setModified();
biomes[x + (z << 4)] = (byte) biome.getInternalId(); biomes[x + (z << 4)] = biome;
return true; return true;
} }
@ -479,6 +495,16 @@ public class MCAChunk implements IChunkSet {
return BlockState.getFromOrdinal(ordinal); return BlockState.getFromOrdinal(ordinal);
} }
@Override
public BaseBlock getFullBlock(int x, int y, int z) {
return null;
}
@Override
public CompoundTag getTag(int x, int y, int z) {
return null;
}
public Set<UUID> getEntityRemoves() { public Set<UUID> getEntityRemoves() {
return new HashSet<>(); return new HashSet<>();
} }
@ -499,7 +525,7 @@ public class MCAChunk implements IChunkSet {
} }
@Override @Override
public char[] getArray(int layer) { public char[] load(int layer) {
char[] tmp = FaweCache.IMP.SECTION_BITS_TO_CHAR.get(); char[] tmp = FaweCache.IMP.SECTION_BITS_TO_CHAR.get();
int offset = layer << 12; int offset = layer << 12;
for (int i = 0; i < 4096; i++) { for (int i = 0; i < 4096; i++) {
@ -513,7 +539,7 @@ public class MCAChunk implements IChunkSet {
} }
public void setBiome(BiomeType biome) { public void setBiome(BiomeType biome) {
Arrays.fill(biomes, (byte) biome.getInternalId()); Arrays.fill(this.biomes, biome);
} }
public void removeEntity(UUID uuid) { public void removeEntity(UUID uuid) {
@ -524,4 +550,34 @@ public class MCAChunk implements IChunkSet {
public boolean trim(boolean aggressive) { public boolean trim(boolean aggressive) {
return isEmpty(); return isEmpty();
} }
@Override
public CompoundTag getEntity(UUID uuid) {
return this.entities.get(uuid);
}
@Override
public Future call(IChunkSet set, Runnable finalize) {
return null;
}
@Override
public void filterBlocks(Filter filter, ChunkFilterBlock block, @Nullable Region region) {
try {
if (region != null) {
region.filter(this, filter, block, this, this);
} else {
block = block.init(chunkX, chunkZ, this);
for (int layer = 0; layer < 16; layer++) {
if (!this.hasSection(layer) || !filter.appliesLayer(this, layer)) {
continue;
}
block.init(this, this, layer);
block.filter(filter);
}
}
} finally {
filter.finishChunk(this);
}
}
} }

Datei anzeigen

@ -1584,7 +1584,7 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
int index; int index;
int maxY = 0; int maxY = 0;
int minY = Integer.MAX_VALUE; int minY = Integer.MAX_VALUE;
byte[] heightMap = chunk.biomes; byte[] heightMap = FaweCache.IMP.BYTE_BUFFER_256.get();
int globalIndex; int globalIndex;
for (int z = csz; z <= cez; z++) { for (int z = csz; z <= cez; z++) {
globalIndex = z * getWidth() + csx; globalIndex = z * getWidth() + csx;
@ -1717,7 +1717,10 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
} }
for (int i = 0; i < 256; i++) { for (int i = 0; i < 256; i++) {
chunk.biomes[i] = biomes[indexes[i]]; byte biomeId = biomes[indexes[i]];
if (biomeId != 0) {
chunk.biomes[i] = BiomeTypes.get(biomeId);
}
} }

Datei anzeigen

@ -173,11 +173,11 @@ public abstract class FaweChangeSet implements ChangeSet, IBatchProcessor {
for (int layer = 0; layer < 16; layer++) { for (int layer = 0; layer < 16; layer++) {
if (!set.hasSection(layer)) continue; if (!set.hasSection(layer)) continue;
// add each block and tile // add each block and tile
char[] blocksGet = get.getArray(layer); char[] blocksGet = get.load(layer);
if (blocksGet == null) { if (blocksGet == null) {
blocksGet = FaweCache.IMP.EMPTY_CHAR_4096; blocksGet = FaweCache.IMP.EMPTY_CHAR_4096;
} }
char[] blocksSet = set.getArray(layer); char[] blocksSet = set.load(layer);
int by = layer << 4; int by = layer << 4;
for (int y = 0, index = 0; y < 16; y++) { for (int y = 0, index = 0; y < 16; y++) {

Datei anzeigen

@ -54,10 +54,6 @@ public class FaweSchematicHandler extends SchematicHandler {
final CuboidRegion region = new CuboidRegion(BlockVector3.at(pos1.getX(), pos1.getY(), pos1.getZ()), BlockVector3.at(pos2.getX(), pos2.getY(), pos2.getZ())); final CuboidRegion region = new CuboidRegion(BlockVector3.at(pos1.getX(), pos1.getY(), pos1.getZ()), BlockVector3.at(pos2.getX(), pos2.getY(), pos2.getZ()));
final EditSession editSession = new EditSessionBuilder(world).checkMemory(false).fastmode(true).limitUnlimited().changeSetNull().autoQueue(false).build(); final EditSession editSession = new EditSessionBuilder(world).checkMemory(false).fastmode(true).limitUnlimited().changeSetNull().autoQueue(false).build();
final int mx = pos1.getX();
final int my = pos1.getY();
final int mz = pos1.getZ();
ReadOnlyClipboard clipboard = ReadOnlyClipboard.of(editSession, region); ReadOnlyClipboard clipboard = ReadOnlyClipboard.of(editSession, region);
Clipboard holder = new BlockArrayClipboard(region, clipboard); Clipboard holder = new BlockArrayClipboard(region, clipboard);

Datei anzeigen

@ -630,7 +630,6 @@ public final class PlatformCommandManager {
Command cmd = optional.get(); Command cmd = optional.get();
CommandQueuedCondition queued = cmd.getCondition().as(CommandQueuedCondition.class).orElse(null); CommandQueuedCondition queued = cmd.getCondition().as(CommandQueuedCondition.class).orElse(null);
if (queued != null && !queued.isQueued()) { if (queued != null && !queued.isQueued()) {
System.out.println("Not queued");
handleCommandOnCurrentThread(event); handleCommandOnCurrentThread(event);
return; return;
} }

Datei anzeigen

@ -741,7 +741,7 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
int indexY, index; int indexY, index;
for (int layer = 0; layer < FaweCache.IMP.CHUNK_LAYERS; layer++) { for (int layer = 0; layer < FaweCache.IMP.CHUNK_LAYERS; layer++) {
if (set.hasSection(layer)) { if (set.hasSection(layer)) {
char[] arr = set.getArray(layer); char[] arr = set.load(layer);
if (trimX || trimZ) { if (trimX || trimZ) {
indexY = 0; indexY = 0;
for (int y = 0; y < 16; y++, indexY += 256) { for (int y = 0; y < 16; y++, indexY += 256) {

Datei anzeigen

@ -294,7 +294,7 @@ public interface Region extends Iterable<BlockVector3>, Cloneable, IBatchProcess
} else { } else {
boolean changed = true; boolean changed = true;
processExtra = true; processExtra = true;
char[] arr = set.getArray(layer); char[] arr = set.load(layer);
for (int y = 0, index = 0; y < 16; y++) { for (int y = 0, index = 0; y < 16; y++) {
for (int z = 0; z < 16; z++) { for (int z = 0; z < 16; z++) {
for (int x = 0; x < 16; x++, index++) { for (int x = 0; x < 16; x++, index++) {