1
0

Sitting cats block enderchests from opening (#3906)

This commit is contained in:
Bond-009
2017-08-17 16:29:43 +02:00
committed by Mattes D
parent 1ec85a2b2c
commit 05045860c2
4 changed files with 42 additions and 25 deletions

View File

@@ -7,7 +7,6 @@
#include "../UI/ChestWindow.h"
#include "../ClientHandle.h"
#include "../Mobs/Ocelot.h"
#include "../BoundingBox.h"
@@ -219,32 +218,13 @@ void cChestEntity::DestroyWindow()
class cFindSittingCat :
public cEntityCallback
{
virtual bool Item(cEntity * a_Entity) override
{
return (
(a_Entity->GetEntityType() == cEntity::etMonster) &&
(static_cast<cMonster *>(a_Entity)->GetMobType() == eMonsterType::mtOcelot) &&
(static_cast<cOcelot *>(a_Entity)->IsSitting())
);
}
};
bool cChestEntity::IsBlocked()
{
cFindSittingCat FindSittingCat;
return (
(GetPosY() >= cChunkDef::Height - 1) ||
!cBlockInfo::IsTransparent(GetWorld()->GetBlock(GetPosX(), GetPosY() + 1, GetPosZ())) ||
(GetPosY() < cChunkDef::Height - 1) &&
(
(GetWorld()->GetBlock(GetPosX(), GetPosY() + 1, GetPosZ()) == E_BLOCK_AIR) &&
!GetWorld()->ForEachEntityInBox(cBoundingBox(Vector3d(GetPosX(), GetPosY() + 1, GetPosZ()), 1, 1), FindSittingCat)
!cBlockInfo::IsTransparent(GetWorld()->GetBlock(GetPosX(), GetPosY() + 1, GetPosZ())) ||
!cOcelot::IsCatSittingOnBlock(GetWorld(), Vector3d(GetPos()))
)
);
}