Skip to content

Commit 3ca422e

Browse files
committed
remove LegacyParticleAPI
1 parent c7869b6 commit 3ca422e

File tree

5 files changed

+108
-237
lines changed

5 files changed

+108
-237
lines changed

manifest.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@
99
{
1010
"name": "LegacyMoney"
1111
},
12-
{
13-
"name": "LegacyParticleAPI"
14-
},
1512
{
1613
"name": "LegacyRemoteCall"
1714
}

src/legacy/api/ParticleAPI.cpp

Lines changed: 39 additions & 218 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,15 @@
44
#include "ParticleAPI.h"
55

66
#include "McAPI.h"
7+
#include "ll/api/service/Bedrock.h"
78
#include "mc/deps/core/math/Color.h"
9+
#include "mc/network/packet/SpawnParticleEffectPacket.h"
10+
#include "mc/util/MolangVariable.h"
11+
#include "mc/util/MolangVariableMap.h"
12+
#include "mc/world/actor/player/Player.h"
13+
#include "mc/world/level/Level.h"
14+
#include "mc/world/level/dimension/Dimension.h"
15+
#include "mc/world/phys/AABB.h"
816

917
#define GETVEC3(v, d, u) \
1018
if (IsInstanceOf<IntPos>(u)) { \
@@ -28,58 +36,58 @@ std::string fto_string(const T a_value) {
2836
out << a_value;
2937
return out.str();
3038
}
31-
ParticleCUI::ColorPalette getColorType(std::string s) {
39+
ParticleSpawner::ColorPalette getColorType(std::string s) {
3240
switch (s[0]) {
3341
case 'B':
34-
return ParticleCUI::ColorPalette::BLACK;
42+
return ParticleSpawner::ColorPalette::BLACK;
3543
break;
3644
case 'I':
37-
return ParticleCUI::ColorPalette::INDIGO;
45+
return ParticleSpawner::ColorPalette::INDIGO;
3846
break;
3947
case 'L':
40-
return ParticleCUI::ColorPalette::LAVENDER;
48+
return ParticleSpawner::ColorPalette::LAVENDER;
4149
break;
4250
case 'T':
43-
return ParticleCUI::ColorPalette::TEAL;
51+
return ParticleSpawner::ColorPalette::TEAL;
4452
break;
4553
case 'C':
46-
return ParticleCUI::ColorPalette::COCOA;
54+
return ParticleSpawner::ColorPalette::COCOA;
4755
break;
4856
case 'D':
49-
return ParticleCUI::ColorPalette::DARK;
57+
return ParticleSpawner::ColorPalette::DARK;
5058
break;
5159
case 'O':
52-
return ParticleCUI::ColorPalette::OATMEAL;
60+
return ParticleSpawner::ColorPalette::OATMEAL;
5361
break;
5462
case 'W':
55-
return ParticleCUI::ColorPalette::WHITE;
63+
return ParticleSpawner::ColorPalette::WHITE;
5664
break;
5765
case 'R':
58-
return ParticleCUI::ColorPalette::RED;
66+
return ParticleSpawner::ColorPalette::RED;
5967
break;
6068
case 'A':
61-
return ParticleCUI::ColorPalette::APRICOT;
69+
return ParticleSpawner::ColorPalette::APRICOT;
6270
break;
6371
case 'Y':
64-
return ParticleCUI::ColorPalette::YELLOW;
72+
return ParticleSpawner::ColorPalette::YELLOW;
6573
break;
6674
case 'G':
67-
return ParticleCUI::ColorPalette::GREEN;
75+
return ParticleSpawner::ColorPalette::GREEN;
6876
break;
6977
case 'V':
70-
return ParticleCUI::ColorPalette::VATBLUE;
78+
return ParticleSpawner::ColorPalette::VATBLUE;
7179
break;
7280
case 'S':
73-
return ParticleCUI::ColorPalette::SLATE;
81+
return ParticleSpawner::ColorPalette::SLATE;
7482
break;
7583
case 'P':
76-
return ParticleCUI::ColorPalette::PINK;
84+
return ParticleSpawner::ColorPalette::PINK;
7785
break;
7886
case 'F':
79-
return ParticleCUI::ColorPalette::FAWN;
87+
return ParticleSpawner::ColorPalette::FAWN;
8088
break;
8189
default:
82-
return ParticleCUI::ColorPalette::WHITE;
90+
return ParticleSpawner::ColorPalette::WHITE;
8391
break;
8492
}
8593
}
@@ -89,9 +97,6 @@ ParticleSpawner* ParticleSpawner::create(const Arguments& args) {
8997
if (args.size() < 3) return nullptr;
9098
try {
9199
ParticleSpawner* p = new ParticleSpawner(args.thiz());
92-
p->displayRadius = args[0].asNumber().toInt64();
93-
p->highDetial = args[1].asBoolean().value();
94-
p->doubleSide = args[2].asBoolean().value();
95100
return p;
96101
} catch (...) {
97102
return nullptr;
@@ -126,207 +131,23 @@ Local<Value> ParticleSpawner::spawnParticle(const Arguments& args) {
126131
GETVEC3(pos, dimId, args[0])
127132
CHECK_ARG_TYPE(args[1], ValueKind::kString);
128133
particleName = args[1].asString().toString();
129-
ParticleCUI::spawnParticle(pos, particleName, dimId);
130-
return Boolean::newBoolean(true);
131-
}
132-
Local<Value> ParticleSpawner::drawPoint(const Arguments& args) {
133-
CHECK_ARGS_COUNT(args, 1);
134-
Vec3 pos;
135-
int dimId;
136-
GETVEC3(pos, dimId, args[0])
137-
auto pointSize = ParticleCUI::PointSize::PX4;
138-
139-
if (args.size() > 1) {
140-
CHECK_ARG_TYPE(args[1], ValueKind::kNumber);
141-
pointSize = static_cast<ParticleCUI::PointSize>(args[1].asNumber().toInt32());
134+
auto dim = ll::service::getLevel()->getDimension(dimId).lock();
135+
if (dim) {
136+
dim->forEachPlayer([&](Player& player) {
137+
SpawnParticleEffectPacket pkt(pos, particleName, dimId, std::nullopt);
138+
player.sendNetworkPacket(pkt);
139+
return true;
140+
});
142141
}
143-
std::string color = "W";
144-
if (args.size() > 2) {
145-
CHECK_ARG_TYPE(args[2], ValueKind::kString);
146-
color = args[2].asString().toString();
147-
}
148-
ParticleCUI::drawPoint(pos, dimId, pointSize, getColorType(color));
149142
return Boolean::newBoolean(true);
150143
}
144+
Local<Value> ParticleSpawner::drawPoint(const Arguments& args) { return Boolean::newBoolean(true); }
151145

152-
Local<Value> ParticleSpawner::drawNumber(const Arguments& args) {
153-
CHECK_ARGS_COUNT(args, 2);
154-
Vec3 pos;
155-
int dimId;
156-
GETVEC3(pos, dimId, args[0])
157-
std::string numName;
158-
std::string color = "W";
159-
if (args.size() > 2) {
160-
CHECK_ARG_TYPE(args[2], ValueKind::kString);
161-
color = args[2].asString().toString();
162-
}
163-
if (args[1].getKind() == ValueKind::kNumber) {
164-
numName = std::to_string(args[1].asNumber().toInt64());
165-
} else if (args[1].getKind() == ValueKind::kString) {
166-
numName = args[1].asString().toString();
167-
} else {
168-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
169-
return Local<Value>();
170-
}
171-
ParticleCUI::spawnParticle(pos, std::string("ll:num") + numName + color, dimId);
172-
return Boolean::newBoolean(true);
173-
}
174-
Local<Value> ParticleSpawner::drawAxialLine(const Arguments& args) {
175-
CHECK_ARGS_COUNT(args, 3);
176-
Vec3 pos;
177-
int dimId;
178-
ParticleCUI::Direction direction;
179-
double length;
180-
GETVEC3(pos, dimId, args[0])
181-
CHECK_ARG_TYPE(args[1], ValueKind::kNumber);
182-
direction = static_cast<ParticleCUI::Direction>(args[1].asNumber().toInt32());
183-
CHECK_ARG_TYPE(args[2], ValueKind::kNumber);
184-
length = args[2].asNumber().toDouble();
185-
std::string color = "W";
186-
if (args.size() > 3) {
187-
CHECK_ARG_TYPE(args[3], ValueKind::kString);
188-
color = args[3].asString().toString();
189-
}
190-
ParticleCUI::drawAxialLine(pos, direction, length, dimId, getColorType(color));
191-
return Boolean::newBoolean(true);
192-
}
193-
Local<Value> ParticleSpawner::drawOrientedLine(const Arguments& args) {
194-
auto size = args.size();
195-
CHECK_ARGS_COUNT(args, 2);
196-
Vec3 start;
197-
Vec3 end;
198-
int dimId1;
199-
int dimId2;
200-
auto lineWidth = ParticleCUI::PointSize::PX4;
201-
double minSpacing = 1;
202-
int maxParticlesNum = 64;
203-
GETVEC3(start, dimId1, args[0])
204-
GETVEC3(end, dimId2, args[1])
205-
if (dimId1 != dimId2) {
206-
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, "Pos should in the same dimension!");
207-
return Local<Value>();
208-
}
209-
210-
if (size > 2) {
211-
CHECK_ARG_TYPE(args[2], ValueKind::kNumber);
212-
lineWidth = static_cast<ParticleCUI::PointSize>(args[2].asNumber().toInt32());
213-
}
214-
215-
if (size > 3) {
216-
CHECK_ARG_TYPE(args[3], ValueKind::kNumber);
217-
minSpacing = args[3].asNumber().toDouble();
218-
}
219-
220-
if (size > 4) {
221-
CHECK_ARG_TYPE(args[4], ValueKind::kNumber);
222-
maxParticlesNum = args[4].asNumber().toInt32();
223-
}
224-
225-
std::string color = "W";
226-
if (args.size() > 5) {
227-
CHECK_ARG_TYPE(args[5], ValueKind::kString);
228-
color = args[5].asString().toString();
229-
}
230-
231-
ParticleCUI::drawOrientedLine(start, end, dimId1, lineWidth, minSpacing, maxParticlesNum, getColorType(color));
232-
233-
return Boolean::newBoolean(true);
234-
}
235-
Local<Value> ParticleSpawner::drawCuboid(const Arguments& args) {
236-
auto size = args.size();
237-
CHECK_ARGS_COUNT(args, 1);
238-
Vec3 min;
239-
Vec3 max;
240-
int dimId1;
241-
int dimId2 = -1;
242-
std::string color = "W";
243-
244-
if (IsInstanceOf<IntPos>(args[0])) {
245-
auto pos2 = EngineScope::currentEngine()->getNativeInstance<IntPos>(args[0]);
246-
min = Vec3(pos2->x, pos2->y, pos2->z);
247-
dimId1 = pos2->dim;
248-
} else if (IsInstanceOf<FloatPos>(args[0])) {
249-
auto pos2 = EngineScope::currentEngine()->getNativeInstance<FloatPos>(args[0]);
250-
min = Vec3(pos2->x, pos2->y, pos2->z);
251-
dimId1 = pos2->dim;
252-
} else {
253-
LOG_WRONG_ARG_TYPE(__FUNCTION__);
254-
return Local<Value>();
255-
}
256-
if (size > 1) {
257-
if (IsInstanceOf<IntPos>(args[1])) {
258-
auto pos2 = EngineScope::currentEngine()->getNativeInstance<IntPos>(args[1]);
259-
max = Vec3(pos2->x, pos2->y, pos2->z) + 1;
260-
dimId2 = pos2->dim;
261-
} else if (IsInstanceOf<FloatPos>(args[1])) {
262-
auto pos2 = EngineScope::currentEngine()->getNativeInstance<FloatPos>(args[1]);
263-
max = Vec3(pos2->x, pos2->y, pos2->z);
264-
dimId2 = pos2->dim;
265-
} else {
266-
max = min + 1;
267-
CHECK_ARG_TYPE(args[1], ValueKind::kString);
268-
color = args[1].asString().toString();
269-
}
270-
} else {
271-
max = min + 1;
272-
}
273-
274-
if (dimId2 != -1 && dimId1 != dimId2) {
275-
LOG_ERROR_WITH_SCRIPT_INFO(__FUNCTION__, "Pos should in the same dimension!");
276-
return Local<Value>();
277-
}
278-
279-
if (size > 2) {
280-
CHECK_ARG_TYPE(args[2], ValueKind::kString);
281-
color = args[2].asString().toString();
282-
}
283-
284-
ParticleCUI::drawCuboid(AABB(min, max), dimId1, getColorType(color));
285-
286-
return Boolean::newBoolean(true);
287-
}
288-
Local<Value> ParticleSpawner::drawCircle(const Arguments& args) {
289-
auto size = args.size();
290-
CHECK_ARGS_COUNT(args, 3);
291-
Vec3 pos;
292-
int dimId;
293-
ParticleCUI::Direction facing;
294-
double radius;
295-
GETVEC3(pos, dimId, args[0])
296-
CHECK_ARG_TYPE(args[1], ValueKind::kNumber);
297-
facing = static_cast<ParticleCUI::Direction>(args[1].asNumber().toInt32());
298-
CHECK_ARG_TYPE(args[2], ValueKind::kNumber);
299-
radius = args[2].asNumber().toDouble();
300-
301-
auto lineWidth = ParticleCUI::PointSize::PX4;
302-
double minSpacing = 1;
303-
int maxParticlesNum = 64;
304-
305-
if (size > 3) {
306-
CHECK_ARG_TYPE(args[3], ValueKind::kNumber);
307-
lineWidth = static_cast<ParticleCUI::PointSize>(args[3].asNumber().toInt32());
308-
}
309-
310-
if (size > 4) {
311-
CHECK_ARG_TYPE(args[4], ValueKind::kNumber);
312-
minSpacing = args[4].asNumber().toDouble();
313-
}
314-
315-
if (size > 5) {
316-
CHECK_ARG_TYPE(args[5], ValueKind::kNumber);
317-
maxParticlesNum = args[5].asNumber().toInt32();
318-
}
319-
320-
std::string color = "W";
321-
if (args.size() > 6) {
322-
CHECK_ARG_TYPE(args[6], ValueKind::kString);
323-
color = args[6].asString().toString();
324-
}
325-
326-
ParticleCUI::drawCircle(pos, facing, radius, dimId, lineWidth, minSpacing, maxParticlesNum, getColorType(color));
327-
328-
return Boolean::newBoolean(true);
329-
}
146+
Local<Value> ParticleSpawner::drawNumber(const Arguments& args) { return Boolean::newBoolean(true); }
147+
Local<Value> ParticleSpawner::drawAxialLine(const Arguments& args) { return Boolean::newBoolean(true); }
148+
Local<Value> ParticleSpawner::drawOrientedLine(const Arguments& args) { return Boolean::newBoolean(true); }
149+
Local<Value> ParticleSpawner::drawCuboid(const Arguments& args) { return Boolean::newBoolean(true); }
150+
Local<Value> ParticleSpawner::drawCircle(const Arguments& args) { return Boolean::newBoolean(true); }
330151

331152
ClassDefine<ParticleSpawner> ParticleSpawnerBuilder =
332153
defineClass<ParticleSpawner>("ParticleSpawner")

0 commit comments

Comments
 (0)