This commit is contained in:
Jesse Boyd 2017-04-18 22:56:38 +10:00
parent 093854f34e
commit b5e500e716
No known key found for this signature in database
GPG Key ID: 59F1DE6293AF6E1F
10 changed files with 205 additions and 254 deletions

View File

@ -390,6 +390,20 @@ public class FaweBukkit implements IFawe, Listener {
}
return managers;
}
//
// @EventHandler
// public void onWorldLoad(WorldLoadEvent event) {
// org.bukkit.World world = event.getWorld();
// world.setKeepSpawnInMemory(false);
// WorldServer nmsWorld = ((CraftWorld) world).getHandle();
// ChunkProviderServer provider = nmsWorld.getChunkProviderServer();
// try {
// Field fieldChunkLoader = provider.getClass().getDeclaredField("chunkLoader");
// ReflectionUtils.setFailsafeFieldValue(fieldChunkLoader, provider, new FaweChunkLoader());
// } catch (Throwable e) {
// e.printStackTrace();
// }
// }
@EventHandler
public void onChunkLoad(ChunkLoadEvent event) {

View File

@ -353,7 +353,7 @@ public class BukkitChunk_1_10 extends CharFaweChunk<Chunk, BukkitQueue_1_10> {
toRemove = new HashMap<>();
}
if (copy != null) {
storeTile(tile.getValue(), tile.getKey());
copy.storeTile(tile.getValue(), tile.getKey());
}
toRemove.put(tile.getKey(), tile.getValue());
}

View File

@ -363,7 +363,7 @@ public class BukkitChunk_1_11 extends CharFaweChunk<Chunk, com.boydti.fawe.bukki
toRemove = new HashMap<>();
}
if (copy != null) {
storeTile(tile.getValue(), tile.getKey());
copy.storeTile(tile.getValue(), tile.getKey());
}
toRemove.put(tile.getKey(), tile.getValue());
}

View File

@ -17,6 +17,7 @@ import com.boydti.fawe.util.EditSessionBuilder;
import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.util.MemUtil;
import com.boydti.fawe.util.SetQueue;
import com.boydti.fawe.util.StringMan;
import com.boydti.fawe.util.TaskManager;
import com.boydti.fawe.util.WEManager;
import com.boydti.fawe.wrappers.WorldWrapper;
@ -211,9 +212,10 @@ public class FaweAPI {
}
/**
* If you just need things to look random, use this faster alternative
* @return PseudoRandom
* Use ThreadLocalRandom instead
* @return
*/
@Deprecated
public static PseudoRandom getFastRandom() {
return new PseudoRandom();
}

View File

@ -133,7 +133,7 @@ public class AnvilCommands {
try {
byte[] bytes = mca.getChunkCompressedBytes(offset);
if (bytes == null) return;
Runnable task = new Runnable() {
Runnable task = new Runnable() {
@Override
public void run() {
try {

View File

@ -150,18 +150,6 @@ public class HeightMapMCAGenerator extends MCAWriter implements Extent {
return true;
}
private char get(char[][][] map, int x, int y, int z) {
char[][] yMap = map[y];
if (yMap == null) {
return 0;
}
char[] zMap = yMap[z & 15];
if (zMap == null) {
return 0;
}
return zMap[x & 15];
}
@Override
public BaseBiome getBiome(Vector2D position) {
int index = position.getBlockZ() * getWidth() + position.getBlockX();
@ -247,62 +235,6 @@ public class HeightMapMCAGenerator extends MCAWriter implements Extent {
}
}
private void setOverlay(BufferedImage img, char combined, boolean white) {
if (img.getWidth() != getWidth() || img.getHeight() != getLength()) throw new IllegalArgumentException("Input image dimensions do not match the current height map!");
if (overlay == null) overlay = new char[getArea()];
int index = 0;
for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++){
int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && white && PseudoRandom.random.nextInt(256) <= height) {
overlay[index] = combined;
}
}
}
}
private void setMain(BufferedImage img, char combined, boolean white) {
if (img.getWidth() != getWidth() || img.getHeight() != getLength()) throw new IllegalArgumentException("Input image dimensions do not match the current height map!");
modifiedMain = true;
int index = 0;
for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++){
int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && white && PseudoRandom.random.nextInt(256) <= height) {
main[index] = combined;
}
}
}
}
private void setFloor(BufferedImage img, char combined, boolean white) {
if (img.getWidth() != getWidth() || img.getHeight() != getLength()) throw new IllegalArgumentException("Input image dimensions do not match the current height map!");
int index = 0;
for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++){
int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && white && PseudoRandom.random.nextInt(256) <= height) {
floor[index] = combined;
}
}
}
}
private void setColumn(BufferedImage img, char combined, boolean white) {
if (img.getWidth() != getWidth() || img.getHeight() != getLength()) throw new IllegalArgumentException("Input image dimensions do not match the current height map!");
modifiedMain = true;
int index = 0;
for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++){
int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && white && PseudoRandom.random.nextInt(256) <= height) {
main[index] = combined;
floor[index] = combined;
}
}
}
}
public void setBiome(Mask mask, byte biome) {
int index = 0;
for (int z = 0; z < getLength(); z++) {
@ -318,70 +250,6 @@ public class HeightMapMCAGenerator extends MCAWriter implements Extent {
}
}
private void setOverlay(Mask mask, char combined) {
int index = 0;
if (overlay == null) overlay = new char[getArea()];
for (int z = 0; z < getLength(); z++) {
mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++){
int y = heights[index] & 0xFF;
mutable.mutX(x);
mutable.mutY(y);
if (mask.test(mutable)) {
overlay[index] = combined;
}
}
}
}
private void setFloor(Mask mask, char combined) {
int index = 0;
for (int z = 0; z < getLength(); z++) {
mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++){
int y = heights[index] & 0xFF;
mutable.mutX(x);
mutable.mutY(y);
if (mask.test(mutable)) {
floor[index] = combined;
}
}
}
}
private void setMain(Mask mask, char combined) {
modifiedMain = true;
int index = 0;
for (int z = 0; z < getLength(); z++) {
mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++){
int y = heights[index] & 0xFF;
mutable.mutX(x);
mutable.mutY(y);
if (mask.test(mutable)) {
main[index] = combined;
}
}
}
}
private void setColumn(Mask mask, char combined) {
modifiedMain = true;
int index = 0;
for (int z = 0; z < getLength(); z++) {
mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++){
int y = heights[index] & 0xFF;
mutable.mutX(x);
mutable.mutY(y);
if (mask.test(mutable)) {
floor[index] = combined;
main[index] = combined;
}
}
}
}
public void setOverlay(BufferedImage img, Pattern pattern, boolean white) {
if (pattern instanceof BlockPattern) {
setOverlay(img, (char) ((BlockPattern) pattern).getBlock().getCombined(), white);
@ -552,25 +420,6 @@ public class HeightMapMCAGenerator extends MCAWriter implements Extent {
Arrays.fill(biomes, (byte) biome);
}
private void setFloor(int value) {
Arrays.fill(floor, (char) value);
}
private void setColumn(int value) {
setFloor(value);
setMain(value);
}
private void setMain(int value) {
modifiedMain = true;
Arrays.fill(main, (char) value);
}
private void setOverlay(int value) {
if (overlay == null) overlay = new char[getArea()];
Arrays.fill(overlay, (char) value);
}
public void setFloor(Pattern value) {
if (value instanceof BlockPattern) {
setFloor(((BlockPattern) value).getBlock().getCombined());
@ -836,4 +685,155 @@ public class HeightMapMCAGenerator extends MCAWriter implements Extent {
}
return chunk;
}
private char get(char[][][] map, int x, int y, int z) {
char[][] yMap = map[y];
if (yMap == null) {
return 0;
}
char[] zMap = yMap[z & 15];
if (zMap == null) {
return 0;
}
return zMap[x & 15];
}
private void setOverlay(Mask mask, char combined) {
int index = 0;
if (overlay == null) overlay = new char[getArea()];
for (int z = 0; z < getLength(); z++) {
mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++){
int y = heights[index] & 0xFF;
mutable.mutX(x);
mutable.mutY(y);
if (mask.test(mutable)) {
overlay[index] = combined;
}
}
}
}
private void setFloor(Mask mask, char combined) {
int index = 0;
for (int z = 0; z < getLength(); z++) {
mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++){
int y = heights[index] & 0xFF;
mutable.mutX(x);
mutable.mutY(y);
if (mask.test(mutable)) {
floor[index] = combined;
}
}
}
}
private void setMain(Mask mask, char combined) {
modifiedMain = true;
int index = 0;
for (int z = 0; z < getLength(); z++) {
mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++){
int y = heights[index] & 0xFF;
mutable.mutX(x);
mutable.mutY(y);
if (mask.test(mutable)) {
main[index] = combined;
}
}
}
}
private void setColumn(Mask mask, char combined) {
modifiedMain = true;
int index = 0;
for (int z = 0; z < getLength(); z++) {
mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++){
int y = heights[index] & 0xFF;
mutable.mutX(x);
mutable.mutY(y);
if (mask.test(mutable)) {
floor[index] = combined;
main[index] = combined;
}
}
}
}
private void setFloor(int value) {
Arrays.fill(floor, (char) value);
}
private void setColumn(int value) {
setFloor(value);
setMain(value);
}
private void setMain(int value) {
modifiedMain = true;
Arrays.fill(main, (char) value);
}
private void setOverlay(int value) {
if (overlay == null) overlay = new char[getArea()];
Arrays.fill(overlay, (char) value);
}
private void setOverlay(BufferedImage img, char combined, boolean white) {
if (img.getWidth() != getWidth() || img.getHeight() != getLength()) throw new IllegalArgumentException("Input image dimensions do not match the current height map!");
if (overlay == null) overlay = new char[getArea()];
int index = 0;
for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++){
int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && white && PseudoRandom.random.nextInt(256) <= height) {
overlay[index] = combined;
}
}
}
}
private void setMain(BufferedImage img, char combined, boolean white) {
if (img.getWidth() != getWidth() || img.getHeight() != getLength()) throw new IllegalArgumentException("Input image dimensions do not match the current height map!");
modifiedMain = true;
int index = 0;
for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++){
int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && white && PseudoRandom.random.nextInt(256) <= height) {
main[index] = combined;
}
}
}
}
private void setFloor(BufferedImage img, char combined, boolean white) {
if (img.getWidth() != getWidth() || img.getHeight() != getLength()) throw new IllegalArgumentException("Input image dimensions do not match the current height map!");
int index = 0;
for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++){
int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && white && PseudoRandom.random.nextInt(256) <= height) {
floor[index] = combined;
}
}
}
}
private void setColumn(BufferedImage img, char combined, boolean white) {
if (img.getWidth() != getWidth() || img.getHeight() != getLength()) throw new IllegalArgumentException("Input image dimensions do not match the current height map!");
modifiedMain = true;
int index = 0;
for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++){
int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && white && PseudoRandom.random.nextInt(256) <= height) {
main[index] = combined;
floor[index] = combined;
}
}
}
}
}

View File

@ -2,14 +2,16 @@ package com.boydti.fawe.object;
import com.sk89q.jnbt.NBTInputStream;
import com.sk89q.jnbt.NamedTag;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FaweInputStream extends InputStream {
public class FaweInputStream extends DataInputStream {
private final InputStream parent;
public FaweInputStream(InputStream parent) {
super(parent);
this.parent = parent;
}
@ -17,49 +19,6 @@ public class FaweInputStream extends InputStream {
return parent;
}
@Override
public int read() throws IOException {
return parent.read();
}
public long readLong() throws IOException {
return (long)
(read() << 64) +
(read() << 56) +
(read() << 48) +
(read() << 36) +
(read() << 24) +
(read() << 16) +
(read() << 8) +
(read());
}
public int readInt() throws IOException {
return (int)
(read() << 24) +
(read() << 16) +
(read() << 8) +
(read());
}
public short readShort() throws IOException {
return (short) (
(read() << 8) +
read());
}
public byte readByte() throws IOException {
return (byte) read();
}
public int readUnsignedByte() throws IOException {
return read();
}
public int readUnsignedShort() throws IOException {
return (int) readShort() & 0xFFFF;
}
public int readMedium() throws IOException {
return (int) (
(read() << 16) +

View File

@ -2,14 +2,16 @@ package com.boydti.fawe.object;
import com.sk89q.jnbt.NBTOutputStream;
import com.sk89q.jnbt.Tag;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class FaweOutputStream extends OutputStream {
public class FaweOutputStream extends DataOutputStream {
private final OutputStream parent;
public FaweOutputStream(OutputStream parent) {
super(parent);
this.parent = parent;
}
@ -17,35 +19,12 @@ public class FaweOutputStream extends OutputStream {
return parent;
}
@Override
public void write(int b) throws IOException {
parent.write(b);
}
public void write(int b, int amount) throws IOException {
for (int i = 0; i < amount; i++) {
write(b);
}
}
public void writeLong(long l) throws IOException {
write((byte) (l >>> 64));
write((byte) (l >>> 56));
write((byte) (l >>> 48));
write((byte) (l >>> 36));
write((byte) (l >>> 24));
write((byte) (l >>> 16));
write((byte) (l >>> 8));
write((byte) (l));
}
public void writeInt(int i) throws IOException {
write((byte) (i >>> 24));
write((byte) (i >>> 16));
write((byte) (i >>> 8));
write((byte) (i));
}
public void writeShort(short s) throws IOException {
write((byte) (s >>> 8));
write((byte) (s));

View File

@ -1,5 +1,6 @@
package com.boydti.fawe.object.brush;
import com.boydti.fawe.object.brush.visualization.VisualExtent;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.MaxChangedBlocksException;
import com.sk89q.worldedit.Vector;
@ -19,12 +20,13 @@ public class LineBrush implements Brush, ResettableTool {
@Override
public void build(EditSession editSession, Vector position, final Pattern pattern, double size) throws MaxChangedBlocksException {
boolean visual = (editSession.getExtent() instanceof VisualExtent);
if (pos1 == null) {
pos1 = position;
if (!visual) pos1 = position;
return;
}
editSession.drawLine(pattern, pos1, position, size, !shell, flat);
if (!select) {
if (!select && !visual) {
pos1 = null;
return;
}

View File

@ -354,21 +354,16 @@ public class PlatformManager {
// At this time, only handle interaction from players
if (actor instanceof Player) {
final Player player = new LocationMaskedPlayerWrapper(PlayerWrapper.wrap((Player) actor), ((Player) actor).getLocation());
final LocalSession session = worldEdit.getSessionManager().get(actor);
Player playerActor = (Player) actor;
if (event.getType() == Interaction.HIT) {
if (player.getItemInHand() == getConfiguration().wandItem) {
if (!session.isToolControlEnabled()) {
if (session.isToolControlEnabled() && playerActor.getItemInHand() == getConfiguration().wandItem) {
FawePlayer<?> fp = FawePlayer.wrap(playerActor);
if (!fp.hasPermission("worldedit.selection.pos")) {
return;
}
if (!actor.hasPermission("worldedit.selection.pos")) {
return;
}
final RegionSelector selector = session.getRegionSelector(player.getWorld());
FawePlayer<?> fp = FawePlayer.wrap(player);
final RegionSelector selector = session.getRegionSelector(playerActor.getWorld());
final Player player = new LocationMaskedPlayerWrapper(PlayerWrapper.wrap((Player) actor), ((Player) actor).getLocation());
fp.runAction(new Runnable() {
@Override
public void run() {
@ -381,10 +376,11 @@ public class PlatformManager {
event.setCancelled(true);
return;
}
if (player.isHoldingPickAxe() && session.hasSuperPickAxe()) {
if (session.hasSuperPickAxe() && playerActor.isHoldingPickAxe()) {
final BlockTool superPickaxe = session.getSuperPickaxe();
if (superPickaxe != null && superPickaxe.canUse(player)) {
FawePlayer<?> fp = FawePlayer.wrap(player);
if (superPickaxe != null && superPickaxe.canUse(playerActor)) {
FawePlayer<?> fp = FawePlayer.wrap(playerActor);
final Player player = new LocationMaskedPlayerWrapper(PlayerWrapper.wrap((Player) actor), ((Player) actor).getLocation());
fp.runAction(new Runnable() {
@Override
public void run() {
@ -395,10 +391,11 @@ public class PlatformManager {
return;
}
}
final Tool tool = session.getTool(player);
final Tool tool = session.getTool(playerActor);
if (tool != null && tool instanceof DoubleActionBlockTool) {
if (tool.canUse(player)) {
FawePlayer<?> fp = FawePlayer.wrap(player);
if (tool.canUse(playerActor)) {
FawePlayer<?> fp = FawePlayer.wrap(playerActor);
final Player player = new LocationMaskedPlayerWrapper(PlayerWrapper.wrap((Player) actor), ((Player) actor).getLocation());
fp.runAction(new Runnable() {
@Override
public void run() {
@ -409,16 +406,13 @@ public class PlatformManager {
}
}
} else if (event.getType() == Interaction.OPEN) {
if (player.getItemInHand() == getConfiguration().wandItem) {
if (!session.isToolControlEnabled()) {
if (session.isToolControlEnabled() && playerActor.getItemInHand() == getConfiguration().wandItem) {
FawePlayer<?> fp = FawePlayer.wrap(playerActor);
if (!fp.hasPermission("worldedit.selection.pos")) {
return;
}
if (!actor.hasPermission("worldedit.selection.pos")) {
return;
}
final RegionSelector selector = session.getRegionSelector(player.getWorld());
FawePlayer<?> fp = FawePlayer.wrap(player);
final RegionSelector selector = session.getRegionSelector(playerActor.getWorld());
final Player player = new LocationMaskedPlayerWrapper(PlayerWrapper.wrap((Player) actor), ((Player) actor).getLocation());
fp.runAction(new Runnable() {
@Override
public void run() {
@ -432,10 +426,11 @@ public class PlatformManager {
return;
}
final Tool tool = session.getTool(player);
final Tool tool = session.getTool(playerActor);
if (tool != null && tool instanceof BlockTool) {
if (tool.canUse(player)) {
FawePlayer<?> fp = FawePlayer.wrap(player);
if (tool.canUse(playerActor)) {
FawePlayer<?> fp = FawePlayer.wrap(playerActor);
final Player player = new LocationMaskedPlayerWrapper(PlayerWrapper.wrap((Player) actor), ((Player) actor).getLocation());
fp.runAction(new Runnable() {
@Override
public void run() {