Skip to content

Commit 8c768d2

Browse files
committed
Merge branch 'main' into develop
2 parents 0f5b9d4 + 19a1192 commit 8c768d2

File tree

2 files changed

+32
-17
lines changed

2 files changed

+32
-17
lines changed

docs/apis/GameAPI/Player.zh.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1766,6 +1766,14 @@
17661766
### 模拟玩家 - 函数
17671767
每一个模拟玩家对象都包含一些可以执行的成员函数(成员方法)。对于某个特定的模拟玩家对象`sp`,可以通过以下这些函数对这个模拟玩家进行一些操作
17681768

1769+
#### 模拟重生
1770+
1771+
'sp.simulateRespawn()'
1772+
1773+
- 返回值:是否成功模拟操作
1774+
- 返回值类型:'Boolean'
1775+
1776+
参考:[mojang-gametest docs](https://learn.microsoft.com/zh-cn/minecraft/creator/scriptapi/minecraft/server-gametest/simulatedplayer?view=minecraft-bedrock-experimental#respawn)
17691777

17701778
#### 模拟攻击
17711779

src/legacy/api/ScoreboardAPI.cpp

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ Local<Value> ObjectiveClass::setDisplay(const Arguments& args) {
8282
CATCH("Fail in setDisplay");
8383
}
8484

85+
///////////////////////////////////////////////////////////////////
86+
8587
Local<Value> ObjectiveClass::setScore(const Arguments& args) {
8688
CHECK_ARGS_COUNT(args, 2)
8789
CHECK_ARG_TYPE(args[1], ValueKind::kNumber)
@@ -92,7 +94,7 @@ Local<Value> ObjectiveClass::setScore(const Arguments& args) {
9294
if (args[0].isString()) {
9395
std::string name = args[0].toStr();
9496
Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard();
95-
Objective* obj = scoreboard.getObjective(objname);
97+
Objective* obj = get();
9698
if (!obj) {
9799
return Boolean::newBoolean(false);
98100
}
@@ -103,21 +105,23 @@ Local<Value> ObjectiveClass::setScore(const Arguments& args) {
103105
bool isSuccess = false;
104106
scoreboard.modifyPlayerScore(isSuccess, id, *obj, score, PlayerScoreSetFunction::Set);
105107
if (isSuccess) return Number::newNumber(score);
108+
return Local<Value>();
106109
} else if (IsInstanceOf<PlayerClass>(args[0])) {
107110
auto player = PlayerClass::extract(args[0]);
108111
Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard();
109-
Objective* obj = scoreboard.getObjective(objname);
112+
Objective* obj = get();
110113
if (!obj) {
111114
return Boolean::newBoolean(false);
112115
}
113-
const ScoreboardId& id = scoreboard.getScoreboardId(player->getOrCreateUniqueID());
116+
const ScoreboardId& id = scoreboard.getScoreboardId(*player);
114117
if (!id.isValid()) {
115118
scoreboard.createScoreboardId(*player);
116119
}
117120
bool isSuccess = false;
118121
scoreboard
119122
.modifyPlayerScore(isSuccess, id, *obj, args[1].asNumber().toInt32(), PlayerScoreSetFunction::Set);
120123
if (isSuccess) return Number::newNumber(score);
124+
return Local<Value>();
121125
} else {
122126
LOG_WRONG_ARG_TYPE();
123127
return Local<Value>();
@@ -137,7 +141,7 @@ Local<Value> ObjectiveClass::addScore(const Arguments& args) {
137141
if (args[0].isString()) {
138142
std::string name = args[0].toStr();
139143
Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard();
140-
Objective* obj = scoreboard.getObjective(objname);
144+
Objective* obj = get();
141145
if (!obj) {
142146
return Boolean::newBoolean(false);
143147
}
@@ -149,21 +153,23 @@ Local<Value> ObjectiveClass::addScore(const Arguments& args) {
149153
scoreboard
150154
.modifyPlayerScore(isSuccess, id, *obj, args[1].asNumber().toInt32(), PlayerScoreSetFunction::Add);
151155
if (isSuccess) return Number::newNumber(score);
156+
return Local<Value>();
152157
} else if (IsInstanceOf<PlayerClass>(args[0])) {
153158
auto player = PlayerClass::extract(args[0]);
154159
Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard();
155-
Objective* obj = scoreboard.getObjective(objname);
160+
Objective* obj = get();
156161
if (!obj) {
157162
return Boolean::newBoolean(false);
158163
}
159-
const ScoreboardId& id = scoreboard.getScoreboardId(player->getOrCreateUniqueID());
164+
const ScoreboardId& id = scoreboard.getScoreboardId(*player);
160165
if (!id.isValid()) {
161166
scoreboard.createScoreboardId(*player);
162167
}
163168
bool isSuccess = false;
164169
scoreboard
165170
.modifyPlayerScore(isSuccess, id, *obj, args[1].asNumber().toInt32(), PlayerScoreSetFunction::Add);
166171
if (isSuccess) return Number::newNumber(score);
172+
return Local<Value>();
167173
} else {
168174
LOG_WRONG_ARG_TYPE();
169175
return Local<Value>();
@@ -183,7 +189,7 @@ Local<Value> ObjectiveClass::reduceScore(const Arguments& args) {
183189
if (args[0].isString()) {
184190
std::string name = args[0].toStr();
185191
Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard();
186-
Objective* obj = scoreboard.getObjective(objname);
192+
Objective* obj = get();
187193
if (!obj) {
188194
return Boolean::newBoolean(false);
189195
}
@@ -195,21 +201,23 @@ Local<Value> ObjectiveClass::reduceScore(const Arguments& args) {
195201
scoreboard
196202
.modifyPlayerScore(isSuccess, id, *obj, args[1].asNumber().toInt32(), PlayerScoreSetFunction::Subtract);
197203
if (isSuccess) return Number::newNumber(score);
204+
return Local<Value>();
198205
} else if (IsInstanceOf<PlayerClass>(args[0])) {
199206
auto player = PlayerClass::extract(args[0]);
200207
Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard();
201-
Objective* obj = scoreboard.getObjective(objname);
208+
Objective* obj = get();
202209
if (!obj) {
203210
return Boolean::newBoolean(false);
204211
}
205-
const ScoreboardId& id = scoreboard.getScoreboardId(player->getOrCreateUniqueID());
212+
const ScoreboardId& id = scoreboard.getScoreboardId(*player);
206213
if (!id.isValid()) {
207214
scoreboard.createScoreboardId(*player);
208215
}
209216
bool isSuccess = false;
210217
scoreboard
211218
.modifyPlayerScore(isSuccess, id, *obj, args[1].asNumber().toInt32(), PlayerScoreSetFunction::Subtract);
212219
if (isSuccess) return Number::newNumber(score);
220+
return Local<Value>();
213221
} else {
214222
LOG_WRONG_ARG_TYPE();
215223
return Local<Value>();
@@ -225,7 +233,7 @@ Local<Value> ObjectiveClass::deleteScore(const Arguments& args) {
225233
try {
226234
if (args[0].isString()) {
227235
Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard();
228-
Objective* obj = scoreboard.getObjective(objname);
236+
Objective* obj = get();
229237
if (!obj) {
230238
return Boolean::newBoolean(false);
231239
}
@@ -237,11 +245,11 @@ Local<Value> ObjectiveClass::deleteScore(const Arguments& args) {
237245
} else if (IsInstanceOf<PlayerClass>(args[0])) {
238246
Player* player = PlayerClass::extract(args[0]);
239247
Scoreboard& scoreboard = ll::service::getLevel()->getScoreboard();
240-
Objective* obj = scoreboard.getObjective(objname);
248+
Objective* obj = get();
241249
if (!obj) {
242250
return Boolean::newBoolean(false);
243251
}
244-
const ScoreboardId& id = scoreboard.getScoreboardId(player->getOrCreateUniqueID());
252+
const ScoreboardId& id = scoreboard.getScoreboardId(*player);
245253
if (!id.isValid()) {
246254
return Boolean::newBoolean(true);
247255
}
@@ -261,8 +269,7 @@ Local<Value> ObjectiveClass::getScore(const Arguments& args) {
261269
if (args[0].isString()) {
262270
Scoreboard& board = ll::service::getLevel()->getScoreboard();
263271
Objective* objective = board.getObjective(objname);
264-
ScoreboardId sid =
265-
board.getScoreboardId(PlayerScoreboardId(std::atoll(args[0].asString().toString().c_str())));
272+
ScoreboardId sid = board.getScoreboardId(args[0].asString().toString());
266273
if (!objective || !sid.isValid() || !objective->hasScore(sid)) {
267274
return {};
268275
}
@@ -294,7 +301,7 @@ Local<Value> McClass::getDisplayObjective(const Arguments& args) {
294301
auto res = ll::service::getLevel()->getScoreboard().getDisplayObjective(slot);
295302

296303
if (!res) return Local<Value>();
297-
return ObjectiveClass::newObjective((Objective*)res);
304+
return ObjectiveClass::newObjective(const_cast<Objective*>(res->mObjective));
298305
}
299306
CATCH("Fail in GetDisplayObjective");
300307
}
@@ -307,8 +314,8 @@ Local<Value> McClass::clearDisplayObjective(const Arguments& args) {
307314
string slot = args[0].toStr();
308315
auto res = ll::service::getLevel()->getScoreboard().clearDisplayObjective(slot);
309316

310-
if (!res) return Local<Value>();
311-
return ObjectiveClass::newObjective(res);
317+
if (!res) return Boolean::newBoolean(false);
318+
return Boolean::newBoolean(true);
312319
}
313320
CATCH("Fail in ClearDisplayObjective");
314321
}

0 commit comments

Comments
 (0)