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