#3831: Respect vanilla limits in dialogs

This commit is contained in:
Outfluencer 2025-05-25 09:12:37 +10:00 committed by md_5
parent f8de305477
commit fbbcc454d5
No known key found for this signature in database
GPG Key ID: E8E901AC7C617C11
23 changed files with 254 additions and 78 deletions

View File

@ -3,6 +3,7 @@ package net.md_5.bungee.api.dialog;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.dialog.action.DialogClickAction; import net.md_5.bungee.api.dialog.action.DialogClickAction;
@ -19,6 +20,7 @@ import net.md_5.bungee.api.dialog.action.DialogClickAction;
public final class ConfirmationDialog implements Dialog public final class ConfirmationDialog implements Dialog
{ {
@NonNull
@Accessors(fluent = false) @Accessors(fluent = false)
private DialogBase base; private DialogBase base;
/** /**
@ -30,7 +32,7 @@ public final class ConfirmationDialog implements Dialog
*/ */
private DialogClickAction no; private DialogClickAction no;
public ConfirmationDialog(DialogBase base) public ConfirmationDialog(@NonNull DialogBase base)
{ {
this( base, null, null ); this( base, null, null );
} }

View File

@ -4,6 +4,7 @@ import com.google.gson.annotations.SerializedName;
import java.util.List; import java.util.List;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NonNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -22,6 +23,7 @@ public final class DialogBase
/** /**
* The mandatory dialog title. * The mandatory dialog title.
*/ */
@NonNull
private final BaseComponent title; private final BaseComponent title;
/** /**
* The name which is used for any buttons leading to this dialog (eg from a * The name which is used for any buttons leading to this dialog (eg from a
@ -37,5 +39,5 @@ public final class DialogBase
* Whether this dialog can be closed with the escape key (default: true). * Whether this dialog can be closed with the escape key (default: true).
*/ */
@SerializedName("can_close_with_escape") @SerializedName("can_close_with_escape")
private boolean canCloseWithEscape = true; private Boolean canCloseWithEscape;
} }

View File

@ -1,10 +1,12 @@
package net.md_5.bungee.api.dialog; package net.md_5.bungee.api.dialog;
import com.google.common.base.Preconditions;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
@ -19,6 +21,7 @@ import net.md_5.bungee.api.chat.ClickEvent;
public final class DialogListDialog implements Dialog public final class DialogListDialog implements Dialog
{ {
@NonNull
@Accessors(fluent = false) @Accessors(fluent = false)
private DialogBase base; private DialogBase base;
/** /**
@ -33,24 +36,38 @@ public final class DialogListDialog implements Dialog
/** /**
* The number of columns for the dialog buttons (default: 2). * The number of columns for the dialog buttons (default: 2).
*/ */
private int columns; private Integer columns;
/** /**
* The width of the dialog buttons (default: 150, minimum: 1, maximum: 1024). * The width of the dialog buttons (default: 150, minimum: 1, maximum: 1024).
*/ */
@SerializedName("button_width") @SerializedName("button_width")
private int buttonWidth; private Integer buttonWidth;
public DialogListDialog(DialogBase base, Dialog... dialogs) public DialogListDialog(@NonNull DialogBase base, Dialog... dialogs)
{ {
this( base, Arrays.asList( dialogs ), null, 2, 150 ); this( base, Arrays.asList( dialogs ), null, null, null );
} }
public DialogListDialog(DialogBase base, List<Dialog> dialogs, ClickEvent onCancel, int columns, int buttonWidth) public DialogListDialog(@NonNull DialogBase base, List<Dialog> dialogs, ClickEvent onCancel, Integer columns, Integer buttonWidth)
{ {
this.base = base; this.base = base;
this.dialogs = dialogs; this.dialogs = dialogs;
this.onCancel = onCancel; this.onCancel = onCancel;
columns( columns );
buttonWidth( buttonWidth );
}
public DialogListDialog columns(Integer columns)
{
Preconditions.checkArgument( columns == null || columns > 0, "At least one column is required" );
this.columns = columns; this.columns = columns;
return this;
}
public DialogListDialog buttonWidth(Integer buttonWidth)
{
Preconditions.checkArgument( buttonWidth == null || ( buttonWidth >= 1 && buttonWidth <= 1024 ), "buttonWidth must be between 1 and 1024" );
this.buttonWidth = buttonWidth; this.buttonWidth = buttonWidth;
return this;
} }
} }

View File

@ -6,6 +6,7 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
@ -22,34 +23,43 @@ import net.md_5.bungee.api.dialog.action.DialogClickAction;
public final class MultiActionDialog implements Dialog public final class MultiActionDialog implements Dialog
{ {
@NonNull
@Accessors(fluent = false) @Accessors(fluent = false)
private DialogBase base; private DialogBase base;
/** /**
* The action buttons in the dialog. At least one must be provided. * The action buttons in the dialog. At least one must be provided.
*/ */
@NonNull
private List<DialogClickAction> actions; private List<DialogClickAction> actions;
/** /**
* The number of columns for the dialog buttons (default: 2). * The number of columns for the dialog buttons (default: 2).
*/ */
private int columns; private Integer columns;
/** /**
* The {@link ClickEvent} activated when the dialog is cancelled. * The {@link ClickEvent} activated when the dialog is cancelled.
*/ */
@SerializedName("on_cancel") @SerializedName("on_cancel")
private ClickEvent onCancel; private ClickEvent onCancel;
public MultiActionDialog(DialogBase base, DialogClickAction... actions) public MultiActionDialog(@NonNull DialogBase base, @NonNull DialogClickAction... actions)
{ {
this( base, Arrays.asList( actions ), 2, null ); this( base, Arrays.asList( actions ), 2, null );
} }
public MultiActionDialog(DialogBase base, List<DialogClickAction> actions, int columns, ClickEvent onCancel) public MultiActionDialog(@NonNull DialogBase base, @NonNull List<DialogClickAction> actions, Integer columns, ClickEvent onCancel)
{ {
Preconditions.checkArgument( actions != null && !actions.isEmpty(), "At least one action must be provided" ); Preconditions.checkArgument( !actions.isEmpty(), "At least one action must be provided" );
this.base = base; this.base = base;
this.actions = actions; this.actions = actions;
this.columns = columns; columns( columns );
this.onCancel = onCancel; this.onCancel = onCancel;
} }
public MultiActionDialog columns(Integer columns)
{
Preconditions.checkArgument( columns == null || columns > 0, "At least one column is required" );
this.columns = columns;
return this;
}
} }

View File

@ -5,6 +5,7 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.dialog.action.DialogSubmitAction; import net.md_5.bungee.api.dialog.action.DialogSubmitAction;
@ -22,39 +23,49 @@ public final class MultiActionInputFormDialog implements Dialog
{ {
@Accessors(fluent = false) @Accessors(fluent = false)
@NonNull
private DialogBase base; private DialogBase base;
/** /**
* The inputs to the dialog. At least one input must be provided. * The inputs to the dialog. At least one input must be provided.
*/ */
@NonNull
private List<DialogInput> inputs; private List<DialogInput> inputs;
/** /**
* The action/submit buttons for the dialog. At least one action must be * The action/submit buttons for the dialog. At least one action must be
* provided. * provided.
*/ */
@NonNull
private List<DialogSubmitAction> actions; private List<DialogSubmitAction> actions;
/** /**
* The amount of columns (default: 2) * The amount of columns (default: 2)
*/ */
private int columns; private Integer columns;
public MultiActionInputFormDialog(DialogBase base, DialogInput input, DialogSubmitAction action) public MultiActionInputFormDialog(@NonNull DialogBase base, @NonNull DialogInput input, @NonNull DialogSubmitAction action)
{ {
this( base, Arrays.asList( input ), Arrays.asList( action ), 2 ); this( base, Arrays.asList( input ), Arrays.asList( action ), 2 );
} }
public MultiActionInputFormDialog(DialogBase base, DialogInput input, DialogSubmitAction action, int columns) public MultiActionInputFormDialog(@NonNull DialogBase base, @NonNull DialogInput input, @NonNull DialogSubmitAction action, Integer columns)
{ {
this( base, Arrays.asList( input ), Arrays.asList( action ), columns ); this( base, Arrays.asList( input ), Arrays.asList( action ), columns );
} }
public MultiActionInputFormDialog(DialogBase base, List<DialogInput> inputs, List<DialogSubmitAction> actions, int columns) public MultiActionInputFormDialog(@NonNull DialogBase base, @NonNull List<DialogInput> inputs, @NonNull List<DialogSubmitAction> actions, Integer columns)
{ {
Preconditions.checkArgument( inputs != null && !inputs.isEmpty(), "At least one input must be provided" ); Preconditions.checkArgument( !inputs.isEmpty(), "At least one input must be provided" );
Preconditions.checkArgument( actions != null && !actions.isEmpty(), "At least one action must be provided" ); Preconditions.checkArgument( !actions.isEmpty(), "At least one action must be provided" );
this.base = base; this.base = base;
this.inputs = inputs; this.inputs = inputs;
this.actions = actions; this.actions = actions;
columns( columns );
}
public MultiActionInputFormDialog columns(Integer columns)
{
Preconditions.checkArgument( columns == null || columns > 0, "At least one column is required" );
this.columns = columns; this.columns = columns;
return this;
} }
} }

View File

@ -3,6 +3,7 @@ package net.md_5.bungee.api.dialog;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.dialog.action.DialogClickAction; import net.md_5.bungee.api.dialog.action.DialogClickAction;
@ -19,6 +20,7 @@ import net.md_5.bungee.api.dialog.action.DialogClickAction;
public final class NoticeDialog implements Dialog public final class NoticeDialog implements Dialog
{ {
@NonNull
@Accessors(fluent = false) @Accessors(fluent = false)
private DialogBase base; private DialogBase base;
/** /**

View File

@ -1,9 +1,10 @@
package net.md_5.bungee.api.dialog; package net.md_5.bungee.api.dialog;
import com.google.common.base.Preconditions;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
@ -14,11 +15,12 @@ import net.md_5.bungee.api.chat.ClickEvent;
@Data @Data
@ToString @ToString
@EqualsAndHashCode @EqualsAndHashCode
@AllArgsConstructor
@Accessors(fluent = true) @Accessors(fluent = true)
public final class ServerLinksDialog implements Dialog public final class ServerLinksDialog implements Dialog
{ {
@NonNull
@Accessors(fluent = false) @Accessors(fluent = false)
private DialogBase base; private DialogBase base;
/** /**
@ -29,15 +31,37 @@ public final class ServerLinksDialog implements Dialog
/** /**
* The number of columns for the dialog buttons (default: 2). * The number of columns for the dialog buttons (default: 2).
*/ */
private int columns; private Integer columns;
/** /**
* The width of the dialog buttons (default: 150, minimum: 1, maximum: 1024). * The width of the dialog buttons (default: 150, minimum: 1, maximum: 1024).
*/ */
@SerializedName("button_width") @SerializedName("button_width")
private int buttonWidth; private Integer buttonWidth;
public ServerLinksDialog(DialogBase base) public ServerLinksDialog(@NonNull DialogBase base)
{ {
this( base, null, 2, 150 ); this( base, null, null, null );
}
public ServerLinksDialog(@NonNull DialogBase base, ClickEvent onClick, Integer columns, Integer buttonWidth)
{
this.base = base;
this.onClick = onClick;
columns( columns );
buttonWidth( buttonWidth );
}
public ServerLinksDialog columns(Integer columns)
{
Preconditions.checkArgument( columns == null || columns > 0, "At least one column is required" );
this.columns = columns;
return this;
}
public ServerLinksDialog buttonWidth(Integer buttonWidth)
{
Preconditions.checkArgument( buttonWidth == null || ( buttonWidth >= 1 && buttonWidth <= 1024 ), "buttonWidth must be between 1 and 1024" );
this.buttonWidth = buttonWidth;
return this;
} }
} }

View File

@ -5,6 +5,7 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.dialog.action.DialogSubmitAction; import net.md_5.bungee.api.dialog.action.DialogSubmitAction;
@ -21,30 +22,32 @@ import net.md_5.bungee.api.dialog.input.DialogInput;
public final class SimpleInputFormDialog implements Dialog public final class SimpleInputFormDialog implements Dialog
{ {
@NonNull
@Accessors(fluent = false) @Accessors(fluent = false)
private DialogBase base; private DialogBase base;
/** /**
* The inputs to the dialog. At least one input must be provided. * The inputs to the dialog. At least one input must be provided.
*/ */
@NonNull
private List<DialogInput> inputs; private List<DialogInput> inputs;
/** /**
* The action/submit buttons for the dialog. * The action/submit buttons for the dialog.
*/ */
private DialogSubmitAction action; private DialogSubmitAction action;
public SimpleInputFormDialog(DialogBase base, DialogInput... inputs) public SimpleInputFormDialog(@NonNull DialogBase base, @NonNull DialogInput... inputs)
{ {
this( base, null, inputs ); this( base, null, inputs );
} }
public SimpleInputFormDialog(DialogBase base, DialogSubmitAction action, DialogInput... inputs) public SimpleInputFormDialog(@NonNull DialogBase base, DialogSubmitAction action, @NonNull DialogInput... inputs)
{ {
this( base, action, Arrays.asList( inputs ) ); this( base, action, Arrays.asList( inputs ) );
} }
public SimpleInputFormDialog(DialogBase base, DialogSubmitAction action, List<DialogInput> inputs) public SimpleInputFormDialog(@NonNull DialogBase base, DialogSubmitAction action, @NonNull List<DialogInput> inputs)
{ {
Preconditions.checkArgument( inputs != null && !inputs.isEmpty(), "At least one input must be provided" ); Preconditions.checkArgument( !inputs.isEmpty(), "At least one input must be provided" );
this.base = base; this.base = base;
this.inputs = inputs; this.inputs = inputs;

View File

@ -1,20 +1,21 @@
package net.md_5.bungee.api.dialog.action; package net.md_5.bungee.api.dialog.action;
import lombok.AllArgsConstructor; import com.google.common.base.Preconditions;
import lombok.Data; import lombok.Data;
import lombok.NonNull;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
/** /**
* Represents a dialog action which will usually appear as a button. * Represents a dialog action which will usually appear as a button.
*/ */
@Data @Data
@AllArgsConstructor
public class DialogAction public class DialogAction
{ {
/** /**
* The text label of the button, mandatory. * The text label of the button, mandatory.
*/ */
@NonNull
private BaseComponent label; private BaseComponent label;
/** /**
* The hover tooltip of the button. * The hover tooltip of the button.
@ -23,10 +24,23 @@ public class DialogAction
/** /**
* The width of the button (default: 150, minimum: 1, maximum: 1024). * The width of the button (default: 150, minimum: 1, maximum: 1024).
*/ */
private int width; private Integer width;
public DialogAction(@NonNull BaseComponent label, BaseComponent tooltip, Integer width)
{
this.label = label;
this.tooltip = tooltip;
setWidth( width );
}
public DialogAction(BaseComponent label) public DialogAction(BaseComponent label)
{ {
this( label, null, 150 ); this( label, null, null );
}
public void setWidth(Integer width)
{
Preconditions.checkArgument( width == null || ( width >= 1 && width <= 1024 ), "width must be between 1 and 1024" );
this.width = width;
} }
} }

View File

@ -3,6 +3,7 @@ package net.md_5.bungee.api.dialog.action;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -24,17 +25,17 @@ public class DialogClickAction extends DialogAction
@SerializedName("on_click") @SerializedName("on_click")
private ClickEvent onClick; private ClickEvent onClick;
public DialogClickAction(BaseComponent label) public DialogClickAction(@NonNull BaseComponent label)
{ {
this( null, label ); this( null, label );
} }
public DialogClickAction(ClickEvent onClick, BaseComponent label) public DialogClickAction(ClickEvent onClick, @NonNull BaseComponent label)
{ {
this( onClick, label, null, 150 ); this( onClick, label, null, null );
} }
public DialogClickAction(ClickEvent onClick, BaseComponent label, BaseComponent tooltip, int width) public DialogClickAction(ClickEvent onClick, @NonNull BaseComponent label, BaseComponent tooltip, Integer width)
{ {
super( label, tooltip, width ); super( label, tooltip, width );
this.onClick = onClick; this.onClick = onClick;

View File

@ -3,6 +3,7 @@ package net.md_5.bungee.api.dialog.action;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -23,19 +24,21 @@ public class DialogSubmitAction extends DialogAction
* The ID of the button, used to distinguish submissions initiated via * The ID of the button, used to distinguish submissions initiated via
* different buttons on the dialog. * different buttons on the dialog.
*/ */
@NonNull
private String id; private String id;
/** /**
* The submission action to take. * The submission action to take.
*/ */
@NonNull
@SerializedName("on_submit") @SerializedName("on_submit")
private DialogSubmission onSubmit; private DialogSubmission onSubmit;
public DialogSubmitAction(String id, DialogSubmission onSubmit, BaseComponent label) public DialogSubmitAction(@NonNull String id, @NonNull DialogSubmission onSubmit, @NonNull BaseComponent label)
{ {
this( id, onSubmit, label, null, 150 ); this( id, onSubmit, label, null, null );
} }
public DialogSubmitAction(String id, DialogSubmission onSubmit, BaseComponent label, BaseComponent tooltip, int width) public DialogSubmitAction(@NonNull String id, @NonNull DialogSubmission onSubmit, @NonNull BaseComponent label, BaseComponent tooltip, Integer width)
{ {
super( label, tooltip, width ); super( label, tooltip, width );
this.id = id; this.id = id;

View File

@ -1,6 +1,7 @@
package net.md_5.bungee.api.dialog.body; package net.md_5.bungee.api.dialog.body;
import lombok.Data; import lombok.Data;
import lombok.NonNull;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
/** /**
@ -13,6 +14,7 @@ public abstract class DialogBody
/** /**
* The internal body type. * The internal body type.
*/ */
@NonNull
@ApiStatus.Internal @ApiStatus.Internal
private final String type; private final String type;
} }

View File

@ -1,7 +1,9 @@
package net.md_5.bungee.api.dialog.body; package net.md_5.bungee.api.dialog.body;
import com.google.common.base.Preconditions;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -18,21 +20,28 @@ public class PlainMessageBody extends DialogBody
/** /**
* The text body. * The text body.
*/ */
@NonNull
private BaseComponent contents; private BaseComponent contents;
/** /**
* The maximum width (default: 200, minimum: 1, maximum: 1024). * The maximum width (default: 200, minimum: 1, maximum: 1024).
*/ */
private int width; private Integer width;
public PlainMessageBody(BaseComponent contents) public PlainMessageBody(@NonNull BaseComponent contents)
{ {
this( contents, 200 ); this( contents, null );
} }
public PlainMessageBody(BaseComponent contents, int width) public PlainMessageBody(@NonNull BaseComponent contents, Integer width)
{ {
super( "minecraft:plain_message" ); super( "minecraft:plain_message" );
this.contents = contents; this.contents = contents;
setWidth( width );
}
public void setWidth(int width)
{
Preconditions.checkArgument( width >= 1 && width <= 1024, "width must be between 1 and 1024" );
this.width = width; this.width = width;
} }
} }

View File

@ -3,6 +3,7 @@ package net.md_5.bungee.api.dialog.input;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -20,11 +21,12 @@ public class BooleanInput extends DialogInput
/** /**
* The input label. * The input label.
*/ */
@NonNull
private BaseComponent label; private BaseComponent label;
/** /**
* The initial value (default: false/unchecked). * The initial value (default: false/unchecked).
*/ */
private boolean initial; private Boolean initial;
/** /**
* The string value to be submitted when true/checked (default: "true"). * The string value to be submitted when true/checked (default: "true").
*/ */
@ -36,12 +38,12 @@ public class BooleanInput extends DialogInput
@SerializedName("on_false") @SerializedName("on_false")
private String onFalse; private String onFalse;
public BooleanInput(String key, BaseComponent label) public BooleanInput(@NonNull String key, @NonNull BaseComponent label)
{ {
this( key, label, false, "true", "false" ); this( key, label, null, "true", "false" );
} }
public BooleanInput(String key, BaseComponent label, boolean initial, String onTrue, String onFalse) public BooleanInput(@NonNull String key, @NonNull BaseComponent label, Boolean initial, String onTrue, String onFalse)
{ {
super( "minecraft:boolean", key ); super( "minecraft:boolean", key );
this.label = label; this.label = label;

View File

@ -1,6 +1,7 @@
package net.md_5.bungee.api.dialog.input; package net.md_5.bungee.api.dialog.input;
import lombok.Data; import lombok.Data;
import lombok.NonNull;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
@ -22,5 +23,6 @@ public class DialogInput
* The key corresponding to this input and associated with the value * The key corresponding to this input and associated with the value
* submitted. * submitted.
*/ */
@NonNull
private final String key; private final String key;
} }

View File

@ -2,6 +2,7 @@ package net.md_5.bungee.api.dialog.input;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NonNull;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -19,6 +20,7 @@ public class InputOption
* The string value associated with this option, to be submitted when * The string value associated with this option, to be submitted when
* selected. * selected.
*/ */
@NonNull
private String id; private String id;
/** /**
* The text to display for this option. * The text to display for this option.
@ -28,10 +30,10 @@ public class InputOption
* Whether this option is the one initially selected. Only one option may * Whether this option is the one initially selected. Only one option may
* have this value as true (default: first option). * have this value as true (default: first option).
*/ */
private boolean initial; private Boolean initial;
public InputOption(String id) public InputOption(@NonNull String id)
{ {
this( id, null, false ); this( id, null, null );
} }
} }

View File

@ -1,7 +1,9 @@
package net.md_5.bungee.api.dialog.input; package net.md_5.bungee.api.dialog.input;
import com.google.common.base.Preconditions;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -19,10 +21,11 @@ public class NumberRangeInput extends DialogInput
/** /**
* The width of the input (default: 200, minimum: 1, maximum: 1024). * The width of the input (default: 200, minimum: 1, maximum: 1024).
*/ */
private int width; private Integer width;
/** /**
* The label of the slider. * The label of the slider.
*/ */
@NonNull
private BaseComponent label; private BaseComponent label;
/** /**
* A translate key used to display the label value (default: * A translate key used to display the label value (default:
@ -47,30 +50,54 @@ public class NumberRangeInput extends DialogInput
*/ */
private Float initial; private Float initial;
public NumberRangeInput(String key, BaseComponent label, float start, float end) public NumberRangeInput(@NonNull String key, @NonNull BaseComponent label, float start, float end)
{ {
this( key, 200, label, "options.generic_value", start, end, null, null ); this( key, null, label, "options.generic_value", start, end, null, null );
} }
public NumberRangeInput(String key, BaseComponent label, float start, float end, Float step) public NumberRangeInput(@NonNull String key, @NonNull BaseComponent label, float start, float end, Float step)
{ {
this( key, 200, label, "options.generic_value", start, end, step, null ); this( key, null, label, "options.generic_value", start, end, step, null );
} }
public NumberRangeInput(String key, BaseComponent label, float start, float end, Float step, Float initial) public NumberRangeInput(@NonNull String key, @NonNull BaseComponent label, float start, float end, Float step, Float initial)
{ {
this( key, 200, label, "options.generic_value", start, end, step, initial ); this( key, null, label, "options.generic_value", start, end, step, initial );
} }
public NumberRangeInput(String key, int width, BaseComponent label, String labelFormat, float start, float end, Float step, Float initial) public NumberRangeInput(@NonNull String key, Integer width, @NonNull BaseComponent label, String labelFormat, float start, float end, Float step, Float initial)
{ {
super( "minecraft:number_range", key ); super( "minecraft:number_range", key );
this.width = width; width( width );
this.label = label; this.label = label;
this.labelFormat = labelFormat; this.labelFormat = labelFormat;
this.start = start; this.start = start;
this.end = end; this.end = end;
step( step );
initial( initial );
}
public NumberRangeInput width(Integer width)
{
Preconditions.checkArgument( width == null || ( width >= 1 && width <= 1024 ), "with must be between 1 and 1024" );
this.width = width;
return this;
}
public NumberRangeInput step(Float step)
{
Preconditions.checkArgument( step == null || step > 0, "step must be null or greater than zero" );
this.step = step; this.step = step;
return this;
}
public NumberRangeInput initial(Float initial)
{
// we need to calculate if the initial value is between start and end, regardless of the order
float min = Math.min( start, end );
float max = Math.max( start, end );
Preconditions.checkArgument( step == null || ( initial >= min && initial <= max ), "step must be null or between start and end" );
this.initial = initial; this.initial = initial;
return this;
} }
} }

View File

@ -6,6 +6,7 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -23,34 +24,43 @@ public class SingleOptionInput extends DialogInput
/** /**
* The width of the input (default: 200, minimum: 1, maximum: 1024). * The width of the input (default: 200, minimum: 1, maximum: 1024).
*/ */
private int width; private Integer width;
/** /**
* The input label. * The input label.
*/ */
@NonNull
private BaseComponent label; private BaseComponent label;
/** /**
* Whether the label is visible (default: true). * Whether the label is visible (default: true).
*/ */
@SerializedName("label_visible") @SerializedName("label_visible")
private boolean labelVisible; private Boolean labelVisible;
/** /**
* The non-empty list of options to be selected from. * The non-empty list of options to be selected from.
*/ */
@NonNull
private List<InputOption> options; private List<InputOption> options;
public SingleOptionInput(String key, BaseComponent label, InputOption... options) public SingleOptionInput(@NonNull String key, @NonNull BaseComponent label, @NonNull InputOption... options)
{ {
this( key, 200, label, true, Arrays.asList( options ) ); this( key, null, label, null, Arrays.asList( options ) );
} }
public SingleOptionInput(String key, int width, BaseComponent label, boolean labelVisible, List<InputOption> options) public SingleOptionInput(@NonNull String key, Integer width, @NonNull BaseComponent label, Boolean labelVisible, @NonNull List<InputOption> options)
{ {
super( "minecraft:single_option", key ); super( "minecraft:single_option", key );
Preconditions.checkArgument( options != null && !options.isEmpty(), "At least one option must be provided" ); Preconditions.checkArgument( !options.isEmpty(), "At least one option must be provided" );
this.width = width; width( width );
this.label = label; this.label = label;
this.labelVisible = labelVisible; this.labelVisible = labelVisible;
this.options = options; this.options = options;
} }
public SingleOptionInput width(Integer width)
{
Preconditions.checkArgument( width == null || ( width >= 1 && width <= 1024 ), "width must be between 1 and 1024" );
this.width = width;
return this;
}
} }

View File

@ -1,8 +1,11 @@
package net.md_5.bungee.api.dialog.input; package net.md_5.bungee.api.dialog.input;
import com.google.common.base.Preconditions;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -20,16 +23,17 @@ public class TextInput extends DialogInput
/** /**
* The width of this text input (default: 200, minimum: 1, maximum: 1024). * The width of this text input (default: 200, minimum: 1, maximum: 1024).
*/ */
private int width; private Integer width;
/** /**
* The label of this text input. * The label of this text input.
*/ */
@NonNull
private BaseComponent label; private BaseComponent label;
/** /**
* The visibility of this text input's label. * The visibility of this text input's label.
*/ */
@SerializedName("label_visible") @SerializedName("label_visible")
private boolean labelVisible; private Boolean labelVisible;
/** /**
* The initial value of this text input. * The initial value of this text input.
*/ */
@ -38,26 +42,26 @@ public class TextInput extends DialogInput
* The maximum length of the input (default: 32). * The maximum length of the input (default: 32).
*/ */
@SerializedName("max_length") @SerializedName("max_length")
private int maxLength; private Integer maxLength;
/** /**
* If present, allows users to input multiple lines. * If present, allows users to input multiple lines.
*/ */
private Multiline multiline; private Multiline multiline;
public TextInput(String key, BaseComponent label) public TextInput(@NonNull String key, @NonNull BaseComponent label)
{ {
this( key, 200, label, true, null, 32, null ); this( key, 200, label, null, null, null, null );
} }
public TextInput(String key, int width, BaseComponent label, boolean labelVisible, String initial, Integer maxLength) public TextInput(@NonNull String key, Integer width, @NonNull BaseComponent label, Boolean labelVisible, String initial, Integer maxLength)
{ {
this( key, width, label, labelVisible, initial, maxLength, null ); this( key, width, label, labelVisible, initial, maxLength, null );
} }
public TextInput(String key, int width, BaseComponent label, boolean labelVisible, String initial, Integer maxLength, Multiline multiline) public TextInput(@NonNull String key, Integer width, @NonNull BaseComponent label, Boolean labelVisible, String initial, Integer maxLength, Multiline multiline)
{ {
super( "minecraft:text", key ); super( "minecraft:text", key );
this.width = width; width( width );
this.label = label; this.label = label;
this.labelVisible = labelVisible; this.labelVisible = labelVisible;
this.initial = initial; this.initial = initial;
@ -69,6 +73,7 @@ public class TextInput extends DialogInput
* Configuration data for a multiline input. * Configuration data for a multiline input.
*/ */
@Data @Data
@NoArgsConstructor
@Accessors(fluent = true) @Accessors(fluent = true)
public static class Multiline public static class Multiline
{ {
@ -81,6 +86,25 @@ public class TextInput extends DialogInput
/** /**
* The height of this input (default: 32, minimum: 1, maximum: 512). * The height of this input (default: 32, minimum: 1, maximum: 512).
*/ */
private Integer height = 32; private Integer height;
public Multiline(Integer maxLines, Integer height)
{
height( height ).maxLines( maxLines );
}
public Multiline height(Integer height)
{
Preconditions.checkArgument( height == null || height >= 1 && height <= 512, "height must null or be between 1 and 512" );
this.height = height;
return this;
}
}
public TextInput width(Integer width)
{
Preconditions.checkArgument( width == null || ( width >= 1 && width <= 1024 ), "width must be between 1 and 1024" );
this.width = width;
return this;
} }
} }

View File

@ -2,6 +2,7 @@ package net.md_5.bungee.api.dialog.submit;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@ -24,9 +25,10 @@ public class CommandTemplateSubmission extends DialogSubmission
* The <code>action</code> key is special and will be replaced with the * The <code>action</code> key is special and will be replaced with the
* {@link net.md_5.bungee.api.dialog.action.DialogSubmitAction#id}. * {@link net.md_5.bungee.api.dialog.action.DialogSubmitAction#id}.
*/ */
@NonNull
private String template; private String template;
public CommandTemplateSubmission(String template) public CommandTemplateSubmission(@NonNull String template)
{ {
super( "minecraft:command_template" ); super( "minecraft:command_template" );
this.template = template; this.template = template;

View File

@ -2,6 +2,7 @@ package net.md_5.bungee.api.dialog.submit;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@ -18,9 +19,10 @@ public class CustomFormSubmission extends DialogSubmission
/** /**
* The namespaced key of the submission. * The namespaced key of the submission.
*/ */
@NonNull
private String id; private String id;
public CustomFormSubmission(String id) public CustomFormSubmission(@NonNull String id)
{ {
super( "minecraft:custom_form" ); super( "minecraft:custom_form" );
this.id = id; this.id = id;

View File

@ -2,6 +2,7 @@ package net.md_5.bungee.api.dialog.submit;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@ -19,6 +20,7 @@ public class CustomTemplateSubmission extends DialogSubmission
/** /**
* The namespaced key of the submission. * The namespaced key of the submission.
*/ */
@NonNull
private String id; private String id;
/** /**
* The template to be applied, where variables of the form * The template to be applied, where variables of the form
@ -28,9 +30,10 @@ public class CustomTemplateSubmission extends DialogSubmission
* The <code>action</code> key is special and will be replaced with the * The <code>action</code> key is special and will be replaced with the
* {@link net.md_5.bungee.api.dialog.action.DialogSubmitAction#id}. * {@link net.md_5.bungee.api.dialog.action.DialogSubmitAction#id}.
*/ */
@NonNull
private String template; private String template;
public CustomTemplateSubmission(String id, String template) public CustomTemplateSubmission(@NonNull String id, @NonNull String template)
{ {
super( "minecraft:custom_template" ); super( "minecraft:custom_template" );
this.id = id; this.id = id;

View File

@ -1,6 +1,7 @@
package net.md_5.bungee.api.dialog.submit; package net.md_5.bungee.api.dialog.submit;
import lombok.Data; import lombok.Data;
import lombok.NonNull;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
@ -15,6 +16,7 @@ public class DialogSubmission
/** /**
* The internal submissions type. * The internal submissions type.
*/ */
@NonNull
@ApiStatus.Internal @ApiStatus.Internal
private final String type; private final String type;
} }