summaryrefslogtreecommitdiffstats
path: root/src/Entities/EnderCrystal.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/Entities/EnderCrystal.cpp53
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);
}