1
0

Dispensers can dispense items and liquids now

git-svn-id: http://mc-server.googlecode.com/svn/trunk@1105 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
luksor111@gmail.com
2012-12-26 17:16:33 +00:00
parent 17a2c1b388
commit 575abe8691
10 changed files with 320 additions and 3 deletions

View File

@@ -2,6 +2,7 @@
#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
#include "RedstoneSimulator.h"
#include "../DispenserEntity.h"
#include "../Piston.h"
#include "../World.h"
#include "../BlockID.h"
@@ -387,6 +388,36 @@ void cRedstoneSimulator::HandleChange( const Vector3i & a_BlockPos )
}
} // switch (BlockType)
} // while (m_RefreshPistons[])
while (!m_RefreshDispensers.empty())
{
Vector3i pos = m_RefreshDispensers.back();
m_RefreshDispensers.pop_back();
BLOCKTYPE BlockType = m_World->GetBlock(pos);
if (BlockType == E_BLOCK_DISPENSER)
{
if (IsPowered(pos))
{
class cActivateDispenser :
public cDispenserCallback
{
public:
cActivateDispenser()
{
}
virtual bool Item(cDispenserEntity * a_Dispenser) override
{
a_Dispenser->Activate();
return false;
}
} ;
cActivateDispenser DispAct;
m_World->DoWithDispenserAt(pos.x, pos.y, pos.z, DispAct);
}
}
}
}
@@ -416,6 +447,12 @@ bool cRedstoneSimulator::PowerBlock(const Vector3i & a_BlockPos, const Vector3i
m_RefreshPistons.push_back(a_BlockPos);
break;
}
case E_BLOCK_DISPENSER:
{
m_RefreshDispensers.push_back(a_BlockPos);
break;
}
case E_BLOCK_REDSTONE_REPEATER_OFF:
case E_BLOCK_REDSTONE_REPEATER_ON: