diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/ByteArrayTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/ByteArrayTag.java index 53d24e9eb..be1391468 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/ByteArrayTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/ByteArrayTag.java @@ -16,7 +16,7 @@ package de.bixilon.minosoft.util.nbt.tag; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; -public class ByteArrayTag implements NBTTag { +public class ByteArrayTag extends NBTTag { final byte[] value; public ByteArrayTag(byte[] value) { @@ -57,4 +57,4 @@ public class ByteArrayTag implements NBTTag { builder.append("]"); return builder.toString(); } -} +} \ No newline at end of file diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/ByteTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/ByteTag.java index df2d32aed..271ac8c39 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/ByteTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/ByteTag.java @@ -16,7 +16,7 @@ package de.bixilon.minosoft.util.nbt.tag; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; -public class ByteTag implements NBTTag { +public class ByteTag extends NBTTag { final byte value; public ByteTag(byte value) { diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/CompoundTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/CompoundTag.java index 401570076..abb8d7d35 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/CompoundTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/CompoundTag.java @@ -21,7 +21,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; -public class CompoundTag implements NBTTag { +public class CompoundTag extends NBTTag { final String name; final HashMap data; @@ -135,6 +135,9 @@ public class CompoundTag implements NBTTag { } public void writeTag(String name, NBTTag tag) { + if (isFinal) { + throw new IllegalArgumentException("This tag is marked as final!"); + } data.put(name, tag); } @@ -145,6 +148,9 @@ public class CompoundTag implements NBTTag { // abstract functions public void writeBlockPosition(BlockPosition position) { + if (isFinal) { + throw new IllegalArgumentException("This tag is marked as final!"); + } data.put("x", new IntTag(position.getX())); data.put("y", new IntTag(position.getY())); data.put("z", new IntTag(position.getZ())); diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/DoubleTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/DoubleTag.java index c566f5d2f..c4f7e5688 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/DoubleTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/DoubleTag.java @@ -16,7 +16,7 @@ package de.bixilon.minosoft.util.nbt.tag; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; -public class DoubleTag implements NBTTag { +public class DoubleTag extends NBTTag { final double value; public DoubleTag(double value) { diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/FloatTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/FloatTag.java index ba663e244..56076e13c 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/FloatTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/FloatTag.java @@ -16,7 +16,7 @@ package de.bixilon.minosoft.util.nbt.tag; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; -public class FloatTag implements NBTTag { +public class FloatTag extends NBTTag { final float value; public FloatTag(float value) { diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntArrayTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntArrayTag.java index b0a5b0692..5df7f305b 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntArrayTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntArrayTag.java @@ -18,7 +18,7 @@ import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; import java.util.Arrays; -public class IntArrayTag implements NBTTag { +public class IntArrayTag extends NBTTag { final int[] value; public IntArrayTag(int[] value) { diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntTag.java index 121f44c09..7872e960e 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntTag.java @@ -16,7 +16,7 @@ package de.bixilon.minosoft.util.nbt.tag; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; -public class IntTag implements NBTTag { +public class IntTag extends NBTTag { final int value; public IntTag(int value) { diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/ListTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/ListTag.java index de92fe46b..08ba093af 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/ListTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/ListTag.java @@ -19,7 +19,7 @@ import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; import java.util.ArrayList; import java.util.Arrays; -public class ListTag implements NBTTag { +public class ListTag extends NBTTag { final TagTypes type; final ArrayList list; diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/LongArrayTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/LongArrayTag.java index 7bc32cb49..86c246a52 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/LongArrayTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/LongArrayTag.java @@ -16,7 +16,7 @@ package de.bixilon.minosoft.util.nbt.tag; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; -public class LongArrayTag implements NBTTag { +public class LongArrayTag extends NBTTag { final long[] value; public LongArrayTag(long[] value) { diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/LongTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/LongTag.java index 578fdea22..8f4004135 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/LongTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/LongTag.java @@ -16,7 +16,7 @@ package de.bixilon.minosoft.util.nbt.tag; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; -public class LongTag implements NBTTag { +public class LongTag extends NBTTag { final long value; public LongTag(long value) { diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTTag.java index 09762d6ec..2d1100a09 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTTag.java @@ -15,10 +15,18 @@ package de.bixilon.minosoft.util.nbt.tag; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; -public interface NBTTag { - TagTypes getType(); +public abstract class NBTTag { + boolean isFinal = false; - void writeBytes(OutByteBuffer buffer); + abstract TagTypes getType(); - String toString(); + abstract void writeBytes(OutByteBuffer buffer); + + public boolean isFinal() { + return isFinal; + } + + public void setFinal() { + this.isFinal = true; + } } diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/ShortTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/ShortTag.java index a1189fa8e..2bd026dcd 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/ShortTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/ShortTag.java @@ -16,7 +16,7 @@ package de.bixilon.minosoft.util.nbt.tag; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; -public class ShortTag implements NBTTag { +public class ShortTag extends NBTTag { final short value; public ShortTag(short value) { diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/StringTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/StringTag.java index 75d3b386b..a30446d2d 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/StringTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/StringTag.java @@ -16,7 +16,7 @@ package de.bixilon.minosoft.util.nbt.tag; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.OutByteBuffer; -public class StringTag implements NBTTag { +public class StringTag extends NBTTag { final String value; public StringTag(String value) {