Skip to content

Commit ed3fd5b

Browse files
committed
Add an optional callback to be ran when a menu is opened via the back button
1 parent 2ac28e9 commit ed3fd5b

7 files changed

Lines changed: 80 additions & 0 deletions

File tree

menus/src/main/java/net/staticstudios/menus/action/GoBackAction.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,9 @@ public void invoke(MenuViewer viewer) {
1717
return;
1818
}
1919
menuToOpen.open(false, false);
20+
ViewerAction onComeBack = menuToOpen.getOptions().onComeBack();
21+
if (onComeBack != null) {
22+
onComeBack.invoke(viewer);
23+
}
2024
}
2125
}

menus/src/main/java/net/staticstudios/menus/button/ButtonBuilder.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package net.staticstudios.menus.button;
22

3+
import net.kyori.adventure.text.Component;
4+
import net.staticstudios.menus.action.ButtonAction;
5+
6+
import java.util.List;
7+
38
public interface ButtonBuilder {
49

510
/**
@@ -22,4 +27,27 @@ default Button buildAndRegister(String namespace, String id) {
2227
return button;
2328
}
2429

30+
ButtonBuilder name(String name);
31+
32+
ButtonBuilder name(Component name);
33+
34+
ButtonBuilder description(String... description);
35+
36+
ButtonBuilder description(List<String> description);
37+
38+
ButtonBuilder componentDescription(List<Component> description);
39+
40+
ButtonBuilder description(String description);
41+
42+
ButtonBuilder amount(int amount);
43+
44+
ButtonBuilder enchanted(boolean enchanted);
45+
46+
ButtonBuilder onLeftClick(ButtonAction action);
47+
48+
ButtonBuilder onRightClick(ButtonAction action);
49+
50+
ButtonBuilder onClick(ButtonAction action);
51+
52+
2553
}

menus/src/main/java/net/staticstudios/menus/menu/MenuBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.staticstudios.menus.menu;
22

33

4+
import net.staticstudios.menus.action.ViewerAction;
45
import net.staticstudios.menus.viewer.MenuViewer;
56

67
public interface MenuBuilder {
@@ -11,4 +12,11 @@ public interface MenuBuilder {
1112
* @return The menu
1213
*/
1314
Menu build(MenuViewer viewer);
15+
16+
/**
17+
* Specify a callback to be called when the menu is opened via the back button
18+
*
19+
* @param callback the callback to be called
20+
*/
21+
MenuBuilder onComeBack(ViewerAction callback);
1422
}

menus/src/main/java/net/staticstudios/menus/menu/PagedMenuBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,13 @@ public PagedMenuBuilder marker(char marker, Button fallback) {
228228
return builder;
229229
}
230230

231+
@Override
232+
public PagedMenuBuilder onComeBack(ViewerAction callback) {
233+
PagedMenuBuilder builder = clone();
234+
builder.options = builder.options.onComeBack(callback);
235+
return builder;
236+
}
237+
231238
@Override
232239
public PagedMenu build(MenuViewer viewer) {
233240
if (id == null) throw new IllegalStateException("ID must be set");

menus/src/main/java/net/staticstudios/menus/menu/SimpleMenuBuilder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.staticstudios.menus.button.Button;
77
import net.staticstudios.menus.options.MenuOptions;
88
import net.staticstudios.menus.viewer.MenuViewer;
9+
import org.jspecify.annotations.Nullable;
910

1011
import java.util.ArrayList;
1112
import java.util.HashMap;
@@ -21,6 +22,7 @@ public class SimpleMenuBuilder implements Cloneable, MenuBuilder {
2122
private Component title;
2223
private List<Button> buttons;
2324
private MenuOptions options = new MenuOptions();
25+
private @Nullable ViewerAction onComeBack;
2426

2527

2628
protected SimpleMenuBuilder(boolean mutable) {
@@ -161,6 +163,14 @@ public SimpleMenuBuilder defaultPlaceholder(Button defaultPlaceholder) {
161163
return builder;
162164
}
163165

166+
@Override
167+
public SimpleMenuBuilder onComeBack(ViewerAction callback) {
168+
SimpleMenuBuilder builder = clone();
169+
builder.options = builder.options.onComeBack(callback);
170+
return builder;
171+
}
172+
173+
164174
@Override
165175
public Menu build(MenuViewer viewer) {
166176
if (id == null) throw new IllegalStateException("ID must be set");

menus/src/main/java/net/staticstudios/menus/menu/TemplatedMenuBuilder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.staticstudios.menus.button.Button;
77
import net.staticstudios.menus.options.MenuOptions;
88
import net.staticstudios.menus.viewer.MenuViewer;
9+
import org.jspecify.annotations.Nullable;
910

1011
import java.util.ArrayList;
1112
import java.util.HashMap;
@@ -22,6 +23,7 @@ public class TemplatedMenuBuilder implements Cloneable, MenuBuilder {
2223
private String id;
2324
private Component title;
2425
private MenuOptions options = new MenuOptions();
26+
private @Nullable ViewerAction onComeBack;
2527

2628
protected TemplatedMenuBuilder(boolean mutable, String template) {
2729
this.mutable = mutable;
@@ -137,6 +139,14 @@ public TemplatedMenuBuilder button(char character, Button button) {
137139
return builder;
138140
}
139141

142+
@Override
143+
public TemplatedMenuBuilder onComeBack(ViewerAction callback) {
144+
TemplatedMenuBuilder builder = clone();
145+
builder.options = builder.options.onComeBack(callback);
146+
return builder;
147+
}
148+
149+
140150
@Override
141151
public Menu build(MenuViewer viewer) {
142152
if (id == null) throw new IllegalStateException("ID must be set");

menus/src/main/java/net/staticstudios/menus/options/MenuOptions.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package net.staticstudios.menus.options;
22

3+
import net.staticstudios.menus.action.ViewerAction;
34
import net.staticstudios.menus.button.Button;
45
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
57

68
public class MenuOptions implements Cloneable {
79
private @NotNull Button defaultPlaceholder = Button.EMPTY;
10+
private ViewerAction onComeBack = null;
811

912
public MenuOptions() {
1013
}
@@ -19,6 +22,16 @@ public MenuOptions defaultPlaceholder(@NotNull Button defaultPlaceholder) {
1922
return defaultPlaceholder;
2023
}
2124

25+
public MenuOptions onComeBack(ViewerAction onComeBack) {
26+
MenuOptions opts = clone();
27+
opts.onComeBack = onComeBack;
28+
return opts;
29+
}
30+
31+
public @Nullable ViewerAction onComeBack() {
32+
return onComeBack;
33+
}
34+
2235
public MenuOptions clone() {
2336
try {
2437
return (MenuOptions) super.clone();

0 commit comments

Comments
 (0)