mirror of
https://github.com/boy0001/FastAsyncWorldedit.git
synced 2024-11-28 21:56:33 +01:00
Fixes #910
This commit is contained in:
parent
32cf8e47cc
commit
cfe47d25d2
@ -10,36 +10,13 @@ import com.boydti.fawe.object.FaweQueue;
|
|||||||
import com.boydti.fawe.util.MainUtil;
|
import com.boydti.fawe.util.MainUtil;
|
||||||
import com.boydti.fawe.util.MathMan;
|
import com.boydti.fawe.util.MathMan;
|
||||||
import com.boydti.fawe.util.ReflectionUtils;
|
import com.boydti.fawe.util.ReflectionUtils;
|
||||||
import com.sk89q.jnbt.CompoundTag;
|
import com.sk89q.jnbt.*;
|
||||||
import com.sk89q.jnbt.ListTag;
|
|
||||||
import com.sk89q.jnbt.LongTag;
|
|
||||||
import com.sk89q.jnbt.StringTag;
|
|
||||||
import com.sk89q.jnbt.Tag;
|
|
||||||
import com.sk89q.worldedit.internal.Constants;
|
import com.sk89q.worldedit.internal.Constants;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
import net.minecraft.server.v1_10_R1.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
import net.minecraft.server.v1_10_R1.Block;
|
|
||||||
import net.minecraft.server.v1_10_R1.BlockPosition;
|
|
||||||
import net.minecraft.server.v1_10_R1.DataBits;
|
|
||||||
import net.minecraft.server.v1_10_R1.DataPalette;
|
|
||||||
import net.minecraft.server.v1_10_R1.DataPaletteBlock;
|
|
||||||
import net.minecraft.server.v1_10_R1.DataPaletteGlobal;
|
|
||||||
import net.minecraft.server.v1_10_R1.Entity;
|
|
||||||
import net.minecraft.server.v1_10_R1.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_10_R1.EntityTypes;
|
|
||||||
import net.minecraft.server.v1_10_R1.IBlockData;
|
|
||||||
import net.minecraft.server.v1_10_R1.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_10_R1.NBTTagInt;
|
|
||||||
import net.minecraft.server.v1_10_R1.TileEntity;
|
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||||
@ -335,42 +312,6 @@ public class BukkitChunk_1_10 extends CharFaweChunk<Chunk, BukkitQueue_1_10> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Trim tiles
|
|
||||||
Iterator<Map.Entry<net.minecraft.server.v1_10_R1.BlockPosition, net.minecraft.server.v1_10_R1.TileEntity>> iterator = tiles.entrySet().iterator();
|
|
||||||
HashMap<net.minecraft.server.v1_10_R1.BlockPosition, net.minecraft.server.v1_10_R1.TileEntity> toRemove = null;
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
Map.Entry<net.minecraft.server.v1_10_R1.BlockPosition, net.minecraft.server.v1_10_R1.TileEntity> tile = iterator.next();
|
|
||||||
net.minecraft.server.v1_10_R1.BlockPosition pos = tile.getKey();
|
|
||||||
int lx = pos.getX() & 15;
|
|
||||||
int ly = pos.getY();
|
|
||||||
int lz = pos.getZ() & 15;
|
|
||||||
int j = FaweCache.CACHE_I[ly][lz][lx];
|
|
||||||
char[] array = this.getIdArray(j);
|
|
||||||
if (array == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
int k = FaweCache.CACHE_J[ly][lz][lx];
|
|
||||||
if (array[k] != 0) {
|
|
||||||
if (toRemove == null) {
|
|
||||||
toRemove = new HashMap<>();
|
|
||||||
}
|
|
||||||
if (copy != null) {
|
|
||||||
copy.storeTile(tile.getValue(), tile.getKey());
|
|
||||||
}
|
|
||||||
toRemove.put(tile.getKey(), tile.getValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (toRemove != null) {
|
|
||||||
for (Map.Entry<net.minecraft.server.v1_10_R1.BlockPosition, net.minecraft.server.v1_10_R1.TileEntity> entry : toRemove.entrySet()) {
|
|
||||||
net.minecraft.server.v1_10_R1.BlockPosition bp = entry.getKey();
|
|
||||||
net.minecraft.server.v1_10_R1.TileEntity tile = entry.getValue();
|
|
||||||
tiles.remove(bp);
|
|
||||||
nmsWorld.s(bp);
|
|
||||||
tile.y();
|
|
||||||
tile.invalidateBlockCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// Set blocks
|
// Set blocks
|
||||||
for (int j = 0; j < sections.length; j++) {
|
for (int j = 0; j < sections.length; j++) {
|
||||||
int count = this.getCount(j);
|
int count = this.getCount(j);
|
||||||
@ -452,6 +393,42 @@ public class BukkitChunk_1_10 extends CharFaweChunk<Chunk, BukkitQueue_1_10> {
|
|||||||
}
|
}
|
||||||
getParent().setCount(0, getParent().getNonEmptyBlockCount(section) + nonEmptyBlockCount, section);
|
getParent().setCount(0, getParent().getNonEmptyBlockCount(section) + nonEmptyBlockCount, section);
|
||||||
}
|
}
|
||||||
|
// Trim tiles
|
||||||
|
Iterator<Map.Entry<net.minecraft.server.v1_10_R1.BlockPosition, net.minecraft.server.v1_10_R1.TileEntity>> iterator = tiles.entrySet().iterator();
|
||||||
|
HashMap<net.minecraft.server.v1_10_R1.BlockPosition, net.minecraft.server.v1_10_R1.TileEntity> toRemove = null;
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Map.Entry<net.minecraft.server.v1_10_R1.BlockPosition, net.minecraft.server.v1_10_R1.TileEntity> tile = iterator.next();
|
||||||
|
net.minecraft.server.v1_10_R1.BlockPosition pos = tile.getKey();
|
||||||
|
int lx = pos.getX() & 15;
|
||||||
|
int ly = pos.getY();
|
||||||
|
int lz = pos.getZ() & 15;
|
||||||
|
int j = FaweCache.CACHE_I[ly][lz][lx];
|
||||||
|
char[] array = this.getIdArray(j);
|
||||||
|
if (array == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int k = FaweCache.CACHE_J[ly][lz][lx];
|
||||||
|
if (array[k] != 0) {
|
||||||
|
if (toRemove == null) {
|
||||||
|
toRemove = new HashMap<>();
|
||||||
|
}
|
||||||
|
if (copy != null) {
|
||||||
|
copy.storeTile(tile.getValue(), tile.getKey());
|
||||||
|
}
|
||||||
|
toRemove.put(tile.getKey(), tile.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toRemove != null) {
|
||||||
|
for (Map.Entry<net.minecraft.server.v1_10_R1.BlockPosition, net.minecraft.server.v1_10_R1.TileEntity> entry : toRemove.entrySet()) {
|
||||||
|
net.minecraft.server.v1_10_R1.BlockPosition bp = entry.getKey();
|
||||||
|
net.minecraft.server.v1_10_R1.TileEntity tile = entry.getValue();
|
||||||
|
tiles.remove(bp);
|
||||||
|
nmsWorld.s(bp);
|
||||||
|
tile.y();
|
||||||
|
tile.invalidateBlockCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
// Set biomes
|
// Set biomes
|
||||||
if (this.biomes != null) {
|
if (this.biomes != null) {
|
||||||
if (copy != null) {
|
if (copy != null) {
|
||||||
|
@ -345,42 +345,7 @@ public class BukkitChunk_1_11 extends CharFaweChunk<Chunk, com.boydti.fawe.bukki
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Trim tiles
|
|
||||||
Iterator<Map.Entry<BlockPosition, TileEntity>> iterator = tiles.entrySet().iterator();
|
|
||||||
HashMap<BlockPosition, TileEntity> toRemove = null;
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
Map.Entry<BlockPosition, TileEntity> tile = iterator.next();
|
|
||||||
BlockPosition pos = tile.getKey();
|
|
||||||
int lx = pos.getX() & 15;
|
|
||||||
int ly = pos.getY();
|
|
||||||
int lz = pos.getZ() & 15;
|
|
||||||
int j = FaweCache.CACHE_I[ly][lz][lx];
|
|
||||||
char[] array = this.getIdArray(j);
|
|
||||||
if (array == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
int k = FaweCache.CACHE_J[ly][lz][lx];
|
|
||||||
if (array[k] != 0) {
|
|
||||||
if (toRemove == null) {
|
|
||||||
toRemove = new HashMap<>();
|
|
||||||
}
|
|
||||||
if (copy != null) {
|
|
||||||
copy.storeTile(tile.getValue(), tile.getKey());
|
|
||||||
}
|
|
||||||
toRemove.put(tile.getKey(), tile.getValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (toRemove != null) {
|
|
||||||
for (Map.Entry<BlockPosition, TileEntity> entry : toRemove.entrySet()) {
|
|
||||||
BlockPosition bp = entry.getKey();
|
|
||||||
TileEntity tile = entry.getValue();
|
|
||||||
tiles.remove(bp);
|
|
||||||
nmsWorld.s(bp);
|
|
||||||
tile.z();
|
|
||||||
tile.invalidateBlockCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// Set blocks
|
// Set blocks
|
||||||
for (int j = 0; j < sections.length; j++) {
|
for (int j = 0; j < sections.length; j++) {
|
||||||
int count = this.getCount(j);
|
int count = this.getCount(j);
|
||||||
@ -462,6 +427,42 @@ public class BukkitChunk_1_11 extends CharFaweChunk<Chunk, com.boydti.fawe.bukki
|
|||||||
}
|
}
|
||||||
getParent().setCount(0, getParent().getNonEmptyBlockCount(section) + nonEmptyBlockCount, section);
|
getParent().setCount(0, getParent().getNonEmptyBlockCount(section) + nonEmptyBlockCount, section);
|
||||||
}
|
}
|
||||||
|
// Trim tiles
|
||||||
|
Iterator<Map.Entry<BlockPosition, TileEntity>> iterator = tiles.entrySet().iterator();
|
||||||
|
HashMap<BlockPosition, TileEntity> toRemove = null;
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Map.Entry<BlockPosition, TileEntity> tile = iterator.next();
|
||||||
|
BlockPosition pos = tile.getKey();
|
||||||
|
int lx = pos.getX() & 15;
|
||||||
|
int ly = pos.getY();
|
||||||
|
int lz = pos.getZ() & 15;
|
||||||
|
int j = FaweCache.CACHE_I[ly][lz][lx];
|
||||||
|
char[] array = this.getIdArray(j);
|
||||||
|
if (array == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int k = FaweCache.CACHE_J[ly][lz][lx];
|
||||||
|
if (array[k] != 0) {
|
||||||
|
if (toRemove == null) {
|
||||||
|
toRemove = new HashMap<>();
|
||||||
|
}
|
||||||
|
if (copy != null) {
|
||||||
|
copy.storeTile(tile.getValue(), tile.getKey());
|
||||||
|
}
|
||||||
|
toRemove.put(tile.getKey(), tile.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toRemove != null) {
|
||||||
|
for (Map.Entry<BlockPosition, TileEntity> entry : toRemove.entrySet()) {
|
||||||
|
BlockPosition bp = entry.getKey();
|
||||||
|
TileEntity tile = entry.getValue();
|
||||||
|
tiles.remove(bp);
|
||||||
|
nmsWorld.s(bp);
|
||||||
|
tile.z();
|
||||||
|
tile.invalidateBlockCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
// Set biomes
|
// Set biomes
|
||||||
if (this.biomes != null) {
|
if (this.biomes != null) {
|
||||||
if (copy != null) {
|
if (copy != null) {
|
||||||
|
@ -13,24 +13,8 @@ import com.sk89q.jnbt.ListTag;
|
|||||||
import com.sk89q.jnbt.StringTag;
|
import com.sk89q.jnbt.StringTag;
|
||||||
import com.sk89q.jnbt.Tag;
|
import com.sk89q.jnbt.Tag;
|
||||||
import com.sk89q.worldedit.internal.Constants;
|
import com.sk89q.worldedit.internal.Constants;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
import net.minecraft.server.v1_7_R4.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
import net.minecraft.server.v1_7_R4.ChunkPosition;
|
|
||||||
import net.minecraft.server.v1_7_R4.ChunkSection;
|
|
||||||
import net.minecraft.server.v1_7_R4.Entity;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityTypes;
|
|
||||||
import net.minecraft.server.v1_7_R4.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_7_R4.NBTTagInt;
|
|
||||||
import net.minecraft.server.v1_7_R4.NibbleArray;
|
|
||||||
import net.minecraft.server.v1_7_R4.TileEntity;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -256,39 +240,6 @@ public class BukkitChunk_1_7 extends CharFaweChunk<Chunk, BukkitQueue17> {
|
|||||||
CharFaweChunk previous = getParent().getPrevious(this, sections, tiles, entities, createdEntities, false);
|
CharFaweChunk previous = getParent().getPrevious(this, sections, tiles, entities, createdEntities, false);
|
||||||
getParent().getChangeTask().run(previous, this);
|
getParent().getChangeTask().run(previous, this);
|
||||||
}
|
}
|
||||||
// Trim tiles
|
|
||||||
Iterator<Map.Entry<ChunkPosition, TileEntity>> iterator = tiles.entrySet().iterator();
|
|
||||||
HashMap<ChunkPosition, TileEntity> toRemove = null;
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
Map.Entry<ChunkPosition, TileEntity> tile = iterator.next();
|
|
||||||
ChunkPosition pos = tile.getKey();
|
|
||||||
int lx = pos.x & 15;
|
|
||||||
int ly = pos.y;
|
|
||||||
int lz = pos.z & 15;
|
|
||||||
int j = FaweCache.CACHE_I[ly][lz][lx];
|
|
||||||
char[] array = this.getIdArray(j);
|
|
||||||
if (array == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
int k = FaweCache.CACHE_J[ly][lz][lx];
|
|
||||||
if (array[k] != 0) {
|
|
||||||
if (toRemove == null) {
|
|
||||||
toRemove = new HashMap<>();
|
|
||||||
}
|
|
||||||
toRemove.put(tile.getKey(), tile.getValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (toRemove != null) {
|
|
||||||
for (Map.Entry<ChunkPosition, TileEntity> entry : toRemove.entrySet()) {
|
|
||||||
ChunkPosition bp = entry.getKey();
|
|
||||||
TileEntity tile = entry.getValue();
|
|
||||||
tiles.remove(bp);
|
|
||||||
nmsWorld.p(bp.x, bp.y, bp.z);
|
|
||||||
tile.s();
|
|
||||||
tile.u();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// Set blocks
|
// Set blocks
|
||||||
for (int j = 0; j < sections.length; j++) {
|
for (int j = 0; j < sections.length; j++) {
|
||||||
int count = this.getCount(j);
|
int count = this.getCount(j);
|
||||||
@ -423,7 +374,39 @@ public class BukkitChunk_1_7 extends CharFaweChunk<Chunk, BukkitQueue17> {
|
|||||||
}
|
}
|
||||||
getParent().setCount(0, solid, section);
|
getParent().setCount(0, solid, section);
|
||||||
}
|
}
|
||||||
|
// Trim tiles
|
||||||
|
Iterator<Map.Entry<ChunkPosition, TileEntity>> iterator = tiles.entrySet().iterator();
|
||||||
|
HashMap<ChunkPosition, TileEntity> toRemove = null;
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Map.Entry<ChunkPosition, TileEntity> tile = iterator.next();
|
||||||
|
ChunkPosition pos = tile.getKey();
|
||||||
|
int lx = pos.x & 15;
|
||||||
|
int ly = pos.y;
|
||||||
|
int lz = pos.z & 15;
|
||||||
|
int j = FaweCache.CACHE_I[ly][lz][lx];
|
||||||
|
char[] array = this.getIdArray(j);
|
||||||
|
if (array == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int k = FaweCache.CACHE_J[ly][lz][lx];
|
||||||
|
if (array[k] != 0) {
|
||||||
|
if (toRemove == null) {
|
||||||
|
toRemove = new HashMap<>();
|
||||||
|
}
|
||||||
|
toRemove.put(tile.getKey(), tile.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toRemove != null) {
|
||||||
|
for (Map.Entry<ChunkPosition, TileEntity> entry : toRemove.entrySet()) {
|
||||||
|
ChunkPosition bp = entry.getKey();
|
||||||
|
TileEntity tile = entry.getValue();
|
||||||
|
tiles.remove(bp);
|
||||||
|
nmsWorld.p(bp.x, bp.y, bp.z);
|
||||||
|
tile.s();
|
||||||
|
tile.u();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
// Set biomes
|
// Set biomes
|
||||||
if (this.biomes != null) {
|
if (this.biomes != null) {
|
||||||
byte[] currentBiomes = nmsChunk.m();
|
byte[] currentBiomes = nmsChunk.m();
|
||||||
|
@ -13,21 +13,8 @@ import com.sk89q.jnbt.ListTag;
|
|||||||
import com.sk89q.jnbt.StringTag;
|
import com.sk89q.jnbt.StringTag;
|
||||||
import com.sk89q.jnbt.Tag;
|
import com.sk89q.jnbt.Tag;
|
||||||
import com.sk89q.worldedit.internal.Constants;
|
import com.sk89q.worldedit.internal.Constants;
|
||||||
import java.util.Collection;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
import net.minecraft.server.v1_8_R3.*;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
|
||||||
import net.minecraft.server.v1_8_R3.ChunkSection;
|
|
||||||
import net.minecraft.server.v1_8_R3.Entity;
|
|
||||||
import net.minecraft.server.v1_8_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_8_R3.EntityTypes;
|
|
||||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_8_R3.NBTTagInt;
|
|
||||||
import net.minecraft.server.v1_8_R3.TileEntity;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -186,39 +173,6 @@ public class BukkitChunk_1_8 extends CharFaweChunk<Chunk, BukkitQueue18R3> {
|
|||||||
CharFaweChunk previous = getParent().getPrevious(this, sections, tiles, entities, createdEntities, false);
|
CharFaweChunk previous = getParent().getPrevious(this, sections, tiles, entities, createdEntities, false);
|
||||||
getParent().getChangeTask().run(previous, this);
|
getParent().getChangeTask().run(previous, this);
|
||||||
}
|
}
|
||||||
// Trim tiles
|
|
||||||
Iterator<Map.Entry<BlockPosition, TileEntity>> iterator = tiles.entrySet().iterator();
|
|
||||||
HashMap<BlockPosition, TileEntity> toRemove = null;
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
Map.Entry<BlockPosition, TileEntity> tile = iterator.next();
|
|
||||||
BlockPosition pos = tile.getKey();
|
|
||||||
int lx = pos.getX() & 15;
|
|
||||||
int ly = pos.getY();
|
|
||||||
int lz = pos.getZ() & 15;
|
|
||||||
int j = FaweCache.CACHE_I[ly][lz][lx];
|
|
||||||
char[] array = this.getIdArray(j);
|
|
||||||
if (array == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
int k = FaweCache.CACHE_J[ly][lz][lx];
|
|
||||||
if (array[k] != 0) {
|
|
||||||
if (toRemove == null) {
|
|
||||||
toRemove = new HashMap<>();
|
|
||||||
}
|
|
||||||
toRemove.put(tile.getKey(), tile.getValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (toRemove != null) {
|
|
||||||
for (Map.Entry<BlockPosition, TileEntity> entry : toRemove.entrySet()) {
|
|
||||||
BlockPosition bp = entry.getKey();
|
|
||||||
TileEntity tile = entry.getValue();
|
|
||||||
tiles.remove(bp);
|
|
||||||
nmsWorld.t(bp);
|
|
||||||
tile.y();
|
|
||||||
tile.E();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// Set blocks
|
// Set blocks
|
||||||
for (int j = 0; j < sections.length; j++) {
|
for (int j = 0; j < sections.length; j++) {
|
||||||
int count = this.getCount(j);
|
int count = this.getCount(j);
|
||||||
@ -287,7 +241,39 @@ public class BukkitChunk_1_8 extends CharFaweChunk<Chunk, BukkitQueue18R3> {
|
|||||||
}
|
}
|
||||||
getParent().setCount(0, getParent().getNonEmptyBlockCount(section) + solid, section);
|
getParent().setCount(0, getParent().getNonEmptyBlockCount(section) + solid, section);
|
||||||
}
|
}
|
||||||
|
// Trim tiles
|
||||||
|
Iterator<Map.Entry<BlockPosition, TileEntity>> iterator = tiles.entrySet().iterator();
|
||||||
|
HashMap<BlockPosition, TileEntity> toRemove = null;
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Map.Entry<BlockPosition, TileEntity> tile = iterator.next();
|
||||||
|
BlockPosition pos = tile.getKey();
|
||||||
|
int lx = pos.getX() & 15;
|
||||||
|
int ly = pos.getY();
|
||||||
|
int lz = pos.getZ() & 15;
|
||||||
|
int j = FaweCache.CACHE_I[ly][lz][lx];
|
||||||
|
char[] array = this.getIdArray(j);
|
||||||
|
if (array == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int k = FaweCache.CACHE_J[ly][lz][lx];
|
||||||
|
if (array[k] != 0) {
|
||||||
|
if (toRemove == null) {
|
||||||
|
toRemove = new HashMap<>();
|
||||||
|
}
|
||||||
|
toRemove.put(tile.getKey(), tile.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toRemove != null) {
|
||||||
|
for (Map.Entry<BlockPosition, TileEntity> entry : toRemove.entrySet()) {
|
||||||
|
BlockPosition bp = entry.getKey();
|
||||||
|
TileEntity tile = entry.getValue();
|
||||||
|
tiles.remove(bp);
|
||||||
|
nmsWorld.t(bp);
|
||||||
|
tile.y();
|
||||||
|
tile.E();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
// Set biomes
|
// Set biomes
|
||||||
if (this.biomes != null) {
|
if (this.biomes != null) {
|
||||||
byte[] currentBiomes = nmsChunk.getBiomeIndex();
|
byte[] currentBiomes = nmsChunk.getBiomeIndex();
|
||||||
|
@ -9,35 +9,12 @@ import com.boydti.fawe.object.FaweQueue;
|
|||||||
import com.boydti.fawe.util.MainUtil;
|
import com.boydti.fawe.util.MainUtil;
|
||||||
import com.boydti.fawe.util.MathMan;
|
import com.boydti.fawe.util.MathMan;
|
||||||
import com.boydti.fawe.util.ReflectionUtils;
|
import com.boydti.fawe.util.ReflectionUtils;
|
||||||
import com.sk89q.jnbt.CompoundTag;
|
import com.sk89q.jnbt.*;
|
||||||
import com.sk89q.jnbt.ListTag;
|
|
||||||
import com.sk89q.jnbt.LongTag;
|
|
||||||
import com.sk89q.jnbt.StringTag;
|
|
||||||
import com.sk89q.jnbt.Tag;
|
|
||||||
import com.sk89q.worldedit.internal.Constants;
|
import com.sk89q.worldedit.internal.Constants;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.Collection;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
import net.minecraft.server.v1_9_R2.*;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
import net.minecraft.server.v1_9_R2.Block;
|
|
||||||
import net.minecraft.server.v1_9_R2.BlockPosition;
|
|
||||||
import net.minecraft.server.v1_9_R2.ChunkSection;
|
|
||||||
import net.minecraft.server.v1_9_R2.DataBits;
|
|
||||||
import net.minecraft.server.v1_9_R2.DataPalette;
|
|
||||||
import net.minecraft.server.v1_9_R2.DataPaletteBlock;
|
|
||||||
import net.minecraft.server.v1_9_R2.DataPaletteGlobal;
|
|
||||||
import net.minecraft.server.v1_9_R2.Entity;
|
|
||||||
import net.minecraft.server.v1_9_R2.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_9_R2.EntityTypes;
|
|
||||||
import net.minecraft.server.v1_9_R2.IBlockData;
|
|
||||||
import net.minecraft.server.v1_9_R2.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_9_R2.NBTTagInt;
|
|
||||||
import net.minecraft.server.v1_9_R2.TileEntity;
|
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_9_R2.CraftChunk;
|
import org.bukkit.craftbukkit.v1_9_R2.CraftChunk;
|
||||||
@ -289,39 +266,6 @@ public class BukkitChunk_1_9 extends CharFaweChunk<Chunk, BukkitQueue_1_9_R1> {
|
|||||||
CharFaweChunk previous = getParent().getPrevious(this, sections, tiles, entities, createdEntities, false);
|
CharFaweChunk previous = getParent().getPrevious(this, sections, tiles, entities, createdEntities, false);
|
||||||
getParent().getChangeTask().run(previous, this);
|
getParent().getChangeTask().run(previous, this);
|
||||||
}
|
}
|
||||||
// Trim tiles
|
|
||||||
Iterator<Map.Entry<BlockPosition, TileEntity>> iterator = tiles.entrySet().iterator();
|
|
||||||
HashMap<BlockPosition, TileEntity> toRemove = null;
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
Map.Entry<BlockPosition, TileEntity> tile = iterator.next();
|
|
||||||
BlockPosition pos = tile.getKey();
|
|
||||||
int lx = pos.getX() & 15;
|
|
||||||
int ly = pos.getY();
|
|
||||||
int lz = pos.getZ() & 15;
|
|
||||||
int j = FaweCache.CACHE_I[ly][lz][lx];
|
|
||||||
char[] array = this.getIdArray(j);
|
|
||||||
if (array == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
int k = FaweCache.CACHE_J[ly][lz][lx];
|
|
||||||
if (array[k] != 0) {
|
|
||||||
if (toRemove == null) {
|
|
||||||
toRemove = new HashMap<>();
|
|
||||||
}
|
|
||||||
toRemove.put(tile.getKey(), tile.getValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (toRemove != null) {
|
|
||||||
for (Map.Entry<BlockPosition, TileEntity> entry : toRemove.entrySet()) {
|
|
||||||
BlockPosition bp = entry.getKey();
|
|
||||||
TileEntity tile = entry.getValue();
|
|
||||||
tiles.remove(bp);
|
|
||||||
nmsWorld.s(bp);
|
|
||||||
tile.y();
|
|
||||||
tile.invalidateBlockCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// Set blocks
|
// Set blocks
|
||||||
for (int j = 0; j < sections.length; j++) {
|
for (int j = 0; j < sections.length; j++) {
|
||||||
int count = this.getCount(j);
|
int count = this.getCount(j);
|
||||||
@ -405,6 +349,39 @@ public class BukkitChunk_1_9 extends CharFaweChunk<Chunk, BukkitQueue_1_9_R1> {
|
|||||||
}
|
}
|
||||||
getParent().setCount(0, getParent().getNonEmptyBlockCount(section) + nonEmptyBlockCount, section);
|
getParent().setCount(0, getParent().getNonEmptyBlockCount(section) + nonEmptyBlockCount, section);
|
||||||
}
|
}
|
||||||
|
// Trim tiles
|
||||||
|
Iterator<Map.Entry<BlockPosition, TileEntity>> iterator = tiles.entrySet().iterator();
|
||||||
|
HashMap<BlockPosition, TileEntity> toRemove = null;
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Map.Entry<BlockPosition, TileEntity> tile = iterator.next();
|
||||||
|
BlockPosition pos = tile.getKey();
|
||||||
|
int lx = pos.getX() & 15;
|
||||||
|
int ly = pos.getY();
|
||||||
|
int lz = pos.getZ() & 15;
|
||||||
|
int j = FaweCache.CACHE_I[ly][lz][lx];
|
||||||
|
char[] array = this.getIdArray(j);
|
||||||
|
if (array == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int k = FaweCache.CACHE_J[ly][lz][lx];
|
||||||
|
if (array[k] != 0) {
|
||||||
|
if (toRemove == null) {
|
||||||
|
toRemove = new HashMap<>();
|
||||||
|
}
|
||||||
|
toRemove.put(tile.getKey(), tile.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toRemove != null) {
|
||||||
|
for (Map.Entry<BlockPosition, TileEntity> entry : toRemove.entrySet()) {
|
||||||
|
BlockPosition bp = entry.getKey();
|
||||||
|
TileEntity tile = entry.getValue();
|
||||||
|
tiles.remove(bp);
|
||||||
|
nmsWorld.s(bp);
|
||||||
|
tile.y();
|
||||||
|
tile.invalidateBlockCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
// Set biomes
|
// Set biomes
|
||||||
byte[] biomes = this.biomes;
|
byte[] biomes = this.biomes;
|
||||||
if (biomes != null) {
|
if (biomes != null) {
|
||||||
|
Loading…
Reference in New Issue
Block a user