From 21e395e825958fe6bbfe1737f65ee6aeca4ecd26 Mon Sep 17 00:00:00 2001 From: Tobi14601 <63975720+Tobi14601@users.noreply.github.com> Date: Fri, 3 Jul 2020 20:31:55 +0200 Subject: [PATCH] Added NBTTagLongArray (#1) --- pom.xml | 2 +- .../nbtstorage/nbt/NBTTagLongArray.java | 82 +++++++++++++++++++ .../tv/rewinside/nbtstorage/nbt/NBTType.java | 3 +- 3 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 src/main/java/tv/rewinside/nbtstorage/nbt/NBTTagLongArray.java diff --git a/pom.xml b/pom.xml index d5125e5..1f32759 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ org.projectlombok lombok - 1.16.10 + 1.18.12 provided diff --git a/src/main/java/tv/rewinside/nbtstorage/nbt/NBTTagLongArray.java b/src/main/java/tv/rewinside/nbtstorage/nbt/NBTTagLongArray.java new file mode 100644 index 0000000..5ad6fcd --- /dev/null +++ b/src/main/java/tv/rewinside/nbtstorage/nbt/NBTTagLongArray.java @@ -0,0 +1,82 @@ +package tv.rewinside.nbtstorage.nbt; + +import tv.rewinside.nbtstorage.exceptions.NBTLoadException; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Arrays; + +public class NBTTagLongArray extends NBTBase { + + private long[] data; + + NBTTagLongArray() { + } + + public NBTTagLongArray(long[] data) { + this.data = data; + } + + @Override + void write(DataOutput dataOutput) throws IOException { + dataOutput.writeInt(this.data.length); + + for (long value : this.data) { + dataOutput.writeLong(value); + } + } + + @Override + void load(DataInput dataInput, int i, NBTReadLimiter nbtReadLimiter) throws IOException { + int count = dataInput.readInt(); + if (count >= 1 << 24) throw new NBTLoadException("Error while loading LongArray"); + + nbtReadLimiter.allocate(64 * count); + this.data = new long[count]; + + for (int index = 0; index < count; index++) { + this.data[index] = dataInput.readLong(); + } + } + + @Override + public NBTType getType() { + return NBTType.LONG_ARRAY; + } + + @Override + public long[] getData() { + return this.data; + } + + @Override + public NBTBase clone() { + long[] copyData = new long[this.data.length]; + + System.arraycopy(this.data, 0, copyData, 0, this.data.length); + return new NBTTagLongArray(copyData); + } + + @Override + public boolean equals(Object object) { + return super.equals(object) && Arrays.equals(this.data, ((NBTTagLongArray) object).data); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder("["); + + for (long value : this.data) { + builder.append(value).append(","); + } + builder.append("]"); + + return builder.toString(); + } + + @Override + public int hashCode() { + return super.hashCode() ^ Arrays.hashCode(this.data); + } +} diff --git a/src/main/java/tv/rewinside/nbtstorage/nbt/NBTType.java b/src/main/java/tv/rewinside/nbtstorage/nbt/NBTType.java index d5d34c3..2f9938f 100644 --- a/src/main/java/tv/rewinside/nbtstorage/nbt/NBTType.java +++ b/src/main/java/tv/rewinside/nbtstorage/nbt/NBTType.java @@ -16,7 +16,8 @@ public enum NBTType { STRING(8, NBTTagString.class), LIST(9, NBTTagList.class), COMPOUND(10, NBTTagCompound.class), - INT_ARRAY(11, NBTTagIntArray.class); + INT_ARRAY(11, NBTTagIntArray.class), + LONG_ARRAY(12, NBTTagLongArray.class); private byte byteType; private Class clazz;