4af5868322
Entity metadata is broadcasted. If player is in survival, his equipped item is removed. If you have green dye, and sheep is green, your equipped item won't be removed.
63 lines
1.3 KiB
C++
63 lines
1.3 KiB
C++
|
|
#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
|
|
|
|
#include "Sheep.h"
|
|
#include "../BlockID.h"
|
|
#include "../Entities/Player.h"
|
|
#include "../World.h"
|
|
|
|
|
|
|
|
|
|
|
|
cSheep::cSheep(int a_Color) :
|
|
super("Sheep", mtSheep, "mob.sheep.say", "mob.sheep.say", 0.6, 1.3),
|
|
m_IsSheared(false),
|
|
m_WoolColor(a_Color)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void cSheep::GetDrops(cItems & a_Drops, cEntity * a_Killer)
|
|
{
|
|
if (!m_IsSheared)
|
|
{
|
|
a_Drops.push_back(cItem(E_BLOCK_WOOL, 1, m_WoolColor));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void cSheep::OnRightClicked(cPlayer & a_Player)
|
|
{
|
|
if ((a_Player.GetEquippedItem().m_ItemType == E_ITEM_SHEARS) && (!m_IsSheared))
|
|
{
|
|
m_IsSheared = true;
|
|
m_World->BroadcastEntityMetadata(*this);
|
|
|
|
if (!a_Player.IsGameModeCreative())
|
|
{
|
|
a_Player.UseEquippedItem();
|
|
}
|
|
|
|
cItems Drops;
|
|
int NumDrops = m_World->GetTickRandomNumber(2) + 1;
|
|
Drops.push_back(cItem(E_BLOCK_WOOL, NumDrops, m_WoolColor));
|
|
m_World->SpawnItemPickups(Drops, GetPosX(), GetPosY(), GetPosZ(), 10);
|
|
}
|
|
if ((a_Player.GetEquippedItem().m_ItemType == E_ITEM_DYE) && (m_WoolColor != 15 - a_Player.GetEquippedItem().m_ItemDamage))
|
|
{
|
|
m_WoolColor = 15 - a_Player.GetEquippedItem().m_ItemDamage;
|
|
if (!a_Player.IsGameModeCreative())
|
|
{
|
|
a_Player.GetInventory().RemoveOneEquippedItem();
|
|
}
|
|
m_World->BroadcastEntityMetadata(*this);
|
|
}
|
|
}
|