Skip to content

Commit 028c815

Browse files
xiaoqchShrBox
authored andcommitted
fix: fix mc.deletePlayerNbt
1 parent 0c38b73 commit 028c815

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

src/legacy/api/PlayerAPI.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
#include "mc/legacy/ActorUniqueID.h"
4343
#include "mc/nbt/CompoundTag.h"
4444
#include "mc/nbt/ListTag.h"
45+
#include "mc/nbt/StringTag.h"
4546
#include "mc/network/ConnectionRequest.h"
4647
#include "mc/network/MinecraftPacketIds.h"
4748
#include "mc/network/MinecraftPackets.h"
@@ -117,6 +118,7 @@
117118
#include <climits>
118119
#include <memory>
119120
#include <optional>
121+
#include <stdexcept>
120122
#include <string>
121123
#include <vector>
122124

@@ -468,7 +470,28 @@ Local<Value> McClass::deletePlayerNbt(const Arguments& args) {
468470
CHECK_ARG_TYPE(args[0], ValueKind::kString);
469471
try {
470472
mce::UUID uuid = mce::UUID::fromString(args[0].asString().toString());
471-
ll::service::getLevel()->getLevelStorage().deleteData("player_" + uuid.asString(), DBHelpers::Category::Player);
473+
if (uuid == mce::UUID::EMPTY()) {
474+
throw std::invalid_argument(args[0].asString().toString() + " is not a valid UUID");
475+
}
476+
auto storage = ll::service::getLevel().transform([](auto& level) { return &level.getLevelStorage(); });
477+
if (!storage) {
478+
return Boolean::newBoolean(false);
479+
}
480+
auto playerIds = storage->getCompoundTag("player_" + uuid.asString(), DBHelpers::Category::Player);
481+
if (!playerIds) {
482+
return Boolean::newBoolean(false);
483+
}
484+
for (auto& [type, id] : *playerIds) {
485+
if (!id.is_string()) {
486+
continue;
487+
}
488+
std::string& key = id.get<StringTag>();
489+
if (type == "ServerId") {
490+
storage->deleteData(key, ::DBHelpers::Category::Player);
491+
} else {
492+
storage->deleteData("player_" + key, ::DBHelpers::Category::Player);
493+
}
494+
}
472495
return Boolean::newBoolean(true);
473496
}
474497
CATCH("Fail in deletePlayerNbt!")

0 commit comments

Comments
 (0)