@@ -352,17 +352,22 @@ Local<Value> McClass::setPlayerNbt(const Arguments& args) {
352
352
CHECK_ARGS_COUNT (args, 2 );
353
353
CHECK_ARG_TYPE (args[0 ], ValueKind::kString );
354
354
try {
355
- mce::UUID uuid = mce::UUID::fromString (args[0 ].asString ().toString ());
356
- CompoundTag* tag = NbtCompoundClass::extract (args[1 ]);
357
- DBStorage* db = MoreGlobal::dbStorage;
358
- if (db && db->hasKey (" player_" + uuid.asString (), DBHelpers::Category::Player)) {
359
- std::unique_ptr<CompoundTag> playerTag =
360
- db->getCompoundTag (" player_" + uuid.asString (), DBHelpers::Category::Player);
361
- if (playerTag) {
362
- std::string serverId = playerTag->at (" ServerId" );
363
- if (!serverId.empty ()) {
364
- db->saveData (serverId, tag->toBinaryNbt (), DBHelpers::Category::Player);
365
- return Boolean::newBoolean (true );
355
+ mce::UUID uuid = mce::UUID::fromString (args[0 ].asString ().toString ());
356
+ auto tag = NbtCompoundClass::extract (args[1 ]);
357
+ Player* player = ll::service::getLevel ()->getPlayer (uuid);
358
+ if (player && tag) {
359
+ player->load (*tag, MoreGlobal::defaultDataLoadHelper ());
360
+ } else if (tag) {
361
+ DBStorage* db = MoreGlobal::dbStorage;
362
+ if (db && db->hasKey (" player_" + uuid.asString (), DBHelpers::Category::Player)) {
363
+ std::unique_ptr<CompoundTag> playerTag =
364
+ db->getCompoundTag (" player_" + uuid.asString (), DBHelpers::Category::Player);
365
+ if (playerTag) {
366
+ std::string serverId = playerTag->at (" ServerId" );
367
+ if (!serverId.empty ()) {
368
+ db->saveData (serverId, tag->toBinaryNbt (), DBHelpers::Category::Player);
369
+ return Boolean::newBoolean (true );
370
+ }
366
371
}
367
372
}
368
373
}
@@ -376,31 +381,47 @@ Local<Value> McClass::setPlayerNbtTags(const Arguments& args) {
376
381
CHECK_ARG_TYPE (args[0 ], ValueKind::kString );
377
382
CHECK_ARG_TYPE (args[2 ], ValueKind::kArray );
378
383
try {
379
- mce::UUID uuid = mce::UUID::fromString (args[0 ].asString ().toString ());
380
- CompoundTag* tag = NbtCompoundClass::extract (args[1 ]);
381
- Local<Array> arr = args[2 ].asArray ();
382
- DBStorage* db = MoreGlobal::dbStorage;
383
- if (db && db->hasKey (" player_" + uuid.asString (), DBHelpers::Category::Player)) {
384
- std::unique_ptr<CompoundTag> playerTag =
385
- db->getCompoundTag (" player_" + uuid.asString (), DBHelpers::Category::Player);
386
- if (playerTag) {
387
- std::string serverId = playerTag->at (" ServerId" );
388
- if (!serverId.empty () && db->hasKey (serverId, DBHelpers::Category::Player)) {
389
- auto loadedTag = db->getCompoundTag (serverId, DBHelpers::Category::Player);
390
- if (loadedTag) {
391
- for (int i = 0 ; i < arr.size (); ++i) {
392
- auto value = arr.get (i);
393
- if (value.getKind () == ValueKind::kString ) {
394
- std::string tagName = value.asString ().toString ();
395
- if (!tag->at (tagName).is_null ()) {
396
- loadedTag->at (tagName) = tag->at (tagName);
384
+ mce::UUID uuid = mce::UUID::fromString (args[0 ].asString ().toString ());
385
+ auto tag = NbtCompoundClass::extract (args[1 ]);
386
+ Local<Array> arr = args[2 ].asArray ();
387
+ Player* player = ll::service::getLevel ()->getPlayer (uuid);
388
+ if (player && tag) {
389
+ CompoundTag loadedTag;
390
+ player->save (loadedTag);
391
+ for (int i = 0 ; i < arr.size (); ++i) {
392
+ auto value = arr.get (i);
393
+ if (value.getKind () == ValueKind::kString ) {
394
+ std::string tagName = value.asString ().toString ();
395
+ if (!tag->at (tagName).is_null ()) {
396
+ loadedTag.at (tagName) = tag->at (tagName);
397
+ }
398
+ }
399
+ }
400
+ player->load (loadedTag, MoreGlobal::defaultDataLoadHelper ());
401
+ } else if (tag) {
402
+ DBStorage* db = MoreGlobal::dbStorage;
403
+ if (db && db->hasKey (" player_" + uuid.asString (), DBHelpers::Category::Player)) {
404
+ std::unique_ptr<CompoundTag> playerTag =
405
+ db->getCompoundTag (" player_" + uuid.asString (), DBHelpers::Category::Player);
406
+ if (playerTag) {
407
+ std::string serverId = playerTag->at (" ServerId" );
408
+ if (!serverId.empty () && db->hasKey (serverId, DBHelpers::Category::Player)) {
409
+ auto loadedTag = db->getCompoundTag (serverId, DBHelpers::Category::Player);
410
+ if (loadedTag) {
411
+ for (int i = 0 ; i < arr.size (); ++i) {
412
+ auto value = arr.get (i);
413
+ if (value.getKind () == ValueKind::kString ) {
414
+ std::string tagName = value.asString ().toString ();
415
+ if (!tag->at (tagName).is_null ()) {
416
+ loadedTag->at (tagName) = tag->at (tagName);
417
+ }
397
418
}
398
419
}
420
+ db->saveData (serverId, loadedTag->toBinaryNbt (), DBHelpers::Category::Player);
421
+ return Boolean::newBoolean (true );
399
422
}
400
- db->saveData (serverId, loadedTag->toBinaryNbt (), DBHelpers::Category::Player);
401
423
return Boolean::newBoolean (true );
402
424
}
403
- return Boolean::newBoolean (true );
404
425
}
405
426
}
406
427
}
@@ -2957,10 +2978,10 @@ Local<Value> PlayerClass::setNbt(const Arguments& args) {
2957
2978
if (!player) return Local<Value>();
2958
2979
2959
2980
auto nbt = NbtCompoundClass::extract (args[0 ]);
2960
- if (!nbt || !MoreGlobal::defaultDataLoadHelper ) {
2981
+ if (!nbt) {
2961
2982
return Local<Value>();
2962
2983
}
2963
- return Boolean::newBoolean (player->load (*nbt, * MoreGlobal::defaultDataLoadHelper));
2984
+ return Boolean::newBoolean (player->load (*nbt, MoreGlobal::defaultDataLoadHelper () ));
2964
2985
}
2965
2986
CATCH (" Fail in setNbt!" )
2966
2987
}
0 commit comments