88 lines
2.6 KiB
Java
88 lines
2.6 KiB
Java
package games.dmg.spigotquestboard;
|
|
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
|
|
/** A server-independent description of the quest-board dialog hierarchy. */
|
|
record QuestBoardDialogSpec(
|
|
int maximumBodyWidth,
|
|
Screen dashboard,
|
|
Screen browse,
|
|
Screen create,
|
|
Screen claims,
|
|
List<QuestEntry> questEntries
|
|
) {
|
|
QuestBoardDialogSpec {
|
|
if (maximumBodyWidth <= 0) {
|
|
throw new IllegalArgumentException("Maximum body width must be positive");
|
|
}
|
|
Objects.requireNonNull(dashboard, "dashboard");
|
|
Objects.requireNonNull(browse, "browse");
|
|
Objects.requireNonNull(create, "create");
|
|
Objects.requireNonNull(claims, "claims");
|
|
questEntries = List.copyOf(Objects.requireNonNull(questEntries, "questEntries"));
|
|
}
|
|
|
|
List<String> dashboardActions() {
|
|
return dashboard.actions().stream().map(Action::label).toList();
|
|
}
|
|
|
|
record Screen(
|
|
String title,
|
|
String externalTitle,
|
|
String message,
|
|
List<Action> actions,
|
|
List<Input> inputs,
|
|
boolean hasBackAction
|
|
) {
|
|
Screen {
|
|
Objects.requireNonNull(title, "title");
|
|
Objects.requireNonNull(externalTitle, "externalTitle");
|
|
Objects.requireNonNull(message, "message");
|
|
actions = List.copyOf(Objects.requireNonNull(actions, "actions"));
|
|
inputs = List.copyOf(Objects.requireNonNull(inputs, "inputs"));
|
|
}
|
|
}
|
|
|
|
record QuestEntry(
|
|
String title,
|
|
String message,
|
|
List<Action> actions,
|
|
boolean hasBackAction
|
|
) {
|
|
QuestEntry {
|
|
Objects.requireNonNull(title, "title");
|
|
Objects.requireNonNull(message, "message");
|
|
actions = List.copyOf(Objects.requireNonNull(actions, "actions"));
|
|
}
|
|
}
|
|
|
|
record Action(String label, Route route, String questId) {
|
|
Action {
|
|
Objects.requireNonNull(label, "label");
|
|
Objects.requireNonNull(route, "route");
|
|
}
|
|
}
|
|
|
|
record Input(String key, String label, String initial, int maximumLength) {
|
|
Input {
|
|
Objects.requireNonNull(key, "key");
|
|
Objects.requireNonNull(label, "label");
|
|
Objects.requireNonNull(initial, "initial");
|
|
if (maximumLength <= 0) {
|
|
throw new IllegalArgumentException("Maximum input length must be positive");
|
|
}
|
|
}
|
|
}
|
|
|
|
enum Route {
|
|
OPEN_BROWSE,
|
|
OPEN_CREATE,
|
|
OPEN_CLAIMS,
|
|
SUBMIT_CREATE,
|
|
COMPLETE,
|
|
CANCEL,
|
|
COLLECT
|
|
}
|
|
}
|