EmptyMinecarts should be able to get a block inside of them.
This commit is contained in:
parent
6ff375273b
commit
c5603ce064
@ -413,8 +413,10 @@ void cMinecart::DoTakeDamage(TakeDamageInfo & TDI)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// cEmptyMinecart:
|
||||
|
||||
cEmptyMinecart::cEmptyMinecart(double a_X, double a_Y, double a_Z) :
|
||||
super(mpNone, a_X, a_Y, a_Z)
|
||||
cEmptyMinecart::cEmptyMinecart(double a_X, double a_Y, double a_Z, const cItem & a_Content, int a_Height) :
|
||||
super(mpNone, a_X, a_Y, a_Z),
|
||||
m_Content(a_Content),
|
||||
m_Height(a_Height)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -77,10 +77,16 @@ class cEmptyMinecart :
|
||||
public:
|
||||
CLASS_PROTODEF(cEmptyMinecart);
|
||||
|
||||
cEmptyMinecart(double a_X, double a_Y, double a_Z);
|
||||
cEmptyMinecart(double a_X, double a_Y, double a_Z, const cItem & a_Content, int a_Height);
|
||||
|
||||
cItem GetContent(void) const {return m_Content;}
|
||||
int GetBlockHeight(void) const {return m_Height;}
|
||||
// cEntity overrides:
|
||||
virtual void OnRightClicked(cPlayer & a_Player) override;
|
||||
protected:
|
||||
|
||||
const cItem & m_Content;
|
||||
int m_Height;
|
||||
} ;
|
||||
|
||||
|
||||
|
@ -60,7 +60,7 @@ public:
|
||||
cMinecart * Minecart = NULL;
|
||||
switch (m_ItemType)
|
||||
{
|
||||
case E_ITEM_MINECART: Minecart = new cEmptyMinecart (x, y, z); break;
|
||||
case E_ITEM_MINECART: Minecart = new cEmptyMinecart (x, y, z, cItem(), 1); break;
|
||||
case E_ITEM_CHEST_MINECART: Minecart = new cMinecartWithChest (x, y, z); break;
|
||||
case E_ITEM_FURNACE_MINECART: Minecart = new cMinecartWithFurnace (x, y, z); break;
|
||||
case E_ITEM_MINECART_WITH_TNT: Minecart = new cMinecartWithTNT (x, y, z); break;
|
||||
|
@ -1781,7 +1781,22 @@ void cProtocol172::cPacketizer::WriteEntityMetadata(const cEntity & a_Entity)
|
||||
WriteInt(1); // Shaking direction, doesn't seem to affect anything
|
||||
WriteByte(0x73);
|
||||
WriteFloat((float)(((const cMinecart &)a_Entity).LastDamage() + 10)); // Damage taken / shake effect multiplyer
|
||||
|
||||
|
||||
if (((cMinecart &)a_Entity).GetPayload() == cMinecart::mpNone)
|
||||
{
|
||||
cEmptyMinecart EmptyMinecart = ((cEmptyMinecart &)a_Entity);
|
||||
if (!EmptyMinecart.GetContent().IsEmpty())
|
||||
{
|
||||
WriteByte(0x54);
|
||||
int Content = EmptyMinecart.GetContent().m_ItemType;
|
||||
Content |= EmptyMinecart.GetContent().m_ItemDamage << 8;
|
||||
WriteInt(Content);
|
||||
WriteByte(0x55);
|
||||
WriteInt(EmptyMinecart.GetBlockHeight());
|
||||
WriteByte(0x56);
|
||||
WriteByte(1);
|
||||
}
|
||||
}
|
||||
if (((cMinecart &)a_Entity).GetPayload() == cMinecart::mpFurnace)
|
||||
{
|
||||
WriteByte(0x10);
|
||||
|
@ -1648,23 +1648,23 @@ int cWorld::SpawnExperienceOrb(double a_X, double a_Y, double a_Z, int a_Reward)
|
||||
|
||||
|
||||
|
||||
int cWorld::SpawnMinecart(double a_X, double a_Y, double a_Z, int a_MinecartType)
|
||||
int cWorld::SpawnMinecart(double a_X, double a_Y, double a_Z, int a_MinecartType, cItem a_Content, int a_BlockHeight)
|
||||
{
|
||||
cMinecart * Minecart;
|
||||
switch (a_MinecartType)
|
||||
{
|
||||
case E_ITEM_MINECART: Minecart = new cEmptyMinecart (a_X, a_Y, a_Z); break;
|
||||
case E_ITEM_MINECART: Minecart = new cEmptyMinecart (a_X, a_Y, a_Z, a_Content, a_BlockHeight); break;
|
||||
case E_ITEM_CHEST_MINECART: Minecart = new cMinecartWithChest (a_X, a_Y, a_Z); break;
|
||||
case E_ITEM_FURNACE_MINECART: Minecart = new cMinecartWithFurnace (a_X, a_Y, a_Z); break;
|
||||
case E_ITEM_MINECART_WITH_TNT: Minecart = new cMinecartWithTNT (a_X, a_Y, a_Z); break;
|
||||
case E_ITEM_MINECART_WITH_HOPPER: Minecart = new cMinecartWithHopper (a_X, a_Y, a_Z); break;
|
||||
default:
|
||||
{
|
||||
ASSERT(!"Unhandled minecart item");
|
||||
return -1;
|
||||
}
|
||||
} // switch (a_MinecartType)
|
||||
Minecart->Initialize(this);
|
||||
return Minecart->GetUniqueID();
|
||||
}
|
||||
|
||||
|
||||
|
@ -364,7 +364,7 @@ public:
|
||||
int SpawnFallingBlock(int a_X, int a_Y, int a_Z, BLOCKTYPE BlockType, NIBBLETYPE BlockMeta);
|
||||
|
||||
/// Spawns an minecart at the given coordinates.
|
||||
int SpawnMinecart(double a_X, double a_Y, double a_Z, int a_MinecartType);
|
||||
int SpawnMinecart(double a_X, double a_Y, double a_Z, int a_MinecartType, cItem a_Content = cItem(), int a_BlockHeight = 1);
|
||||
|
||||
/// Spawns an experience orb at the given location with the given reward. It returns the UniqueID of the spawned experience orb.
|
||||
int SpawnExperienceOrb(double a_X, double a_Y, double a_Z, int a_Reward);
|
||||
|
@ -1150,7 +1150,7 @@ void cWSSAnvil::LoadFallingBlockFromNBT(cEntityList & a_Entities, const cParsedN
|
||||
|
||||
void cWSSAnvil::LoadMinecartRFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
|
||||
{
|
||||
std::auto_ptr<cEmptyMinecart> Minecart(new cEmptyMinecart(0, 0, 0));
|
||||
std::auto_ptr<cEmptyMinecart> Minecart(new cEmptyMinecart(0, 0, 0, cItem(), 1)); // TODO: Load the block and the height
|
||||
if (!LoadEntityBaseFromNBT(*Minecart.get(), a_NBT, a_TagIdx))
|
||||
{
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user