001    package org.bukkit.entity;
002    
003    import org.bukkit.GameMode;
004    import org.bukkit.Location;
005    import org.bukkit.inventory.Inventory;
006    import org.bukkit.inventory.InventoryHolder;
007    import org.bukkit.inventory.InventoryView;
008    import org.bukkit.inventory.ItemStack;
009    import org.bukkit.inventory.PlayerInventory;
010    import org.bukkit.permissions.Permissible;
011    
012    /**
013     * Represents a human entity, such as an NPC or a player
014     */
015    public interface HumanEntity extends LivingEntity, AnimalTamer, Permissible, InventoryHolder {
016    
017        /**
018         * Returns the name of this player
019         *
020         * @return Player name
021         */
022        public String getName();
023    
024        /**
025         * Get the player's inventory.
026         *
027         * @return The inventory of the player, this also contains the armor
028         *     slots.
029         */
030        public PlayerInventory getInventory();
031    
032        /**
033         * Get the player's EnderChest inventory
034         *
035         * @return The EnderChest of the player
036         */
037        public Inventory getEnderChest();
038    
039        /**
040         * If the player currently has an inventory window open, this method will
041         * set a property of that window, such as the state of a progress bar.
042         *
043         * @param prop The property.
044         * @param value The value to set the property to.
045         * @return True if the property was successfully set.
046         */
047        public boolean setWindowProperty(InventoryView.Property prop, int value);
048    
049        /**
050         * Gets the inventory view the player is currently viewing. If they do not
051         * have an inventory window open, it returns their internal crafting view.
052         *
053         * @return The inventory view.
054         */
055        public InventoryView getOpenInventory();
056    
057        /**
058         * Opens an inventory window with the specified inventory on the top and
059         * the player's inventory on the bottom.
060         *
061         * @param inventory The inventory to open
062         * @return The newly opened inventory view
063         */
064        public InventoryView openInventory(Inventory inventory);
065    
066        /**
067         * Opens an empty workbench inventory window with the player's inventory
068         * on the bottom.
069         *
070         * @param location The location to attach it to. If null, the player's
071         *     location is used.
072         * @param force If false, and there is no workbench block at the location,
073         *     no inventory will be opened and null will be returned.
074         * @return The newly opened inventory view, or null if it could not be
075         *     opened.
076         */
077        public InventoryView openWorkbench(Location location, boolean force);
078    
079        /**
080         * Opens an empty enchanting inventory window with the player's inventory
081         * on the bottom.
082         *
083         * @param location The location to attach it to. If null, the player's
084         *     location is used.
085         * @param force If false, and there is no enchanting table at the
086         *     location, no inventory will be opened and null will be returned.
087         * @return The newly opened inventory view, or null if it could not be
088         *     opened.
089         */
090        public InventoryView openEnchanting(Location location, boolean force);
091    
092        /**
093         * Opens an inventory window to the specified inventory view.
094         *
095         * @param inventory The view to open
096         */
097        public void openInventory(InventoryView inventory);
098    
099        /**
100         * Force-closes the currently open inventory view for this player, if any.
101         */
102        public void closeInventory();
103    
104        /**
105         * Returns the ItemStack currently in your hand, can be empty.
106         *
107         * @return The ItemStack of the item you are currently holding.
108         */
109        public ItemStack getItemInHand();
110    
111        /**
112         * Sets the item to the given ItemStack, this will replace whatever the
113         * user was holding.
114         *
115         * @param item The ItemStack which will end up in the hand
116         */
117        public void setItemInHand(ItemStack item);
118    
119        /**
120         * Returns the ItemStack currently on your cursor, can be empty. Will
121         * always be empty if the player currently has no open window.
122         *
123         * @return The ItemStack of the item you are currently moving around.
124         */
125        public ItemStack getItemOnCursor();
126    
127        /**
128         * Sets the item to the given ItemStack, this will replace whatever the
129         * user was moving. Will always be empty if the player currently has no
130         * open window.
131         *
132         * @param item The ItemStack which will end up in the hand
133         */
134        public void setItemOnCursor(ItemStack item);
135    
136        /**
137         * Returns whether this player is slumbering.
138         *
139         * @return slumber state
140         */
141        public boolean isSleeping();
142    
143        /**
144         * Get the sleep ticks of the player. This value may be capped.
145         *
146         * @return slumber ticks
147         */
148        public int getSleepTicks();
149    
150        /**
151         * Gets this human's current {@link GameMode}
152         *
153         * @return Current game mode
154         */
155        public GameMode getGameMode();
156    
157        /**
158         * Sets this human's current {@link GameMode}
159         *
160         * @param mode New game mode
161         */
162        public void setGameMode(GameMode mode);
163    
164        /**
165         * Check if the player is currently blocking (ie with a sword).
166         *
167         * @return Whether they are blocking.
168         */
169        public boolean isBlocking();
170    
171        /**
172         * Get the total amount of experience required for the player to level
173         *
174         * @return Experience required to level up
175         */
176        public int getExpToLevel();
177    }