diff --git a/src/main/java/world/bentobox/bentobox/api/panels/Panel.java b/src/main/java/world/bentobox/bentobox/api/panels/Panel.java index 55af3d493..32429ff0b 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/Panel.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/Panel.java @@ -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 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 items, int size, User user, PanelListener listener) { + this(name, items, size, user, listener, Type.INVENTORY); + } + + /** + * @since 1.7.0 + */ + public Panel(String name, Map items, int size, User user, PanelListener listener, Type type) { + makePanel(name, items, size, user, listener, type); + } + protected void makePanel(String name, Map 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 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 en: items.entrySet()) { if (en.getKey() < 54) { diff --git a/src/main/java/world/bentobox/bentobox/api/panels/builders/PanelBuilder.java b/src/main/java/world/bentobox/bentobox/api/panels/builders/PanelBuilder.java index f6ec09edf..a68b6d665 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/builders/PanelBuilder.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/builders/PanelBuilder.java @@ -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; + } }