1
0

Cactus towers can be destroyed by removing the bottom block

Added checks whether flowers/mushrooms/saplings can be placed on surface
Added checks for cactus to see if it's allowed to be placed
Fluids now wash away certain items (flower, sapling, cactus)


git-svn-id: http://mc-server.googlecode.com/svn/trunk@169 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
faketruth
2012-01-23 15:11:45 +00:00
parent 796a9e356e
commit ce11c6b2bd
4 changed files with 89 additions and 4 deletions

View File

@@ -496,7 +496,6 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
Kick("Login Username does not match Handshake username!");
return;
}
//m_Password = PacketData->m_Password;
if( cRoot::Get()->GetPluginManager()->CallHook( cPluginManager::E_PLUGIN_LOGIN, 1, PacketData ) )
{
@@ -1083,6 +1082,59 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
break; //happens when you place a block aiming at side of block like torch or stem
}
// Check whether selected item is allowed to be placed on specific surface
bool bIllegalSurface = false;
ENUM_BLOCK_ID SurfaceBlock = (ENUM_BLOCK_ID)m_Player->GetWorld()->GetBlock( X, Y-1, Z );
switch( PacketData->m_ItemType )
{
case E_BLOCK_YELLOW_FLOWER: // Can ONLY be placed on dirt/grass
case E_BLOCK_RED_ROSE:
case E_BLOCK_SAPLING:
switch( SurfaceBlock )
{
case E_BLOCK_DIRT:
case E_BLOCK_GRASS:
bIllegalSurface = false;
break;
default:
bIllegalSurface = true;
break;
};
break;
case E_BLOCK_BROWN_MUSHROOM: // Can be placed on pretty much anything, with exceptions
case E_BLOCK_RED_MUSHROOM:
switch( SurfaceBlock )
{
case E_BLOCK_GLASS:
case E_BLOCK_YELLOW_FLOWER:
case E_BLOCK_RED_ROSE:
case E_BLOCK_BROWN_MUSHROOM:
case E_BLOCK_RED_MUSHROOM:
case E_BLOCK_CACTUS:
bIllegalSurface = true;
break;
}
break;
case E_BLOCK_CACTUS:
if( SurfaceBlock != E_BLOCK_SAND && SurfaceBlock != E_BLOCK_CACTUS ) // Cactus can only be placed on sand and itself
bIllegalSurface = true;
// Check surroundings. Cacti may ONLY be surrounded by air
cWorld* World = m_Player->GetWorld();
if( World->GetBlock( X-1, Y, Z ) != E_BLOCK_AIR
|| World->GetBlock( X+1, Y, Z ) != E_BLOCK_AIR
|| World->GetBlock( X, Y, Z-1 ) != E_BLOCK_AIR
|| World->GetBlock( X, Y, Z+1 ) != E_BLOCK_AIR
)
{
bIllegalSurface = true;
}
break;
};
if( bIllegalSurface )
break;
if(bRemoveItem)
{
if((m_Player->GetGameMode() != 1) && !m_Player->GetInventory().RemoveItem( Item ))