Skip to content

Commit 130b3e0

Browse files
New methods
make constructor private for consistency with PaginatedMenu in favor of Menu#create. add #clone()
1 parent d31bce4 commit 130b3e0

File tree

1 file changed

+54
-17
lines changed

1 file changed

+54
-17
lines changed

src/main/java/me/flame/menus/menu/Menu.java

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,69 @@
22

33
import me.flame.menus.items.MenuItem;
44
import me.flame.menus.modifiers.Modifier;
5+
import org.jetbrains.annotations.Contract;
56
import org.jetbrains.annotations.NotNull;
67

78
import java.util.EnumSet;
8-
import java.util.List;
99

10+
/**
11+
* Most commonly used normal Menu extending BaseMenu.
12+
*/
1013
@SuppressWarnings("unused")
11-
public final class Menu extends BaseMenu<Menu> {
12-
public Menu(int rows, String title, EnumSet<Modifier> modifiers, boolean colorize) {
13-
super(rows, title, modifiers, colorize);
14-
}
15-
16-
public Menu(int rows, String title, EnumSet<Modifier> modifiers) {
14+
public final class Menu extends BaseMenu implements Cloneable {
15+
private Menu(int rows, String title, EnumSet<Modifier> modifiers) {
1716
super(rows, title, modifiers);
1817
}
1918

20-
public Menu(MenuType type, String title, EnumSet<Modifier> modifiers) {
19+
private Menu(MenuType type, String title, EnumSet<Modifier> modifiers) {
2120
super(type, title, modifiers);
2221
}
2322

24-
public Menu(int rows, String title) {
23+
private Menu(int rows, String title) {
2524
super(rows, title, EnumSet.noneOf(Modifier.class));
2625
}
2726

28-
public Menu(MenuType type, String title) {
27+
private Menu(MenuType type, String title) {
2928
super(type, title, EnumSet.noneOf(Modifier.class));
3029
}
3130

32-
public Menu(MenuType type, String title, EnumSet<Modifier> modifiers, boolean colorize) {
31+
private Menu(MenuType type, String title, EnumSet<Modifier> modifiers, boolean colorize) {
3332
super(type, title, modifiers, colorize);
3433
}
3534

35+
@NotNull
36+
@Contract("_, _ -> new")
37+
public static Menu create(String title, int rows) {
38+
return new Menu(rows, title);
39+
}
40+
41+
@NotNull
42+
@Contract("_, _, _ -> new")
43+
public static Menu create(String title, int rows, EnumSet<Modifier> modifiers) {
44+
return new Menu(rows, title, modifiers);
45+
}
46+
47+
@NotNull
48+
@Contract("_, _ -> new")
49+
public static Menu create(String title, MenuType type) {
50+
return new Menu(type, title);
51+
}
52+
53+
@NotNull
54+
@Contract("_, _, _ -> new")
55+
public static Menu create(String title, MenuType type, EnumSet<Modifier> modifiers) {
56+
return new Menu(type, title, modifiers);
57+
}
58+
59+
public static Menu create(MenuData menuData) {
60+
MenuType type = menuData.getType();
61+
Menu menu = type != MenuType.CHEST
62+
? new Menu(type, menuData.getTitle(), menuData.getModifiers())
63+
: new Menu(menuData.getRows(), menuData.getTitle(), menuData.getModifiers());
64+
menu.setContents(menuData.getItems().toArray(new MenuItem[0]));
65+
return menu;
66+
}
67+
3668
/**
3769
* Generate a paginated menu; convert to a {@link PaginatedMenu} from a {@link Menu}
3870
*
@@ -42,9 +74,7 @@ public Menu(MenuType type, String title, EnumSet<Modifier> modifiers, boolean co
4274
@NotNull
4375
public PaginatedMenu pagination() {
4476
PaginatedMenu menu = PaginatedMenu.create(title, rows, 3, modifiers);
45-
for (int i = 0; i < size; i++) {
46-
menu.setItem(i, itemMap.get(i));
47-
}
77+
menu.setContents(itemMap);
4878
return menu;
4979
}
5080

@@ -56,9 +86,16 @@ public PaginatedMenu pagination() {
5686
@NotNull
5787
public PaginatedMenu pagination(int pages) {
5888
PaginatedMenu menu = PaginatedMenu.create(title, rows, pages, modifiers);
59-
for (int i = 0; i < size; i++) {
60-
menu.setItem(i, itemMap.get(i));
61-
}
89+
menu.setContents(itemMap);
6290
return menu;
6391
}
92+
93+
@Override
94+
public Menu clone() {
95+
try {
96+
return (Menu) super.clone();
97+
} catch (CloneNotSupportedException e) {
98+
throw new RuntimeException(e);
99+
}
100+
}
64101
}

0 commit comments

Comments
 (0)