diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e24c2d..102f52d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,5 +30,5 @@ add_executable( NBT/TagLong.cpp NBT/TagLong.h NBT/TagFloat.cpp NBT/TagFloat.h NBT/TagDouble.cpp NBT/TagDouble.h - NBT/TagByteArray.cpp NBT/TagByteArray.h) + NBT/TagByteArray.cpp NBT/TagByteArray.h NBT/TagString.cpp NBT/TagString.h) target_link_libraries(NBTModifier Qt5::Widgets Qt5::Svg) \ No newline at end of file diff --git a/NBT/AbstractTag.cpp b/NBT/AbstractTag.cpp index d0011d7..f8fdfcd 100644 --- a/NBT/AbstractTag.cpp +++ b/NBT/AbstractTag.cpp @@ -7,6 +7,8 @@ #include "TagLong.h" #include "TagFloat.h" #include "TagDouble.h" +#include "TagByteArray.h" +#include "TagString.h" #include @@ -46,6 +48,12 @@ AbstractTag *AbstractTag::extractEmptyTag(const QByteArray &data) { case TagDouble::ID: return new TagDouble(); + + case TagByteArray::ID: + return new TagByteArray(); + + case TagString::ID: + return new TagString(); } return nullptr; diff --git a/NBT/TagByte.cpp b/NBT/TagByte.cpp index 1f81b04..e804475 100644 --- a/NBT/TagByte.cpp +++ b/NBT/TagByte.cpp @@ -4,6 +4,11 @@ TagByte::TagByte(const qint8 value) : AbstractNamedTag(ID), m_value(value) {} +const qint8 TagByte::value() const { + return m_value; +} + + void TagByte::readPayloadFromData(QDataStream &data) { data >> m_value; } diff --git a/NBT/TagByte.h b/NBT/TagByte.h index 5b5e7f9..397cdf4 100644 --- a/NBT/TagByte.h +++ b/NBT/TagByte.h @@ -9,6 +9,8 @@ public: TagByte(const qint8 value = 0); + const qint8 value() const; + protected: virtual void readPayloadFromData(QDataStream &data) override; virtual void writePayloadToData(QDataStream &data) const override; diff --git a/NBT/TagByteArray.cpp b/NBT/TagByteArray.cpp index a8620fc..487a58b 100644 --- a/NBT/TagByteArray.cpp +++ b/NBT/TagByteArray.cpp @@ -6,6 +6,10 @@ TagByteArray::TagByteArray(const QList value) : AbstractNamedTag(ID), m_value(value) {} +const QList &TagByteArray::value() const { + return m_value; +} + void TagByteArray::readPayloadFromData(QDataStream &data) { TagInt size; data >> size; diff --git a/NBT/TagByteArray.h b/NBT/TagByteArray.h index 120b9d7..035d2cc 100644 --- a/NBT/TagByteArray.h +++ b/NBT/TagByteArray.h @@ -12,6 +12,8 @@ public: TagByteArray(const QList value = QList()); + const QList &value() const; + protected: virtual void readPayloadFromData(QDataStream &data) override; virtual void writePayloadToData(QDataStream &data) const override; diff --git a/NBT/TagDouble.cpp b/NBT/TagDouble.cpp index c84ce7d..3d64e7b 100644 --- a/NBT/TagDouble.cpp +++ b/NBT/TagDouble.cpp @@ -5,6 +5,10 @@ TagDouble::TagDouble(const double value) : AbstractNamedTag(ID), m_value(value) {} +const double TagDouble::value() const { + return m_value; +} + void TagDouble::readPayloadFromData(QDataStream &data) { data >> m_value; m_value = qFromBigEndian(m_value); diff --git a/NBT/TagDouble.h b/NBT/TagDouble.h index a6a5182..8084663 100644 --- a/NBT/TagDouble.h +++ b/NBT/TagDouble.h @@ -9,6 +9,8 @@ public: TagDouble(const double value = 0); + const double value() const; + protected: virtual void readPayloadFromData(QDataStream &data) override; virtual void writePayloadToData(QDataStream &data) const override; diff --git a/NBT/TagFloat.cpp b/NBT/TagFloat.cpp index a672746..6bf2651 100644 --- a/NBT/TagFloat.cpp +++ b/NBT/TagFloat.cpp @@ -5,6 +5,10 @@ TagFloat::TagFloat(const float value) : AbstractNamedTag(ID), m_value(value) {} +const float TagFloat::value() const { + return m_value; +} + void TagFloat::readPayloadFromData(QDataStream &data) { data >> m_value; m_value = qFromBigEndian(m_value); diff --git a/NBT/TagFloat.h b/NBT/TagFloat.h index f63ec8e..62827c6 100644 --- a/NBT/TagFloat.h +++ b/NBT/TagFloat.h @@ -10,6 +10,8 @@ public: TagFloat(const float value = 0); + const float value() const; + protected: virtual void readPayloadFromData(QDataStream &data) override; virtual void writePayloadToData(QDataStream &data) const override; diff --git a/NBT/TagLong.cpp b/NBT/TagLong.cpp index b262418..083e1d3 100644 --- a/NBT/TagLong.cpp +++ b/NBT/TagLong.cpp @@ -5,6 +5,10 @@ TagLong::TagLong(const qint64 value) : AbstractNamedTag(ID), m_value(value) {} +const qint64 TagLong::value() const { + return m_value; +} + void TagLong::readPayloadFromData(QDataStream &data) { data >> m_value; m_value = qFromBigEndian(m_value); diff --git a/NBT/TagLong.h b/NBT/TagLong.h index 936b25a..48e50cc 100644 --- a/NBT/TagLong.h +++ b/NBT/TagLong.h @@ -9,6 +9,8 @@ public: TagLong(const qint64 value = 0); + const qint64 value() const; + protected: virtual void readPayloadFromData(QDataStream &data) override; virtual void writePayloadToData(QDataStream &data) const override; diff --git a/NBT/TagShort.cpp b/NBT/TagShort.cpp index 0f9e0ea..c4bb9e3 100644 --- a/NBT/TagShort.cpp +++ b/NBT/TagShort.cpp @@ -5,6 +5,10 @@ TagShort::TagShort(const qint16 value) : AbstractNamedTag(ID), m_value(value) {} +const qint16 TagShort::value() const { + return m_value; +} + void TagShort::readPayloadFromData(QDataStream &data) { data >> m_value; m_value = qFromBigEndian(m_value); diff --git a/NBT/TagShort.h b/NBT/TagShort.h index 7c1f023..54b89d4 100644 --- a/NBT/TagShort.h +++ b/NBT/TagShort.h @@ -9,6 +9,8 @@ public: TagShort(const qint16 value = 0); + const qint16 value() const; + protected: virtual void readPayloadFromData(QDataStream &data) override; virtual void writePayloadToData(QDataStream &data) const override; diff --git a/NBT/TagString.cpp b/NBT/TagString.cpp new file mode 100644 index 0000000..e2595a2 --- /dev/null +++ b/NBT/TagString.cpp @@ -0,0 +1,35 @@ +#include "TagString.h" + +#include "TagShort.h" + +#include + +TagString::TagString(const QString &value) : AbstractNamedTag(ID), m_value(value) {} + +const QString &TagString::value() const { + return m_value; +} + +void TagString::readPayloadFromData(QDataStream &data) { + TagShort size; + data >> size; + + QByteArray string(size.value(), '\0'); + for (qint16 elem = 0; elem < size.value(); elem++) { + qint8 byte; + data >> byte; + + string[elem] = byte; + } + + m_value = QString::fromUtf8(string); +} +void TagString::writePayloadToData(QDataStream &data) const { + const QByteArray string(m_value.toUtf8()); + const TagShort size(string.size()); + + data << size; + for(qint16 elem = 0; elem < size.value(); elem++) { + data << string.at(elem); + } +} \ No newline at end of file diff --git a/NBT/TagString.h b/NBT/TagString.h new file mode 100644 index 0000000..b96ef4f --- /dev/null +++ b/NBT/TagString.h @@ -0,0 +1,24 @@ +#ifndef NBTMODIFIER_TAGSTRING_H +#define NBTMODIFIER_TAGSTRING_H + +#include "AbstractNamedTag.h" + +#include + +class TagString : public AbstractNamedTag { +public: + static constexpr quint8 ID = 8; + + TagString(const QString &value = 0); + + const QString &value() const; + +protected: + virtual void readPayloadFromData(QDataStream &data) override; + virtual void writePayloadToData(QDataStream &data) const override; + +private: + QString m_value; +}; + +#endif //NBTMODIFIER_TAGSTRING_H