Cuberite
A lightweight, fast and extensible game server for Minecraft
ItemHandler.h
Go to the documentation of this file.
1 
2 #pragma once
3 
4 #include "../Defines.h"
5 #include "../Item.h"
6 
7 
8 
9 
10 
11 // fwd:
12 class cChunk;
13 class cWorld;
14 class cPlayer;
16 
17 
18 
19 
20 
22 {
23 public:
24 
25  friend class cItem;
26 
31  {
35  };
36 
37  constexpr cItemHandler(int a_ItemType) : m_ItemType(a_ItemType)
38  {
39  }
40 
41 
47  void OnPlayerPlace(cPlayer & a_Player, const cItem & a_HeldItem, Vector3i a_ClickedPosition, BLOCKTYPE a_ClickedBlockType, NIBBLETYPE a_ClickedBlockMeta, eBlockFace a_ClickedBlockFace, Vector3i a_CursorPosition) const;
48 
51  virtual bool OnItemUse(
52  cWorld * a_World,
53  cPlayer * a_Player,
54  cBlockPluginInterface & a_PluginInterface,
55  const cItem & a_HeldItem,
56  const Vector3i a_ClickedBlockPos,
57  eBlockFace a_ClickedBlockFace
58  ) const;
59 
61  virtual void OnItemShoot(cPlayer *, const Vector3i a_BlockPos, eBlockFace a_BlockFace) const
62  {
63  UNUSED(a_BlockPos);
64  UNUSED(a_BlockFace);
65  }
66 
68  virtual void OnUpdate(cWorld * a_World, cPlayer * a_Player, const cItem & a_Item) const
69  {
70  UNUSED(a_World);
71  UNUSED(a_Player);
72  UNUSED(a_Item);
73  }
74 
76  virtual bool OnDiggingBlock(
77  cWorld * a_World, cPlayer * a_Player, const cItem & a_HeldItem,
78  const Vector3i a_ClickedBlockPos,
79  eBlockFace a_ClickedBlockFace
80  ) const;
81 
83  virtual void OnEntityAttack(cPlayer * a_Attacker, cEntity * a_AttackedEntity) const;
84 
86  virtual void OnFoodEaten(cWorld *a_World, cPlayer *a_Player, cItem *a_Item) const;
87 
91  virtual short GetDurabilityLossByAction(eDurabilityLostAction a_Action) const;
92 
94  virtual char GetMaxStackSize(void) const;
95 
96  struct FoodInfo
97  {
98  int FoodLevel;
99  double Saturation;
100 
101  constexpr FoodInfo(int a_FoodLevel, double a_Saturation) :
102  FoodLevel(a_FoodLevel),
103  Saturation(a_Saturation)
104  {
105  }
106  } ;
107 
109  virtual FoodInfo GetFoodInfo(const cItem * a_Item) const;
110 
112  virtual bool EatItem(cPlayer * a_Player, cItem * a_Item) const;
113 
115  virtual bool IsFood(void) const;
116 
118  virtual bool IsDrinkable(short a_ItemDamage) const;
119 
121  virtual bool IsPlaceable(void) const;
122 
124  virtual bool CanRepairWithRawMaterial(short a_ItemType) const;
125 
128  virtual bool CanHarvestBlock(BLOCKTYPE a_BlockType) const;
129 
132  virtual float GetBlockBreakingStrength(BLOCKTYPE a_Block) const;
133 
134 
135 protected:
136 
137  static const cItemHandler & For(int a_ItemType);
138 
139  ~cItemHandler() = default;
140 
141  const int m_ItemType;
142 
147  virtual bool CommitPlacement(cPlayer & a_Player, const cItem & a_HeldItem, Vector3i a_PlacePosition, eBlockFace a_ClickedBlockFace, Vector3i a_CursorPosition) const;
148 };
149 
unsigned char NIBBLETYPE
The datatype used by nibbledata (meta, light, skylight)
Definition: ChunkDef.h:44
unsigned char BLOCKTYPE
The datatype used by blockdata.
Definition: ChunkDef.h:41
eBlockFace
Block face constants, used in PlayerDigging and PlayerBlockPlacement packets and bbox collision calc.
Definition: Defines.h:38
#define UNUSED
Definition: Globals.h:72
This interface is used to decouple block handlers from the cPluginManager dependency through cWorld.
Definition: Chunk.h:36
Definition: Entity.h:76
Definition: Player.h:29
Definition: Item.h:37
virtual float GetBlockBreakingStrength(BLOCKTYPE a_Block) const
Returns the strength to break a specific block.
virtual void OnFoodEaten(cWorld *a_World, cPlayer *a_Player, cItem *a_Item) const
Called after the player has eaten this item.
virtual void OnItemShoot(cPlayer *, const Vector3i a_BlockPos, eBlockFace a_BlockFace) const
Called when the client sends the SHOOT status in the lclk packet (releasing the bow).
Definition: ItemHandler.h:61
virtual void OnEntityAttack(cPlayer *a_Attacker, cEntity *a_AttackedEntity) const
Called when a player attacks an entity with this item in hand.
static const cItemHandler & For(int a_ItemType)
virtual FoodInfo GetFoodInfo(const cItem *a_Item) const
Returns the FoodInfo for this item.
virtual bool IsDrinkable(short a_ItemDamage) const
Indicates if this item is drinkable.
const int m_ItemType
Definition: ItemHandler.h:141
virtual bool OnItemUse(cWorld *a_World, cPlayer *a_Player, cBlockPluginInterface &a_PluginInterface, const cItem &a_HeldItem, const Vector3i a_ClickedBlockPos, eBlockFace a_ClickedBlockFace) const
Called when the player tries to use the item (right mouse button).
virtual bool CanRepairWithRawMaterial(short a_ItemType) const
Can the anvil repair this item, when a_Item is the second input?
virtual bool CommitPlacement(cPlayer &a_Player, const cItem &a_HeldItem, Vector3i a_PlacePosition, eBlockFace a_ClickedBlockFace, Vector3i a_CursorPosition) const
Performs the actual placement of this placeable item.
constexpr cItemHandler(int a_ItemType)
Definition: ItemHandler.h:37
eDurabilityLostAction
Actions that may cause durability of an item may be lost, where the magnitude of the loss depends on ...
Definition: ItemHandler.h:31
@ dlaBreakBlockInstant
Definition: ItemHandler.h:34
virtual bool IsPlaceable(void) const
Blocks simply get placed.
virtual void OnUpdate(cWorld *a_World, cPlayer *a_Player, const cItem &a_Item) const
Called every tick while the item is on the player's inventory (used by maps, for example) - For now,...
Definition: ItemHandler.h:68
~cItemHandler()=default
virtual bool OnDiggingBlock(cWorld *a_World, cPlayer *a_Player, const cItem &a_HeldItem, const Vector3i a_ClickedBlockPos, eBlockFace a_ClickedBlockFace) const
Called while the player digs a block using this item.
virtual short GetDurabilityLossByAction(eDurabilityLostAction a_Action) const
Get the durability lost which the item will get, when a specified action was performed.
virtual char GetMaxStackSize(void) const
Returns the maximum stack size for a given item.
void OnPlayerPlace(cPlayer &a_Player, const cItem &a_HeldItem, Vector3i a_ClickedPosition, BLOCKTYPE a_ClickedBlockType, NIBBLETYPE a_ClickedBlockMeta, eBlockFace a_ClickedBlockFace, Vector3i a_CursorPosition) const
Called when the player tries to place the item (right mouse button, IsPlaceable() == true).
virtual bool EatItem(cPlayer *a_Player, cItem *a_Item) const
Lets the player eat a selected item.
virtual bool CanHarvestBlock(BLOCKTYPE a_BlockType) const
Returns whether this tool / item can harvest a specific block (e.g.
virtual bool IsFood(void) const
Indicates if this item is food.
constexpr FoodInfo(int a_FoodLevel, double a_Saturation)
Definition: ItemHandler.h:101
Definition: World.h:53