mirror of
https://github.com/boy0001/FastAsyncWorldedit.git
synced 2024-11-25 03:55:35 +01:00
Various minor
Optimize Vector2D Optimize HeightMap Optimize biome changes Reformatting of the MCA classes
This commit is contained in:
parent
d052725a7a
commit
54642914e5
@ -8,7 +8,7 @@ import com.boydti.fawe.object.FaweQueue;
|
||||
import com.boydti.fawe.util.MainUtil;
|
||||
import com.sk89q.jnbt.CompoundTag;
|
||||
import com.sk89q.worldedit.LocalWorld;
|
||||
import com.sk89q.worldedit.Vector2D;
|
||||
import com.sk89q.worldedit.MutableBlockVector2D;
|
||||
import com.sk89q.worldedit.blocks.BaseBlock;
|
||||
import com.sk89q.worldedit.bukkit.BukkitUtil;
|
||||
import java.util.ArrayList;
|
||||
@ -89,12 +89,11 @@ public class BukkitChunk_All extends CharFaweChunk<Chunk, BukkitQueue_All> {
|
||||
if (biomes != null) {
|
||||
final LocalWorld lw = BukkitUtil.getLocalWorld(world);
|
||||
int index = 0;
|
||||
Vector2D mutable = new Vector2D();
|
||||
for (int z = 0; z < 16; z++) {
|
||||
mutable.z = bx + z;
|
||||
int zz = bx + z;
|
||||
for (int x = 0; x < 16; x++) {
|
||||
mutable.x = bz + x;
|
||||
lw.setBiome(mutable, FaweCache.getBiome(biomes[index++] & 0xFF));
|
||||
int xx = bz + x;
|
||||
lw.setBiome(MutableBlockVector2D.get(xx, zz), FaweCache.getBiome(biomes[index++] & 0xFF));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -390,6 +390,8 @@ public class MCAChunk extends FaweChunk<Void> {
|
||||
if (idsLayer == null) {
|
||||
idsLayer = this.ids[layer] = new byte[4096];
|
||||
this.data[layer] = new byte[2048];
|
||||
this.skyLight[layer] = new byte[2048];
|
||||
this.blockLight[layer] = new byte[2048];
|
||||
}
|
||||
int j = FaweCache.CACHE_J[y][z & 15][x & 15];
|
||||
idsLayer[j] = (byte) id;
|
||||
|
@ -263,7 +263,12 @@ public class MCAFile {
|
||||
return null;
|
||||
}
|
||||
FastByteArrayOutputStream baos = new FastByteArrayOutputStream(buffer3);
|
||||
DeflaterOutputStream deflater = new DeflaterOutputStream(baos, new Deflater(9), 1, true);
|
||||
|
||||
// PGZIPOutputStream deflater = new PGZIPOutputStream(baos);
|
||||
// deflater.setStrategy(Deflater.FILTERED);
|
||||
Deflater deflate = new Deflater(1);
|
||||
deflate.setStrategy(Deflater.FILTERED);
|
||||
DeflaterOutputStream deflater = new DeflaterOutputStream(baos, deflate, 1, true);
|
||||
fieldBuf5.set(deflater, buffer2);
|
||||
BufferedOutputStream bos = new BufferedOutputStream(deflater, 1);
|
||||
fieldBuf6.set(bos, buffer1);
|
||||
@ -380,7 +385,7 @@ public class MCAFile {
|
||||
MCAChunk cached = getCachedChunk(cx, cz);
|
||||
if (cached == null || !cached.isModified()) {
|
||||
start += size;
|
||||
written = start;
|
||||
written = start + size;
|
||||
continue;
|
||||
} else {
|
||||
newBytes = toBytes(cached);
|
||||
@ -398,26 +403,31 @@ public class MCAFile {
|
||||
int newSize = (len + 4095) >> 12;
|
||||
int nextOffset2 = nextOffset;
|
||||
while (start + len > end) {
|
||||
int nextLoc = offsetMap.get(nextOffset2);
|
||||
short nextCXZ = MathMan.unpairX(nextLoc);
|
||||
int nextCX = MathMan.unpairShortX(nextCXZ);
|
||||
int nextCZ = MathMan.unpairShortY(nextCXZ);
|
||||
if (getCachedChunk(nextCX, nextCZ) == null) {
|
||||
byte[] nextBytes = getChunkCompressedBytes(nextOffset2);
|
||||
relocate.put(pair, nextBytes);
|
||||
}
|
||||
Integer nextLoc = offsetMap.get(nextOffset2);
|
||||
if (nextLoc != null) {
|
||||
short nextCXZ = MathMan.unpairX(nextLoc);
|
||||
int nextCX = MathMan.unpairShortX(nextCXZ);
|
||||
int nextCZ = MathMan.unpairShortY(nextCXZ);
|
||||
if (getCachedChunk(nextCX, nextCZ) == null) {
|
||||
byte[] nextBytes = getChunkCompressedBytes(nextOffset2);
|
||||
relocate.put(pair, nextBytes);
|
||||
}
|
||||
// System.out.println("Relocating " + nextCX + "," + nextCZ);
|
||||
int nextSize = MathMan.unpairY(nextLoc) << 12;
|
||||
end += nextSize;
|
||||
nextOffset2 += nextSize;
|
||||
int nextSize = MathMan.unpairY(nextLoc) << 12;
|
||||
end += nextSize;
|
||||
nextOffset2 += nextSize;
|
||||
} else {
|
||||
end = start + len;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// System.out.println("Writing: " + cx + "," + cz);
|
||||
writeSafe(start, newBytes);
|
||||
if (offset != start || end != start + size || oldSize != newSize) {
|
||||
if (offset != start || end != start + size || oldSize != newSize || true) {
|
||||
// System.out.println("Header: " + cx + "," + cz + " | " + offset + "," + start + " | " + end + "," + (start + size) + " | " + size + " | " + start);
|
||||
writeHeader(cx, cz, start >> 12, newSize);
|
||||
}
|
||||
written = start + newBytes.length + 6;
|
||||
written = start + newBytes.length + 5;
|
||||
start += newSize << 12;
|
||||
}
|
||||
raf.setLength(written);
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.boydti.fawe.object.change;
|
||||
|
||||
import com.sk89q.worldedit.Vector2D;
|
||||
import com.sk89q.worldedit.MutableBlockVector2D;
|
||||
import com.sk89q.worldedit.WorldEditException;
|
||||
import com.sk89q.worldedit.history.UndoContext;
|
||||
import com.sk89q.worldedit.history.change.Change;
|
||||
@ -8,29 +8,27 @@ import com.sk89q.worldedit.world.biome.BaseBiome;
|
||||
|
||||
public class MutableBiomeChange implements Change {
|
||||
|
||||
private Vector2D pos;
|
||||
private MutableBlockVector2D mutable = new MutableBlockVector2D();
|
||||
private BaseBiome from;
|
||||
private BaseBiome to;
|
||||
public MutableBiomeChange() {
|
||||
this.from = new BaseBiome(0);
|
||||
this.to = new BaseBiome(0);
|
||||
this.pos = new Vector2D();
|
||||
}
|
||||
|
||||
public void setBiome(int x, int z, int from, int to) {
|
||||
this.pos.x = x;
|
||||
this.pos.z = z;
|
||||
mutable.setComponents(x, z);
|
||||
this.from.setId(from);
|
||||
this.to.setId(to);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void undo(UndoContext context) throws WorldEditException {
|
||||
context.getExtent().setBiome(pos, from);
|
||||
context.getExtent().setBiome(mutable, from);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void redo(UndoContext context) throws WorldEditException {
|
||||
context.getExtent().setBiome(pos, to);
|
||||
context.getExtent().setBiome(mutable, to);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.boydti.fawe.object.extent;
|
||||
|
||||
import com.sk89q.worldedit.MutableBlockVector2D;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.Vector2D;
|
||||
import com.sk89q.worldedit.WorldEditException;
|
||||
@ -9,6 +10,7 @@ import com.sk89q.worldedit.world.biome.BaseBiome;
|
||||
|
||||
public class OffsetExtent extends ResettableExtent {
|
||||
private final int dx, dy, dz;
|
||||
private MutableBlockVector2D mutable = new MutableBlockVector2D();
|
||||
|
||||
public OffsetExtent(Extent parent, int dx, int dy, int dz) {
|
||||
super(parent);
|
||||
@ -19,7 +21,7 @@ public class OffsetExtent extends ResettableExtent {
|
||||
|
||||
@Override
|
||||
public boolean setBiome(Vector2D position, BaseBiome biome) {
|
||||
return super.setBiome(new Vector2D(position.getBlockX() + dx, position.getBlockZ() + dz), biome);
|
||||
return super.setBiome(mutable.setComponents(position.getBlockX() + dx, position.getBlockZ() + dz), biome);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.boydti.fawe.object.pattern;
|
||||
|
||||
import com.sk89q.worldedit.MutableBlockVector2D;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.Vector2D;
|
||||
import com.sk89q.worldedit.WorldEditException;
|
||||
import com.sk89q.worldedit.blocks.BaseBlock;
|
||||
import com.sk89q.worldedit.extent.Extent;
|
||||
@ -10,6 +10,7 @@ import com.sk89q.worldedit.world.biome.BaseBiome;
|
||||
public class BiomePattern extends ExistingPattern {
|
||||
private final BaseBiome biome;
|
||||
private BiomePatternException exception;
|
||||
private MutableBlockVector2D mutable = new MutableBlockVector2D();
|
||||
|
||||
public BiomePattern(Extent extent, BaseBiome biome) {
|
||||
super(extent);
|
||||
@ -24,7 +25,7 @@ public class BiomePattern extends ExistingPattern {
|
||||
|
||||
@Override
|
||||
public boolean apply(Extent extent, Vector setPosition, Vector getPosition) throws WorldEditException {
|
||||
return extent.setBiome(new Vector2D(setPosition.getBlockX(), setPosition.getBlockZ()), biome);
|
||||
return extent.setBiome(mutable.setComponents(setPosition.getBlockX(), setPosition.getBlockZ()), biome);
|
||||
}
|
||||
|
||||
public class BiomePatternException extends RuntimeException {
|
||||
|
@ -3354,11 +3354,12 @@ public class EditSession extends AbstractWorld implements HasFaweQueue, Lighting
|
||||
if (((containsBot2 && containsTop2)) && !containsBot1 && !containsTop1) {
|
||||
continue;
|
||||
}
|
||||
final MutableBlockVector2D mutable = new MutableBlockVector2D();
|
||||
RunnableVal<Vector2D> r = new RunnableVal<Vector2D>() {
|
||||
@Override
|
||||
public void run(Vector2D chunk) {
|
||||
boolean conNextX = chunks.contains(new Vector2D(cx + 1, cz));
|
||||
boolean conNextZ = chunks.contains(new Vector2D(cx, cz + 1));
|
||||
boolean conNextX = chunks.contains(mutable.setComponents(cx + 1, cz));
|
||||
boolean conNextZ = chunks.contains(mutable.setComponents(cx, cz + 1));
|
||||
boolean containsAny = false;
|
||||
if (cuboid && containsBot1 && containsBot2 && containsTop1 && containsTop2 && conNextX && conNextZ) {
|
||||
containsAny = true;
|
||||
@ -3393,7 +3394,7 @@ public class EditSession extends AbstractWorld implements HasFaweQueue, Lighting
|
||||
if (!conNextZ) {
|
||||
setExistingBlocks(new Vector(bx, 0, bz + 16), new Vector(bx + 15, getMaxY(), bz + 31));
|
||||
}
|
||||
if (!chunks.contains(new Vector2D(cx + 1, cz + 1)) && !conNextX && !conNextZ) {
|
||||
if (!chunks.contains(mutable.setComponents(cx + 1, cz + 1)) && !conNextX && !conNextZ) {
|
||||
setExistingBlocks(new Vector(bx + 16, 0, bz + 16), new Vector(bx + 31, getMaxY(), bz + 31));
|
||||
}
|
||||
MutableBlockVector mutable = new MutableBlockVector(0,0,0);
|
||||
|
@ -8,7 +8,7 @@ public class MutableBlockVector extends BlockVector {
|
||||
}
|
||||
};
|
||||
|
||||
public static Vector get(int x, int y, int z) {
|
||||
public static MutableBlockVector get(int x, int y, int z) {
|
||||
return MUTABLE_CACHE.get().setComponents(x, y, z);
|
||||
}
|
||||
|
||||
@ -30,10 +30,18 @@ public class MutableBlockVector extends BlockVector {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vector setComponents(double x, double y, double z) {
|
||||
public MutableBlockVector setComponents(double x, double y, double z) {
|
||||
return this.setComponents((int) x, (int) y, (int) z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MutableBlockVector setComponents(int x, int y, int z) {
|
||||
this.mutX(x);
|
||||
this.mutY(y);
|
||||
this.mutZ(z);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void mutX(double x) {
|
||||
this.x = (int) x;
|
||||
|
@ -0,0 +1,67 @@
|
||||
package com.sk89q.worldedit;
|
||||
|
||||
public final class MutableBlockVector2D extends Vector2D {
|
||||
private static ThreadLocal<MutableBlockVector2D> MUTABLE_CACHE = new ThreadLocal<MutableBlockVector2D>() {
|
||||
@Override
|
||||
protected MutableBlockVector2D initialValue() {
|
||||
return new MutableBlockVector2D();
|
||||
}
|
||||
};
|
||||
|
||||
public static MutableBlockVector2D get(int x, int z) {
|
||||
return MUTABLE_CACHE.get().setComponents(x, z);
|
||||
}
|
||||
|
||||
private int x, z;
|
||||
|
||||
public MutableBlockVector2D() {
|
||||
this.x = 0;
|
||||
this.z = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBlockX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBlockZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public MutableBlockVector2D setComponents(int x, int z) {
|
||||
this.x = x;
|
||||
this.z = z;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MutableBlockVector2D setComponents(double x, double z) {
|
||||
return setComponents((int) x, (int) z);
|
||||
}
|
||||
|
||||
public final void mutX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public void mutZ(int z) {
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public final void mutX(double x) {
|
||||
this.x = (int) x;
|
||||
}
|
||||
|
||||
public void mutZ(double z) {
|
||||
this.z = (int) z;
|
||||
}
|
||||
}
|
@ -30,7 +30,8 @@ public class Vector2D {
|
||||
public static final Vector2D UNIT_Z = new Vector2D(0, 1);
|
||||
public static final Vector2D ONE = new Vector2D(1, 1);
|
||||
|
||||
public double x, z;
|
||||
private double x;
|
||||
private double z;
|
||||
|
||||
/**
|
||||
* Construct an instance.
|
||||
@ -71,8 +72,8 @@ public class Vector2D {
|
||||
* @param other the other vector
|
||||
*/
|
||||
public Vector2D(Vector2D other) {
|
||||
this.x = other.x;
|
||||
this.z = other.z;
|
||||
this.x = other.getX();
|
||||
this.z = other.getZ();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -100,7 +101,7 @@ public class Vector2D {
|
||||
* @return the x coordinate
|
||||
*/
|
||||
public int getBlockX() {
|
||||
return (int) Math.round(x);
|
||||
return (int) Math.round(getX());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -110,7 +111,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D setX(double x) {
|
||||
return new Vector2D(x, z);
|
||||
return new Vector2D(x, getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -120,7 +121,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D setX(int x) {
|
||||
return new Vector2D(x, z);
|
||||
return new Vector2D(x, getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -138,7 +139,7 @@ public class Vector2D {
|
||||
* @return the z coordinate
|
||||
*/
|
||||
public int getBlockZ() {
|
||||
return (int) Math.round(z);
|
||||
return (int) Math.round(getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -148,7 +149,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D setZ(double z) {
|
||||
return new Vector2D(x, z);
|
||||
return new Vector2D(getX(), z);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -158,7 +159,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D setZ(int z) {
|
||||
return new Vector2D(x, z);
|
||||
return new Vector2D(getX(), z);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -168,7 +169,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D add(Vector2D other) {
|
||||
return new Vector2D(x + other.x, z + other.z);
|
||||
return new Vector2D(getX() + other.getX(), getZ() + other.getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -179,7 +180,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D add(double x, double z) {
|
||||
return new Vector2D(this.x + x, this.z + z);
|
||||
return new Vector2D(this.getX() + x, this.getZ() + z);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -190,7 +191,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D add(int x, int z) {
|
||||
return new Vector2D(this.x + x, this.z + z);
|
||||
return new Vector2D(this.getX() + x, this.getZ() + z);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -201,11 +202,11 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D add(Vector2D... others) {
|
||||
double newX = x, newZ = z;
|
||||
double newX = getX(), newZ = getZ();
|
||||
|
||||
for (Vector2D other : others) {
|
||||
newX += other.x;
|
||||
newZ += other.z;
|
||||
newX += other.getX();
|
||||
newZ += other.getZ();
|
||||
}
|
||||
|
||||
return new Vector2D(newX, newZ);
|
||||
@ -219,7 +220,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D subtract(Vector2D other) {
|
||||
return new Vector2D(x - other.x, z - other.z);
|
||||
return new Vector2D(getX() - other.getX(), getZ() - other.getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -231,7 +232,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D subtract(double x, double z) {
|
||||
return new Vector2D(this.x - x, this.z - z);
|
||||
return new Vector2D(this.getX() - x, this.getZ() - z);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -243,7 +244,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D subtract(int x, int z) {
|
||||
return new Vector2D(this.x - x, this.z - z);
|
||||
return new Vector2D(this.getX() - x, this.getZ() - z);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -254,11 +255,11 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D subtract(Vector2D... others) {
|
||||
double newX = x, newZ = z;
|
||||
double newX = getX(), newZ = getZ();
|
||||
|
||||
for (Vector2D other : others) {
|
||||
newX -= other.x;
|
||||
newZ -= other.z;
|
||||
newX -= other.getX();
|
||||
newZ -= other.getZ();
|
||||
}
|
||||
|
||||
return new Vector2D(newX, newZ);
|
||||
@ -271,7 +272,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D multiply(Vector2D other) {
|
||||
return new Vector2D(x * other.x, z * other.z);
|
||||
return new Vector2D(getX() * other.getX(), getZ() * other.getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -282,7 +283,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D multiply(double x, double z) {
|
||||
return new Vector2D(this.x * x, this.z * z);
|
||||
return new Vector2D(this.getX() * x, this.getZ() * z);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -293,7 +294,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D multiply(int x, int z) {
|
||||
return new Vector2D(this.x * x, this.z * z);
|
||||
return new Vector2D(this.getX() * x, this.getZ() * z);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -303,11 +304,11 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D multiply(Vector2D... others) {
|
||||
double newX = x, newZ = z;
|
||||
double newX = getX(), newZ = getZ();
|
||||
|
||||
for (Vector2D other : others) {
|
||||
newX *= other.x;
|
||||
newZ *= other.z;
|
||||
newX *= other.getX();
|
||||
newZ *= other.getZ();
|
||||
}
|
||||
|
||||
return new Vector2D(newX, newZ);
|
||||
@ -320,7 +321,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D multiply(double n) {
|
||||
return new Vector2D(this.x * n, this.z * n);
|
||||
return new Vector2D(this.getX() * n, this.getZ() * n);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -330,7 +331,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D multiply(float n) {
|
||||
return new Vector2D(this.x * n, this.z * n);
|
||||
return new Vector2D(this.getX() * n, this.getZ() * n);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -340,7 +341,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D multiply(int n) {
|
||||
return new Vector2D(this.x * n, this.z * n);
|
||||
return new Vector2D(this.getX() * n, this.getZ() * n);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -350,7 +351,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D divide(Vector2D other) {
|
||||
return new Vector2D(x / other.x, z / other.z);
|
||||
return new Vector2D(getX() / other.getX(), getZ() / other.getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -361,7 +362,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D divide(double x, double z) {
|
||||
return new Vector2D(this.x / x, this.z / z);
|
||||
return new Vector2D(this.getX() / x, this.getZ() / z);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -372,7 +373,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D divide(int x, int z) {
|
||||
return new Vector2D(this.x / x, this.z / z);
|
||||
return new Vector2D(this.getX() / x, this.getZ() / z);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -382,7 +383,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D divide(int n) {
|
||||
return new Vector2D(x / n, z / n);
|
||||
return new Vector2D(getX() / n, getZ() / n);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -392,7 +393,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D divide(double n) {
|
||||
return new Vector2D(x / n, z / n);
|
||||
return new Vector2D(getX() / n, getZ() / n);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -402,7 +403,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D divide(float n) {
|
||||
return new Vector2D(x / n, z / n);
|
||||
return new Vector2D(getX() / n, getZ() / n);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -411,7 +412,7 @@ public class Vector2D {
|
||||
* @return length
|
||||
*/
|
||||
public double length() {
|
||||
return Math.sqrt(x * x + z * z);
|
||||
return Math.sqrt(getX() * getX() + getZ() * getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -420,7 +421,7 @@ public class Vector2D {
|
||||
* @return length, squared
|
||||
*/
|
||||
public double lengthSq() {
|
||||
return x * x + z * z;
|
||||
return getX() * getX() + getZ() * getZ();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -430,7 +431,7 @@ public class Vector2D {
|
||||
* @return distance
|
||||
*/
|
||||
public double distance(Vector2D other) {
|
||||
return Math.sqrt(Math.pow(other.x - x, 2) + Math.pow(other.z - z, 2));
|
||||
return Math.sqrt(Math.pow(other.getX() - getX(), 2) + Math.pow(other.getZ() - getZ(), 2));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -440,8 +441,8 @@ public class Vector2D {
|
||||
* @return distance
|
||||
*/
|
||||
public double distanceSq(Vector2D other) {
|
||||
return Math.pow(other.x - x, 2) +
|
||||
Math.pow(other.z - z, 2);
|
||||
return Math.pow(other.getX() - getX(), 2) +
|
||||
Math.pow(other.getZ() - getZ(), 2);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -461,7 +462,7 @@ public class Vector2D {
|
||||
* @return the dot product of this and the other vector
|
||||
*/
|
||||
public double dot(Vector2D other) {
|
||||
return x * other.x + z * other.z;
|
||||
return getX() * other.getX() + getZ() * other.getZ();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -472,8 +473,8 @@ public class Vector2D {
|
||||
* @return true if the vector is contained
|
||||
*/
|
||||
public boolean containedWithin(Vector2D min, Vector2D max) {
|
||||
return x >= min.x && x <= max.x
|
||||
&& z >= min.z && z <= max.z;
|
||||
return getX() >= min.getX() && getX() <= max.getX()
|
||||
&& getZ() >= min.getZ() && getZ() <= max.getZ();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -494,7 +495,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D floor() {
|
||||
return new Vector2D(Math.floor(x), Math.floor(z));
|
||||
return new Vector2D(Math.floor(getX()), Math.floor(getZ()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -503,7 +504,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D ceil() {
|
||||
return new Vector2D(Math.ceil(x), Math.ceil(z));
|
||||
return new Vector2D(Math.ceil(getX()), Math.ceil(getZ()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -514,7 +515,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D round() {
|
||||
return new Vector2D(Math.floor(x + 0.5), Math.floor(z + 0.5));
|
||||
return new Vector2D(Math.floor(getX() + 0.5), Math.floor(getZ() + 0.5));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -524,7 +525,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector2D positive() {
|
||||
return new Vector2D(Math.abs(x), Math.abs(z));
|
||||
return new Vector2D(Math.abs(getX()), Math.abs(getZ()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -540,8 +541,8 @@ public class Vector2D {
|
||||
*/
|
||||
public Vector2D transform2D(double angle, double aboutX, double aboutZ, double translateX, double translateZ) {
|
||||
angle = Math.toRadians(angle);
|
||||
double x = this.x - aboutX;
|
||||
double z = this.z - aboutZ;
|
||||
double x = this.getX() - aboutX;
|
||||
double z = this.getZ() - aboutZ;
|
||||
double x2 = x * Math.cos(angle) - z * Math.sin(angle);
|
||||
double z2 = x * Math.sin(angle) + z * Math.cos(angle);
|
||||
return new Vector2D(
|
||||
@ -557,28 +558,28 @@ public class Vector2D {
|
||||
* @return true if collinear
|
||||
*/
|
||||
public boolean isCollinearWith(Vector2D other) {
|
||||
if (x == 0 && z == 0) {
|
||||
if (getX() == 0 && getZ() == 0) {
|
||||
// this is a zero vector
|
||||
return true;
|
||||
}
|
||||
|
||||
final double otherX = other.x;
|
||||
final double otherZ = other.z;
|
||||
final double otherX = other.getX();
|
||||
final double otherZ = other.getZ();
|
||||
|
||||
if (otherX == 0 && otherZ == 0) {
|
||||
// other is a zero vector
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((x == 0) != (otherX == 0)) return false;
|
||||
if ((z == 0) != (otherZ == 0)) return false;
|
||||
if ((getX() == 0) != (otherX == 0)) return false;
|
||||
if ((getZ() == 0) != (otherZ == 0)) return false;
|
||||
|
||||
final double quotientX = otherX / x;
|
||||
final double quotientX = otherX / getX();
|
||||
if (!Double.isNaN(quotientX)) {
|
||||
return other.equals(multiply(quotientX));
|
||||
}
|
||||
|
||||
final double quotientZ = otherZ / z;
|
||||
final double quotientZ = otherZ / getZ();
|
||||
if (!Double.isNaN(quotientZ)) {
|
||||
return other.equals(multiply(quotientZ));
|
||||
}
|
||||
@ -601,7 +602,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector toVector() {
|
||||
return new Vector(x, 0, z);
|
||||
return new Vector(getX(), 0, getZ());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -611,7 +612,7 @@ public class Vector2D {
|
||||
* @return a new vector
|
||||
*/
|
||||
public Vector toVector(double y) {
|
||||
return new Vector(x, y, z);
|
||||
return new Vector(getX(), y, getZ());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -621,19 +622,19 @@ public class Vector2D {
|
||||
}
|
||||
|
||||
Vector2D other = (Vector2D) obj;
|
||||
return other.x == this.x && other.z == this.z;
|
||||
return other.getX() == this.getX() && other.getZ() == this.getZ();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return ((new Double(x)).hashCode() >> 13) ^
|
||||
(new Double(z)).hashCode();
|
||||
return ((new Double(getX())).hashCode() >> 13) ^
|
||||
(new Double(getZ())).hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "(" + x + ", " + z + ")";
|
||||
return "(" + getX() + ", " + getZ() + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
@ -645,8 +646,8 @@ public class Vector2D {
|
||||
*/
|
||||
public static Vector2D getMinimum(Vector2D v1, Vector2D v2) {
|
||||
return new Vector2D(
|
||||
Math.min(v1.x, v2.x),
|
||||
Math.min(v1.z, v2.z)
|
||||
Math.min(v1.getX(), v2.getX()),
|
||||
Math.min(v1.getZ(), v2.getZ())
|
||||
);
|
||||
}
|
||||
|
||||
@ -659,8 +660,8 @@ public class Vector2D {
|
||||
*/
|
||||
public static Vector2D getMaximum(Vector2D v1, Vector2D v2) {
|
||||
return new Vector2D(
|
||||
Math.max(v1.x, v2.x),
|
||||
Math.max(v1.z, v2.z)
|
||||
Math.max(v1.getX(), v2.getX()),
|
||||
Math.max(v1.getZ(), v2.getZ())
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,7 @@ public class HeightMap {
|
||||
int x = pos.getBlockX();
|
||||
int z = pos.getBlockZ();
|
||||
y = session.getNearestSurfaceLayer(x, z, y, 0, maxY);
|
||||
data[(z - bz) * width + (x - bx)] = y;
|
||||
data[(z - bz) * width + (x - bx)] = 7 + (y << 3);
|
||||
}
|
||||
} else {
|
||||
// Store current heightmap data
|
||||
@ -238,20 +238,13 @@ public class HeightMap {
|
||||
++blocksChanged;
|
||||
|
||||
// Grow -- start from 1 below top replacing airblocks
|
||||
for (int y = newHeight - 1 - originY; y >= 0; --y) {
|
||||
for (int y = newHeight - 1 - originY; y >= curHeight; --y) {
|
||||
int copyFrom = (int) (y * scale);
|
||||
session.setBlock(xr, originY + y, zr, session.getBlock(xr, originY + copyFrom, zr));
|
||||
++blocksChanged;
|
||||
}
|
||||
}
|
||||
} else if (curHeight > newHeight) {
|
||||
// Shrink -- start from bottom
|
||||
for (int y = 0; y < newHeight - originY; ++y) {
|
||||
int copyFrom = (int) (y * scale);
|
||||
session.setBlock(xr, originY + y, zr, session.getBlock(xr, originY + copyFrom, zr));
|
||||
++blocksChanged;
|
||||
}
|
||||
|
||||
// Set the top block of the column to be the same type
|
||||
// (this could otherwise go wrong with rounding)
|
||||
session.setBlock(xr, newHeight, zr, session.getBlock(xr, curHeight, zr));
|
||||
|
@ -24,6 +24,7 @@ import com.boydti.fawe.object.collection.LocalBlockVectorSet;
|
||||
import com.sk89q.worldedit.BlockVector;
|
||||
import com.sk89q.worldedit.LocalWorld;
|
||||
import com.sk89q.worldedit.MutableBlockVector;
|
||||
import com.sk89q.worldedit.MutableBlockVector2D;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.Vector2D;
|
||||
import com.sk89q.worldedit.world.World;
|
||||
@ -333,7 +334,7 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
|
||||
@Override
|
||||
public Iterator<Vector2D> iterator() {
|
||||
return new Iterator<Vector2D>() {
|
||||
private Vector2D pos = new Vector2D(minX, minZ);
|
||||
private MutableBlockVector2D pos = new MutableBlockVector2D().setComponents(minX, minZ);
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return pos != null;
|
||||
@ -344,9 +345,9 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
|
||||
Vector2D result = pos;
|
||||
// calc next
|
||||
if (pos.getX() < maxX) {
|
||||
pos = new Vector2D(pos.getX() + 1, pos.getZ());
|
||||
pos.setComponents(pos.getX() + 1, pos.getZ());
|
||||
} else if (pos.getZ() < maxZ) {
|
||||
pos = new Vector2D(minX, pos.getZ() + 1);
|
||||
pos.setComponents(minX, pos.getZ() + 1);
|
||||
} else {
|
||||
pos = null;
|
||||
}
|
||||
@ -566,6 +567,7 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
|
||||
return new Iterable<Vector2D>() {
|
||||
@Override
|
||||
public Iterator<Vector2D> iterator() {
|
||||
MutableBlockVector2D mutable = new MutableBlockVector2D();
|
||||
return new Iterator<Vector2D>() {
|
||||
private Vector min = getMinimumPoint();
|
||||
private Vector max = getMaximumPoint();
|
||||
@ -580,11 +582,11 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
|
||||
@Override
|
||||
public Vector2D next() {
|
||||
if (!hasNext()) throw new java.util.NoSuchElementException();
|
||||
Vector2D answer = new Vector2D(nextX, nextZ);
|
||||
if (++nextX > max.getBlockX()) {
|
||||
nextX = min.getBlockX();
|
||||
if (++nextZ > max.getBlockZ()) {
|
||||
nextX = Integer.MIN_VALUE;
|
||||
Vector2D answer = mutable.setComponents(nextX, nextZ);
|
||||
if (++nextZ > max.getBlockZ()) {
|
||||
nextZ = min.getBlockZ();
|
||||
if (++nextX > max.getBlockX()) {
|
||||
nextZ = Integer.MIN_VALUE;
|
||||
}
|
||||
}
|
||||
return answer;
|
||||
|
@ -13,7 +13,7 @@ import com.boydti.fawe.object.FaweQueue;
|
||||
import com.boydti.fawe.util.MainUtil;
|
||||
import com.sk89q.jnbt.CompoundTag;
|
||||
import com.sk89q.worldedit.LocalWorld;
|
||||
import com.sk89q.worldedit.Vector2D;
|
||||
import com.sk89q.worldedit.MutableBlockVector2D;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
@ -85,12 +85,11 @@ public class NukkitChunk extends CharFaweChunk<BaseFullChunk, NukkitQueue> {
|
||||
final LocalWorld lw = NukkitUtil.getLocalWorld(world);
|
||||
final byte[] biomes = getBiomeArray();
|
||||
int index = 0;
|
||||
Vector2D mutable = new Vector2D();
|
||||
for (int z = 0; z < 16; z++) {
|
||||
mutable.z = Z + z;
|
||||
int zz = Z + z;
|
||||
for (int x = 0; x < 16; x++) {
|
||||
mutable.x = X + x;
|
||||
lw.setBiome(mutable, FaweCache.getBiome(biomes[index++] & 0xFF));
|
||||
int xx = X + x;
|
||||
lw.setBiome(MutableBlockVector2D.get(xx, zz), FaweCache.getBiome(biomes[index++] & 0xFF));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user