33#include " api/APIHelp.h"
44#include " api/McAPI.h"
55#include " api/PlayerAPI.h"
6- #include " engine/EngineOwnData.h"
76#include " engine/GlobalShareData.h"
7+ #include " ll/api/form/FormBase.h"
8+ #include " ll/api/form/SimpleForm.h"
89#include " ll/api/service/GamingStatus.h"
9- #include " ll/api/service/ServerInfo.h"
1010#include " mc/world/actor/player/Player.h"
11+ #include " nlohmann/json_fwd.hpp"
1112
12- #include < iostream>
13-
14- using lse::form::FormCancelReason;
13+ using ll::form::FormCancelReason;
1514
1615// ////////////////// Class Definition ////////////////////
1716
@@ -44,33 +43,27 @@ Local<Object> SimpleFormClass::newForm() {
4443 return newp->getScriptObject ();
4544}
4645
47- lse ::form::SimpleForm* SimpleFormClass::extract (Local<Value> v) {
46+ ll ::form::SimpleForm* SimpleFormClass::extract (Local<Value> v) {
4847 if (EngineScope::currentEngine ()->isInstanceOf <SimpleFormClass>(v))
4948 return EngineScope::currentEngine ()->getNativeInstance <SimpleFormClass>(v)->get ();
5049 else return nullptr ;
5150}
5251
53- void SimpleFormClass::sendForm (lse ::form::SimpleForm* form, Player* player, script::Local<Function>& callback) {
52+ void SimpleFormClass::sendForm (ll ::form::SimpleForm* form, Player* player, script::Local<Function>& callback) {
5453 script::Global<Function> callbackFunc{callback};
55-
5654 form->sendTo (
57- player,
55+ * player,
5856 [engine{EngineScope::currentEngine ()},
59- callback{std::move (callbackFunc)}](Player* pl, int chosen, FormCancelReason reason) {
57+ callback{std::move (callbackFunc)}](Player& pl, int chosen, FormCancelReason reason) {
6058 if ((ll::getGamingStatus () != ll::GamingStatus::Running)) return ;
6159 if (!EngineManager::isValid (engine)) return ;
6260 if (callback.isEmpty ()) return ;
6361
6462 EngineScope scope (engine);
6563 try {
66- if (chosen < 0 ) callback.get ().call ({}, PlayerClass::newPlayer (pl), Local<Value>());
67- else
68- callback.get ().call (
69- {},
70- PlayerClass::newPlayer (pl),
71- Number::newNumber (chosen),
72- reason.has_value () ? Number::newNumber ((uchar)reason.value ()) : Local<Value>()
73- );
64+ auto reasonValue = reason.has_value () ? Number::newNumber ((uchar)reason.value ()) : Local<Value>();
65+ if (chosen < 0 ) callback.get ().call ({}, PlayerClass::newPlayer (&pl), reasonValue);
66+ else callback.get ().call ({}, PlayerClass::newPlayer (&pl), Number::newNumber (chosen), reasonValue);
7467 }
7568 CATCH_IN_CALLBACK (" sendForm" )
7669 }
@@ -107,7 +100,8 @@ Local<Value> SimpleFormClass::addButton(const Arguments& args) {
107100
108101 try {
109102 std::string image = args.size () >= 2 ? args[1 ].asString ().toString () : " " ;
110- form.addButton (args[0 ].asString ().toString (), image);
103+ std::string type = image.starts_with (" http" ) ? " url" : " path" ;
104+ form.appendButton (args[0 ].asString ().toString (), image, type);
111105 return this ->getScriptObject ();
112106 }
113107 CATCH (" Fail in addButton!" )
@@ -123,32 +117,32 @@ Local<Object> CustomFormClass::newForm() {
123117 return newp->getScriptObject ();
124118}
125119
126- lse::form::CustomForm * CustomFormClass::extract (Local<Value> v) {
120+ lse::form::CustomFormWrapper * CustomFormClass::extract (Local<Value> v) {
127121 if (EngineScope::currentEngine ()->isInstanceOf <CustomFormClass>(v))
128122 return EngineScope::currentEngine ()->getNativeInstance <CustomFormClass>(v)->get ();
129123 else return nullptr ;
130124}
131125
132126// 成员函数
133- void CustomFormClass::sendForm (lse::form::CustomForm * form, Player* player, script::Local<Function>& callback) {
127+ void CustomFormClass::sendForm (lse::form::CustomFormWrapper * form, Player* player, script::Local<Function>& callback) {
134128 script::Global<Function> callbackFunc{callback};
135-
136- form->sendToForRawJson (
137- player,
129+ form->sendTo (
130+ *player,
138131 [engine{EngineScope::currentEngine ()},
139- callback{std::move (callbackFunc)}](Player* player, std::string data, FormCancelReason reason) {
132+ callback{std::move (callbackFunc)
133+ }](Player& player, lse::form::CustomFormResult const & data, FormCancelReason reason) {
140134 if (ll::getGamingStatus () != ll::GamingStatus::Running) return ;
141135 if (!EngineManager::isValid (engine)) return ;
142136 if (callback.isEmpty ()) return ;
143137
144- EngineScope scope (engine);
138+ EngineScope scope (engine);
139+ Local<Value> result;
140+ if (data) {
141+ result = JsonToValue (*data);
142+ }
143+ auto reasonVal = reason.has_value () ? Number::newNumber ((uchar)reason.value ()) : Local<Value>();
145144 try {
146- callback.get ().call (
147- {},
148- PlayerClass::newPlayer (player),
149- JsonToValue (data),
150- reason.has_value () ? Number::newNumber ((uchar)reason.value ()) : Local<Value>()
151- );
145+ callback.get ().call ({}, PlayerClass::newPlayer (&player), result, reasonVal);
152146 }
153147 CATCH_IN_CALLBACK (" sendForm" )
154148 }
@@ -171,7 +165,7 @@ Local<Value> CustomFormClass::addLabel(const Arguments& args) {
171165 CHECK_ARG_TYPE (args[0 ], ValueKind::kString )
172166
173167 try {
174- form.addLabel (args[ 0 ]. asString (). toString (), args[0 ].asString ().toString ());
168+ form.appendLabel ( args[0 ].asString ().toString ());
175169 return this ->getScriptObject ();
176170 }
177171 CATCH (" Fail in addLabel!" )
@@ -187,7 +181,7 @@ Local<Value> CustomFormClass::addInput(const Arguments& args) {
187181 std::string placeholder = args.size () >= 2 ? args[1 ].asString ().toString () : " " ;
188182 std::string def = args.size () >= 3 ? args[2 ].asString ().toString () : " " ;
189183
190- form.addInput (args[ 0 ]. asString (). toString (), args[0 ].asString ().toString (), placeholder, def);
184+ form.appendInput ( args[0 ].asString ().toString (), placeholder, def);
191185 return this ->getScriptObject ();
192186 }
193187 CATCH (" Fail in addInput!" )
@@ -207,7 +201,7 @@ Local<Value> CustomFormClass::addSwitch(const Arguments& args) {
207201 bool def =
208202 args.size () >= 2 ? args[1 ].isBoolean () ? args[1 ].asBoolean ().value () : args[1 ].asNumber ().toInt32 () : false ;
209203
210- form.addToggle (args[ 0 ]. asString (). toString (), args[0 ].asString ().toString (), def);
204+ form.appendToggle ( args[0 ].asString ().toString (), def);
211205 return this ->getScriptObject ();
212206 }
213207 CATCH (" Fail in addSwitch!" )
@@ -222,11 +216,14 @@ Local<Value> CustomFormClass::addDropdown(const Arguments& args) {
222216 try {
223217 auto optionsArr = args[1 ].asArray ();
224218 std::vector<std::string> options;
225- for (int i = 0 ; i < optionsArr.size (); ++i) options.push_back (optionsArr.get (i).asString ().toString ());
219+ options.reserve (optionsArr.size ());
220+ for (size_t i = 0 ; i < optionsArr.size (); ++i) {
221+ options.emplace_back (optionsArr.get (i).asString ().toString ());
222+ }
226223
227224 int def = args.size () >= 3 ? args[2 ].asNumber ().toInt32 () : 0 ;
228225
229- form.addDropdown (args[ 0 ]. asString (). toString (), args[0 ].asString ().toString (), options, def);
226+ form.appendDropdown ( args[0 ].asString ().toString (), options, def);
230227 return this ->getScriptObject ();
231228 }
232229 CATCH (" Fail in addDropdown!" )
@@ -249,8 +246,8 @@ Local<Value> CustomFormClass::addSlider(const Arguments& args) {
249246 int defValue = args.size () >= 5 ? args[4 ].asNumber ().toInt32 () : minValue;
250247 if (defValue < minValue || defValue > maxValue) defValue = minValue;
251248
252- form.addSlider (
253- args[ 0 ]. asString (). toString (),
249+ form.appendSlider (
250+
254251 args[0 ].asString ().toString (),
255252 minValue,
256253 maxValue,
@@ -271,11 +268,12 @@ Local<Value> CustomFormClass::addStepSlider(const Arguments& args) {
271268 try {
272269 auto stepsArr = args[1 ].asArray ();
273270 std::vector<std::string> steps;
274- for (int i = 0 ; i < stepsArr.size (); ++i) steps.push_back (stepsArr.get (i).asString ().toString ());
271+ steps.reserve (stepsArr.size ());
272+ for (size_t i = 0 ; i < stepsArr.size (); ++i) steps.push_back (stepsArr.get (i).asString ().toString ());
275273
276274 int defIndex = args.size () >= 3 ? args[2 ].asNumber ().toInt32 () : 0 ;
277275
278- form.addStepSlider (args[ 0 ]. asString (). toString (), args[0 ].asString ().toString (), steps, defIndex);
276+ form.appendStepSlider ( args[0 ].asString ().toString (), steps, defIndex);
279277 return this ->getScriptObject ();
280278 }
281279 CATCH (" Fail in addStepSlider!" )
0 commit comments