diff --git a/src/api/form/ActionFormAPI.cc b/src/api/form/ActionFormAPI.cc index 0ae68335..8194f608 100644 --- a/src/api/form/ActionFormAPI.cc +++ b/src/api/form/ActionFormAPI.cc @@ -44,7 +44,7 @@ Local ActionFormAPI::toString(Arguments const& /* args */) { Local ActionFormAPI::getContent(Arguments const& /* args */) { try { - return detail::ConvertVariantToScriptX(get().getContent()); + return ConvertToScript(get().getContent()); } Catch; } @@ -52,40 +52,24 @@ Local ActionFormAPI::getContent(Arguments const& /* args */) { Local ActionFormAPI::setContent(Arguments const& args) { CheckArgsCount(args, 1); try { - // if (args[0].isString()) { - // mActionForm.setContent(ConvertToCpp(args[0])); - // } else if (args[0].isObject() && IsInstanceOf(args[0])) { - // mActionForm.setContent(GetScriptClass(TranslatableAPI, args[0])->get()); - // } else { - // throw script::Exception(ERR_WRONG_ARG_TYPE); - // } mActionForm.setContent(ConvertToCpp(args[0])); return args.thiz(); } Catch; } -endstone::Message ArgHelper(Local const& arg) { - if (arg.isString()) { - return ConvertToCpp(arg); - } else if (arg.isObject() && IsInstanceOf(arg)) { - return GetScriptClass(TranslatableAPI, arg)->get(); - } else { - throw script::Exception(ERR_WRONG_ARG_TYPE); - } -} Local ActionFormAPI::addButton(Arguments const& args) { CheckArgsCount(args, 1); // 最少 1 个参数 try { - auto val = ArgHelper(args[0]); + auto val = ConvertToCpp(args[0]); if (args.size() == 1) { - mActionForm.addButton(std::move(val)); + mActionForm.addButton(val); } else if (args.size() == 2) { - mActionForm.addButton(std::move(val), ConvertToCpp(args[1])); + mActionForm.addButton(val, ConvertToCpp(args[1])); } else if (args.size() == 3) { auto ptr = SafeTransfer::make(EngineScope::currentEngine(), script::Global{args[2].asFunction()}); - mActionForm.addButton(std::move(val), ConvertToCpp(args[1]), [ptr](endstone::Player* player) { + mActionForm.addButton(val, ConvertToCpp(args[1]), [ptr](endstone::Player* player) { if (ptr) { EngineScope enter{ptr->mEngine}; try { diff --git a/src/api/form/ActionFormAPI.h b/src/api/form/ActionFormAPI.h index 60e382d6..794a80c5 100644 --- a/src/api/form/ActionFormAPI.h +++ b/src/api/form/ActionFormAPI.h @@ -5,7 +5,6 @@ #include "utils/Using.h" - namespace jse { diff --git a/src/api/form/FormAPI.h b/src/api/form/FormAPI.h index 5efa79a3..bdc6a084 100644 --- a/src/api/form/FormAPI.h +++ b/src/api/form/FormAPI.h @@ -3,6 +3,7 @@ #include "api/PlayerAPI.h" #include "api/lang/TranslatableAPI.h" #include "converter/Convert.h" +#include "endstone/message.h" #include "utils/ResourceSafety.h" #include "utils/Using.h" @@ -11,25 +12,6 @@ namespace jse { -namespace detail { -template -Local ConvertVariantToScriptX(Variant&& val) { - return std::visit( - [](auto&& arg) -> Local { - using T = std::decay_t; - if constexpr (std::is_same_v) { - return ConvertToScript(arg); - } else if constexpr (std::is_same_v) { - return TranslatableAPI::newInstance(arg); - } else { - throw script::Exception("Unsupported variant type"); - } - }, - std::forward(val) - ); -} -} // namespace detail - template class FormAPI { @@ -44,7 +26,6 @@ class FormAPI { public: Local getTitle(Arguments const& /* args */) { try { - // return detail::ConvertVariantToScriptX(mForm.getTitle()); return ConvertToScript(mForm.getTitle()); } Catch; @@ -52,14 +33,9 @@ class FormAPI { Local setTitle(Arguments const& args) { CheckArgsCount(args, 1); + CheckArgTypeOr(args[0], ValueKind::kString, ValueKind::kObject); try { - if (args[0].isString()) { - mForm.setTitle(ConvertToCpp(args[0])); - } else if (args[0].isObject() && IsInstanceOf(args[0])) { - mForm.setTitle(GetScriptClass(TranslatableAPI, args[0])->get()); - } else { - throw script::Exception(ERR_WRONG_ARG_TYPE); - } + mForm.setTitle(ConvertToCpp(args[0])); return args.thiz(); } CatchAndThrow; diff --git a/src/api/form/MessageFormAPI.cc b/src/api/form/MessageFormAPI.cc index db758d91..3ed9b658 100644 --- a/src/api/form/MessageFormAPI.cc +++ b/src/api/form/MessageFormAPI.cc @@ -4,6 +4,7 @@ #include "api/form/FormAPI.h" #include "converter/Convert.h" #include "endstone/endstone.h" +#include "endstone/message.h" #include "utils/ResourceSafety.h" #include "utils/Using.h" #include @@ -40,7 +41,7 @@ Local MessageFormAPI::toString(Arguments const& /* args */) { Local MessageFormAPI::getContent(Arguments const& /* args */) { try { - return detail::ConvertVariantToScriptX(get().getContent()); + return ConvertToScript(get().getContent()); } Catch; } @@ -48,13 +49,7 @@ Local MessageFormAPI::getContent(Arguments const& /* args */) { Local MessageFormAPI::setContent(Arguments const& args) { CheckArgsCount(args, 1); try { - if (args[0].isString()) { - mMessageForm.setContent(ConvertToCpp(args[0])); - } else if (args[0].isObject() && IsInstanceOf(args[0])) { - mMessageForm.setContent(GetScriptClass(TranslatableAPI, args[0])->get()); - } else { - throw script::Exception(ERR_WRONG_ARG_TYPE); - } + mMessageForm.setContent(ConvertToCpp(args[0])); return args.thiz(); } CatchAndThrow; @@ -62,7 +57,7 @@ Local MessageFormAPI::setContent(Arguments const& args) { Local MessageFormAPI::getButton1(Arguments const& /* args */) { try { - return detail::ConvertVariantToScriptX(get().getButton1()); + return ConvertToScript(get().getButton1()); } Catch; } @@ -70,13 +65,7 @@ Local MessageFormAPI::getButton1(Arguments const& /* args */) { Local MessageFormAPI::setButton1(Arguments const& args) { CheckArgsCount(args, 1); try { - if (args[0].isString()) { - mMessageForm.setButton1(ConvertToCpp(args[0])); - } else if (args[0].isObject() && IsInstanceOf(args[0])) { - mMessageForm.setButton1(GetScriptClass(TranslatableAPI, args[0])->get()); - } else { - throw script::Exception(ERR_WRONG_ARG_TYPE); - } + mMessageForm.setButton1(ConvertToCpp(args[0])); return args.thiz(); } CatchAndThrow; @@ -84,7 +73,7 @@ Local MessageFormAPI::setButton1(Arguments const& args) { Local MessageFormAPI::getButton2(Arguments const& /* args */) { try { - return detail::ConvertVariantToScriptX(get().getButton2()); + return ConvertToScript(get().getButton2()); } Catch; } @@ -92,13 +81,7 @@ Local MessageFormAPI::getButton2(Arguments const& /* args */) { Local MessageFormAPI::setButton2(Arguments const& args) { CheckArgsCount(args, 1); try { - if (args[0].isString()) { - mMessageForm.setButton2(ConvertToCpp(args[0])); - } else if (args[0].isObject() && IsInstanceOf(args[0])) { - mMessageForm.setButton2(GetScriptClass(TranslatableAPI, args[0])->get()); - } else { - throw script::Exception(ERR_WRONG_ARG_TYPE); - } + mMessageForm.setButton2(ConvertToCpp(args[0])); return args.thiz(); } CatchAndThrow; diff --git a/src/api/form/MessageFormAPI.h b/src/api/form/MessageFormAPI.h index 053a34ec..af2715c7 100644 --- a/src/api/form/MessageFormAPI.h +++ b/src/api/form/MessageFormAPI.h @@ -5,7 +5,6 @@ #include "utils/Using.h" - namespace jse { class MessageFormAPI : public FormAPI, public ScriptClass { diff --git a/src/api/form/controls/DropdownAPI.cc b/src/api/form/controls/DropdownAPI.cc index db3be81d..4f517040 100644 --- a/src/api/form/controls/DropdownAPI.cc +++ b/src/api/form/controls/DropdownAPI.cc @@ -35,14 +35,7 @@ DropdownAPI* DropdownAPI::make(Arguments const& args) { defaultIndex = ConvertToCpp(args[2]); } - endstone::Message label; - if (args[0].isString()) { - label = ConvertToCpp(args[0]); - } else if (args[0].isObject() && IsInstanceOf(args[0])) { - label = GetScriptClass(TranslatableAPI, args[0])->get(); - } else { - return nullptr; - } + auto label = ConvertToCpp(args[0]); return new DropdownAPI(args.thiz(), label, ConvertToCpp>(args[1]), defaultIndex); } @@ -57,7 +50,7 @@ Local DropdownAPI::toString(Arguments const& /* args */) { Local DropdownAPI::getLabel(Arguments const& /* args */) { try { - return detail::ConvertVariantToScriptX(get().getLabel()); + return ConvertToScript(get().getLabel()); } Catch; }