Skip to content

Commit feaecee

Browse files
committed
refactor: optimize CommandAPI
1 parent 3a1db36 commit feaecee

7 files changed

Lines changed: 52 additions & 51 deletions

File tree

src/legacy/api/BlockAPI.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
class Block;
99
class BlockClass : public ScriptClass {
1010
private:
11-
Block const* block;
11+
// Block is managed by BDS, so use raw pointer
12+
Block const* block = nullptr;
1213

1314
// Pre data
1415
std::string name, type;

src/legacy/api/BlockEntityAPI.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
class BlockActor;
88
class BlockEntityClass : public ScriptClass {
99
private:
10+
// BlockActor is managed by BDS, so use raw pointer
1011
BlockActor* blockEntity = nullptr;
1112
int dim;
1213

src/legacy/api/CommandAPI.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -362,8 +362,8 @@ void onExecute(CommandOrigin const& origin, CommandOutput& output, RuntimeComman
362362
try {
363363
Local<Object> args = Object::newObject();
364364
auto cmd = CommandClass::newCommand(commandName);
365-
auto * ori = new CommandOriginClass(origin.clone());
366-
auto* outp = new CommandOutputClass(std::make_shared<CommandOutput>(output), ori->ptr);
365+
auto* ori = new CommandOriginClass(origin);
366+
auto* outp = new CommandOutputClass(output, origin);
367367

368368
auto& registeredCommands = getEngineOwnData()->plugin->registeredCommands;
369369
if (registeredCommands.find(commandName) == registeredCommands.end()) {
@@ -396,8 +396,8 @@ void onExecute(CommandOrigin const& origin, CommandOutput& output, RuntimeComman
396396
}
397397
}
398398
localShareData->commandCallbacks[commandName].func.get().call({}, cmd, ori, outp, args);
399-
std::swap(output.mMessages, outp->output->mMessages);
400-
output.mSuccessCount = outp->output->mSuccessCount;
399+
std::swap(output.mMessages, outp->output.mMessages);
400+
output.mSuccessCount = outp->output.mSuccessCount;
401401
outp->isAsync = true;
402402
}
403403
CATCH_WITHOUT_RETURN("Fail in executing command \"" + commandName + "\"!")

src/legacy/api/CommandOriginAPI.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,50 +32,50 @@ ClassDefine<CommandOriginClass> CommandOriginClassBuilder =
3232

3333
//////////////////// APIs ////////////////////
3434

35-
CommandOriginClass::CommandOriginClass(std::shared_ptr<CommandOrigin> p)
35+
CommandOriginClass::CommandOriginClass(CommandOrigin const& ori)
3636
: ScriptClass(ScriptClass::ConstructFromCpp<CommandOriginClass>{}),
37-
ptr(std::move(p)) {};
37+
origin(ori) {};
3838

3939
Local<Value> CommandOriginClass::getOriginType() {
4040
try {
41-
return Number::newNumber((int)get()->getOriginType());
41+
return Number::newNumber((int)get().getOriginType());
4242
}
4343
CATCH("Fail in getOriginType!");
4444
}
4545

4646
Local<Value> CommandOriginClass::getOriginTypeName() {
4747
try {
48-
return String::newString(magic_enum::enum_name(get()->getOriginType()));
48+
return String::newString(magic_enum::enum_name(get().getOriginType()));
4949
}
5050
CATCH("Fail in getOriginTypeName!");
5151
}
5252

5353
Local<Value> CommandOriginClass::getOriginName() {
5454
try {
55-
return String::newString(get()->getName());
55+
return String::newString(get().getName());
5656
}
5757
CATCH("Fail in getOriginName!");
5858
}
5959

6060
Local<Value> CommandOriginClass::getBlockPosition() {
6161
try {
62-
auto dim = get()->getDimension();
63-
return IntPos::newPos(get()->getBlockPosition(), dim ? (int)dim->getDimensionId() : 0);
62+
auto dim = get().getDimension();
63+
return IntPos::newPos(get().getBlockPosition(), dim ? (int)dim->getDimensionId() : 0);
6464
}
6565
CATCH("Fail in getBlockPosition!");
6666
}
6767

6868
Local<Value> CommandOriginClass::getPosition() {
6969
try {
70-
auto dim = get()->getDimension();
71-
return FloatPos::newPos(get()->getWorldPosition(), dim ? (int)dim->getDimensionId() : 0);
70+
auto dim = get().getDimension();
71+
return FloatPos::newPos(get().getWorldPosition(), dim ? (int)dim->getDimensionId() : 0);
7272
}
7373
CATCH("Fail in getPosition!");
7474
}
7575

7676
Local<Value> CommandOriginClass::getEntity() {
7777
try {
78-
auto entity = get()->getEntity();
78+
auto entity = get().getEntity();
7979
if (!entity) return Local<Value>();
8080
return EntityClass::newEntity(entity);
8181
}
@@ -84,7 +84,7 @@ Local<Value> CommandOriginClass::getEntity() {
8484

8585
Local<Value> CommandOriginClass::getPlayer() {
8686
try {
87-
Actor* player = get()->getEntity();
87+
Actor* player = get().getEntity();
8888
if (!player) return Local<Value>();
8989
return PlayerClass::newPlayer(static_cast<Player*>(player));
9090
}
@@ -93,7 +93,7 @@ Local<Value> CommandOriginClass::getPlayer() {
9393

9494
Local<Value> CommandOriginClass::getNbt(const Arguments&) {
9595
try {
96-
return NbtCompoundClass::pack(std::make_unique<CompoundTag>(get()->serialize()));
96+
return NbtCompoundClass::pack(std::make_unique<CompoundTag>(get().serialize()));
9797
}
9898
CATCH("Fail in getNbt!");
9999
}

src/legacy/api/CommandOriginAPI.h

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,18 @@ extern ClassDefine<CommandOriginClass> CommandOriginClassBuilder;
88

99
class CommandOriginClass : public ScriptClass {
1010
public:
11-
std::shared_ptr<CommandOrigin> ptr;
12-
inline CommandOrigin* get() { return ptr.get(); }
11+
CommandOrigin const& origin;
12+
inline CommandOrigin const& get() { return origin; }
1313

1414
public:
15-
CommandOriginClass(std::shared_ptr<CommandOrigin> p);
16-
static std::shared_ptr<CommandOrigin> extract(Local<Value> v);
17-
Local<Value> getOriginType();
18-
Local<Value> getOriginTypeName();
19-
Local<Value> getOriginName();
20-
Local<Value> getBlockPosition();
21-
Local<Value> getPosition();
22-
Local<Value> getEntity();
23-
Local<Value> getPlayer();
24-
Local<Value> getNbt(const Arguments& args);
25-
Local<Value> toString();
15+
CommandOriginClass(CommandOrigin const& ori);
16+
Local<Value> getOriginType();
17+
Local<Value> getOriginTypeName();
18+
Local<Value> getOriginName();
19+
Local<Value> getBlockPosition();
20+
Local<Value> getPosition();
21+
Local<Value> getEntity();
22+
Local<Value> getPlayer();
23+
Local<Value> getNbt(const Arguments& args);
24+
Local<Value> toString();
2625
};

src/legacy/api/CommandOutputAPI.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,22 @@ ClassDefine<CommandOutputClass> CommandOutputClassBuilder =
2424

2525
//////////////////// APIs ////////////////////
2626

27-
CommandOutputClass::CommandOutputClass(std::shared_ptr<CommandOutput> out, std::shared_ptr<CommandOrigin> ori)
27+
CommandOutputClass::CommandOutputClass(CommandOutput& out, CommandOrigin const& ori)
2828
: ScriptClass(ScriptClass::ConstructFromCpp<CommandOutputClass>{}),
29-
output(std::move(out)),
30-
origin(std::move(ori)),
29+
output(out),
30+
origin(ori),
3131
isAsync(false) {};
3232

3333
Local<Value> CommandOutputClass::empty() {
3434
try {
35-
return Boolean::newBoolean(get()->mMessages.empty());
35+
return Boolean::newBoolean(get().mMessages.empty());
3636
}
3737
CATCH("Fail in empty!");
3838
}
3939

4040
Local<Value> CommandOutputClass::getSuccessCount() {
4141
try {
42-
return Number::newNumber(get()->mSuccessCount);
42+
return Number::newNumber(get().mSuccessCount);
4343
}
4444
CATCH("Fail in getSuccessCount!");
4545
};
@@ -56,7 +56,7 @@ Local<Value> CommandOutputClass::getSuccessCount() {
5656
Local<Value> CommandOutputClass::success(const Arguments& args) {
5757
try {
5858
if (args.size() == 0) {
59-
++get()->mSuccessCount;
59+
++get().mSuccessCount;
6060
return Boolean::newBoolean(true);
6161
}
6262
CHECK_ARG_TYPE(args[0], ValueKind::kString);
@@ -68,11 +68,11 @@ Local<Value> CommandOutputClass::success(const Arguments& args) {
6868
for (int i = 0; i < paramArr.size(); ++i) {
6969
param.push_back(CommandOutputParameter(paramArr.get(i).asString().toString().c_str()));
7070
}
71-
get()->success(msg, param);
71+
get().success(msg, param);
7272
send();
7373
return Boolean::newBoolean(true);
7474
}
75-
get()->success(msg);
75+
get().success(msg);
7676
send();
7777
return Boolean::newBoolean(true);
7878
}
@@ -92,15 +92,15 @@ Local<Value> CommandOutputClass::addMessage(const Arguments& args) {
9292
}
9393
if (args.size() >= 3) {
9494
CHECK_ARG_TYPE(args[2], ValueKind::kNumber);
95-
get()->addMessage(msg, param, (CommandOutputMessageType)args[2].asNumber().toInt32());
95+
get().addMessage(msg, param, (CommandOutputMessageType)args[2].asNumber().toInt32());
9696
send();
9797
return Boolean::newBoolean(true);
9898
}
99-
get()->addMessage(msg, param, (CommandOutputMessageType)0);
99+
get().addMessage(msg, param, (CommandOutputMessageType)0);
100100
send();
101101
return Boolean::newBoolean(true);
102102
}
103-
get()->addMessage(msg, {}, CommandOutputMessageType::Success);
103+
get().addMessage(msg, {}, CommandOutputMessageType::Success);
104104
send();
105105
return Boolean::newBoolean(true);
106106
}
@@ -119,11 +119,11 @@ Local<Value> CommandOutputClass::error(const Arguments& args) {
119119
for (int i = 0; i < paramArr.size(); ++i) {
120120
param.push_back(CommandOutputParameter(paramArr.get(i).asString().toString().c_str()));
121121
}
122-
get()->error(msg, param);
122+
get().error(msg, param);
123123
send();
124124
return Boolean::newBoolean(true);
125125
}
126-
get()->error(msg);
126+
get().error(msg);
127127
send();
128128
return Boolean::newBoolean(true);
129129
}
@@ -133,9 +133,9 @@ Local<Value> CommandOutputClass::error(const Arguments& args) {
133133
void CommandOutputClass::send() {
134134
try {
135135
if (!isAsync) return;
136-
ll::service::getMinecraft()->mCommands->handleOutput(*origin, *output);
137-
output->mSuccessCount = 0;
138-
output->mMessages.clear();
136+
ll::service::getMinecraft()->mCommands->handleOutput(origin, output);
137+
output.mSuccessCount = 0;
138+
output.mMessages.clear();
139139
}
140140
CATCH_WITHOUT_RETURN("Fail in sendCommandOutput!");
141141
}

src/legacy/api/CommandOutputAPI.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ extern ClassDefine<CommandOutputClass> CommandOutputClassBuilder;
77

88
class CommandOutputClass : public ScriptClass {
99
public:
10-
std::shared_ptr<CommandOutput> output;
11-
std::shared_ptr<CommandOrigin> origin;
12-
bool isAsync;
13-
inline CommandOutput* get() { return output.get(); }
10+
CommandOutput& output;
11+
CommandOrigin const& origin;
12+
bool isAsync;
13+
inline CommandOutput& get() { return output; }
1414

1515
public:
16-
CommandOutputClass(std::shared_ptr<CommandOutput> output, std::shared_ptr<CommandOrigin> origin = {});
16+
CommandOutputClass(CommandOutput& output, CommandOrigin const& origin);
1717

1818
Local<Value> empty();
1919

0 commit comments

Comments
 (0)