geforkt von Mirrors/FastAsyncWorldEdit
Small code quality changes
Dieser Commit ist enthalten in:
Ursprung
1577ef61d4
Commit
e648b35b95
@ -41,6 +41,11 @@ import com.sk89q.worldedit.world.block.BlockType;
|
||||
import com.sk89q.worldedit.world.entity.EntityType;
|
||||
import com.sk89q.worldedit.world.gamemode.GameMode;
|
||||
import com.sk89q.worldedit.world.item.ItemType;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
@ -48,6 +53,7 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Adapts between Bukkit and WorldEdit equivalent objects.
|
||||
@ -335,12 +341,16 @@ public enum BukkitAdapter {
|
||||
return getAdapter().adapt(entityType);
|
||||
}
|
||||
|
||||
private static EnumMap<Material, BlockType> materialBlockTypeCache = new EnumMap<>(Material.class);
|
||||
private static EnumMap<Material, ItemType> materialItemTypeCache = new EnumMap<>(Material.class);
|
||||
|
||||
/**
|
||||
* Converts a Material to a BlockType
|
||||
*
|
||||
* @param material The material
|
||||
* @return The blocktype
|
||||
*/
|
||||
@Nullable
|
||||
public static BlockType asBlockType(Material material) {
|
||||
return getAdapter().asBlockType(material);
|
||||
}
|
||||
@ -351,12 +361,13 @@ public enum BukkitAdapter {
|
||||
* @param material The material
|
||||
* @return The itemtype
|
||||
*/
|
||||
@Nullable
|
||||
public static ItemType asItemType(Material material) {
|
||||
return getAdapter().asItemType(material);
|
||||
}
|
||||
/*
|
||||
private static Map<String, BlockState> blockStateCache = new HashMap<>();
|
||||
/*
|
||||
|
||||
private static Int2ObjectMap<BlockState> blockStateCache = new Int2ObjectOpenHashMap<>();
|
||||
private static Map<String, BlockState> blockStateStringCache = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Create a WorldEdit BlockState from a Bukkit BlockData
|
||||
@ -367,9 +378,9 @@ public enum BukkitAdapter {
|
||||
public static BlockState adapt(@NotNull BlockData blockData) {
|
||||
return getAdapter().adapt(blockData);
|
||||
}
|
||||
/*
|
||||
private static Map<String, BlockData> blockDataCache = new HashMap<>();
|
||||
*/
|
||||
|
||||
private static Int2ObjectMap<BlockData> blockDataCache = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
/**
|
||||
* Create a Bukkit BlockData from a WorldEdit BlockStateHolder
|
||||
*
|
||||
|
@ -187,6 +187,7 @@ public interface BukkitImplAdapter<T> extends IBukkitAdapter {
|
||||
BaseItemStack adapt(ItemStack itemStack);
|
||||
|
||||
default OptionalInt getInternalBlockStateId(BlockData data) {
|
||||
// return OptionalInt.empty();
|
||||
return getInternalBlockStateId(BukkitAdapter.adapt(data));
|
||||
}
|
||||
|
||||
|
@ -77,7 +77,7 @@ public class BukkitImplLoader {
|
||||
}
|
||||
}
|
||||
|
||||
public void addClass(Class cls) {
|
||||
public void addClass(Class<?> cls) {
|
||||
adapterCandidates.add(0, cls.getName());
|
||||
}
|
||||
|
||||
|
@ -63,9 +63,6 @@ public interface IChunk extends Trimable, IChunkGet, IChunkSet {
|
||||
// */
|
||||
// void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block);
|
||||
|
||||
@Override
|
||||
CompoundTag getTile(int x, int y, int z);
|
||||
|
||||
@Override
|
||||
default IChunk reset() {
|
||||
return this;
|
||||
|
@ -26,23 +26,11 @@ public interface IChunkGet extends IBlocks, Trimable, InputExtent, ITileInput {
|
||||
@Override
|
||||
BlockState getBlock(int x, int y, int z);
|
||||
|
||||
@Override
|
||||
Map<BlockVector3, CompoundTag> getTiles();
|
||||
|
||||
@Override
|
||||
Set<CompoundTag> getEntities();
|
||||
|
||||
@Override
|
||||
boolean trim(boolean aggressive);
|
||||
|
||||
default void optimize() {
|
||||
|
||||
}
|
||||
|
||||
<T extends Future<T>> T call(IChunkSet set, Runnable finalize);
|
||||
|
||||
@Override
|
||||
char[] load(int layer);
|
||||
|
||||
CompoundTag getEntity(UUID uuid);
|
||||
}
|
||||
|
@ -42,15 +42,6 @@ public interface IChunkSet extends IBlocks, OutputExtent {
|
||||
return getBiomes() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
BiomeType getBiomeType(int x, int y, int z);
|
||||
|
||||
@Override
|
||||
Map<BlockVector3, CompoundTag> getTiles();
|
||||
|
||||
@Override
|
||||
Set<CompoundTag> getEntities();
|
||||
|
||||
@Override
|
||||
IChunkSet reset();
|
||||
|
||||
|
@ -41,11 +41,11 @@ public abstract class QueueHandler implements Trimable, Runnable {
|
||||
private ForkJoinPool forkJoinPoolPrimary = new ForkJoinPool();
|
||||
private ForkJoinPool forkJoinPoolSecondary = new ForkJoinPool();
|
||||
private ThreadPoolExecutor blockingExecutor = FaweCache.IMP.newBlockingExecutor();
|
||||
private ConcurrentLinkedQueue<FutureTask> syncTasks = new ConcurrentLinkedQueue<>();
|
||||
private ConcurrentLinkedQueue<FutureTask> syncWhenFree = new ConcurrentLinkedQueue<>();
|
||||
private final ConcurrentLinkedQueue<FutureTask> syncTasks = new ConcurrentLinkedQueue<>();
|
||||
private final ConcurrentLinkedQueue<FutureTask> syncWhenFree = new ConcurrentLinkedQueue<>();
|
||||
|
||||
private Map<World, WeakReference<IChunkCache<IChunkGet>>> chunkGetCache = new HashMap<>();
|
||||
private CleanableThreadLocal<IQueueExtent<IQueueChunk>> queuePool = new CleanableThreadLocal<>(QueueHandler.this::create);
|
||||
private final Map<World, WeakReference<IChunkCache<IChunkGet>>> chunkGetCache = new HashMap<>();
|
||||
private final CleanableThreadLocal<IQueueExtent<IQueueChunk>> queuePool = new CleanableThreadLocal<>(QueueHandler.this::create);
|
||||
/**
|
||||
* Used to calculate elapsed time in milliseconds and ensure block placement doesn't lag the
|
||||
* server
|
||||
|
@ -21,19 +21,12 @@ package com.boydti.fawe.function.mask;
|
||||
|
||||
import com.sk89q.worldedit.extent.Extent;
|
||||
import com.sk89q.worldedit.function.mask.BlockMask;
|
||||
import com.sk89q.worldedit.function.mask.Mask2D;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class AirMask extends BlockMask {
|
||||
|
||||
public AirMask(Extent extent) {
|
||||
super(extent);
|
||||
add(state -> state.getMaterial().isAir());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Mask2D toMask2D() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -21,21 +21,12 @@ package com.boydti.fawe.function.mask;
|
||||
|
||||
import com.sk89q.worldedit.extent.Extent;
|
||||
import com.sk89q.worldedit.function.mask.BlockMask;
|
||||
import com.sk89q.worldedit.function.mask.Mask2D;
|
||||
import com.sk89q.worldedit.math.BlockVector3;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class LiquidMask extends BlockMask {
|
||||
|
||||
public LiquidMask(Extent extent) {
|
||||
super(extent);
|
||||
add(state -> state.getMaterial().isLiquid());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Mask2D toMask2D() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
public abstract class BlockSet extends AbstractRegion {
|
||||
|
||||
private final int chunkOffsetX;
|
||||
private final int chunkOffsetZ;
|
||||
private final int blockOffsetX;
|
||||
@ -88,20 +89,23 @@ public abstract class BlockSet extends AbstractRegion {
|
||||
|
||||
@Override
|
||||
public abstract boolean contains(int x, int y, int z);
|
||||
|
||||
public abstract boolean add(int x, int y, int z);
|
||||
|
||||
public abstract void set(int x, int y, int z);
|
||||
|
||||
public abstract void clear(int x, int y, int z);
|
||||
|
||||
public abstract boolean remove(int x, int y, int z);
|
||||
|
||||
@Override
|
||||
public abstract Iterator<BlockVector3> iterator();
|
||||
|
||||
@Override
|
||||
public abstract Set<BlockVector2> getChunks();
|
||||
|
||||
@Override
|
||||
public abstract Set<BlockVector3> getChunkCubes();
|
||||
@Override
|
||||
public abstract BlockVector3 getMaximumPoint();
|
||||
@Override
|
||||
public abstract BlockVector3 getMinimumPoint();
|
||||
|
||||
@Override
|
||||
public void expand(BlockVector3... changes) throws RegionOperationException {
|
||||
|
@ -77,6 +77,7 @@ public final class MemBlockSet extends BlockSet {
|
||||
return BlockVector3.at(getMinX(), getMinimumY(), getMinZ());
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockVector3 getMaximumPoint() {
|
||||
return BlockVector3.at(getMaxX(), getMaximumY(), getMaxZ());
|
||||
}
|
||||
|
@ -1,338 +0,0 @@
|
||||
package com.boydti.fawe.object.collection;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.AbstractList;
|
||||
|
||||
public class PrimitiveList<T> extends AbstractList<T> {
|
||||
private final Class<?> primitive;
|
||||
private final Type type;
|
||||
private int length;
|
||||
private int totalLength;
|
||||
private Object arr;
|
||||
|
||||
private enum Type {
|
||||
Byte,
|
||||
Boolean,
|
||||
Short,
|
||||
Character,
|
||||
Integer,
|
||||
Float,
|
||||
Long,
|
||||
Double
|
||||
}
|
||||
|
||||
public PrimitiveList(Class<T> type) {
|
||||
try {
|
||||
Class<T> boxed;
|
||||
if (type.isPrimitive()) {
|
||||
this.primitive = type;
|
||||
boxed = (Class<T>) Array.get(Array.newInstance(primitive, 1), 0).getClass();
|
||||
} else {
|
||||
this.primitive = (Class<?>) type.getField("TYPE").get(null);
|
||||
boxed = type;
|
||||
}
|
||||
this.type = Type.valueOf(boxed.getSimpleName());
|
||||
} catch (Throwable e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
length = 0;
|
||||
totalLength = 0;
|
||||
arr = Array.newInstance(primitive, 0);
|
||||
}
|
||||
|
||||
public PrimitiveList(T[] arr) {
|
||||
try {
|
||||
Class<T> boxed = (Class<T>) arr.getClass().getComponentType();
|
||||
this.primitive = (Class<?>) boxed.getField("TYPE").get(null);
|
||||
this.type = Type.valueOf(boxed.getSimpleName());
|
||||
} catch (Throwable e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
this.arr = Array.newInstance(primitive, arr.length);
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
T val = arr[i];
|
||||
if (val != null) setFast(i, val);
|
||||
}
|
||||
this.length = arr.length;
|
||||
this.totalLength = length;
|
||||
}
|
||||
|
||||
public PrimitiveList(Object arr) {
|
||||
if (!arr.getClass().isArray()) {
|
||||
throw new IllegalArgumentException("Argument must be an array!");
|
||||
}
|
||||
this.primitive = arr.getClass().getComponentType();
|
||||
Class<T> boxed = (Class<T>) Array.get(Array.newInstance(primitive, 1), 0).getClass();
|
||||
this.type = Type.valueOf(boxed.getSimpleName());
|
||||
this.arr = arr;
|
||||
this.length = Array.getLength(arr);
|
||||
this.totalLength = length;
|
||||
}
|
||||
|
||||
public Object getArray() {
|
||||
return arr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public T get(int index) {
|
||||
return (T) getFast(index);
|
||||
}
|
||||
|
||||
public byte getByte(int index) {
|
||||
return type == Type.Double ? ((byte[]) arr)[index] : (byte) getFast(index);
|
||||
}
|
||||
|
||||
public boolean getBoolean(int index) {
|
||||
return type == Type.Boolean ? ((boolean[]) arr)[index] : (boolean) getFast(index);
|
||||
}
|
||||
|
||||
public short getShort(int index) {
|
||||
return type == Type.Short ? ((short[]) arr)[index] : (short) getFast(index);
|
||||
}
|
||||
|
||||
public char getCharacter(int index) {
|
||||
return type == Type.Character ? ((char[]) arr)[index] : (char) getFast(index);
|
||||
}
|
||||
|
||||
public int getInt(int index) {
|
||||
return type == Type.Integer ? ((int[]) arr)[index] : (int) getFast(index);
|
||||
}
|
||||
|
||||
public float getFloat(int index) {
|
||||
return type == Type.Float ? ((float[]) arr)[index] : (float) getFast(index);
|
||||
}
|
||||
|
||||
public long getLong(int index) {
|
||||
return type == Type.Long ? ((long[]) arr)[index] : (long) getFast(index);
|
||||
}
|
||||
|
||||
public double getDouble(int index) {
|
||||
return type == Type.Double ? ((double[]) arr)[index] : (double) getFast(index);
|
||||
}
|
||||
|
||||
private final Object getFast(int index) {
|
||||
switch (type) {
|
||||
case Byte:
|
||||
return ((byte[]) arr)[index];
|
||||
case Boolean:
|
||||
return ((boolean[]) arr)[index];
|
||||
case Short:
|
||||
return ((short[]) arr)[index];
|
||||
case Character:
|
||||
return ((char[]) arr)[index];
|
||||
case Integer:
|
||||
return ((int[]) arr)[index];
|
||||
case Float:
|
||||
return ((float[]) arr)[index];
|
||||
case Long:
|
||||
return ((long[]) arr)[index];
|
||||
case Double:
|
||||
return ((double[]) arr)[index];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public T set(int index, T element) {
|
||||
T value = get(index);
|
||||
setFast(index, element);
|
||||
return value;
|
||||
}
|
||||
|
||||
public void set(int index, char value) {
|
||||
switch (type) {
|
||||
case Character:
|
||||
((char[]) arr)[index] = value;
|
||||
return;
|
||||
default:
|
||||
setFast(index, value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void set(int index, byte value) {
|
||||
switch (type) {
|
||||
case Byte:
|
||||
((byte[]) arr)[index] = value;
|
||||
return;
|
||||
default:
|
||||
setFast(index, value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void set(int index, int value) {
|
||||
switch (type) {
|
||||
case Integer:
|
||||
((int[]) arr)[index] = value;
|
||||
return;
|
||||
case Long:
|
||||
((long[]) arr)[index] = (long) value;
|
||||
return;
|
||||
case Double:
|
||||
((double[]) arr)[index] = (double) value;
|
||||
return;
|
||||
default:
|
||||
setFast(index, value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void set(int index, long value) {
|
||||
switch (type) {
|
||||
case Integer:
|
||||
((int[]) arr)[index] = (int) value;
|
||||
return;
|
||||
case Long:
|
||||
((long[]) arr)[index] = value;
|
||||
return;
|
||||
case Double:
|
||||
((double[]) arr)[index] = (double) value;
|
||||
return;
|
||||
default:
|
||||
setFast(index, value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void set(int index, double value) {
|
||||
switch (type) {
|
||||
case Float:
|
||||
((float[]) arr)[index] = (float) value;
|
||||
return;
|
||||
case Long:
|
||||
((long[]) arr)[index] = (long) value;
|
||||
return;
|
||||
case Double:
|
||||
((double[]) arr)[index] = value;
|
||||
return;
|
||||
default:
|
||||
setFast(index, value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public final void setFast(int index, Object element) {
|
||||
switch (type) {
|
||||
case Byte:
|
||||
((byte[]) arr)[index] = (byte) element;
|
||||
return;
|
||||
case Boolean:
|
||||
((boolean[]) arr)[index] = (boolean) element;
|
||||
return;
|
||||
case Short:
|
||||
((short[]) arr)[index] = (short) element;
|
||||
return;
|
||||
case Character:
|
||||
((char[]) arr)[index] = (char) element;
|
||||
return;
|
||||
case Integer:
|
||||
((int[]) arr)[index] = (int) element;
|
||||
return;
|
||||
case Float:
|
||||
((float[]) arr)[index] = (float) element;
|
||||
return;
|
||||
case Long:
|
||||
((long[]) arr)[index] = (long) element;
|
||||
return;
|
||||
case Double:
|
||||
((double[]) arr)[index] = (double) element;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void add(int index, T element) {
|
||||
if (index == length) {
|
||||
if (totalLength == length) {
|
||||
Object tmp = arr;
|
||||
totalLength = (length << 1) + 16;
|
||||
arr = Array.newInstance(primitive, totalLength);
|
||||
System.arraycopy(tmp, 0, arr, 0, length);
|
||||
}
|
||||
setFast(length, element);
|
||||
length++;
|
||||
} else {
|
||||
if (totalLength == length) {
|
||||
Object tmp = arr;
|
||||
totalLength = (length << 1) + 16;
|
||||
arr = Array.newInstance(primitive, totalLength);
|
||||
System.arraycopy(tmp, 0, arr, 0, index);
|
||||
}
|
||||
System.arraycopy(arr, index, arr, index + 1, length - index);
|
||||
set(index, element);
|
||||
length++;
|
||||
}
|
||||
}
|
||||
|
||||
private void ensureAddCapacity() {
|
||||
if (totalLength == length) {
|
||||
Object tmp = arr;
|
||||
totalLength = (length << 1) + 16;
|
||||
arr = Array.newInstance(primitive, totalLength);
|
||||
System.arraycopy(tmp, 0, arr, 0, length);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(T element) {
|
||||
ensureAddCapacity();
|
||||
setFast(length++, element);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean add(int element) {
|
||||
ensureAddCapacity();
|
||||
set(length++, element);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean add(long element) {
|
||||
ensureAddCapacity();
|
||||
set(length++, element);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean add(double element) {
|
||||
ensureAddCapacity();
|
||||
set(length++, element);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean add(byte element) {
|
||||
ensureAddCapacity();
|
||||
set(length++, element);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean add(char element) {
|
||||
ensureAddCapacity();
|
||||
set(length++, element);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public T remove(int index) {
|
||||
if (index < 0 || index > length) throw new IndexOutOfBoundsException(index + " not in [0, " + length + "]");
|
||||
T value = get(index);
|
||||
if (index != length) {
|
||||
System.arraycopy(arr, index + 1, arr, index, length - index - 1);
|
||||
}
|
||||
length--;
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
if (length != 0) {
|
||||
this.arr = Array.newInstance(primitive, 0);
|
||||
}
|
||||
length = 0;
|
||||
}
|
||||
}
|
@ -230,7 +230,7 @@ public class BlockMaskBuilder {
|
||||
|
||||
private void suggest(String input, String property, Collection<BlockType> finalTypes) throws InputParseException {
|
||||
throw new SuggestInputParseException(input + " does not have: " + property, input, () -> {
|
||||
Set<PropertyKey> keys = new HashSet<>();
|
||||
Set<PropertyKey> keys = EnumSet.noneOf(PropertyKey.class);
|
||||
finalTypes.forEach(t -> t.getProperties().forEach(p -> keys.add(p.getKey())));
|
||||
return keys.stream().map(PropertyKey::getId)
|
||||
.filter(p -> StringMan.blockStateMatches(property, p))
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren