/
InventoryMenu.java
113 lines (89 loc) · 3.3 KB
/
InventoryMenu.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package net.aufdemrand.denizen.utilities.inventory;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
public class InventoryMenu implements InventoryHolder {
public final static int ROW_SIZE = 9;
protected InventoryMenuItem[] items;
protected Inventory inventory;
protected String title;
protected int size;
protected MenuCloseBehaviour closeBehaviour;
public InventoryMenu(String title, int rows) {
this.title = title;
this.size = rows * ROW_SIZE;
this.items = new InventoryMenuItem[size];
}
public void setMenuCloseBehaviour(MenuCloseBehaviour menuCloseBehaviour) {
this.closeBehaviour = menuCloseBehaviour;
}
public MenuCloseBehaviour getMenuCloseBehaviour() {
return closeBehaviour;
}
public Inventory getInventory() {
if (inventory == null) {
inventory = Bukkit.createInventory(this, size, title);
}
return inventory;
}
public boolean addItem(InventoryMenuItem item, int x, int y) {
return addItem(item, y * ROW_SIZE + x);
}
public boolean addItem(InventoryMenuItem item, int index) {
ItemStack slot = getInventory().getItem(index);
if (slot != null && slot.getType() != Material.AIR) {
return false;
}
getInventory().setItem(index, item.getItemStack());
items[index] = item;
item.setIndex(index);
item.addToMenu(this);
return true;
}
public void selectItem(Player player, int index) {
selectItem(player, index, false, false);
}
public void selectItem(Player player, int index, boolean right, boolean shift) {
InventoryMenuItem item = items[index];
if (item != null) {
item.onClick(player, right, shift);
}
}
public void openMenu(Player player) {
if (getInventory().getViewers().contains(player)) {
throw new IllegalArgumentException(player.getName() + " is already viewing " + getInventory().getTitle());
}
player.openInventory(getInventory());
}
public void updateMenu() {
for (HumanEntity entity : getInventory().getViewers()) {
((Player) entity).updateInventory(); // Currently deprecated, but there is no alternative :(
}
}
public void closeMenu(Player player) {
if (getInventory().getViewers().contains(player)) {
InventoryCloseEvent event = new InventoryCloseEvent(player.getOpenInventory());
Bukkit.getPluginManager().callEvent(event);
player.closeInventory();
}
}
/* -------- General override functions -------- */
@Override
protected InventoryMenu clone() {
InventoryMenu c = new InventoryMenu(title, size);
c.setMenuCloseBehaviour(closeBehaviour);
for (int i = 0; i < items.length; i++) {
addItem(items[i], i);
}
return c;
}
@Override
public String toString() {
return getClass().getSimpleName() + "{title=" + title + "; size=" + size + "}";
}
}