Fixed wither summoning
This commit is contained in:
parent
0fe1e50ffc
commit
ba42166411
@ -47,6 +47,15 @@ public:
|
|||||||
|
|
||||||
void Reset(void) { m_IsWither = false; }
|
void Reset(void) { m_IsWither = false; }
|
||||||
} CallbackA, CallbackB;
|
} CallbackA, CallbackB;
|
||||||
|
|
||||||
|
a_World->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ, CallbackA);
|
||||||
|
|
||||||
|
if (!CallbackA.IsWither())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CallbackA.Reset();
|
||||||
|
|
||||||
BLOCKTYPE BlockY1 = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ);
|
BLOCKTYPE BlockY1 = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ);
|
||||||
BLOCKTYPE BlockY2 = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY - 2, a_BlockZ);
|
BLOCKTYPE BlockY2 = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY - 2, a_BlockZ);
|
||||||
@ -151,7 +160,21 @@ public:
|
|||||||
World->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ, Callback);
|
World->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ, Callback);
|
||||||
a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, a_BlockMeta);
|
a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, a_BlockMeta);
|
||||||
|
|
||||||
TrySpawnWither(a_ChunkInterface, World, a_BlockX, a_BlockY, a_BlockZ);
|
static const Vector3i Coords[] =
|
||||||
|
{
|
||||||
|
Vector3i( 0, 0, 0),
|
||||||
|
Vector3i( 1, 0, 0),
|
||||||
|
Vector3i(-1, 0, 0),
|
||||||
|
Vector3i( 0, 0, 1),
|
||||||
|
Vector3i( 0, 0, -1),
|
||||||
|
};
|
||||||
|
for (size_t i = 0; i < ARRAYCOUNT(Coords); ++i)
|
||||||
|
{
|
||||||
|
if (TrySpawnWither(a_ChunkInterface, World, a_BlockX + Coords[i].x, a_BlockY, a_BlockZ + Coords[i].z))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} // for i - Coords[]
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
@ -13,8 +13,6 @@ cWither::cWither(void) :
|
|||||||
m_InvulnerableTicks(220)
|
m_InvulnerableTicks(220)
|
||||||
{
|
{
|
||||||
SetMaxHealth(300);
|
SetMaxHealth(300);
|
||||||
|
|
||||||
SetHealth(GetMaxHealth() / 3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -30,6 +28,18 @@ bool cWither::IsArmored(void) const
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cWither::Initialize(cWorld * a_World) override
|
||||||
|
{
|
||||||
|
// Set health before BroadcastSpawnEntity()
|
||||||
|
SetHealth(GetMaxHealth() / 3);
|
||||||
|
|
||||||
|
return super::Initialize(a_World);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cWither::DoTakeDamage(TakeDamageInfo & a_TDI)
|
void cWither::DoTakeDamage(TakeDamageInfo & a_TDI)
|
||||||
{
|
{
|
||||||
if (a_TDI.DamageType == dtDrowning)
|
if (a_TDI.DamageType == dtDrowning)
|
||||||
|
@ -25,6 +25,7 @@ public:
|
|||||||
bool IsArmored(void) const;
|
bool IsArmored(void) const;
|
||||||
|
|
||||||
// cEntity overrides
|
// cEntity overrides
|
||||||
|
virtual bool Initialize(cWorld * a_World) override;
|
||||||
virtual void GetDrops(cItems & a_Drops, cEntity * a_Killer = NULL) override;
|
virtual void GetDrops(cItems & a_Drops, cEntity * a_Killer = NULL) override;
|
||||||
virtual void DoTakeDamage(TakeDamageInfo & a_TDI) override;
|
virtual void DoTakeDamage(TakeDamageInfo & a_TDI) override;
|
||||||
virtual void Tick(float a_Dt, cChunk & a_Chunk) override;
|
virtual void Tick(float a_Dt, cChunk & a_Chunk) override;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user