Added various new panel types (#917)

* Add multiple different types of panel.
- Inventory panel -> current
- Hooper panel -> 5 slot panel
- Dropper panel -> 9 slot in 3 rows

* code formatting and javadoc improvements in Panel

* renamed PanelType to Type

* updated to new enum name + javadoc
This commit is contained in:
BONNe 2019-08-27 12:52:26 +03:00 committed by Florian CUNY
parent b9f7d42afa
commit ead0b02454
2 changed files with 65 additions and 6 deletions

View File

@ -7,6 +7,7 @@ import java.util.stream.Collectors;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
@ -31,19 +32,55 @@ public class Panel implements HeadRequester, InventoryHolder {
private User user;
private String name;
public Panel(String name, Map<Integer, PanelItem> items, int size, User user, PanelListener listener) {
makePanel(name, items, size, user, listener);
/**
* Various types of Panel that can be created.
* @since 1.7.0
*/
public enum Type {
INVENTORY,
HOPPER,
DROPPER
}
public Panel() {}
public Panel(String name, Map<Integer, PanelItem> items, int size, User user, PanelListener listener) {
this(name, items, size, user, listener, Type.INVENTORY);
}
/**
* @since 1.7.0
*/
public Panel(String name, Map<Integer, PanelItem> items, int size, User user, PanelListener listener, Type type) {
makePanel(name, items, size, user, listener, type);
}
protected void makePanel(String name, Map<Integer, PanelItem> items, int size, User user,
PanelListener listener) {
PanelListener listener) {
this.makePanel(name, items, size, user, listener, Type.INVENTORY);
}
/**
* @since 1.7.0
*/
protected void makePanel(String name, Map<Integer, PanelItem> items, int size, User user,
PanelListener listener, Type type) {
this.name = name;
this.items = items;
size = fixSize(size);
// Create panel
inventory = Bukkit.createInventory(null, size, name);
switch (type) {
case INVENTORY:
inventory = Bukkit.createInventory(null, fixSize(size), name);
break;
case HOPPER:
inventory = Bukkit.createInventory(null, InventoryType.HOPPER, name);
break;
case DROPPER:
inventory = Bukkit.createInventory(null, InventoryType.DROPPER, name);
break;
}
// Fill the inventory and return
for (Map.Entry<Integer, PanelItem> en: items.entrySet()) {
if (en.getKey() < 54) {

View File

@ -21,6 +21,7 @@ public class PanelBuilder {
private int size;
private User user;
private PanelListener listener;
private Panel.Type type = Panel.Type.INVENTORY;
public PanelBuilder name(String name) {
this.name = ChatColor.translateAlternateColorCodes('&', name);
@ -85,6 +86,18 @@ public class PanelBuilder {
return this;
}
/**
* Sets which Panel.Type will be used.
* Defaults to {@link Panel.Type#INVENTORY}.
* @param type - Panel.Type for this panel.
* @return PanelBuilder
* @since 1.7.0
*/
public PanelBuilder type(Panel.Type type) {
this.type = type;
return this;
}
/**
* Get the next free slot number after the largest slot.
* @return next slot number, or -1 in case none has been found.
@ -108,7 +121,7 @@ public class PanelBuilder {
*/
public Panel build() {
// items.lastKey() is a slot position, so the panel size is this value + 1
return new Panel(name, items, Math.max(size, items.isEmpty() ? size : items.lastKey() + 1), user, listener);
return new Panel(name, items, Math.max(size, items.isEmpty() ? size : items.lastKey() + 1), user, listener, type);
}
/**
@ -145,4 +158,13 @@ public class PanelBuilder {
public PanelListener getListener() {
return listener;
}
/**
* @return the panelType
* @since 1.7.0
*/
public Panel.Type getPanelType() {
return type;
}
}