Cuberite
A lightweight, fast and extensible game server for Minecraft
ItemPickaxe.h
Go to the documentation of this file.
1 
2 #pragma once
3 
4 #include "ItemHandler.h"
5 
6 
7 
9  public cItemHandler
10 {
12 public:
13  cItemPickaxeHandler(int a_ItemType)
14  : cItemHandler(a_ItemType)
15  {
16 
17  }
18 
19 
20 
21  virtual short GetDurabilityLossByAction(eDurabilityLostAction a_Action) override
22  {
23  switch (a_Action)
24  {
25  case dlaAttackEntity: return 2;
26  case dlaBreakBlock: return 1;
27  case dlaBreakBlockInstant: return 0;
28  }
29  UNREACHABLE("Unsupported durability loss action");
30  }
31 
32 
33 
34  char PickaxeLevel()
35  {
36  switch (m_ItemType)
37  {
38  case E_ITEM_WOODEN_PICKAXE: return 1;
39  case E_ITEM_GOLD_PICKAXE: return 1;
40  case E_ITEM_STONE_PICKAXE: return 2;
41  case E_ITEM_IRON_PICKAXE: return 3;
42  case E_ITEM_DIAMOND_PICKAXE: return 4;
43 
44  default: return 0;
45  }
46  }
47 
48  virtual bool CanHarvestBlock(BLOCKTYPE a_BlockType) override
49  {
50  switch (a_BlockType)
51  {
52  case E_BLOCK_OBSIDIAN:
53  {
54  return PickaxeLevel() >= 4;
55  }
56 
60  case E_BLOCK_GOLD_BLOCK:
61  case E_BLOCK_GOLD_ORE:
64  {
65  return PickaxeLevel() >= 3;
66  }
67 
68  case E_BLOCK_IRON_BLOCK:
69  case E_BLOCK_IRON_ORE:
70  case E_BLOCK_LAPIS_ORE:
72  {
73  return PickaxeLevel() >= 2;
74  }
75 
76  case E_BLOCK_ANVIL:
81  case E_BLOCK_BONE_BLOCK:
83  case E_BLOCK_BRICK:
86  case E_BLOCK_CAULDRON:
87  case E_BLOCK_COAL_ORE:
91  case E_BLOCK_CONCRETE:
93  case E_BLOCK_DISPENSER:
94  case E_BLOCK_DROPPER:
98  case E_BLOCK_END_BRICKS:
99  case E_BLOCK_END_STONE:
100  case E_BLOCK_FURNACE:
105  case E_BLOCK_HOPPER:
106  case E_BLOCK_IRON_BARS:
107  case E_BLOCK_IRON_DOOR:
112  case E_BLOCK_LIT_FURNACE:
115  case E_BLOCK_MOB_SPAWNER:
117  case E_BLOCK_MAGMA:
122  case E_BLOCK_NETHERRACK:
123  case E_BLOCK_OBSERVER:
131  case E_BLOCK_PURPUR_SLAB:
139  case E_BLOCK_SANDSTONE:
141  case E_BLOCK_STONE:
145  case E_BLOCK_STONE_SLAB:
148  {
149  return PickaxeLevel() >= 1;
150  }
151  }
152  return super::CanHarvestBlock(a_BlockType);
153  }
154 
155  virtual bool CanRepairWithRawMaterial(short a_ItemType) override
156  {
157  switch (m_ItemType)
158  {
159  case E_ITEM_WOODEN_PICKAXE: return (a_ItemType == E_BLOCK_PLANKS);
160  case E_ITEM_STONE_PICKAXE: return (a_ItemType == E_BLOCK_COBBLESTONE);
161  case E_ITEM_IRON_PICKAXE: return (a_ItemType == E_ITEM_IRON);
162  case E_ITEM_GOLD_PICKAXE: return (a_ItemType == E_ITEM_GOLD);
163  case E_ITEM_DIAMOND_PICKAXE: return (a_ItemType == E_ITEM_DIAMOND);
164  }
165  return false;
166  }
167 
168 
169  virtual float GetBlockBreakingStrength(BLOCKTYPE a_Block) override
170  {
171  if (!IsBlockMaterialIron(a_Block) && !IsBlockMaterialAnvil(a_Block) && !IsBlockMaterialRock(a_Block))
172  {
173  return super::GetBlockBreakingStrength(a_Block);
174  }
175  else
176  {
177  switch (m_ItemType)
178  {
179  case E_ITEM_WOODEN_PICKAXE: return 2.0f;
180  case E_ITEM_STONE_PICKAXE: return 4.0f;
181  case E_ITEM_IRON_PICKAXE: return 6.0f;
182  case E_ITEM_GOLD_PICKAXE: return 12.0f;
183  case E_ITEM_DIAMOND_PICKAXE: return 8.0f;
184  }
185  }
186  ASSERT(!"Something is wrong here... Maybe they are pickaxes out of a new material?");
187  return 1.0f;
188  }
189 
190 } ;
virtual bool CanHarvestBlock(BLOCKTYPE a_BlockType)
Returns whether this tool / item can harvest a specific block (e.g.
unsigned char BLOCKTYPE
The datatype used by blockdata.
Definition: ChunkDef.h:42
virtual float GetBlockBreakingStrength(BLOCKTYPE a_Block)
Returns the strength to break a specific block.
bool IsBlockMaterialRock(BLOCKTYPE a_BlockType)
Definition: Defines.h:783
virtual bool CanRepairWithRawMaterial(short a_ItemType) override
Can the anvil repair this item, when a_Item is the second input?
Definition: ItemPickaxe.h:155
virtual short GetDurabilityLossByAction(eDurabilityLostAction a_Action) override
Get the durability lost which the item will get, when a specified action was performed.
Definition: ItemPickaxe.h:21
#define ASSERT(x)
Definition: Globals.h:335
virtual bool CanHarvestBlock(BLOCKTYPE a_BlockType) override
Returns whether this tool / item can harvest a specific block (e.g.
Definition: ItemPickaxe.h:48
cItemPickaxeHandler(int a_ItemType)
Definition: ItemPickaxe.h:13
virtual float GetBlockBreakingStrength(BLOCKTYPE a_Block) override
Returns the strength to break a specific block.
Definition: ItemPickaxe.h:169
bool IsBlockMaterialIron(BLOCKTYPE a_BlockType)
Definition: Defines.h:681
cItemHandler super
Definition: ItemPickaxe.h:11
bool IsBlockMaterialAnvil(BLOCKTYPE a_BlockType)
Definition: Defines.h:717
eDurabilityLostAction
Actions that may cause durability of an item may be lost, where the magnitude of the loss depends on ...
Definition: ItemHandler.h:27
#define UNREACHABLE(x)
Use to mark code that should be impossible to reach.
Definition: Globals.h:344