148 lines
4.9 KiB
Java
148 lines
4.9 KiB
Java
package com.boydti.fawe.nukkit.core.gui;
|
|
|
|
import cn.nukkit.Player;
|
|
import cn.nukkit.form.element.Element;
|
|
import cn.nukkit.form.element.ElementButton;
|
|
import cn.nukkit.form.element.ElementButtonImageData;
|
|
import cn.nukkit.form.element.ElementDropdown;
|
|
import cn.nukkit.form.element.ElementInput;
|
|
import cn.nukkit.form.element.ElementLabel;
|
|
import cn.nukkit.form.element.ElementSlider;
|
|
import cn.nukkit.form.element.ElementStepSlider;
|
|
import cn.nukkit.form.element.ElementToggle;
|
|
import cn.nukkit.form.window.FormWindow;
|
|
import cn.nukkit.form.window.FormWindowCustom;
|
|
import cn.nukkit.form.window.FormWindowSimple;
|
|
import com.boydti.fawe.object.FawePlayer;
|
|
import com.boydti.fawe.util.gui.FormBuilder;
|
|
import java.net.URL;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.function.Consumer;
|
|
|
|
|
|
import static com.google.common.base.Preconditions.checkNotNull;
|
|
|
|
public class NukkitFormBuilder implements FormBuilder<Player> {
|
|
private final List<Element> elements;
|
|
private final List<ElementButton> buttons;
|
|
private String title = "";
|
|
private String icon;
|
|
|
|
public NukkitFormBuilder() {
|
|
this.elements = new ArrayList<>();
|
|
this.buttons = new ArrayList<>();
|
|
}
|
|
|
|
@Override
|
|
public FormBuilder setTitle(String text) {
|
|
checkNotNull(text);
|
|
this.title = text;
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public FormBuilder setIcon(URL icon) {
|
|
checkNotNull(icon);
|
|
this.icon = icon.toString();
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public FormBuilder addButton(String text, URL image) {
|
|
checkNotNull(text);
|
|
if (!elements.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
|
ElementButton button;
|
|
if (image != null) {
|
|
ElementButtonImageData imageData = new ElementButtonImageData("url", image.toString());
|
|
button = new ElementButton(text, imageData);
|
|
} else {
|
|
button = new ElementButton(text);
|
|
}
|
|
buttons.add(button);
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public FormBuilder addDropdown(String text, int def, String... options) {
|
|
checkNotNull(text);
|
|
checkNotNull(options);
|
|
for (String option : options) checkNotNull(option);
|
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
|
|
|
elements.add(new ElementDropdown(text, Arrays.asList(options), def));
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public FormBuilder addInput(String text, String placeholder, String def) {
|
|
checkNotNull(text);
|
|
checkNotNull(placeholder);
|
|
checkNotNull(def);
|
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
|
|
|
elements.add(new ElementInput(text, placeholder, def));
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public FormBuilder addLabel(String text) {
|
|
checkNotNull(text);
|
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
|
|
|
elements.add(new ElementLabel(text));
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public FormBuilder addSlider(String text, double min, double max, int step, double def) {
|
|
checkNotNull(text);
|
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
|
|
|
elements.add(new ElementSlider(text, (float) min, (float) max, step, (float) def));
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public FormBuilder addStepSlider(String text, int def, String... options) {
|
|
checkNotNull(text);
|
|
checkNotNull(options);
|
|
for (String option : options) checkNotNull(option);
|
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
|
|
|
elements.add(new ElementStepSlider(text, Arrays.asList(options), def));
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public FormBuilder addToggle(String text, boolean def) {
|
|
checkNotNull(text);
|
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
|
|
|
elements.add(new ElementToggle(text, def));
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public void display(FawePlayer<Player> fp, Consumer<List<String>> response) {
|
|
FormWindow window;
|
|
if (buttons.isEmpty()) {
|
|
if (icon == null) {
|
|
window = new FormWindowCustom("Title", elements);
|
|
} else {
|
|
window = new FormWindowCustom("Title", elements, icon);
|
|
}
|
|
} else {
|
|
window = new FormWindowSimple("Title", "", buttons);
|
|
}
|
|
|
|
if (response != null) {
|
|
window = new ResponseFormWindow(window, response);
|
|
}
|
|
|
|
Player player = fp.parent;
|
|
player.showFormWindow(window);
|
|
}
|
|
}
|