mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-20 06:43:49 -07:00
SPIGOT-3981: Make custom inventories return specialised types where practical.
By: Senmori <thesenmori@gmail.com>
This commit is contained in:
@@ -861,13 +861,27 @@ public final class Bukkit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an empty inventory of the specified type. If the type is {@link
|
* Creates an empty inventory with the specified type and title. If the type
|
||||||
* InventoryType#CHEST}, the new inventory has a size of 27; otherwise the
|
* is {@link InventoryType#CHEST}, the new inventory has a size of 27;
|
||||||
* new inventory has the normal size for its type.
|
* otherwise the new inventory has the normal size for its type.<br>
|
||||||
|
* It should be noted that some inventory types do not support titles and
|
||||||
|
* may not render with said titles on the Minecraft client.
|
||||||
|
* <br>
|
||||||
|
* {@link InventoryType#WORKBENCH} will not process crafting recipes if
|
||||||
|
* created with this method. Use
|
||||||
|
* {@link Player#openWorkbench(Location, boolean)} instead.
|
||||||
|
* <br>
|
||||||
|
* {@link InventoryType#ENCHANTING} will not process {@link ItemStack}s
|
||||||
|
* for possible enchanting results. Use
|
||||||
|
* {@link Player#openEnchanting(Location, boolean)} instead.
|
||||||
*
|
*
|
||||||
* @param owner the holder of the inventory, or null to indicate no holder
|
* @param owner the holder of the inventory, or null to indicate no holder
|
||||||
* @param type the type of inventory to create
|
* @param type the type of inventory to create
|
||||||
* @return a new inventory
|
* @return a new inventory
|
||||||
|
* @throws IllegalArgumentException if the {@link InventoryType} cannot be
|
||||||
|
* viewed.
|
||||||
|
*
|
||||||
|
* @see InventoryType#isCreatable()
|
||||||
*/
|
*/
|
||||||
public static Inventory createInventory(InventoryHolder owner, InventoryType type) {
|
public static Inventory createInventory(InventoryHolder owner, InventoryType type) {
|
||||||
return server.createInventory(owner, type);
|
return server.createInventory(owner, type);
|
||||||
@@ -879,11 +893,23 @@ public final class Bukkit {
|
|||||||
* otherwise the new inventory has the normal size for its type.<br>
|
* otherwise the new inventory has the normal size for its type.<br>
|
||||||
* It should be noted that some inventory types do not support titles and
|
* It should be noted that some inventory types do not support titles and
|
||||||
* may not render with said titles on the Minecraft client.
|
* may not render with said titles on the Minecraft client.
|
||||||
|
* <br>
|
||||||
|
* {@link InventoryType#WORKBENCH} will not process crafting recipes if
|
||||||
|
* created with this method. Use
|
||||||
|
* {@link Player#openWorkbench(Location, boolean)} instead.
|
||||||
|
* <br>
|
||||||
|
* {@link InventoryType#ENCHANTING} will not process {@link ItemStack}s
|
||||||
|
* for possible enchanting results. Use
|
||||||
|
* {@link Player#openEnchanting(Location, boolean)} instead.
|
||||||
*
|
*
|
||||||
* @param owner The holder of the inventory; can be null if there's no holder.
|
* @param owner The holder of the inventory; can be null if there's no holder.
|
||||||
* @param type The type of inventory to create.
|
* @param type The type of inventory to create.
|
||||||
* @param title The title of the inventory, to be displayed when it is viewed.
|
* @param title The title of the inventory, to be displayed when it is viewed.
|
||||||
* @return The new inventory.
|
* @return The new inventory.
|
||||||
|
* @throws IllegalArgumentException if the {@link InventoryType} cannot be
|
||||||
|
* viewed.
|
||||||
|
*
|
||||||
|
* @see InventoryType#isCreatable()
|
||||||
*/
|
*/
|
||||||
public static Inventory createInventory(InventoryHolder owner, InventoryType type, String title) {
|
public static Inventory createInventory(InventoryHolder owner, InventoryType type, String title) {
|
||||||
return server.createInventory(owner, type, title);
|
return server.createInventory(owner, type, title);
|
||||||
|
@@ -701,13 +701,27 @@ public interface Server extends PluginMessageRecipient {
|
|||||||
public HelpMap getHelpMap();
|
public HelpMap getHelpMap();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an empty inventory of the specified type. If the type is {@link
|
* Creates an empty inventory with the specified type and title. If the type
|
||||||
* InventoryType#CHEST}, the new inventory has a size of 27; otherwise the
|
* is {@link InventoryType#CHEST}, the new inventory has a size of 27;
|
||||||
* new inventory has the normal size for its type.
|
* otherwise the new inventory has the normal size for its type.<br>
|
||||||
|
* It should be noted that some inventory types do not support titles and
|
||||||
|
* may not render with said titles on the Minecraft client.
|
||||||
|
* <br>
|
||||||
|
* {@link InventoryType#WORKBENCH} will not process crafting recipes if
|
||||||
|
* created with this method. Use
|
||||||
|
* {@link Player#openWorkbench(Location, boolean)} instead.
|
||||||
|
* <br>
|
||||||
|
* {@link InventoryType#ENCHANTING} will not process {@link ItemStack}s
|
||||||
|
* for possible enchanting results. Use
|
||||||
|
* {@link Player#openEnchanting(Location, boolean)} instead.
|
||||||
*
|
*
|
||||||
* @param owner the holder of the inventory, or null to indicate no holder
|
* @param owner the holder of the inventory, or null to indicate no holder
|
||||||
* @param type the type of inventory to create
|
* @param type the type of inventory to create
|
||||||
* @return a new inventory
|
* @return a new inventory
|
||||||
|
* @throws IllegalArgumentException if the {@link InventoryType} cannot be
|
||||||
|
* viewed.
|
||||||
|
*
|
||||||
|
* @see InventoryType#isCreatable()
|
||||||
*/
|
*/
|
||||||
Inventory createInventory(InventoryHolder owner, InventoryType type);
|
Inventory createInventory(InventoryHolder owner, InventoryType type);
|
||||||
|
|
||||||
@@ -717,11 +731,23 @@ public interface Server extends PluginMessageRecipient {
|
|||||||
* otherwise the new inventory has the normal size for its type.<br>
|
* otherwise the new inventory has the normal size for its type.<br>
|
||||||
* It should be noted that some inventory types do not support titles and
|
* It should be noted that some inventory types do not support titles and
|
||||||
* may not render with said titles on the Minecraft client.
|
* may not render with said titles on the Minecraft client.
|
||||||
|
* <br>
|
||||||
|
* {@link InventoryType#WORKBENCH} will not process crafting recipes if
|
||||||
|
* created with this method. Use
|
||||||
|
* {@link Player#openWorkbench(Location, boolean)} instead.
|
||||||
|
* <br>
|
||||||
|
* {@link InventoryType#ENCHANTING} will not process {@link ItemStack}s
|
||||||
|
* for possible enchanting results. Use
|
||||||
|
* {@link Player#openEnchanting(Location, boolean)} instead.
|
||||||
*
|
*
|
||||||
* @param owner The holder of the inventory; can be null if there's no holder.
|
* @param owner The holder of the inventory; can be null if there's no holder.
|
||||||
* @param type The type of inventory to create.
|
* @param type The type of inventory to create.
|
||||||
* @param title The title of the inventory, to be displayed when it is viewed.
|
* @param title The title of the inventory, to be displayed when it is viewed.
|
||||||
* @return The new inventory.
|
* @return The new inventory.
|
||||||
|
* @throws IllegalArgumentException if the {@link InventoryType} cannot be
|
||||||
|
* viewed.
|
||||||
|
*
|
||||||
|
* @see InventoryType#isCreatable()
|
||||||
*/
|
*/
|
||||||
Inventory createInventory(InventoryHolder owner, InventoryType type, String title);
|
Inventory createInventory(InventoryHolder owner, InventoryType type, String title);
|
||||||
|
|
||||||
|
@@ -1,5 +1,22 @@
|
|||||||
package org.bukkit.event.inventory;
|
package org.bukkit.event.inventory;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the different kinds of inventories available in Bukkit.
|
||||||
|
* <br>
|
||||||
|
* Only InventoryTypes marked {@link #isCreatable()} can be created.
|
||||||
|
* <br>
|
||||||
|
* The current list of inventories that cannot be created via
|
||||||
|
* {@link org.bukkit.Bukkit#createInventory} are:<br>
|
||||||
|
* <blockquote>
|
||||||
|
* {@link InventoryType#CREATIVE} and {@link InventoryType#CRAFTING}
|
||||||
|
* </blockquote>
|
||||||
|
*
|
||||||
|
* See {@link org.bukkit.Bukkit#createInventory} for more information.
|
||||||
|
*
|
||||||
|
* @see org.bukkit.Bukkit#createInventory(InventoryHolder, InventoryType)
|
||||||
|
*/
|
||||||
public enum InventoryType {
|
public enum InventoryType {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,7 +45,7 @@ public enum InventoryType {
|
|||||||
* A player's crafting inventory, with 4 CRAFTING slots and a RESULT slot.
|
* A player's crafting inventory, with 4 CRAFTING slots and a RESULT slot.
|
||||||
* Also implies that the 4 ARMOR slots are accessible.
|
* Also implies that the 4 ARMOR slots are accessible.
|
||||||
*/
|
*/
|
||||||
CRAFTING(5,"Crafting"),
|
CRAFTING(5,"Crafting", false),
|
||||||
/**
|
/**
|
||||||
* An enchantment table inventory, with two CRAFTING slots and three
|
* An enchantment table inventory, with two CRAFTING slots and three
|
||||||
* enchanting buttons.
|
* enchanting buttons.
|
||||||
@@ -49,7 +66,7 @@ public enum InventoryType {
|
|||||||
* else. (The actual creative interface with the items is client-side and
|
* else. (The actual creative interface with the items is client-side and
|
||||||
* cannot be altered by the server.)
|
* cannot be altered by the server.)
|
||||||
*/
|
*/
|
||||||
CREATIVE(9,"Creative"),
|
CREATIVE(9,"Creative", false),
|
||||||
/**
|
/**
|
||||||
* The merchant inventory, with 2 TRADE-IN slots, and 1 RESULT slot.
|
* The merchant inventory, with 2 TRADE-IN slots, and 1 RESULT slot.
|
||||||
*/
|
*/
|
||||||
@@ -78,10 +95,16 @@ public enum InventoryType {
|
|||||||
|
|
||||||
private final int size;
|
private final int size;
|
||||||
private final String title;
|
private final String title;
|
||||||
|
private final boolean isCreatable;
|
||||||
|
|
||||||
private InventoryType(int defaultSize, String defaultTitle) {
|
private InventoryType(int defaultSize, String defaultTitle) {
|
||||||
|
this(defaultSize, defaultTitle, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private InventoryType(int defaultSize, String defaultTitle, boolean isCreatable) {
|
||||||
size = defaultSize;
|
size = defaultSize;
|
||||||
title = defaultTitle;
|
title = defaultTitle;
|
||||||
|
this.isCreatable = isCreatable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDefaultSize() {
|
public int getDefaultSize() {
|
||||||
@@ -92,6 +115,16 @@ public enum InventoryType {
|
|||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Denotes that this InventoryType can be created via the normal
|
||||||
|
* {@link org.bukkit.Bukkit#createInventory} methods.
|
||||||
|
*
|
||||||
|
* @return if this InventoryType can be created and shown to a player
|
||||||
|
*/
|
||||||
|
public boolean isCreatable() {
|
||||||
|
return isCreatable;
|
||||||
|
}
|
||||||
|
|
||||||
public enum SlotType {
|
public enum SlotType {
|
||||||
/**
|
/**
|
||||||
* A result slot in a furnace or crafting inventory.
|
* A result slot in a furnace or crafting inventory.
|
||||||
|
Reference in New Issue
Block a user