Merge pull request #543 from mc-server/Furnace_Minecarts

Furnace minecarts
master
Mattes D 2014-01-15 06:45:34 -08:00
commit 0571b1a7e6
2 changed files with 42 additions and 3 deletions

View File

@ -750,7 +750,8 @@ void cMinecartWithChest::OnRightClicked(cPlayer & a_Player)
cMinecartWithFurnace::cMinecartWithFurnace(double a_X, double a_Y, double a_Z) : cMinecartWithFurnace::cMinecartWithFurnace(double a_X, double a_Y, double a_Z) :
super(mpFurnace, a_X, a_Y, a_Z), super(mpFurnace, a_X, a_Y, a_Z),
m_IsFueled(false) m_IsFueled(false),
m_FueledTimeLeft(-1)
{ {
} }
@ -766,8 +767,12 @@ void cMinecartWithFurnace::OnRightClicked(cPlayer & a_Player)
{ {
a_Player.GetInventory().RemoveOneEquippedItem(); a_Player.GetInventory().RemoveOneEquippedItem();
} }
if (!m_IsFueled) // We don't want to change the direction by right clicking it.
{
AddSpeed(a_Player.GetLookVector().x, 0, a_Player.GetLookVector().z);
}
m_IsFueled = true; m_IsFueled = true;
m_FueledTimeLeft = m_FueledTimeLeft + 600; // The minecart will be active 600 more ticks.
m_World->BroadcastEntityMetadata(*this); m_World->BroadcastEntityMetadata(*this);
} }
} }
@ -776,6 +781,32 @@ void cMinecartWithFurnace::OnRightClicked(cPlayer & a_Player)
void cMinecartWithFurnace::Tick(float a_Dt, cChunk & a_Chunk)
{
super::Tick(a_Dt, a_Chunk);
if (m_IsFueled)
{
m_FueledTimeLeft--;
if (m_FueledTimeLeft < 0)
{
m_IsFueled = false;
m_World->BroadcastEntityMetadata(*this);
return;
}
if (GetSpeed().Length() > 6)
{
return;
}
AddSpeed(GetSpeed() / 4);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cMinecartWithTNT: // cMinecartWithTNT:

View File

@ -151,10 +151,18 @@ public:
// cEntity overrides: // cEntity overrides:
virtual void OnRightClicked(cPlayer & a_Player) override; virtual void OnRightClicked(cPlayer & a_Player) override;
bool IsFueled (void) const { return m_IsFueled; } virtual void Tick(float a_Dt, cChunk & a_Chunk) override;
// Set functions.
void SetIsFueled(bool a_IsFueled, int a_FueledTimeLeft = -1) {m_IsFueled = a_IsFueled; m_FueledTimeLeft = a_FueledTimeLeft;}
// Get functions.
int GetFueledTimeLeft(void) const {return m_FueledTimeLeft; }
bool IsFueled (void) const {return m_IsFueled;}
private: private:
int m_FueledTimeLeft;
bool m_IsFueled; bool m_IsFueled;
} ; } ;