Skip to content

Commit b0f2413

Browse files
committed
refactor: refactoring DeviceAPI to prevent crash
1 parent 1dd694e commit b0f2413

File tree

3 files changed

+22
-22
lines changed

3 files changed

+22
-22
lines changed

src/legacy/api/DeviceAPI.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "mc/enums/InputMode.h"
88
#include "mc/network/ConnectionRequest.h"
99
#include "mc/network/ServerNetworkHandler.h"
10+
#include "mc/world/ActorUniqueID.h"
1011
#include "mc/world/actor/player/Player.h"
1112
#include "mc/world/level/Level.h"
1213

@@ -33,23 +34,27 @@ ClassDefine<DeviceClass> DeviceClassBuilder = defineClass<DeviceClass>("LLSE_Dev
3334
//////////////////// Classes ////////////////////
3435

3536
// 生成函数
36-
Local<Object> DeviceClass::newDevice(Player* p) {
37-
auto newp = new DeviceClass(p);
37+
Local<Object> DeviceClass::newDevice(ActorUniqueID& uid) {
38+
auto newp = new DeviceClass(uid);
3839
return newp->getScriptObject();
3940
}
4041

4142
// 成员函数
42-
void DeviceClass::setPlayer(Player* player) {
43+
void DeviceClass::setPlayer(ActorUniqueID& uid) {
4344
try {
44-
id = player->getOrCreateUniqueID();
45+
id = uid;
4546
} catch (...) {
4647
isValid = false;
4748
}
4849
}
4950

5051
Player* DeviceClass::getPlayer() {
51-
if (!isValid) return nullptr;
52-
else return ll::service::getLevel()->getPlayer(id);
52+
Player* player = ll::service::getLevel()->getPlayer(id);
53+
if (!isValid || !player) {
54+
return nullptr;
55+
} else {
56+
return player;
57+
}
5358
}
5459

5560
Local<Value> DeviceClass::getIP() {
@@ -85,9 +90,7 @@ Local<Value> DeviceClass::getAvgPacketLoss() {
8590
Local<Value> DeviceClass::getLastPing() {
8691
try {
8792
Player* player = getPlayer();
88-
if (!player) {
89-
return Local<Value>();
90-
}
93+
if (!player) return Local<Value>();
9194

9295
return Number::newNumber(player->getNetworkStatus()->mCurrentPing);
9396
}
@@ -97,9 +100,7 @@ Local<Value> DeviceClass::getLastPing() {
97100
Local<Value> DeviceClass::getLastPacketLoss() {
98101
try {
99102
Player* player = getPlayer();
100-
if (!player) {
101-
return Local<Value>();
102-
}
103+
if (!player) return Local<Value>();
103104

104105
return Number::newNumber(player->getNetworkStatus()->mCurrentPacketLoss);
105106
}
@@ -119,9 +120,8 @@ Local<Value> DeviceClass::getOs() {
119120
Local<Value> DeviceClass::getServerAddress() {
120121
try {
121122
Player* player = getPlayer();
122-
if (!player) {
123-
return Local<Value>();
124-
}
123+
if (!player) return Local<Value>();
124+
125125
if (player->isSimulatedPlayer()) String::newString("unknown");
126126
Json::Value& requestJson = ll::service::getServerNetworkHandler()
127127
->fetchConnectionRequest(player->getNetworkIdentifier())

src/legacy/api/DeviceAPI.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22
#include "api/APIHelp.h"
3+
#include "mc/deps/core/mce/UUID.h"
34
#include "mc/world/ActorUniqueID.h"
45

56
//////////////////// Classes ////////////////////
@@ -10,12 +11,14 @@ class DeviceClass : public ScriptClass {
1011
bool isValid = true;
1112

1213
public:
13-
explicit DeviceClass(Player* p) : ScriptClass(ScriptClass::ConstructFromCpp<DeviceClass>{}) { setPlayer(p); }
14+
explicit DeviceClass(ActorUniqueID& uid) : ScriptClass(ScriptClass::ConstructFromCpp<DeviceClass>{}) {
15+
setPlayer(uid);
16+
}
1417

15-
void setPlayer(Player* player);
18+
void setPlayer(ActorUniqueID& uid);
1619
Player* getPlayer();
1720

18-
static Local<Object> newDevice(Player* p);
21+
static Local<Object> newDevice(ActorUniqueID& uid);
1922

2023
Local<Value> getIP();
2124
Local<Value> getAvgPing();

src/legacy/api/PlayerAPI.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2033,10 +2033,7 @@ Local<Value> PlayerClass::getBlockStandingOn(const Arguments& args) {
20332033

20342034
Local<Value> PlayerClass::getDevice(const Arguments& args) {
20352035
try {
2036-
Player* player = get();
2037-
if (!player) return Local<Value>();
2038-
2039-
return DeviceClass::newDevice(player);
2036+
return DeviceClass::newDevice(id);
20402037
}
20412038
CATCH("Fail in getDevice!");
20422039
}

0 commit comments

Comments
 (0)