Skip to content

Commit 9359d67

Browse files
committed
feat: support levilamina 0.8.0
1 parent a515c19 commit 9359d67

File tree

5 files changed

+65
-48
lines changed

5 files changed

+65
-48
lines changed

src/legacy/api/EntityAPI.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1467,7 +1467,7 @@ Local<Value> EntityClass::getBiomeName() {
14671467
Actor* actor = get();
14681468
if (!actor) return Local<Value>();
14691469
auto& bio = actor->getDimensionBlockSource().getBiome(actor->getFeetBlockPos());
1470-
return String::newString(bio.getName());
1470+
return String::newString(bio.getName().getString());
14711471
}
14721472
CATCH("Fail in getBiomeName!");
14731473
}

src/legacy/api/NbtAPI.cpp

Lines changed: 56 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
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

840851
NbtByteArrayClass* 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::
885893
Local<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:

src/legacy/api/PlayerAPI.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
#include "mc/network/MinecraftPackets.h"
4242
#include "mc/network/NetworkIdentifier.h"
4343
#include "mc/network/ServerNetworkHandler.h"
44-
#include "mc/network/packet/AddEntityPacket.h"
4544
#include "mc/network/packet/BossEventPacket.h"
4645
#include "mc/network/packet/LevelChunkPacket.h"
4746
#include "mc/network/packet/ModalFormRequestPacket.h"
@@ -3390,7 +3389,7 @@ Local<Value> PlayerClass::getBiomeName() {
33903389
Player* player = get();
33913390
if (!player) return Local<Value>();
33923391
Biome& bio = player->getDimensionBlockSource().getBiome(player->getFeetBlockPos());
3393-
return String::newString(bio.getName());
3392+
return String::newString(bio.getName().getString());
33943393
}
33953394
CATCH("Fail in getBiomeName!");
33963395
}

src/legacy/api/SimulatedPlayerAPI.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@
1111
#include "engine/EngineOwnData.h"
1212
#include "engine/GlobalShareData.h"
1313
#include "main/SafeGuardRecord.h"
14-
#include "mc/scripting/modules/minecraft/ScriptNavigationResult.h"
1514
#include "mc/server/SimulatedPlayer.h"
1615

1716
#include <algorithm>
17+
#include <mc/external/scripting/gametest/ScriptNavigationResult.h>
1818
#include <mc/nbt/CompoundTag.h>
19+
#include <mc/server/sim/LookDuration.h>
1920
#include <mc/world/Container.h>
2021
#include <mc/world/SimpleContainer.h>
2122
#include <mc/world/actor/Actor.h>
@@ -372,7 +373,7 @@ Local<Value> PlayerClass::simulateMoveTo(const Arguments& args) {
372373
speed = args[index].asNumber().toFloat();
373374
}
374375

375-
sp->simulateMoveToLocation(target, speed);
376+
sp->simulateMoveToLocation(target, speed, true);
376377
return Boolean::newBoolean(true);
377378
}
378379
CATCH("Fail in " __FUNCTION__ "!")
@@ -418,7 +419,7 @@ Local<Value> PlayerClass::simulateLookAt(const Arguments& args) {
418419
return Boolean::newBoolean(false);
419420
} else if (auto actor = EntityClass::tryExtractActor(args[0])) {
420421
if (!*actor) return Local<Value>();
421-
sp->simulateLookAt(**actor);
422+
sp->simulateLookAt(**actor, (sim::LookDuration)0);
422423
return Boolean::newBoolean(true);
423424
}
424425
LOG_WRONG_ARG_TYPE();
@@ -443,7 +444,7 @@ Local<Value> PlayerClass::simulateSetBodyRotation(const Arguments& args) {
443444
// void simulateWorldMove(class Vec3 const&, float);
444445
// void simulateMoveToLocation(class Vec3 const&, float);
445446

446-
inline Local<Value> NavigateResultToObject(ScriptModuleMinecraft::ScriptNavigationResult const& res) {
447+
inline Local<Value> NavigateResultToObject(ScriptModuleGameTest::ScriptNavigationResult const& res) {
447448
auto obj = Object::newObject();
448449
obj.set(String::newString("isFullPath"), Boolean::newBoolean(res.mIsFullPath));
449450
auto path = Array::newArray();

xmake.lua

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@ add_requires(
99
"legacymoney 0.2.0",
1010
"legacyparticleapi 0.2.0",
1111
"legacyremotecall 0.2.0",
12-
"levilamina 0.7.2",
12+
"levilamina 0.8.0",
1313
"lightwebsocketclient 1.0.0",
1414
"magic_enum v0.9.0",
15-
"more-events develop",
1615
"nlohmann_json 3.11.2",
1716
"openssl 1.1.1-w",
1817
"simpleini v4.19",
@@ -40,7 +39,7 @@ option("backend")
4039
package("more-events")
4140
add_urls("https://github.com/LiteLDev/MoreEvents.git")
4241

43-
add_deps("levilamina 0.7.2")
42+
add_deps("levilamina 0.8.0")
4443

4544
on_install(function (package)
4645
import("package.tools.xmake").install(package)
@@ -75,7 +74,6 @@ target("legacy-script-engine")
7574
"levilamina",
7675
"lightwebsocketclient",
7776
"magic_enum",
78-
"moreevents",
7977
"nlohmann_json",
8078
"scriptx",
8179
"simpleini",

0 commit comments

Comments
 (0)