Skip to content

Commit 80abcae

Browse files
authored
feat: adapt FormAPI to BDS 1.21.80 (#1675)
* fix: adapt FormAPI to BDS 1.21.80 * feat: add tooltip support to CustomForm elements
1 parent b8afa95 commit 80abcae

File tree

5 files changed

+84
-37
lines changed

5 files changed

+84
-37
lines changed

src-server/ll/api/form/CustomForm.cpp

Lines changed: 56 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,14 @@ class Input : public CustomFormElement {
1414
std::string mPlaceholder{};
1515
std::string mDefault{};
1616

17-
Input(std::string name, std::string text, std::string placeholder = {}, std::string defaultVal = {})
18-
: CustomFormElement(std::move(name), std::move(text)),
17+
Input(
18+
std::string name,
19+
std::string text,
20+
std::string placeholder = {},
21+
std::string defaultVal = {},
22+
std::string tooltip = {}
23+
)
24+
: CustomFormElement(std::move(name), std::move(text), std::move(tooltip)),
1925
mPlaceholder(std::move(placeholder)),
2026
mDefault(std::move(defaultVal)) {}
2127
~Input() override = default;
@@ -46,8 +52,8 @@ class Toggle : public CustomFormElement {
4652
public:
4753
bool mDefault = false;
4854

49-
Toggle(std::string name, std::string text, bool defaultVal = false)
50-
: CustomFormElement(std::move(name), std::move(text)),
55+
Toggle(std::string name, std::string text, bool defaultVal = false, std::string tooltip = {})
56+
: CustomFormElement(std::move(name), std::move(text), std::move(tooltip)),
5157
mDefault(defaultVal) {}
5258
~Toggle() override = default;
5359

@@ -73,8 +79,14 @@ class Dropdown : public CustomFormElement {
7379
std::vector<std::string> mOptions{};
7480
size_t mDefault{};
7581

76-
Dropdown(std::string name, std::string text, std::vector<std::string> options, size_t defaultVal = 0)
77-
: CustomFormElement(std::move(name), std::move(text)),
82+
Dropdown(
83+
std::string name,
84+
std::string text,
85+
std::vector<std::string> options,
86+
size_t defaultVal = 0,
87+
std::string tooltip = {}
88+
)
89+
: CustomFormElement(std::move(name), std::move(text), std::move(tooltip)),
7890
mOptions(std::move(options)),
7991
mDefault(defaultVal) {}
8092
~Dropdown() override = default;
@@ -127,8 +139,16 @@ class Slider : public CustomFormElement {
127139
}
128140
}
129141

130-
Slider(std::string name, std::string text, double min, double max, double step, double defaultVal)
131-
: CustomFormElement(std::move(name), std::move(text)),
142+
Slider(
143+
std::string name,
144+
std::string text,
145+
double min,
146+
double max,
147+
double step,
148+
double defaultVal,
149+
std::string tooltip = {}
150+
)
151+
: CustomFormElement(std::move(name), std::move(text), std::move(tooltip)),
132152
mMin(min),
133153
mMax(max),
134154
mStep(step),
@@ -174,8 +194,14 @@ class StepSlider : public CustomFormElement {
174194
}
175195
}
176196

177-
StepSlider(std::string name, std::string text, std::vector<std::string> steps, size_t defaultVal = 0)
178-
: CustomFormElement(std::move(name), std::move(text)),
197+
StepSlider(
198+
std::string name,
199+
std::string text,
200+
std::vector<std::string> steps,
201+
size_t defaultVal = 0,
202+
std::string tooltip = {}
203+
)
204+
: CustomFormElement(std::move(name), std::move(text), std::move(tooltip)),
179205
mSteps(std::move(steps)),
180206
mDefault(defaultVal) {
181207
validate();
@@ -233,12 +259,7 @@ class CustomForm::CustomFormImpl : public FormImpl {
233259
void append(std::shared_ptr<FormElementBase> const& element) { mElements.push_back(element); }
234260

235261
bool sendTo(Player& player, Callback callback, bool update = false) {
236-
std::vector<std::shared_ptr<CustomFormElement>> elements{};
237-
for (auto& element : mElements) {
238-
if (element->getCategory() == FormElementBase::Category::Custom)
239-
elements.push_back(std::reinterpret_pointer_cast<CustomFormElement>(element));
240-
}
241-
auto handler = std::make_unique<handler::CustomFormHandler>(std::move(callback), std::move(elements));
262+
auto handler = std::make_unique<handler::CustomFormHandler>(std::move(callback), mElements);
242263
return sendImpl(player, serialize(), std::move(handler), update);
243264
}
244265

@@ -305,24 +326,31 @@ CustomForm& CustomForm::appendInput(
305326
std::string const& name,
306327
std::string const& text,
307328
std::string const& placeholder,
308-
std::string const& defaultVal
329+
std::string const& defaultVal,
330+
std::string const& tooltip
309331
) {
310-
impl->append(std::make_shared<Input>(name, text, placeholder, defaultVal));
332+
impl->append(std::make_shared<Input>(name, text, placeholder, defaultVal, tooltip));
311333
return *this;
312334
}
313335

314-
CustomForm& CustomForm::appendToggle(std::string const& name, std::string const& text, bool defaultVal) {
315-
impl->append(std::make_shared<Toggle>(name, text, defaultVal));
336+
CustomForm& CustomForm::appendToggle(
337+
std::string const& name,
338+
std::string const& text,
339+
bool defaultVal,
340+
std::string const& tooltip
341+
) {
342+
impl->append(std::make_shared<Toggle>(name, text, defaultVal, tooltip));
316343
return *this;
317344
}
318345

319346
CustomForm& CustomForm::appendDropdown(
320347
std::string const& name,
321348
std::string const& text,
322349
std::vector<std::string> const& options,
323-
size_t defaultVal
350+
size_t defaultVal,
351+
std::string const& tooltip
324352
) {
325-
impl->append(std::make_shared<Dropdown>(name, text, options, defaultVal));
353+
impl->append(std::make_shared<Dropdown>(name, text, options, defaultVal, tooltip));
326354
return *this;
327355
}
328356

@@ -332,19 +360,21 @@ CustomForm& CustomForm::appendSlider(
332360
double min,
333361
double max,
334362
double step,
335-
double defaultVal
363+
double defaultVal,
364+
std::string const& tooltip
336365
) {
337-
impl->append(std::make_shared<Slider>(name, text, min, max, step, defaultVal));
366+
impl->append(std::make_shared<Slider>(name, text, min, max, step, defaultVal, tooltip));
338367
return *this;
339368
}
340369

341370
CustomForm& CustomForm::appendStepSlider(
342371
std::string const& name,
343372
std::string const& text,
344373
std::vector<std::string> const& steps,
345-
size_t defaultVal
374+
size_t defaultVal,
375+
std::string const& tooltip
346376
) {
347-
impl->append(std::make_shared<StepSlider>(name, text, steps, defaultVal));
377+
impl->append(std::make_shared<StepSlider>(name, text, steps, defaultVal, tooltip));
348378
return *this;
349379
}
350380

src-server/ll/api/form/CustomForm.h

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,23 @@ class CustomForm : public Form {
3636
std::string const& name,
3737
std::string const& text,
3838
std::string const& placeholder = {},
39-
std::string const& defaultVal = {}
39+
std::string const& defaultVal = {},
40+
std::string const& tooltip = {}
4041
);
4142

42-
LLAPI CustomForm& appendToggle(std::string const& name, std::string const& text, bool defaultVal = false);
43+
LLAPI CustomForm& appendToggle(
44+
std::string const& name,
45+
std::string const& text,
46+
bool defaultVal = false,
47+
std::string const& tooltip = {}
48+
);
4349

4450
LLAPI CustomForm& appendDropdown(
4551
std::string const& name,
4652
std::string const& text,
4753
std::vector<std::string> const& options,
48-
size_t defaultVal = 0
54+
size_t defaultVal = 0,
55+
std::string const& tooltip = {}
4956
);
5057

5158
LLAPI CustomForm& appendSlider(
@@ -54,14 +61,16 @@ class CustomForm : public Form {
5461
double min,
5562
double max,
5663
double step = 0.0,
57-
double defaultVal = 0.0
64+
double defaultVal = 0.0,
65+
std::string const& tooltip = {}
5866
);
5967

6068
LLAPI CustomForm& appendStepSlider(
6169
std::string const& name,
6270
std::string const& text,
6371
std::vector<std::string> const& steps,
64-
size_t defaultVal = 0
72+
size_t defaultVal = 0,
73+
std::string const& tooltip = {}
6574
);
6675

6776
LLAPI CustomForm& sendTo(Player& player, Callback callback = {});

src-server/ll/core/form/CustomFormElement.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,26 @@ class CustomFormElement : public FormElementBase {
99
public:
1010
std::string mName{};
1111
std::string mText{};
12+
std::string mToolTip{};
1213

1314
[[nodiscard]] Category getCategory() const override { return Category::Custom; }
1415
[[nodiscard]] virtual CustomFormElementResult parseResult(nlohmann::ordered_json const& data) const = 0;
1516

1617
protected:
17-
explicit CustomFormElement(std::string name, std::string text)
18+
explicit CustomFormElement(std::string name, std::string text, std::string tooltip)
1819
: FormElementBase(),
1920
mName(std::move(name)),
20-
mText(std::move(text)) {}
21+
mText(std::move(text)),
22+
mToolTip(std::move(tooltip)) {}
2123
virtual ~CustomFormElement() override = default;
2224

2325
[[nodiscard]] inline nlohmann::ordered_json serialize() const override {
2426
nlohmann::ordered_json data{
2527
{"text", mText}
2628
};
29+
if (!mToolTip.empty()) {
30+
data["tooltip"] = mToolTip;
31+
}
2732
return data;
2833
}
2934
};

src-server/ll/core/form/FormHandler.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,10 @@ void CustomFormHandler::handle(
100100
for (size_t i = 0; i < mFormElements.size(); ++i) {
101101
auto& element = mFormElements[i];
102102
auto& value = dataJson[i];
103-
result->emplace(element->mName, element->parseResult(value));
103+
if (element->getCategory() == FormElementBase::Category::Custom) {
104+
auto& e = reinterpret_cast<CustomFormElement&>(*element);
105+
result->emplace(e.mName, e.parseResult(value));
106+
}
104107
}
105108

106109
if (mCallback) {

src-server/ll/core/form/FormHandler.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include "ll/api/form/FormBase.h"
66
#include "ll/api/form/ModalForm.h"
77
#include "ll/api/form/SimpleForm.h"
8-
#include "ll/core/form/CustomFormElement.h"
8+
#include "ll/core/form/FormElementBase.h"
99
#include "mc/deps/json/Value.h"
1010
#include "mc/network/packet/ModalFormCancelReason.h"
1111
#include "mc/world/actor/player/Player.h"
@@ -43,9 +43,9 @@ class SimpleFormHandler : public FormHandler {
4343
class CustomFormHandler : public FormHandler {
4444
public:
4545
CustomForm::Callback mCallback;
46-
std::vector<std::shared_ptr<CustomFormElement>> mFormElements;
46+
std::vector<std::shared_ptr<FormElementBase>> mFormElements;
4747

48-
CustomFormHandler(CustomForm::Callback callback, std::vector<std::shared_ptr<CustomFormElement>> formElements)
48+
CustomFormHandler(CustomForm::Callback callback, std::vector<std::shared_ptr<FormElementBase>> formElements)
4949
: mCallback(std::move(callback)),
5050
mFormElements(std::move(formElements)) {}
5151

0 commit comments

Comments
 (0)