Cuberite
A lightweight, fast and extensible game server for Minecraft
|
Represents a UI window. More...
#include <Window.h>
Public Types | |
enum | WindowType { wtInventory = -1, wtChest = 0, wtWorkbench = 1, wtFurnace = 2, wtDropSpenser = 3, wtEnchantment = 4, wtBrewery = 5, wtNPCTrade = 6, wtBeacon = 7, wtAnvil = 8, wtHopper = 9, wtDropper = 10, wtAnimalChest = 11 } |
Public Member Functions | |
void | BroadcastSlot (cSlotArea *a_Area, int a_LocalSlotNum) |
Sends the specified slot's contents to all clients of this window; the slot is specified as local in an area. More... | |
void | BroadcastWholeWindow (void) |
Sends the contents of the whole window to all clients of this window. More... | |
virtual void | Clicked (cPlayer &a_Player, int a_WindowID, short a_SlotNum, eClickAction a_ClickAction, const cItem &a_ClickedItem) |
Handles a click event from a player. More... | |
virtual bool | ClosedByPlayer (cPlayer &a_Player, bool a_CanRefuse) |
Called when a player closes this window; notifies all slot areas. More... | |
bool | CollectItemsToHand (cItem &a_Dragging, cSlotArea &a_Area, cPlayer &a_Player, bool a_CollectFullStacks) |
Called on DblClicking to collect all stackable items from all areas into hand. More... | |
cWindow (WindowType a_WindowType, const AString &a_WindowTitle) | |
virtual void | DistributeStack (cItem &a_ItemStack, int a_Slot, cPlayer &a_Player, cSlotArea *a_ClickedArea, bool a_ShouldApply)=0 |
Called on shift-clicking to distribute the stack into other areas; Modifies a_ItemStack as it is distributed! if a_ShouldApply is true, the changes are written into the slots; if a_ShouldApply is false, only a_ItemStack is modified to reflect the number of fits (for fit-testing purposes) More... | |
void | DistributeStackToAreas (cItem &a_ItemStack, cPlayer &a_Player, cSlotAreas &a_AreasInOrder, bool a_ShouldApply, bool a_BackFill) |
Called from DistributeStack() to distribute the stack into a_AreasInOrder; Modifies a_ItemStack as it is distributed! If a_ShouldApply is true, the changes are written into the slots; if a_ShouldApply is false, only a_ItemStack is modified to reflect the number of fits (for fit-testing purposes) If a_BackFill is true, the areas will be filled from the back (right side). More... | |
bool | ForEachClient (cClientHandleCallback a_Callback) |
Calls the callback safely for each client that has this window open; returns true if all clients have been enumerated. More... | |
bool | ForEachPlayer (cPlayerListCallback a_Callback) |
Calls the callback safely for each player that has this window open; returns true if all players have been enumerated. More... | |
int | GetNumNonInventorySlots (void) const |
Returns the number of slots, excluding the player's inventory (used for network protocols) More... | |
int | GetNumSlots (void) const |
Returns the total number of slots. More... | |
cWindowOwner * | GetOwner (void) |
const cItem * | GetSlot (cPlayer &a_Player, int a_SlotNum) const |
Returns the item at the specified slot for the specified player. More... | |
void | GetSlots (cPlayer &a_Player, cItems &a_Slots) const |
Fills a_Slots with the slots read from m_SlotAreas[], for the specified player. More... | |
char | GetWindowID (void) const |
const AString & | GetWindowTitle () const |
int | GetWindowType (void) const |
const AString | GetWindowTypeName (void) const |
Returns the textual representation of the window's type, such as "minecraft:chest". More... | |
bool | IsSlotInPlayerHotbar (int a_SlotNum) const |
Returns true if the specified slot is in the Player Hotbar slotarea. More... | |
bool | IsSlotInPlayerInventory (int a_SlotNum) const |
Returns true if the specified slot is in the Player Main Inventory or Hotbar slotareas. More... | |
bool | IsSlotInPlayerMainInventory (int a_SlotNum) const |
Returns true if the specified slot is in the Player Main Inventory slotarea. More... | |
virtual void | OpenedByPlayer (cPlayer &a_Player) |
void | OwnerDestroyed (void) |
void | SendSlot (cPlayer &a_Player, cSlotArea *a_SlotArea, int a_RelativeSlotNum) |
Used by cSlotAreas to send individual slots to clients, a_RelativeSlotNum is the slot number relative to a_SlotArea. More... | |
void | SendWholeWindow (cClientHandle &a_Client) |
Sends the contents of the whole window to the specified client. More... | |
void | SetOwner (cWindowOwner *a_Owner) |
virtual void | SetProperty (short a_Property, short a_Value) |
Updates a numerical property associated with the window. More... | |
virtual void | SetProperty (short a_Property, short a_Value, cPlayer &a_Player) |
Updates a numerical property associated with the window. More... | |
void | SetSlot (cPlayer &a_Player, int a_SlotNum, const cItem &a_Item) |
Sets the item to the specified slot for the specified player. More... | |
void | SetWindowTitle (const AString &a_WindowTitle) |
virtual | ~cWindow () |
Static Public Attributes | |
static const int | c_NumInventorySlots = 36 |
Protected Member Functions | |
virtual void | Destroy (void) |
Sets the internal flag as "destroyed"; notifies the owner that the window is destroying. More... | |
int | DistributeItemToSlots (cPlayer &a_Player, const cItem &a_Item, int a_NumToEachSlot, const cSlotNums &a_SlotNums, bool a_LimitItems=true) |
Distributes a_NumToEachSlot items into the slots specified in a_SlotNums; returns the total number of items distributed. More... | |
cSlotArea * | GetSlotArea (int a_GlobalSlotNum, int &a_LocalSlotNum) |
Returns the correct slot area for the specified window-global SlotNum Also returns the area-local SlotNum corresponding to the GlobalSlotNum If the global SlotNum is out of range, returns nullptr. More... | |
const cSlotArea * | GetSlotArea (int a_GlobalSlotNum, int &a_LocalSlotNum) const |
Returns the correct slot area for the specified window-global SlotNum Also returns the area-local SlotNum corresponding to the GlobalSlotNum If the global SlotNum is out of range, returns nullptr. More... | |
void | OnLeftPaintEnd (cPlayer &a_Player) |
Processes the entire action stored in the internal structures for inventory painting; distributes as many items as possible. More... | |
void | OnMiddlePaintEnd (cPlayer &a_Player) |
Processes the entire action stored in the internal structures for inventory painting; distributes a full stack into each slot. More... | |
void | OnPaintBegin (cPlayer &a_Player) |
Prepares the internal structures for inventory painting from the specified player. More... | |
void | OnPaintProgress (cPlayer &a_Player, int a_SlotNum) |
Adds the slot to the internal structures for inventory painting by the specified player. More... | |
void | OnRightPaintEnd (cPlayer &a_Player) |
Processes the entire action stored in the internal structures for inventory painting; distributes one item into each slot. More... | |
Protected Attributes | |
cCriticalSection | m_CS |
bool | m_IsDestroyed |
cPlayerList | m_OpenedBy |
cWindowOwner * | m_Owner |
cSlotAreas | m_SlotAreas |
char | m_WindowID |
AString | m_WindowTitle |
int | m_WindowType |
Static Protected Attributes | |
static Byte | m_WindowIDCounter = 0 |
Represents a UI window.
Each window has a list of players that are currently using it When there's no player using a window, it is destroyed. A window consists of several areas of slots with similar functionality - for example the crafting grid area, or the inventory area. Each area knows what its slots are (GetSlot() function) and can handle mouse clicks. The window acts only as a top-level container for those areas, redirecting the click events to the correct areas. Inventory painting, introduced in 1.5, is handled by the window, too
enum cWindow::WindowType |
cWindow::cWindow | ( | WindowType | a_WindowType, |
const AString & | a_WindowTitle | ||
) |
Definition at line 30 of file Window.cpp.
|
virtual |
Definition at line 51 of file Window.cpp.
void cWindow::BroadcastSlot | ( | cSlotArea * | a_Area, |
int | a_LocalSlotNum | ||
) |
Sends the specified slot's contents to all clients of this window; the slot is specified as local in an area.
Definition at line 695 of file Window.cpp.
void cWindow::BroadcastWholeWindow | ( | void | ) |
Sends the contents of the whole window to all clients of this window.
Definition at line 738 of file Window.cpp.
|
virtual |
Handles a click event from a player.
Reimplemented in cLuaWindow.
Definition at line 199 of file Window.cpp.
|
virtual |
Called when a player closes this window; notifies all slot areas.
Returns true if close accepted
Reimplemented in cLuaWindow, and cChestWindow.
Definition at line 308 of file Window.cpp.
bool cWindow::CollectItemsToHand | ( | cItem & | a_Dragging, |
cSlotArea & | a_Area, | ||
cPlayer & | a_Player, | ||
bool | a_CollectFullStacks | ||
) |
Called on DblClicking to collect all stackable items from all areas into hand.
The items are accumulated in a_Dragging and removed from the SlotAreas immediately. If a_CollectFullStacks is false, slots with full stacks in the area are skipped while collecting. Returns true if full stack has been collected, false if there's space remaining to fill.
Definition at line 424 of file Window.cpp.
|
protectedvirtual |
Sets the internal flag as "destroyed"; notifies the owner that the window is destroying.
Reimplemented in cLuaWindow.
Definition at line 470 of file Window.cpp.
|
protected |
Distributes a_NumToEachSlot items into the slots specified in a_SlotNums; returns the total number of items distributed.
a_LimitItems | if false, no checks are performed on a_Item.m_ItemCount. |
Definition at line 647 of file Window.cpp.
|
pure virtual |
Called on shift-clicking to distribute the stack into other areas; Modifies a_ItemStack as it is distributed! if a_ShouldApply is true, the changes are written into the slots; if a_ShouldApply is false, only a_ItemStack is modified to reflect the number of fits (for fit-testing purposes)
Implemented in cLuaWindow, cMinecartWithChestWindow, cAnvilWindow, cChestWindow, cEnchantingWindow, cBeaconWindow, cEnderChestWindow, cBrewingstandWindow, cDropSpenserWindow, cCraftingWindow, cFurnaceWindow, cHopperWindow, cInventoryWindow, and cHorseWindow.
void cWindow::DistributeStackToAreas | ( | cItem & | a_ItemStack, |
cPlayer & | a_Player, | ||
cSlotAreas & | a_AreasInOrder, | ||
bool | a_ShouldApply, | ||
bool | a_BackFill | ||
) |
Called from DistributeStack() to distribute the stack into a_AreasInOrder; Modifies a_ItemStack as it is distributed! If a_ShouldApply is true, the changes are written into the slots; if a_ShouldApply is false, only a_ItemStack is modified to reflect the number of fits (for fit-testing purposes) If a_BackFill is true, the areas will be filled from the back (right side).
(Example: Empty Hotbar -> Item get in slot 8, not slot 0)
Definition at line 401 of file Window.cpp.
bool cWindow::ForEachClient | ( | cClientHandleCallback | a_Callback | ) |
Calls the callback safely for each client that has this window open; returns true if all clients have been enumerated.
Definition at line 384 of file Window.cpp.
bool cWindow::ForEachPlayer | ( | cPlayerListCallback | a_Callback | ) |
Calls the callback safely for each player that has this window open; returns true if all players have been enumerated.
Definition at line 367 of file Window.cpp.
|
inline |
int cWindow::GetNumSlots | ( | void | ) | const |
Returns the total number of slots.
Definition at line 92 of file Window.cpp.
|
inline |
Returns the item at the specified slot for the specified player.
Returns nullptr if invalid SlotNum requested
Definition at line 106 of file Window.cpp.
|
protected |
Returns the correct slot area for the specified window-global SlotNum Also returns the area-local SlotNum corresponding to the GlobalSlotNum If the global SlotNum is out of range, returns nullptr.
Definition at line 484 of file Window.cpp.
|
protected |
Returns the correct slot area for the specified window-global SlotNum Also returns the area-local SlotNum corresponding to the GlobalSlotNum If the global SlotNum is out of range, returns nullptr.
Const version.
Definition at line 515 of file Window.cpp.
Fills a_Slots with the slots read from m_SlotAreas[], for the specified player.
Definition at line 173 of file Window.cpp.
const AString cWindow::GetWindowTypeName | ( | void | ) | const |
Returns the textual representation of the window's type, such as "minecraft:chest".
Definition at line 64 of file Window.cpp.
bool cWindow::IsSlotInPlayerHotbar | ( | int | a_SlotNum | ) | const |
Returns true if the specified slot is in the Player Hotbar slotarea.
Definition at line 151 of file Window.cpp.
bool cWindow::IsSlotInPlayerInventory | ( | int | a_SlotNum | ) | const |
Returns true if the specified slot is in the Player Main Inventory or Hotbar slotareas.
Note that returns false for Armor.
Definition at line 162 of file Window.cpp.
bool cWindow::IsSlotInPlayerMainInventory | ( | int | a_SlotNum | ) | const |
Returns true if the specified slot is in the Player Main Inventory slotarea.
Definition at line 140 of file Window.cpp.
|
protected |
Processes the entire action stored in the internal structures for inventory painting; distributes as many items as possible.
Definition at line 566 of file Window.cpp.
|
protected |
Processes the entire action stored in the internal structures for inventory painting; distributes a full stack into each slot.
Definition at line 623 of file Window.cpp.
|
protected |
Prepares the internal structures for inventory painting from the specified player.
Definition at line 546 of file Window.cpp.
|
protected |
Adds the slot to the internal structures for inventory painting by the specified player.
Definition at line 556 of file Window.cpp.
|
protected |
Processes the entire action stored in the internal structures for inventory painting; distributes one item into each slot.
Definition at line 595 of file Window.cpp.
|
virtual |
Reimplemented in cLuaWindow, cBeaconWindow, and cChestWindow.
Definition at line 286 of file Window.cpp.
void cWindow::OwnerDestroyed | ( | void | ) |
Definition at line 352 of file Window.cpp.
Used by cSlotAreas to send individual slots to clients, a_RelativeSlotNum is the slot number relative to a_SlotArea.
Definition at line 441 of file Window.cpp.
void cWindow::SendWholeWindow | ( | cClientHandle & | a_Client | ) |
Sends the contents of the whole window to the specified client.
Definition at line 729 of file Window.cpp.
|
inline |
|
virtual |
Updates a numerical property associated with the window.
Typically used for furnace progressbars. Sends the UpdateWindowProperty packet to all clients of the window
Reimplemented in cEnchantingWindow.
Definition at line 751 of file Window.cpp.
|
virtual |
Updates a numerical property associated with the window.
Typically used for furnace progressbars. Sends the UpdateWindowProperty packet only to the specified player
Reimplemented in cEnchantingWindow.
Definition at line 764 of file Window.cpp.
Sets the item to the specified slot for the specified player.
Definition at line 123 of file Window.cpp.
|
inline |
|
protected |
|
protected |
|
protected |
|
protected |