Skip to content

Commit

Permalink
Add support for long arrays in 1.15 & 1.16
Browse files Browse the repository at this point in the history
  • Loading branch information
Brokkonaut committed Jul 7, 2020
1 parent d619b57 commit 1449acc
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 3 deletions.
@@ -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<long[]> {
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;
}

}
Expand Up @@ -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;

Expand Down Expand Up @@ -207,7 +206,7 @@ public void write(Tag tag, TagOutputStream out) throws IOException {
}

public CompoundTag read(TagInputStream in) throws IOException {
Map<String, Tag> values = new HashMap<String, Tag>();
Map<String, Tag> values = new HashMap<>();
while (true) {
TagTuple<? extends Tag> tag = in.readTag();
if (tag.getValue().getType() == TagType.END) {
Expand Down Expand Up @@ -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<? extends Tag> tagClass;
private final Class<?> valueClass;

Expand Down
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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) {
Expand Down
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 1449acc

Please sign in to comment.