X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Finventorymanager.h;h=4ad5d3f49ae0b2d8eccae0f0ed4e440269873377;hb=8dae7b47fcc1c26251c8006efbc9ee8af152f87a;hp=916b3ea31f36fc83d8cc03afa27e02dd3c301436;hpb=c772e0e18c90e48f237e37a45230a1dacd945786;p=minetest.git diff --git a/src/inventorymanager.h b/src/inventorymanager.h index 916b3ea31..4ad5d3f49 100644 --- a/src/inventorymanager.h +++ b/src/inventorymanager.h @@ -17,8 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef INVENTORYMANAGER_HEADER -#define INVENTORYMANAGER_HEADER +#pragma once #include "inventory.h" #include @@ -55,7 +54,7 @@ struct InventoryLocation type = PLAYER; name = name_; } - void setNodeMeta(v3s16 p_) + void setNodeMeta(const v3s16 &p_) { type = NODEMETA; p = p_; @@ -98,7 +97,7 @@ struct InventoryLocation std::string dump() const; void serialize(std::ostream &os) const; void deSerialize(std::istream &is); - void deSerialize(std::string s); + void deSerialize(const std::string &s); }; struct InventoryAction; @@ -106,13 +105,13 @@ struct InventoryAction; class InventoryManager { public: - InventoryManager(){} - virtual ~InventoryManager(){} + InventoryManager() = default; + virtual ~InventoryManager() = default; // Get an inventory (server and client) virtual Inventory* getInventory(const InventoryLocation &loc){return NULL;} // Set modified (will be saved and sent over network; only on server) - virtual void setInventoryModified(const InventoryLocation &loc, bool playerSend = true){} + virtual void setInventoryModified(const InventoryLocation &loc) {} // Send inventory action to server (only on client) virtual void inventoryAction(InventoryAction *a){} }; @@ -132,19 +131,23 @@ struct InventoryAction virtual void apply(InventoryManager *mgr, ServerActiveObject *player, IGameDef *gamedef) = 0; virtual void clientApply(InventoryManager *mgr, IGameDef *gamedef) = 0; - virtual ~InventoryAction() {}; + virtual ~InventoryAction() = default;; }; -struct IMoveAction : public InventoryAction +struct MoveAction { - // count=0 means "everything" - u16 count = 0; InventoryLocation from_inv; std::string from_list; s16 from_i = -1; InventoryLocation to_inv; std::string to_list; s16 to_i = -1; +}; + +struct IMoveAction : public InventoryAction, public MoveAction +{ + // count=0 means "everything" + u16 count = 0; bool move_somewhere = false; // treat these as private @@ -152,7 +155,7 @@ struct IMoveAction : public InventoryAction bool caused_by_move_somewhere = false; u32 move_count = 0; - IMoveAction() {} + IMoveAction() = default; IMoveAction(std::istream &is, bool somewhere); @@ -180,17 +183,26 @@ struct IMoveAction : public InventoryAction void apply(InventoryManager *mgr, ServerActiveObject *player, IGameDef *gamedef); void clientApply(InventoryManager *mgr, IGameDef *gamedef); + + void swapDirections(); + + void onPutAndOnTake(const ItemStack &src_item, ServerActiveObject *player) const; + + void onMove(int count, ServerActiveObject *player) const; + + int allowPut(const ItemStack &dst_item, ServerActiveObject *player) const; + + int allowTake(const ItemStack &src_item, ServerActiveObject *player) const; + + int allowMove(int try_take_count, ServerActiveObject *player) const; }; -struct IDropAction : public InventoryAction +struct IDropAction : public InventoryAction, public MoveAction { // count=0 means "everything" u16 count = 0; - InventoryLocation from_inv; - std::string from_list; - s16 from_i = -1; - IDropAction() {} + IDropAction() = default; IDropAction(std::istream &is); @@ -219,7 +231,7 @@ struct ICraftAction : public InventoryAction u16 count = 0; InventoryLocation craft_inv; - ICraftAction() {} + ICraftAction() = default; ICraftAction(std::istream &is); @@ -244,6 +256,3 @@ struct ICraftAction : public InventoryAction bool getCraftingResult(Inventory *inv, ItemStack &result, std::vector &output_replacements, bool decrementInput, IGameDef *gamedef); - -#endif -