diff options
Diffstat (limited to 'src/Entities/EnderCrystal.cpp')
-rw-r--r-- | src/Entities/EnderCrystal.cpp | 53 |
1 files changed, 47 insertions, 6 deletions
diff --git a/src/Entities/EnderCrystal.cpp b/src/Entities/EnderCrystal.cpp index 269714b58..4c21a794d 100644 --- a/src/Entities/EnderCrystal.cpp +++ b/src/Entities/EnderCrystal.cpp @@ -10,8 +10,19 @@ -cEnderCrystal::cEnderCrystal(Vector3d a_Pos, bool a_ShowBottom): +cEnderCrystal::cEnderCrystal(Vector3d a_Pos, bool a_ShowBottom) : + cEnderCrystal(a_Pos, {}, false, a_ShowBottom) +{ +} + + + + + +cEnderCrystal::cEnderCrystal(Vector3d a_Pos, Vector3i a_BeamTarget, bool a_DisplayBeam, bool a_ShowBottom) : Super(etEnderCrystal, a_Pos, 1.0, 1.0), + m_BeamTarget(a_BeamTarget), + m_DisplayBeam(a_DisplayBeam), m_ShowBottom(a_ShowBottom) { SetMaxHealth(5); @@ -21,9 +32,40 @@ cEnderCrystal::cEnderCrystal(Vector3d a_Pos, bool a_ShowBottom): +void cEnderCrystal::SetShowBottom(bool a_ShowBottom) +{ + m_ShowBottom = a_ShowBottom; + m_World->BroadcastEntityMetadata(*this); +} + + + + + +void cEnderCrystal::SetBeamTarget(Vector3i a_BeamTarget) +{ + m_BeamTarget = a_BeamTarget; + m_World->BroadcastEntityMetadata(*this); +} + + + + + +void cEnderCrystal::SetDisplayBeam(bool a_DisplayBeam) +{ + m_DisplayBeam = a_DisplayBeam; + m_World->BroadcastEntityMetadata(*this); +} + + + + + void cEnderCrystal::SpawnOn(cClientHandle & a_ClientHandle) { a_ClientHandle.SendSpawnEntity(*this); + a_ClientHandle.SendEntityMetadata(*this); } @@ -33,10 +75,9 @@ void cEnderCrystal::SpawnOn(cClientHandle & a_ClientHandle) void cEnderCrystal::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) { UNUSED(a_Dt); - // No further processing (physics e.t.c.) is needed - if (m_World->GetDimension() == dimEnd) + if ((m_World->GetDimension() == dimEnd) && (m_World->GetBlock(POS_TOINT) != E_BLOCK_FIRE)) { - m_World->SetBlock(POS_TOINT.addedY(1), E_BLOCK_FIRE, 0); + m_World->SetBlock(POS_TOINT, E_BLOCK_FIRE, 0); } } @@ -48,11 +89,11 @@ void cEnderCrystal::KilledBy(TakeDamageInfo & a_TDI) { Super::KilledBy(a_TDI); - m_World->DoExplosionAt(6.0, GetPosX(), GetPosY(), GetPosZ(), true, esEnderCrystal, this); + m_World->DoExplosionAt(6.0, GetPosX(), GetPosY() + (GetHeight() / 2.0), GetPosZ(), true, esEnderCrystal, this); Destroy(); - m_World->SetBlock(POSX_TOINT, POSY_TOINT, POSZ_TOINT, E_BLOCK_FIRE, 0); + m_World->SetBlock(POS_TOINT, E_BLOCK_FIRE, 0); } |