mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 09:47:38 +00:00
Added LongArrayTag support to NBT
This commit is contained in:
parent
9494c4445a
commit
334143357a
Binary file not shown.
@ -317,6 +317,24 @@ public final class CompoundTag extends Tag {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a {@code long[]} named with the given key.
|
||||||
|
*
|
||||||
|
* <p>If the key does not exist or its value is not an long array tag,
|
||||||
|
* then an empty array will be returned.</p>
|
||||||
|
*
|
||||||
|
* @param key the key
|
||||||
|
* @return an int array
|
||||||
|
*/
|
||||||
|
public long[] getLongArray(String key) {
|
||||||
|
Tag tag = value.get(key);
|
||||||
|
if (tag instanceof LongArrayTag) {
|
||||||
|
return ((LongArrayTag) tag).getValue();
|
||||||
|
} else {
|
||||||
|
return new long[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a long named with the given key.
|
* Get a long named with the given key.
|
||||||
*
|
*
|
||||||
|
@ -133,6 +133,18 @@ public class CompoundTagBuilder {
|
|||||||
return put(key, new IntTag(value));
|
return put(key, new IntTag(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put the given key and value into the compound tag as a
|
||||||
|
* {@code LongArrayTag}.
|
||||||
|
*
|
||||||
|
* @param key they key
|
||||||
|
* @param value the value
|
||||||
|
* @return this object
|
||||||
|
*/
|
||||||
|
public CompoundTagBuilder putLongArray(String key, long[] value) {
|
||||||
|
return put(key, new LongArrayTag(value));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Put the given key and value into the compound tag as a
|
* Put the given key and value into the compound tag as a
|
||||||
* {@code LongTag}.
|
* {@code LongTag}.
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* WorldEdit, a Minecraft world manipulation toolkit
|
||||||
|
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||||
|
* Copyright (C) WorldEdit team and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sk89q.jnbt;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@code TAG_Long_Array} tag.
|
||||||
|
*/
|
||||||
|
public class LongArrayTag extends Tag {
|
||||||
|
|
||||||
|
private final long[] value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the tag with an empty name.
|
||||||
|
*
|
||||||
|
* @param value the value of the tag
|
||||||
|
*/
|
||||||
|
public LongArrayTag(long[] value) {
|
||||||
|
super();
|
||||||
|
checkNotNull(value);
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long[] getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder hex = new StringBuilder();
|
||||||
|
for (long b : value) {
|
||||||
|
String hexDigits = Long.toHexString(b).toUpperCase();
|
||||||
|
if (hexDigits.length() == 1) {
|
||||||
|
hex.append("0");
|
||||||
|
}
|
||||||
|
hex.append(hexDigits).append(" ");
|
||||||
|
}
|
||||||
|
return "TAG_Long_Array(" + hex + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -31,7 +31,7 @@ public final class NBTConstants {
|
|||||||
public static final int TYPE_END = 0, TYPE_BYTE = 1, TYPE_SHORT = 2,
|
public static final int TYPE_END = 0, TYPE_BYTE = 1, TYPE_SHORT = 2,
|
||||||
TYPE_INT = 3, TYPE_LONG = 4, TYPE_FLOAT = 5, TYPE_DOUBLE = 6,
|
TYPE_INT = 3, TYPE_LONG = 4, TYPE_FLOAT = 5, TYPE_DOUBLE = 6,
|
||||||
TYPE_BYTE_ARRAY = 7, TYPE_STRING = 8, TYPE_LIST = 9,
|
TYPE_BYTE_ARRAY = 7, TYPE_STRING = 8, TYPE_LIST = 9,
|
||||||
TYPE_COMPOUND = 10, TYPE_INT_ARRAY = 11;
|
TYPE_COMPOUND = 10, TYPE_INT_ARRAY = 11, TYPE_LONG_ARRAY = 12;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default private constructor.
|
* Default private constructor.
|
||||||
@ -73,6 +73,8 @@ public final class NBTConstants {
|
|||||||
return CompoundTag.class;
|
return CompoundTag.class;
|
||||||
case TYPE_INT_ARRAY:
|
case TYPE_INT_ARRAY:
|
||||||
return IntArrayTag.class;
|
return IntArrayTag.class;
|
||||||
|
case TYPE_LONG_ARRAY:
|
||||||
|
return LongArrayTag.class;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Unknown tag type ID of " + id);
|
throw new IllegalArgumentException("Unknown tag type ID of " + id);
|
||||||
}
|
}
|
||||||
|
@ -158,6 +158,13 @@ public final class NBTInputStream implements Closeable {
|
|||||||
data[i] = is.readInt();
|
data[i] = is.readInt();
|
||||||
}
|
}
|
||||||
return new IntArrayTag(data);
|
return new IntArrayTag(data);
|
||||||
|
case NBTConstants.TYPE_LONG_ARRAY:
|
||||||
|
length = is.readInt();
|
||||||
|
long[] longData = new long[length];
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
longData[i] = is.readLong();
|
||||||
|
}
|
||||||
|
return new LongArrayTag(longData);
|
||||||
default:
|
default:
|
||||||
throw new IOException("Invalid tag type: " + type + ".");
|
throw new IOException("Invalid tag type: " + type + ".");
|
||||||
}
|
}
|
||||||
|
@ -129,6 +129,9 @@ public final class NBTOutputStream implements Closeable {
|
|||||||
case NBTConstants.TYPE_INT_ARRAY:
|
case NBTConstants.TYPE_INT_ARRAY:
|
||||||
writeIntArrayTagPayload((IntArrayTag) tag);
|
writeIntArrayTagPayload((IntArrayTag) tag);
|
||||||
break;
|
break;
|
||||||
|
case NBTConstants.TYPE_LONG_ARRAY:
|
||||||
|
writeLongArrayTagPayload((LongArrayTag) tag);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IOException("Invalid tag type: " + type + ".");
|
throw new IOException("Invalid tag type: " + type + ".");
|
||||||
}
|
}
|
||||||
@ -286,6 +289,14 @@ public final class NBTOutputStream implements Closeable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void writeLongArrayTagPayload(LongArrayTag tag) throws IOException {
|
||||||
|
long[] data = tag.getValue();
|
||||||
|
os.writeInt(data.length);
|
||||||
|
for (long aData : data) {
|
||||||
|
os.writeLong(aData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() throws IOException {
|
public void close() throws IOException {
|
||||||
os.close();
|
os.close();
|
||||||
|
@ -69,6 +69,8 @@ public final class NBTUtils {
|
|||||||
return "TAG_String";
|
return "TAG_String";
|
||||||
} else if (clazz.equals(IntArrayTag.class)) {
|
} else if (clazz.equals(IntArrayTag.class)) {
|
||||||
return "TAG_Int_Array";
|
return "TAG_Int_Array";
|
||||||
|
} else if (clazz.equals(LongArrayTag.class)) {
|
||||||
|
return "TAG_Long_Array";
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException("Invalid tag classs ("
|
throw new IllegalArgumentException("Invalid tag classs ("
|
||||||
+ clazz.getName() + ").");
|
+ clazz.getName() + ").");
|
||||||
@ -107,6 +109,8 @@ public final class NBTUtils {
|
|||||||
return NBTConstants.TYPE_STRING;
|
return NBTConstants.TYPE_STRING;
|
||||||
} else if (clazz.equals(IntArrayTag.class)) {
|
} else if (clazz.equals(IntArrayTag.class)) {
|
||||||
return NBTConstants.TYPE_INT_ARRAY;
|
return NBTConstants.TYPE_INT_ARRAY;
|
||||||
|
} else if (clazz.equals(LongArrayTag.class)) {
|
||||||
|
return NBTConstants.TYPE_LONG_ARRAY;
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException("Invalid tag classs ("
|
throw new IllegalArgumentException("Invalid tag classs ("
|
||||||
+ clazz.getName() + ").");
|
+ clazz.getName() + ").");
|
||||||
@ -146,6 +150,8 @@ public final class NBTUtils {
|
|||||||
return CompoundTag.class;
|
return CompoundTag.class;
|
||||||
case NBTConstants.TYPE_INT_ARRAY:
|
case NBTConstants.TYPE_INT_ARRAY:
|
||||||
return IntArrayTag.class;
|
return IntArrayTag.class;
|
||||||
|
case NBTConstants.TYPE_LONG_ARRAY:
|
||||||
|
return LongArrayTag.class;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Invalid tag type : " + type
|
throw new IllegalArgumentException("Invalid tag type : " + type
|
||||||
+ ".");
|
+ ".");
|
||||||
|
@ -89,7 +89,7 @@ public class SchematicCommands {
|
|||||||
)
|
)
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@CommandPermissions({ "worldedit.clipboard.load", "worldedit.schematic.load" })
|
@CommandPermissions({ "worldedit.clipboard.load", "worldedit.schematic.load" })
|
||||||
public void load(Player player, LocalSession session, @Optional("schematic") String formatName, String filename) throws FilenameException {
|
public void load(Player player, LocalSession session, @Optional("sponge") String formatName, String filename) throws FilenameException {
|
||||||
LocalConfiguration config = worldEdit.getConfiguration();
|
LocalConfiguration config = worldEdit.getConfiguration();
|
||||||
|
|
||||||
File dir = worldEdit.getWorkingDirectoryFile(config.saveDir);
|
File dir = worldEdit.getWorkingDirectoryFile(config.saveDir);
|
||||||
|
@ -76,7 +76,7 @@ public enum BuiltInClipboardFormat implements ClipboardFormat {
|
|||||||
if (!schematic.containsKey("Materials")) {
|
if (!schematic.containsKey("Materials")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (Exception e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -115,7 +115,7 @@ public enum BuiltInClipboardFormat implements ClipboardFormat {
|
|||||||
if (!schematic.containsKey("Version")) {
|
if (!schematic.containsKey("Version")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (Exception e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,6 +202,12 @@ public class SpongeSchematicReader extends NBTSchematicReader {
|
|||||||
handler.updateNBT(state, values);
|
handler.updateNBT(state, values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
values.put("x", new IntTag(pt.getBlockX()));
|
||||||
|
values.put("y", new IntTag(pt.getBlockY()));
|
||||||
|
values.put("z", new IntTag(pt.getBlockZ()));
|
||||||
|
values.put("id", values.get("Id"));
|
||||||
|
values.remove("Id");
|
||||||
|
values.remove("Pos");
|
||||||
clipboard.setBlock(pt, new BaseBlock(state, new CompoundTag(values)));
|
clipboard.setBlock(pt, new BaseBlock(state, new CompoundTag(values)));
|
||||||
} else {
|
} else {
|
||||||
clipboard.setBlock(pt, state);
|
clipboard.setBlock(pt, state);
|
||||||
|
@ -117,7 +117,7 @@ public class SpongeSchematicWriter implements ClipboardWriter {
|
|||||||
int paletteMax = 0;
|
int paletteMax = 0;
|
||||||
Map<String, Integer> palette = new HashMap<>();
|
Map<String, Integer> palette = new HashMap<>();
|
||||||
|
|
||||||
List<Tag> tileEntities = new ArrayList<>();
|
List<CompoundTag> tileEntities = new ArrayList<>();
|
||||||
|
|
||||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream(width * height * length);
|
ByteArrayOutputStream buffer = new ByteArrayOutputStream(width * height * length);
|
||||||
|
|
||||||
@ -135,6 +135,13 @@ public class SpongeSchematicWriter implements ClipboardWriter {
|
|||||||
values.put(entry.getKey(), entry.getValue());
|
values.put(entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
values.remove("id"); // Remove 'id' if it exists. We want 'Id'
|
||||||
|
|
||||||
|
// Positions are kept in NBT, we don't want that.
|
||||||
|
values.remove("x");
|
||||||
|
values.remove("y");
|
||||||
|
values.remove("z");
|
||||||
|
|
||||||
values.put("Id", new StringTag(block.getNbtId()));
|
values.put("Id", new StringTag(block.getNbtId()));
|
||||||
values.put("Pos", new IntArrayTag(new int[]{
|
values.put("Pos", new IntArrayTag(new int[]{
|
||||||
x,
|
x,
|
||||||
@ -142,8 +149,7 @@ public class SpongeSchematicWriter implements ClipboardWriter {
|
|||||||
z
|
z
|
||||||
}));
|
}));
|
||||||
|
|
||||||
CompoundTag tileEntityTag = new CompoundTag(values);
|
tileEntities.add(new CompoundTag(values));
|
||||||
tileEntities.add(tileEntityTag);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String blockKey = block.toImmutableState().getAsString();
|
String blockKey = block.toImmutableState().getAsString();
|
||||||
|
Loading…
Reference in New Issue
Block a user