1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
// Minecart.h
// Declares the cMinecart class representing a minecart in the world
#pragma once
#include "Entity.h"
#include "Item.h"
class cMinecart :
public cEntity
{
typedef cEntity super;
public:
CLASS_PROTODEF(cMinecart);
enum ePayload
{
mpNone, // Empty minecart, ridable by player or mobs
mpChest, // Minecart-with-chest, can store a grid of 3*8 items
mpFurnace, // Minecart-with-furnace, can be powered
// TODO: Other 1.5 features: hopper, tnt, dispenser, spawner
} ;
// cEntity overrides:
virtual bool Initialize(cWorld * a_World) override;
virtual void SpawnOn(cClientHandle & a_ClientHandle) override;
virtual void Tick(float a_Dt, cChunk & a_Chunk) override;
ePayload GetPayload(void) const { return m_Payload; }
protected:
ePayload m_Payload;
cMinecart(ePayload a_Payload, double a_X, double a_Y, double a_Z);
} ;
class cEmptyMinecart :
public cMinecart
{
typedef cMinecart super;
public:
CLASS_PROTODEF(cEmptyMinecart);
cEmptyMinecart(double a_X, double a_Y, double a_Z);
// cEntity overrides:
virtual void OnRightClicked(cPlayer & a_Player) override;
} ;
class cMinecartWithChest :
public cMinecart
{
typedef cMinecart super;
public:
CLASS_PROTODEF(cMinecartWithChest);
/// Number of item slots in the chest
static const int NumSlots = 9 * 3;
cMinecartWithChest(double a_X, double a_Y, double a_Z);
const cItem & GetSlot(int a_Idx) const { return m_Items[a_Idx]; }
cItem & GetSlot(int a_Idx) { return m_Items[a_Idx]; }
void SetSlot(int a_Idx, const cItem & a_Item);
protected:
/// The chest contents:
cItem m_Items[NumSlots];
// cEntity overrides:
virtual void OnRightClicked(cPlayer & a_Player) override;
} ;
class cMinecartWithFurnace :
public cMinecart
{
typedef cMinecart super;
public:
CLASS_PROTODEF(cMinecartWithFurnace);
cMinecartWithFurnace(double a_X, double a_Y, double a_Z);
// cEntity overrides:
virtual void OnRightClicked(cPlayer & a_Player) override;
} ;
|