diff --git a/libnbt-standalone/src/main/java/org/cyberiantiger/minecraft/nbt/LongArrayTag.java b/libnbt-standalone/src/main/java/org/cyberiantiger/minecraft/nbt/LongArrayTag.java new file mode 100644 index 0000000..af8a1e7 --- /dev/null +++ b/libnbt-standalone/src/main/java/org/cyberiantiger/minecraft/nbt/LongArrayTag.java @@ -0,0 +1,67 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.cyberiantiger.minecraft.nbt; + +import java.util.Arrays; + +/** + * + * @author antony + */ +public final class LongArrayTag extends Tag { + private final long[] value; + public LongArrayTag(long[] value) { + this.value = value; + } + + @Override + public long[] getValue() { + return value; + } + + @Override + public TagType getType() { + return TagType.LONG_ARRAY; + } + + @Override + public String toString() { + StringBuilder ret = new StringBuilder(); + ret.append('«'); + long[] v = getValue(); + for (int i = 0; i < v.length; i++) { + if (i != 0) { + ret.append(", "); + } + ret.append(v[i]); + } + ret.append('»'); + return ret.toString(); + } + + @Override + public int hashCode() { + int hash = 5; + hash = 23 * hash + Arrays.hashCode(this.value); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final LongArrayTag other = (LongArrayTag) obj; + if (!Arrays.equals(this.value, other.value)) { + return false; + } + return true; + } + +} diff --git a/libnbt-standalone/src/main/java/org/cyberiantiger/minecraft/nbt/TagType.java b/libnbt-standalone/src/main/java/org/cyberiantiger/minecraft/nbt/TagType.java index 027647e..590da21 100644 --- a/libnbt-standalone/src/main/java/org/cyberiantiger/minecraft/nbt/TagType.java +++ b/libnbt-standalone/src/main/java/org/cyberiantiger/minecraft/nbt/TagType.java @@ -2,7 +2,6 @@ import java.io.IOException; import java.lang.reflect.Array; -import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -207,7 +206,7 @@ public void write(Tag tag, TagOutputStream out) throws IOException { } public CompoundTag read(TagInputStream in) throws IOException { - Map values = new HashMap(); + Map values = new HashMap<>(); while (true) { TagTuple tag = in.readTag(); if (tag.getValue().getType() == TagType.END) { @@ -246,8 +245,32 @@ public IntArrayTag read(TagInputStream in) throws IOException { public IntArrayTag[] newArray(int size) { return new IntArrayTag[size]; } + }, + LONG_ARRAY(LongArrayTag.class, long[].class) { + + public void write(Tag tag, TagOutputStream out) throws IOException { + long[] value = ((LongArrayTag) tag).getValue(); + out.writeInt(value.length); + for (int i = 0; i < value.length; i++) { + out.writeLong(value[i]); + } + } + + public LongArrayTag read(TagInputStream in) throws IOException { + int length = in.readInt(); + long[] value = new long[length]; + for (int i = 0; i < length; i++) { + value[i] = in.readLong(); + } + return new LongArrayTag(value); + } + + @Override + public LongArrayTag[] newArray(int size) { + return new LongArrayTag[size]; + } }; - + private final Class tagClass; private final Class valueClass; diff --git a/libnbt-v1_15_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_15_R1/NBTTools.java b/libnbt-v1_15_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_15_R1/NBTTools.java index 684641a..583d6a4 100644 --- a/libnbt-v1_15_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_15_R1/NBTTools.java +++ b/libnbt-v1_15_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_15_R1/NBTTools.java @@ -22,6 +22,7 @@ import net.minecraft.server.v1_15_R1.NBTTagIntArray; import net.minecraft.server.v1_15_R1.NBTTagList; import net.minecraft.server.v1_15_R1.NBTTagLong; +import net.minecraft.server.v1_15_R1.NBTTagLongArray; import net.minecraft.server.v1_15_R1.NBTTagShort; import net.minecraft.server.v1_15_R1.NBTTagString; import net.minecraft.server.v1_15_R1.TileEntity; @@ -41,6 +42,7 @@ import org.cyberiantiger.minecraft.nbt.IntArrayTag; import org.cyberiantiger.minecraft.nbt.IntTag; import org.cyberiantiger.minecraft.nbt.ListTag; +import org.cyberiantiger.minecraft.nbt.LongArrayTag; import org.cyberiantiger.minecraft.nbt.LongTag; import org.cyberiantiger.minecraft.nbt.ShortTag; import org.cyberiantiger.minecraft.nbt.StringTag; @@ -94,6 +96,9 @@ public NBTTagCompound toNativeCompound(CompoundTag tag) { case STRING: base = NBTTagString.a(((StringTag) t).getValue()); break; + case LONG_ARRAY: + base = new NBTTagLongArray(((LongArrayTag) t).getValue()); + break; default: // Can't be reached. throw new IllegalArgumentException(); @@ -161,6 +166,11 @@ public NBTTagList toNativeList(ListTag tag) { result.add(NBTTagString.a(t.getValue())); } break; + case LONG_ARRAY: + for (LongArrayTag t : (LongArrayTag[]) tag.getValue()) { + result.add(new NBTTagLongArray(t.getValue())); + } + break; case END: break; } @@ -208,6 +218,9 @@ public CompoundTag fromNativeCompound(NBTTagCompound tag) { case STRING: result.put(name, new StringTag(((NBTTagString) b).asString())); break; + case LONG_ARRAY: + result.put(name, new LongArrayTag(((NBTTagLongArray) b).getLongs())); + break; case END: break; } @@ -288,6 +301,11 @@ public ListTag fromNativeList(NBTTagList tag) { t[i] = new StringTag(((NBTTagString) tag.get(i)).asString()); } break; + case LONG_ARRAY: + for (int i = 0; i < tag.size(); i++) { + t[i] = new LongArrayTag(((NBTTagLongArray) tag.get(i)).getLongs()); + } + break; } return new ListTag(type, t); } catch (IllegalArgumentException ex) { diff --git a/libnbt-v1_16_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_16_R1/NBTTools.java b/libnbt-v1_16_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_16_R1/NBTTools.java index 9fd26eb..8ee9e5c 100644 --- a/libnbt-v1_16_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_16_R1/NBTTools.java +++ b/libnbt-v1_16_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_16_R1/NBTTools.java @@ -22,6 +22,7 @@ import net.minecraft.server.v1_16_R1.NBTTagIntArray; import net.minecraft.server.v1_16_R1.NBTTagList; import net.minecraft.server.v1_16_R1.NBTTagLong; +import net.minecraft.server.v1_16_R1.NBTTagLongArray; import net.minecraft.server.v1_16_R1.NBTTagShort; import net.minecraft.server.v1_16_R1.NBTTagString; import net.minecraft.server.v1_16_R1.TileEntity; @@ -41,6 +42,7 @@ import org.cyberiantiger.minecraft.nbt.IntArrayTag; import org.cyberiantiger.minecraft.nbt.IntTag; import org.cyberiantiger.minecraft.nbt.ListTag; +import org.cyberiantiger.minecraft.nbt.LongArrayTag; import org.cyberiantiger.minecraft.nbt.LongTag; import org.cyberiantiger.minecraft.nbt.ShortTag; import org.cyberiantiger.minecraft.nbt.StringTag; @@ -94,6 +96,9 @@ public NBTTagCompound toNativeCompound(CompoundTag tag) { case STRING: base = NBTTagString.a(((StringTag) t).getValue()); break; + case LONG_ARRAY: + base = new NBTTagLongArray(((LongArrayTag) t).getValue()); + break; default: // Can't be reached. throw new IllegalArgumentException(); @@ -161,6 +166,11 @@ public NBTTagList toNativeList(ListTag tag) { result.add(NBTTagString.a(t.getValue())); } break; + case LONG_ARRAY: + for (LongArrayTag t : (LongArrayTag[]) tag.getValue()) { + result.add(new NBTTagLongArray(t.getValue())); + } + break; case END: break; } @@ -208,6 +218,9 @@ public CompoundTag fromNativeCompound(NBTTagCompound tag) { case STRING: result.put(name, new StringTag(((NBTTagString) b).asString())); break; + case LONG_ARRAY: + result.put(name, new LongArrayTag(((NBTTagLongArray) b).getLongs())); + break; case END: break; } @@ -288,6 +301,11 @@ public ListTag fromNativeList(NBTTagList tag) { t[i] = new StringTag(((NBTTagString) tag.get(i)).asString()); } break; + case LONG_ARRAY: + for (int i = 0; i < tag.size(); i++) { + t[i] = new LongArrayTag(((NBTTagLongArray) tag.get(i)).getLongs()); + } + break; } return new ListTag(type, t); } catch (IllegalArgumentException ex) {