Skip to content

Commit 4d63484

Browse files
committed
fix: fix mc.deletePlayerNbt
1 parent 6eaa23c commit 4d63484

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"
@@ -118,6 +119,7 @@
118119
#include <climits>
119120
#include <memory>
120121
#include <optional>
122+
#include <stdexcept>
121123
#include <string>
122124
#include <vector>
123125

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

0 commit comments

Comments
 (0)