Lazy tags + get / set tiles

Lazy tags means tiles/ents are not translated into the nms NBTBase until it is needed. Should be faster in cases where getFullBlock is called, but nbt is not always needed.
Commands like Copy and Paste, where the input/output are both nms worlds, can entirely bypass WorldEdit translating to and from the WorldEdit JNBT classes.
This commit is contained in:
Jesse Boyd
2019-11-20 03:40:52 +00:00
parent 60759934a3
commit 144ea2ef34
40 changed files with 298 additions and 172 deletions

View File

@ -25,6 +25,15 @@ import java.util.Locale;
* The {@code TAG_Byte_Array} tag.
*/
public final class ByteArrayTag extends Tag {
@Override
public String getTypeName() {
return "TAG_Byte_Array";
}
@Override
public int getTypeCode() {
return NBTConstants.TYPE_BYTE_ARRAY;
}
private final byte[] value;

View File

@ -23,6 +23,14 @@ package com.sk89q.jnbt;
* The {@code TAG_Byte} tag.
*/
public final class ByteTag extends NumberTag {
@Override
public int getTypeCode() {
return NBTConstants.TYPE_BYTE;
}
@Override
public String getTypeName() {
return "TAG_Byte";
}
private final byte value;

View File

@ -32,6 +32,15 @@ import java.util.UUID;
* The {@code TAG_Compound} tag.
*/
public class CompoundTag extends Tag {
@Override
public String getTypeName() {
return "TAG_Compound";
}
@Override
public int getTypeCode() {
return NBTConstants.TYPE_COMPOUND;
}
private Map<String, Tag> value;

View File

@ -24,6 +24,14 @@ package com.sk89q.jnbt;
*
*/
public final class DoubleTag extends NumberTag {
@Override
public int getTypeCode() {
return NBTConstants.TYPE_DOUBLE;
}
@Override
public String getTypeName() {
return "TAG_Double";
}
private final double value;

View File

@ -23,6 +23,15 @@ package com.sk89q.jnbt;
* The {@code TAG_End} tag.
*/
public final class EndTag extends Tag {
@Override
public String getTypeName() {
return "TAG_End";
}
@Override
public int getTypeCode() {
return NBTConstants.TYPE_END;
}
@Override
public Object getValue() {

View File

@ -23,6 +23,14 @@ package com.sk89q.jnbt;
* The {@code TAG_Float} tag.
*/
public final class FloatTag extends NumberTag {
@Override
public int getTypeCode() {
return NBTConstants.TYPE_FLOAT;
}
@Override
public String getTypeName() {
return "TAG_Float";
}
private final float value;

View File

@ -29,6 +29,15 @@ import java.util.Locale;
* The {@code TAG_Int_Array} tag.
*/
public final class IntArrayTag extends Tag {
@Override
public String getTypeName() {
return "TAG_Int_Array";
}
@Override
public int getTypeCode() {
return NBTConstants.TYPE_INT_ARRAY;
}
private final int[] value;

View File

@ -23,6 +23,14 @@ package com.sk89q.jnbt;
* The {@code TAG_Int} tag.
*/
public final class IntTag extends NumberTag {
@Override
public int getTypeCode() {
return NBTConstants.TYPE_INT;
}
@Override
public String getTypeName() {
return "TAG_Int";
}
private final int value;

View File

@ -31,6 +31,15 @@ import javax.annotation.Nullable;
* The {@code TAG_List} tag.
*/
public class ListTag extends Tag {
@Override
public String getTypeName() {
return "TAG_List";
}
@Override
public int getTypeCode() {
return NBTConstants.TYPE_LIST;
}
private final Class<? extends Tag> type;
private final List<Tag> value;
@ -432,7 +441,7 @@ public class ListTag extends Tag {
@Override
public String toString() {
StringBuilder bldr = new StringBuilder();
bldr.append("TAG_List").append(": ").append(value.size()).append(" entries of type ").append(NBTUtils.getTypeName(type)).append("\r\n{\r\n");
bldr.append("TAG_List").append(": ").append(value.size()).append(" entries of type ").append(type.getTypeName()).append("\r\n{\r\n");
for (Tag t : value) {
bldr.append(" ").append(t.toString().replaceAll("\r\n", "\r\n ")).append("\r\n");
}

View File

@ -29,6 +29,15 @@ import java.util.Locale;
* The {@code TAG_Long_Array} tag.
*/
public class LongArrayTag extends Tag {
@Override
public String getTypeName() {
return "TAG_Long_Array";
}
@Override
public int getTypeCode() {
return NBTConstants.TYPE_LONG_ARRAY;
}
private final long[] value;

View File

@ -24,6 +24,14 @@ package com.sk89q.jnbt;
*
*/
public final class LongTag extends NumberTag {
@Override
public int getTypeCode() {
return NBTConstants.TYPE_LONG;
}
@Override
public String getTypeName() {
return "TAG_Long";
}
private final long value;

View File

@ -90,7 +90,7 @@ public final class NBTOutputStream extends OutputStream implements Closeable, Da
checkNotNull(name);
checkNotNull(tag);
int type = NBTUtils.getTypeCode(tag.getClass());
int type = tag.getTypeCode();
writeNamedTagName(name, type);
if (type == NBTConstants.TYPE_END) {
@ -189,7 +189,7 @@ public final class NBTOutputStream extends OutputStream implements Closeable, Da
}
public void writeTag(Tag tag) throws IOException {
int type = NBTUtils.getTypeCode(tag.getClass());
int type = tag.getTypeCode();
os.writeByte(type);
writeTagPayload(tag);
}
@ -207,7 +207,7 @@ public final class NBTOutputStream extends OutputStream implements Closeable, Da
* if an I/O error occurs.
*/
public void writeTagPayload(Tag tag) throws IOException {
int type = NBTUtils.getTypeCode(tag.getClass());
int type = tag.getTypeCode();
switch (type) {
case NBTConstants.TYPE_END:
writeEndTagPayload((EndTag) tag);
@ -311,7 +311,7 @@ public final class NBTOutputStream extends OutputStream implements Closeable, Da
int size = tags.size();
if (!tags.isEmpty()) {
Tag tag0 = tags.get(0);
os.writeByte(NBTUtils.getTypeCode(tag0.getClass()));
os.writeByte(tag0.getTypeCode());
} else {
os.writeByte(NBTUtils.getTypeCode(clazz));
}

View File

@ -49,7 +49,7 @@ public final class NBTUtils {
return "TAG_Byte_Array";
} else if (clazz.equals(ByteTag.class)) {
return "TAG_Byte";
} else if (clazz.equals(CompoundTag.class)) {
} else if (CompoundTag.class.isAssignableFrom(clazz)) {
return "TAG_Compound";
} else if (clazz.equals(DoubleTag.class)) {
return "TAG_Double";
@ -89,7 +89,7 @@ public final class NBTUtils {
return NBTConstants.TYPE_BYTE_ARRAY;
} else if (clazz.equals(ByteTag.class)) {
return NBTConstants.TYPE_BYTE;
} else if (clazz.equals(CompoundTag.class)) {
} else if (CompoundTag.class.isAssignableFrom(clazz)) {
return NBTConstants.TYPE_COMPOUND;
} else if (clazz.equals(DoubleTag.class)) {
return NBTConstants.TYPE_DOUBLE;

View File

@ -23,6 +23,14 @@ package com.sk89q.jnbt;
* The {@code TAG_Short} tag.
*/
public final class ShortTag extends NumberTag {
@Override
public int getTypeCode() {
return NBTConstants.TYPE_SHORT;
}
@Override
public String getTypeName() {
return "TAG_Short";
}
private final short value;

View File

@ -25,6 +25,15 @@ import static com.google.common.base.Preconditions.checkNotNull;
* The {@code TAG_String} tag.
*/
public final class StringTag extends Tag {
@Override
public String getTypeName() {
return "TAG_String";
}
@Override
public int getTypeCode() {
return NBTConstants.TYPE_STRING;
}
private final String value;

View File

@ -35,4 +35,8 @@ public abstract class Tag {
return getValue();
}
public abstract int getTypeCode();
public abstract String getTypeName();
}