Skip to content

Commit 46f448b

Browse files
New Interfaces & API
1 parent 130b3e0 commit 46f448b

File tree

3 files changed

+219
-0
lines changed

3 files changed

+219
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package me.flame.menus.menu;
2+
3+
@SuppressWarnings("unused")
4+
public enum ActionResponse {
5+
RETRY,
6+
DONE;
7+
8+
public boolean isDone() {
9+
return this == DONE;
10+
}
11+
12+
public boolean isRetry() {
13+
return this == RETRY;
14+
}
15+
}
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package me.flame.menus.menu;
2+
3+
import lombok.EqualsAndHashCode;
4+
import lombok.Getter;
5+
6+
import me.flame.menus.items.MenuItem;
7+
import me.flame.menus.modifiers.Modifier;
8+
import org.bukkit.configuration.serialization.ConfigurationSerializable;
9+
import org.jetbrains.annotations.NotNull;
10+
11+
import java.io.IOException;
12+
import java.io.ObjectOutputStream;
13+
import java.io.Serializable;
14+
import java.util.EnumSet;
15+
import java.util.LinkedHashMap;
16+
import java.util.List;
17+
import java.util.Map;
18+
19+
/**
20+
* Immutable data class containing of Data to simplify the internal
21+
* <p>
22+
* code (parameters)
23+
*/
24+
@Getter
25+
@EqualsAndHashCode
26+
@SuppressWarnings({ "unused", "unchecked" })
27+
public class MenuData implements Serializable, ConfigurationSerializable {
28+
private String title;
29+
private int rows;
30+
private int pages;
31+
private MenuType type;
32+
private List<MenuItem> items;
33+
private EnumSet<Modifier> modifiers;
34+
35+
public MenuData(String title, int rows, int pages, EnumSet<Modifier> modifiers, List<MenuItem> items) {
36+
this.title = title;
37+
this.rows = rows;
38+
this.pages = pages;
39+
this.type = MenuType.CHEST;
40+
this.modifiers = modifiers;
41+
}
42+
43+
public MenuData(String title, MenuType type, int pages, EnumSet<Modifier> modifiers, List<MenuItem> items) {
44+
this.title = title;
45+
this.rows = 1;
46+
this.pages = pages;
47+
this.type = type;
48+
this.modifiers = modifiers;
49+
}
50+
51+
public MenuData(String title, int rows, EnumSet<Modifier> modifiers, List<MenuItem> items) {
52+
this(title, rows, 1, modifiers, items);
53+
}
54+
55+
public MenuData(String title, MenuType type, EnumSet<Modifier> modifiers, List<MenuItem> items) {
56+
this(title, type, 1, modifiers, items);
57+
}
58+
59+
private void readObject(java.io.ObjectInputStream s) throws IOException, ClassNotFoundException {
60+
s.readFields();
61+
this.title = (String) s.readObject();
62+
this.rows = s.readInt();
63+
this.pages = s.readInt();
64+
this.type = (MenuType) s.readObject();
65+
this.items = (List<MenuItem>) s.readObject();
66+
this.modifiers = (EnumSet<Modifier>) s.readObject();
67+
}
68+
69+
private void writeObject(ObjectOutputStream s) throws IOException {
70+
s.defaultWriteObject();
71+
s.writeObject(title);
72+
s.writeInt(rows);
73+
s.writeInt(pages);
74+
75+
s.writeObject(type);
76+
s.writeObject(items);
77+
s.writeObject(modifiers);
78+
}
79+
80+
@NotNull
81+
@Override
82+
public Map<String, Object> serialize() {
83+
Map<String, Object> map = new LinkedHashMap<>(4);
84+
map.put("title", title);
85+
86+
map.put("rows", rows);
87+
map.put("pages", pages);
88+
89+
map.put("type", type.name());
90+
91+
map.put("items", items);
92+
map.put("modifiers", modifiers);
93+
return map;
94+
}
95+
96+
/**
97+
* Deserialize the serialized data and create a MenuData object.
98+
*
99+
* @param serializedData the serialized data to be deserialized
100+
* @return the deserialized MenuData object
101+
*/
102+
public static MenuData deserialize(Map<String, Object> serializedData) {
103+
MenuData data;
104+
if (serializedData.get("type").equals(MenuType.CHEST.name())) {
105+
data = new MenuData(
106+
(String) serializedData.get("title"),
107+
(int) serializedData.get("rows"),
108+
(int) serializedData.get("pages"),
109+
(EnumSet<Modifier>) serializedData.get("modifiers"),
110+
(List<MenuItem>) serializedData.get("items")
111+
);
112+
} else {
113+
data = new MenuData(
114+
(String) serializedData.get("title"),
115+
MenuType.valueOf((String) serializedData.get("type")),
116+
(int) serializedData.get("pages"),
117+
(EnumSet<Modifier>) serializedData.get("modifiers"),
118+
(List<MenuItem>) serializedData.get("items")
119+
);
120+
}
121+
return data;
122+
}
123+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package me.flame.menus.menu;
2+
3+
import me.flame.menus.items.MenuItem;
4+
import org.bukkit.inventory.ItemStack;
5+
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
import java.util.Optional;
9+
10+
@SuppressWarnings("unused")
11+
public interface Pagination {
12+
/**
13+
* Goes to the next page
14+
*
15+
* @return False if there is no next page.
16+
*/
17+
boolean next();
18+
19+
/**
20+
* Goes to the previous page if possible
21+
*
22+
* @return False if there is no previous page.
23+
*/
24+
boolean previous();
25+
26+
/**
27+
* Goes to the specified page
28+
*
29+
* @return False if there is no next page.
30+
*/
31+
boolean page(int pageNum);
32+
33+
@Nullable Page getPage(int index);
34+
35+
Optional<Page> getOptionalPage(int index);
36+
37+
void addPageItems(MenuItem... items);
38+
39+
void addPageItems(ItemStack... items);
40+
41+
void setPageItem(Slot slot, MenuItem item);
42+
43+
void removePageItem(Slot slot);
44+
45+
void removePageItem(int slot);
46+
47+
void removePageItem(ItemStack slot);
48+
49+
void removePageItem(MenuItem slot);
50+
51+
void removePageItem(ItemStack... slot);
52+
53+
void removePageItem(MenuItem... slot);
54+
55+
void setPageItem(int[] slots, MenuItem[] items);
56+
57+
void setPageItem(int slot, ItemStack item);
58+
59+
void setPageItem(Slot slot, ItemStack item);
60+
61+
void setPageItem(Slot[] slots, ItemStack... items);
62+
63+
void setPageItem(Slot[] slots, ItemStack item);
64+
65+
/**
66+
* Gets the current page number
67+
*
68+
* @return The current page number
69+
*/
70+
int getCurrentPageNumber();
71+
72+
/**
73+
* Gets the number of pages the GUI has
74+
*
75+
* @return The number of pages
76+
*/
77+
int getPagesSize();
78+
79+
@NotNull
80+
Page getCurrentPage();
81+
}

0 commit comments

Comments
 (0)