1616#include " mc/nbt/ListTag.h"
1717#include " mc/nbt/ShortTag.h"
1818#include " mc/nbt/StringTag.h"
19- #include " mc/nbt/TagMemoryChunk.h"
2019
2120#include < magic_enum.hpp>
2221#include < mc/nbt/CompoundTag.h>
@@ -192,7 +191,11 @@ void TagToJson_List_Helper(ordered_json& res, ListTag* nbt) {
192191 break ;
193192 case Tag::Type::ByteArray: {
194193 auto & bytes = tag->as <ByteArrayTag>().data ;
195- res.push_back (Base64::Encode (string ((char *)bytes.mBuffer .get (), bytes.mSize )));
194+ char * tmpData;
195+ for (unsigned int i = 0 ; i < bytes.size (); ++i) {
196+ tmpData[i] = bytes[i];
197+ }
198+ res.push_back (Base64::Encode (tmpData));
196199 break ;
197200 }
198201 case Tag::Type::List: {
@@ -243,7 +246,11 @@ void TagToJson_Compound_Helper(ordered_json& res, CompoundTag* nbt) {
243246 break ;
244247 case Tag::Type::ByteArray: {
245248 auto & bytes = tag.as <ByteArrayTag>().data ;
246- res.push_back (Base64::Encode (string ((char *)bytes.mBuffer .get (), bytes.mSize )));
249+ char * tmpData;
250+ for (unsigned int i = 0 ; i < bytes.size (); ++i) {
251+ tmpData[i] = bytes[i];
252+ }
253+ res.push_back (Base64::Encode (tmpData));
247254 break ;
248255 }
249256 case Tag::Type::List: {
@@ -294,8 +301,12 @@ std::string TagToJson(Tag* nbt, int formatIndent) {
294301 result = nbt->as <StringTag>().data ;
295302 break ;
296303 case Tag::Type::ByteArray: {
297- auto & bytes = nbt->as <ByteArrayTag>().data ;
298- result = Base64::Encode (string ((char *)bytes.mBuffer .get (), bytes.mSize ));
304+ auto & bytes = nbt->as <ByteArrayTag>().data ;
305+ std::string tmpData;
306+ for (uchar data : bytes) {
307+ tmpData.push_back (data);
308+ }
309+ result = Base64::Encode (tmpData);
299310 break ;
300311 }
301312 case Tag::Type::List: {
@@ -839,15 +850,12 @@ NbtByteArrayClass::NbtByteArrayClass(std::unique_ptr<ByteArrayTag> p)
839850
840851NbtByteArrayClass* NbtByteArrayClass::constructor (const Arguments& args) {
841852 try {
842- auto buf = args[0 ].asByteBuffer ();
843- std::vector<schar> array;
853+ auto buf = args[0 ].asByteBuffer ();
844854
845- TagMemoryChunk tag = TagMemoryChunk ();
846- tag.mBuffer = std::unique_ptr<uchar[]>(new uchar[buf.byteLength ()]);
847- memcpy (tag.mBuffer .get (), buf.getRawBytes (), buf.byteLength ());
848855 std::unique_ptr<ByteArrayTag> arrayTag = std::make_unique<ByteArrayTag>(ByteArrayTag ());
849- arrayTag->data = std::move (tag);
850- arrayTag->data .mSize = arrayTag->data .mCapacity ;
856+ for (char c : buf.describeUtf8 ()) {
857+ arrayTag->data .push_back (c);
858+ }
851859 return new NbtByteArrayClass (args.thiz (), std::move (arrayTag));
852860 }
853861 CATCH_C (" Fail in Create ByteArrayTag!" );
@@ -885,7 +893,11 @@ Local<Value> NbtByteArrayClass::getType(const Arguments& args) { return Number::
885893Local<Value> NbtByteArrayClass::get (const Arguments& args) {
886894 try {
887895 auto & data = nbt->data ;
888- return ByteBuffer::newByteBuffer ((char *)data.mBuffer .get (), data.mSize );
896+ char * buf;
897+ for (unsigned int i = 0 ; i < data.size (); ++i) {
898+ buf[i] = data[i];
899+ }
900+ return ByteBuffer::newByteBuffer (buf, data.size ());
889901 }
890902 CATCH (" Fail in NbtValueGet!" )
891903}
@@ -904,10 +916,9 @@ Local<Value> NbtByteArrayClass::set(const Arguments& args) {
904916
905917 try {
906918 Local<ByteBuffer> buf = args[0 ].asByteBuffer ();
907- TagMemoryChunk tag = TagMemoryChunk ();
908- tag.mBuffer = std::unique_ptr<uchar[]>(new uchar[buf.byteLength ()]);
909- memcpy (tag.mBuffer .get (), buf.getRawBytes (), buf.byteLength ());
910- nbt->data = tag;
919+ for (char c : buf.describeUtf8 ()) {
920+ nbt->data .push_back (c);
921+ }
911922 return Boolean::newBoolean (true );
912923 }
913924 CATCH (" Fail in NbtValueSet!" )
@@ -1215,11 +1226,10 @@ Local<Value> NbtListClass::setByteArray(const Arguments& args) {
12151226 } else if (list[0 ].getId () != Tag::Type::ByteArray) {
12161227 LOG_ERROR_WITH_SCRIPT_INFO (" Set wrong type of element into NBT List!" );
12171228 } else {
1218- auto data = args[1 ].asByteBuffer ();
1219- TagMemoryChunk tag = TagMemoryChunk ();
1220- tag.mBuffer = std::unique_ptr<uchar[]>(new uchar[data.byteLength ()]);
1221- memcpy (tag.mBuffer .get (), data.getRawBytes (), data.byteLength ());
1222- list[index].as_ptr <ByteArrayTag>()->data = tag;
1229+ auto data = args[1 ].asByteBuffer ();
1230+ for (char c : data.describeUtf8 ()) {
1231+ list[index].as_ptr <ByteArrayTag>()->data .push_back (c);
1232+ }
12231233 }
12241234 return this ->getScriptObject ();
12251235 }
@@ -1665,13 +1675,12 @@ Local<Value> NbtCompoundClass::setByteArray(const Arguments& args) {
16651675 CHECK_ARG_TYPE (args[1 ], ValueKind::kByteBuffer );
16661676
16671677 try {
1668- auto key = args[0 ].toStr ();
1669- auto data = args[1 ].asByteBuffer ();
1670- TagMemoryChunk tag = TagMemoryChunk ();
1671- tag.mBuffer = std::unique_ptr<uchar[]>(new uchar[data.byteLength ()]);
1672- memcpy (tag.mBuffer .get (), data.getRawBytes (), data.byteLength ());
1678+ auto key = args[0 ].toStr ();
1679+ auto data = args[1 ].asByteBuffer ();
16731680 ByteArrayTag baTag;
1674- baTag.data = tag;
1681+ for (char c : data.describeUtf8 ()) {
1682+ baTag.data .push_back (c);
1683+ }
16751684 nbt->at (key) = baTag;
16761685 return this ->getScriptObject ();
16771686 }
@@ -1922,12 +1931,10 @@ Local<Value> NbtStatic::newTag(const Arguments& args) {
19221931 case Tag::Type::ByteArray: {
19231932 ByteArrayTag tag;
19241933 if (args.size () >= 2 && args[1 ].isByteBuffer ()) {
1925- Local<ByteBuffer> buf = args[1 ].asByteBuffer ();
1926- TagMemoryChunk chunk = TagMemoryChunk ();
1927- chunk.mBuffer = std::unique_ptr<uchar[]>(new uchar[buf.byteLength ()]);
1928- memcpy (chunk.mBuffer .get (), buf.getRawBytes (), buf.byteLength ());
1929- tag.data = tag;
1930- tag.data .mSize = tag.data .mCapacity ;
1934+ Local<ByteBuffer> buf = args[1 ].asByteBuffer ();
1935+ for (char data : buf.describeUtf8 ()) {
1936+ tag.data .push_back (data);
1937+ }
19311938 }
19321939 res = NbtByteArrayClass::pack (std::move (&tag));
19331940 break ;
@@ -2028,7 +2035,11 @@ Local<Value> Tag2Value_ListHelper(ListTag* nbt, bool autoExpansion = false) {
20282035 break ;
20292036 case Tag::Type::ByteArray: {
20302037 auto & data = tag->as_ptr <ByteArrayTag>()->data ;
2031- res.add (ByteBuffer::newByteBuffer (data.mBuffer .get (), data.mSize ));
2038+ char * buf;
2039+ for (unsigned int i = 0 ; i < data.size (); ++i) {
2040+ buf[i] = data[i];
2041+ }
2042+ res.add (ByteBuffer::newByteBuffer (buf, data.size ()));
20322043 break ;
20332044 }
20342045 case Tag::Type::List:
@@ -2076,7 +2087,11 @@ Local<Value> Tag2Value_CompoundHelper(CompoundTag* nbt, bool autoExpansion) {
20762087 break ;
20772088 case Tag::Type::ByteArray: {
20782089 auto & data = tag.get ().as_ptr <ByteArrayTag>()->data ;
2079- res.set (key, ByteBuffer::newByteBuffer (data.mBuffer .get (), data.mSize ));
2090+ char * buf;
2091+ for (unsigned int i = 0 ; i < data.size (); ++i) {
2092+ buf[i] = data[i];
2093+ }
2094+ res.set (key, ByteBuffer::newByteBuffer (buf, data.size ()));
20802095 break ;
20812096 }
20822097 case Tag::Type::List:
@@ -2122,7 +2137,11 @@ Local<Value> Tag2Value(Tag* nbt, bool autoExpansion) {
21222137 break ;
21232138 case Tag::Type::ByteArray: {
21242139 auto & data = nbt->as_ptr <ByteArrayTag>()->data ;
2125- value = ByteBuffer::newByteBuffer (data.mBuffer .get (), data.mSize );
2140+ char * buf;
2141+ for (unsigned int i = 0 ; i < data.size (); ++i) {
2142+ buf[i] = data[i];
2143+ }
2144+ value = ByteBuffer::newByteBuffer (buf, data.size ());
21262145 break ;
21272146 }
21282147 case Tag::Type::List:
0 commit comments