summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/BlockEntities/BeaconEntity.cpp2
-rw-r--r--src/ClientHandle.cpp17
2 files changed, 18 insertions, 1 deletions
diff --git a/src/BlockEntities/BeaconEntity.cpp b/src/BlockEntities/BeaconEntity.cpp
index 805e5e61f..dcf659f47 100644
--- a/src/BlockEntities/BeaconEntity.cpp
+++ b/src/BlockEntities/BeaconEntity.cpp
@@ -90,6 +90,7 @@ bool cBeaconEntity::SetPrimaryEffect(cEntityEffect::eType a_Effect)
{
if (!IsValidEffect(a_Effect, m_BeaconLevel))
{
+ m_PrimaryEffect = cEntityEffect::effNoEffect;
return false;
}
@@ -111,6 +112,7 @@ bool cBeaconEntity::SetSecondaryEffect(cEntityEffect::eType a_Effect)
{
if (!IsValidEffect(a_Effect, m_BeaconLevel))
{
+ m_SecondaryEffect = cEntityEffect::effNoEffect;
return false;
}
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index d71c6a9d8..72257028a 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -795,7 +795,22 @@ void cClientHandle::HandleBeaconSelection(const char * a_Data, size_t a_Length)
Window->SetSlot(*m_Player, 0, cItem());
BeaconWindow->GetBeaconEntity()->SetPrimaryEffect(PrimaryEffect);
- BeaconWindow->GetBeaconEntity()->SetSecondaryEffect(SecondaryEffect);
+
+ // Valid effect check. Vanilla don't check this, but we do it :)
+ if (
+ (SecondaryEffect == cEntityEffect::effNoEffect) ||
+ (SecondaryEffect == cEntityEffect::effRegeneration) ||
+ (SecondaryEffect == BeaconWindow->GetBeaconEntity()->GetPrimaryEffect())
+ )
+ {
+ BeaconWindow->GetBeaconEntity()->SetSecondaryEffect(SecondaryEffect);
+ }
+ else
+ {
+ BeaconWindow->GetBeaconEntity()->SetSecondaryEffect(cEntityEffect::effNoEffect);
+ }
+
+ m_Player->CloseWindow(true);
}