Finished basic implementation
This commit is contained in:
parent
7432530c79
commit
f9c83a676b
14 changed files with 125 additions and 42 deletions
|
@ -20,16 +20,11 @@ enum TagType {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class Tag {
|
abstract class Tag {
|
||||||
late TagType type;
|
|
||||||
|
|
||||||
int getType() {
|
int getType() {
|
||||||
return type.byte;
|
return getTagType().byte;
|
||||||
}
|
|
||||||
|
|
||||||
TagType getTagType() {
|
|
||||||
return type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TagType getTagType();
|
||||||
void writeValue(ByteLayer data);
|
void writeValue(ByteLayer data);
|
||||||
void readValue(ByteLayer data);
|
void readValue(ByteLayer data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,7 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
class ByteTag extends Tag {
|
class ByteTag extends Tag {
|
||||||
final int value;
|
final int value;
|
||||||
|
|
||||||
ByteTag({required this.value}) {
|
ByteTag({required this.value});
|
||||||
type = TagType.Byte;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {
|
void readValue(ByteLayer data) {
|
||||||
|
@ -17,4 +15,9 @@ class ByteTag extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.Byte;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,7 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagByteArray extends Tag {
|
class TagByteArray extends Tag {
|
||||||
final List<int> value;
|
final List<int> value;
|
||||||
TagByteArray({required this.value}) {
|
TagByteArray({required this.value});
|
||||||
type = TagType.ByteArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {
|
void readValue(ByteLayer data) {
|
||||||
|
@ -16,4 +14,9 @@ class TagByteArray extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.ByteArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ class TagCompound extends Tag {
|
||||||
|
|
||||||
TagCompound() {
|
TagCompound() {
|
||||||
_value = new Map();
|
_value = new Map();
|
||||||
type = TagType.Compound;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -18,4 +17,30 @@ class TagCompound extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void put(String name, Tag tag) {
|
||||||
|
_value[name] = tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool contains(String name) {
|
||||||
|
return _value.containsKey(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
Tag? get(String name) {
|
||||||
|
if (contains(name))
|
||||||
|
return _value[name] as Tag;
|
||||||
|
else {
|
||||||
|
// Does not exist!
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove(String name) {
|
||||||
|
_value.remove(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.Compound;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,7 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagDouble extends Tag {
|
class TagDouble extends Tag {
|
||||||
final double value;
|
final double value;
|
||||||
TagDouble({required this.value}) {
|
TagDouble({required this.value});
|
||||||
type = TagType.Float;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {
|
void readValue(ByteLayer data) {
|
||||||
|
@ -16,4 +14,9 @@ class TagDouble extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.Double;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,13 +2,16 @@ import 'package:libac_flutter/nbt/Stream.dart';
|
||||||
import 'package:libac_flutter/nbt/Tag.dart';
|
import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagEnd extends Tag {
|
class TagEnd extends Tag {
|
||||||
TagEnd() {
|
TagEnd();
|
||||||
type = TagType.End;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {}
|
void readValue(ByteLayer data) {}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeValue(ByteLayer data) {}
|
void writeValue(ByteLayer data) {}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.End;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,7 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagFloat extends Tag {
|
class TagFloat extends Tag {
|
||||||
final double value;
|
final double value;
|
||||||
TagFloat({required this.value}) {
|
TagFloat({required this.value});
|
||||||
type = TagType.Float;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {
|
void readValue(ByteLayer data) {
|
||||||
|
@ -16,4 +14,9 @@ class TagFloat extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.Float;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,7 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagInt extends Tag {
|
class TagInt extends Tag {
|
||||||
final int value;
|
final int value;
|
||||||
TagInt({required this.value}) {
|
TagInt({required this.value});
|
||||||
type = TagType.Int;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {
|
void readValue(ByteLayer data) {
|
||||||
|
@ -16,4 +14,9 @@ class TagInt extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.Int;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,7 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagIntArray extends Tag {
|
class TagIntArray extends Tag {
|
||||||
final List<int> value;
|
final List<int> value;
|
||||||
TagIntArray({required this.value}) {
|
TagIntArray({required this.value});
|
||||||
type = TagType.IntArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {
|
void readValue(ByteLayer data) {
|
||||||
|
@ -16,4 +14,9 @@ class TagIntArray extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.IntArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,9 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagList extends Tag {
|
class TagList extends Tag {
|
||||||
late final List<Tag> _value;
|
late final List<Tag> _value;
|
||||||
|
TagType _internalType = TagType.End;
|
||||||
|
|
||||||
TagList() {
|
TagList() {
|
||||||
type = TagType.List;
|
|
||||||
_value = List.empty(growable: true);
|
_value = List.empty(growable: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,4 +18,33 @@ class TagList extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void add(Tag tag) {
|
||||||
|
if (_internalType == TagType.End) {
|
||||||
|
_value.clear();
|
||||||
|
_value.add(tag);
|
||||||
|
_internalType = tag.getTagType();
|
||||||
|
} else {
|
||||||
|
if (_internalType == tag.getTagType()) {
|
||||||
|
_value.add(tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove(Tag tag) {
|
||||||
|
_value.remove(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeAt(int index) {
|
||||||
|
_value.removeAt(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
int indexOf(Tag tag) {
|
||||||
|
return _value.indexOf(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.List;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,7 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagLong extends Tag {
|
class TagLong extends Tag {
|
||||||
final int value;
|
final int value;
|
||||||
TagLong({required this.value}) {
|
TagLong({required this.value});
|
||||||
type = TagType.Long;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {
|
void readValue(ByteLayer data) {
|
||||||
|
@ -16,4 +14,9 @@ class TagLong extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.Long;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,7 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagLongArray extends Tag {
|
class TagLongArray extends Tag {
|
||||||
final List<int> value;
|
final List<int> value;
|
||||||
TagLongArray({required this.value}) {
|
TagLongArray({required this.value});
|
||||||
type = TagType.LongArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {
|
void readValue(ByteLayer data) {
|
||||||
|
@ -16,4 +14,9 @@ class TagLongArray extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.LongArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,7 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagShort extends Tag {
|
class TagShort extends Tag {
|
||||||
final int value;
|
final int value;
|
||||||
TagShort({required this.value}) {
|
TagShort({required this.value});
|
||||||
type = TagType.Short;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {
|
void readValue(ByteLayer data) {
|
||||||
|
@ -16,4 +14,9 @@ class TagShort extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.Short;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,7 @@ import 'package:libac_flutter/nbt/Tag.dart';
|
||||||
|
|
||||||
class TagString extends Tag {
|
class TagString extends Tag {
|
||||||
final String value;
|
final String value;
|
||||||
TagString({required this.value}) {
|
TagString({required this.value});
|
||||||
type = TagType.String;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void readValue(ByteLayer data) {
|
void readValue(ByteLayer data) {
|
||||||
|
@ -16,4 +14,9 @@ class TagString extends Tag {
|
||||||
void writeValue(ByteLayer data) {
|
void writeValue(ByteLayer data) {
|
||||||
// TODO: implement writeValue
|
// TODO: implement writeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
TagType getTagType() {
|
||||||
|
return TagType.String;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue