Skip to content

Commit

Permalink
Merge db5fffa into 74e37d4
Browse files Browse the repository at this point in the history
  • Loading branch information
Querz committed Jan 22, 2019
2 parents 74e37d4 + db5fffa commit e073ef3
Show file tree
Hide file tree
Showing 40 changed files with 342 additions and 301 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ apply plugin: 'jacoco'

group = 'net.querz.nbt'
archivesBaseName = 'nbt'
version = '3.0'
version = '4.0'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
compileJava.options.encoding = 'UTF-8'
Expand Down
12 changes: 2 additions & 10 deletions src/main/java/net/querz/nbt/ArrayTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
public abstract class ArrayTag<T> extends Tag<T> {

public ArrayTag(T value) {
super(value);
if (!value.getClass().isArray()) {
throw new UnsupportedOperationException("type of array tag must be an array");
}
setValue(value);
}

public int length() {
Expand All @@ -27,22 +27,14 @@ public T getValue() {

@Override
public void setValue(T value) {
super.setValue(checkNull(value));
super.setValue(value);
}

@Override
public String valueToString(int depth) {
return arrayToString("", "");
}

@Override
public int compareTo(Tag<T> other) {
if (!(other instanceof ArrayTag) || this.getClass() != other.getClass()) {
throw new IllegalArgumentException("array types are incompatible");
}
return Integer.compare(Array.getLength(getValue()), Array.getLength(other.getValue()));
}

protected String arrayToString(String prefix, String suffix) {
StringBuilder sb = new StringBuilder("[").append(prefix).append("".equals(prefix) ? "" : ";");
for (int i = 0; i < length(); i++) {
Expand Down
17 changes: 10 additions & 7 deletions src/main/java/net/querz/nbt/ByteArrayTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,21 @@
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Arrays;

public class ByteArrayTag extends ArrayTag<byte[]> {
public class ByteArrayTag extends ArrayTag<byte[]> implements Comparable<ByteArrayTag> {

public static final byte[] ZERO_VALUE = new byte[0];

public ByteArrayTag() {
super(new byte[0]);
super(ZERO_VALUE);
}

public ByteArrayTag(byte[] value) {
super(value);
}

@Override
protected byte[] getEmptyValue() {
return new byte[0];
}

@Override
public void serializeValue(DataOutputStream dos, int depth) throws IOException {
dos.writeInt(length());
Expand Down Expand Up @@ -48,6 +46,11 @@ public int hashCode() {
return Arrays.hashCode(getValue());
}

@Override
public int compareTo(ByteArrayTag other) {
return Integer.compare(length(), other.length());
}

@Override
public ByteArrayTag clone() {
return new ByteArrayTag(Arrays.copyOf(getValue(), length()));
Expand Down
18 changes: 11 additions & 7 deletions src/main/java/net/querz/nbt/ByteTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,13 @@
import java.io.DataOutputStream;
import java.io.IOException;

public class ByteTag extends NumberTag<Byte> {
public class ByteTag extends NumberTag<Byte> implements Comparable<ByteTag> {

public ByteTag() {}
public static final byte ZERO_VALUE = 0;

public ByteTag() {
super(ZERO_VALUE);
}

public ByteTag(byte value) {
super(value);
Expand All @@ -16,11 +20,6 @@ public ByteTag(boolean value) {
super((byte) (value ? 1 : 0));
}

@Override
protected Byte getEmptyValue() {
return 0;
}

public boolean asBoolean() {
return getValue() > 0;
}
Expand Down Expand Up @@ -49,6 +48,11 @@ public boolean equals(Object other) {
return super.equals(other) && asByte() == ((ByteTag) other).asByte();
}

@Override
public int compareTo(ByteTag other) {
return getValue().compareTo(other.getValue());
}

@Override
public ByteTag clone() {
return new ByteTag(getValue());
Expand Down
60 changes: 32 additions & 28 deletions src/main/java/net/querz/nbt/CompoundTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,21 @@
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.*;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.BiConsumer;

public class CompoundTag extends Tag<Map<String, Tag<?>>> implements Iterable<Map.Entry<String, Tag<?>>> {
public class CompoundTag extends Tag<Map<String, Tag<?>>> implements Iterable<Map.Entry<String, Tag<?>>>, Comparable<CompoundTag> {

public CompoundTag() {}
public CompoundTag() {
super(createEmptyValue());
}

@Override
protected Map<String, Tag<?>> getEmptyValue() {
private static Map<String, Tag<?>> createEmptyValue() {
return new HashMap<>(8);
}

Expand Down Expand Up @@ -123,56 +129,56 @@ public boolean getBoolean(String key) {

public byte getByte(String key) {
ByteTag t = getByteTag(key);
return t == null ? new ByteTag().getEmptyValue() : t.asByte();
return t == null ? ByteTag.ZERO_VALUE : t.asByte();
}

public short getShort(String key) {
ShortTag t = getShortTag(key);
return t == null ? new ShortTag().getEmptyValue() : t.asShort();
return t == null ? ShortTag.ZERO_VALUE : t.asShort();
}

public int getInt(String key) {
IntTag t = getIntTag(key);
return t == null ? new IntTag().getEmptyValue() : t.asInt();
return t == null ? IntTag.ZERO_VALUE : t.asInt();
}

public long getLong(String key) {
LongTag t = getLongTag(key);
return t == null ? new LongTag().getEmptyValue() : t.asLong();
return t == null ? LongTag.ZERO_VALUE : t.asLong();
}

public float getFloat(String key) {
FloatTag t = getFloatTag(key);
return t == null ? new FloatTag().getEmptyValue() : t.asFloat();
return t == null ? FloatTag.ZERO_VALUE : t.asFloat();
}

public double getDouble(String key) {
DoubleTag t = getDoubleTag(key);
return t == null ? new DoubleTag().getEmptyValue() : t.asDouble();
return t == null ? DoubleTag.ZERO_VALUE : t.asDouble();
}

public String getString(String key) {
StringTag t = getStringTag(key);
return t == null ? new StringTag().getEmptyValue() : t.getValue();
return t == null ? StringTag.ZERO_VALUE : t.getValue();
}

public byte[] getByteArray(String key) {
ByteArrayTag t = getByteArrayTag(key);
return t == null ? new ByteArrayTag().getEmptyValue() : t.getValue();
return t == null ? ByteArrayTag.ZERO_VALUE : t.getValue();
}

public int[] getIntArray(String key) {
IntArrayTag t = getIntArrayTag(key);
return t == null ? new IntArrayTag().getEmptyValue() : t.getValue();
return t == null ? IntArrayTag.ZERO_VALUE : t.getValue();
}

public long[] getLongArray(String key) {
LongArrayTag t = getLongArrayTag(key);
return t == null ? new LongArrayTag().getEmptyValue() : t.getValue();
return t == null ? LongArrayTag.ZERO_VALUE : t.getValue();
}

public Tag<?> put(String key, Tag<?> tag) {
return getValue().put(checkNull(key), checkNull(tag));
return getValue().put(Objects.requireNonNull(key), Objects.requireNonNull(tag));
}

public Tag<?> putBoolean(String key, boolean value) {
Expand Down Expand Up @@ -204,37 +210,38 @@ public Tag<?> putDouble(String key, double value) {
}

public Tag<?> putString(String key, String value) {
return put(key, new StringTag(checkNull(value)));
return put(key, new StringTag(value));
}

public Tag<?> putByteArray(String key, byte[] value) {
return put(key, new ByteArrayTag(checkNull(value)));
return put(key, new ByteArrayTag(value));
}

public Tag<?> putIntArray(String key, int[] value) {
return put(key, new IntArrayTag(checkNull(value)));
return put(key, new IntArrayTag(value));
}

public Tag<?> putLongArray(String key, long[] value) {
return put(key, new LongArrayTag(checkNull(value)));
return put(key, new LongArrayTag(value));
}

@Override
public void serializeValue(DataOutputStream dos, int depth) throws IOException {
for (Map.Entry<String, Tag<?>> e : getValue().entrySet()) {
dos.writeByte(e.getValue().getID());
dos.writeUTF(e.getKey());
e.getValue().serializeValue(dos, incrementDepth(depth));
e.getValue().serializeValue(dos, decrementDepth(depth));
}
EndTag.INSTANCE.serialize(dos, depth);
}

@Override
public void deserializeValue(DataInputStream dis, int depth) throws IOException {
clear();
for (int id = dis.readByte() & 0xFF; id != 0; id = dis.readByte() & 0xFF) {
Tag<?> tag = TagFactory.fromID(id);
String name = dis.readUTF();
tag.deserializeValue(dis, incrementDepth(depth));
tag.deserializeValue(dis, decrementDepth(depth));
put(name, tag);
}
}
Expand All @@ -246,7 +253,7 @@ public String valueToString(int depth) {
for (Map.Entry<String, Tag<?>> e : getValue().entrySet()) {
sb.append(first ? "" : ",")
.append(escapeString(e.getKey(), false)).append(":")
.append(e.getValue().toString(incrementDepth(depth)));
.append(e.getValue().toString(decrementDepth(depth)));
first = false;
}
sb.append("}");
Expand All @@ -260,7 +267,7 @@ public String valueToTagString(int depth) {
for (Map.Entry<String, Tag<?>> e : getValue().entrySet()) {
sb.append(first ? "" : ",")
.append(escapeString(e.getKey(), true)).append(":")
.append(e.getValue().valueToTagString(incrementDepth(depth)));
.append(e.getValue().valueToTagString(decrementDepth(depth)));
first = false;
}
sb.append("}");
Expand All @@ -285,10 +292,7 @@ public boolean equals(Object other) {
}

@Override
public int compareTo(Tag<Map<String, Tag<?>>> o) {
if (!(o instanceof CompoundTag)) {
return 0;
}
public int compareTo(CompoundTag o) {
return Integer.compare(size(), o.getValue().size());
}

Expand Down
18 changes: 11 additions & 7 deletions src/main/java/net/querz/nbt/DoubleTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@
import java.io.DataOutputStream;
import java.io.IOException;

public class DoubleTag extends NumberTag<Double> {
public class DoubleTag extends NumberTag<Double> implements Comparable<DoubleTag> {

public DoubleTag() {}
public static final double ZERO_VALUE = 0.0D;

public DoubleTag(double value) {
super(value);
public DoubleTag() {
super(ZERO_VALUE);
}

@Override
protected Double getEmptyValue() {
return 0.0d;
public DoubleTag(double value) {
super(value);
}

public void setValue(double value) {
Expand All @@ -41,6 +40,11 @@ public boolean equals(Object other) {
return super.equals(other) && getValue().equals(((DoubleTag) other).getValue());
}

@Override
public int compareTo(DoubleTag other) {
return getValue().compareTo(other.getValue());
}

@Override
public DoubleTag clone() {
return new DoubleTag(getValue());
Expand Down
13 changes: 5 additions & 8 deletions src/main/java/net/querz/nbt/EndTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ public final class EndTag extends Tag<Void> {

static final EndTag INSTANCE = new EndTag();

private EndTag() {}
private EndTag() {
super(null);
}

@Override
protected Void getEmptyValue() {
return null;
protected Void checkValue(Void value) {
return value;
}

@Override
Expand All @@ -34,11 +36,6 @@ public String valueToTagString(int depth) {
throw new UnsupportedOperationException("EndTag cannot be turned into a String");
}

@Override
public int compareTo(Tag<Void> o) {
return 0;
}

@Override
public EndTag clone() {
return INSTANCE;
Expand Down
18 changes: 11 additions & 7 deletions src/main/java/net/querz/nbt/FloatTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@
import java.io.DataOutputStream;
import java.io.IOException;

public class FloatTag extends NumberTag<Float> {
public class FloatTag extends NumberTag<Float> implements Comparable<FloatTag> {

public FloatTag() {}
public static final float ZERO_VALUE = 0.0F;

public FloatTag(float value) {
super(value);
public FloatTag() {
super(ZERO_VALUE);
}

@Override
protected Float getEmptyValue() {
return 0.0f;
public FloatTag(float value) {
super(value);
}

public void setValue(float value) {
Expand All @@ -41,6 +40,11 @@ public boolean equals(Object other) {
return super.equals(other) && getValue().equals(((FloatTag) other).getValue());
}

@Override
public int compareTo(FloatTag other) {
return getValue().compareTo(other.getValue());
}

@Override
public FloatTag clone() {
return new FloatTag(getValue());
Expand Down

0 comments on commit e073ef3

Please sign in to comment.