Pistons now generate noise and animate when moving.
git-svn-id: http://mc-server.googlecode.com/svn/trunk@71 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
894f6e02d4
commit
f07ade2c58
@ -2,6 +2,8 @@
|
|||||||
#include "cRoot.h"
|
#include "cRoot.h"
|
||||||
#include "cWorld.h"
|
#include "cWorld.h"
|
||||||
#include "BlockID.h"
|
#include "BlockID.h"
|
||||||
|
#include "packets/cPacket_BlockAction.h"
|
||||||
|
#include "cServer.h"
|
||||||
|
|
||||||
cPiston::cPiston( cWorld* a_World )
|
cPiston::cPiston( cWorld* a_World )
|
||||||
:m_World ( a_World )
|
:m_World ( a_World )
|
||||||
@ -27,12 +29,21 @@ void cPiston::ExtendPiston( int pistx, int pisty, int pistz )
|
|||||||
metadata = m_World->GetBlockMeta( pistx, pisty, pistz);
|
metadata = m_World->GetBlockMeta( pistx, pisty, pistz);
|
||||||
|
|
||||||
if ((int)metadata < 6) { //piston not extended
|
if ((int)metadata < 6) { //piston not extended
|
||||||
|
|
||||||
|
//send blockaction packet
|
||||||
|
cPacket_BlockAction Action;
|
||||||
|
Action.m_PosX = (int)pistx;
|
||||||
|
Action.m_PosY = (short)pisty;
|
||||||
|
Action.m_PosZ = (int)pistz;
|
||||||
|
Action.m_Byte1 = 0;
|
||||||
|
|
||||||
switch ((int)metadata) {
|
switch ((int)metadata) {
|
||||||
case 0:
|
case 0:
|
||||||
FirstFluidBlock = FindFluidBlock ( pistx, pisty-1, pistz, pistx, pisty-16, pistz );
|
FirstFluidBlock = FindFluidBlock ( pistx, pisty-1, pistz, pistx, pisty-16, pistz );
|
||||||
if (FirstFluidBlock > 0) {
|
if (FirstFluidBlock > 0) {
|
||||||
ChainMove ( pistx, pisty, pistz, pistx, pisty-FirstFluidBlock, pistz );
|
ChainMove ( pistx, pisty, pistz, pistx, pisty-FirstFluidBlock, pistz );
|
||||||
}
|
}
|
||||||
|
Action.m_Byte2 = 0;
|
||||||
m_World->FastSetBlock( pistx, pisty, pistz, piston, (char)metadata + 8 );
|
m_World->FastSetBlock( pistx, pisty, pistz, piston, (char)metadata + 8 );
|
||||||
m_World->SetBlock( pistx, pisty-1, pistz, E_BLOCK_PISTON_EXTENSION, extmetadata );
|
m_World->SetBlock( pistx, pisty-1, pistz, E_BLOCK_PISTON_EXTENSION, extmetadata );
|
||||||
break;
|
break;
|
||||||
@ -41,6 +52,7 @@ void cPiston::ExtendPiston( int pistx, int pisty, int pistz )
|
|||||||
if (FirstFluidBlock > 0) {
|
if (FirstFluidBlock > 0) {
|
||||||
ChainMove ( pistx, pisty, pistz, pistx, pisty+FirstFluidBlock, pistz );
|
ChainMove ( pistx, pisty, pistz, pistx, pisty+FirstFluidBlock, pistz );
|
||||||
}
|
}
|
||||||
|
Action.m_Byte2 = 1;
|
||||||
m_World->FastSetBlock( pistx, pisty, pistz, piston, (char)metadata + 8 );
|
m_World->FastSetBlock( pistx, pisty, pistz, piston, (char)metadata + 8 );
|
||||||
m_World->SetBlock( pistx, pisty+1, pistz, E_BLOCK_PISTON_EXTENSION, extmetadata+1 );
|
m_World->SetBlock( pistx, pisty+1, pistz, E_BLOCK_PISTON_EXTENSION, extmetadata+1 );
|
||||||
break;
|
break;
|
||||||
@ -49,6 +61,7 @@ void cPiston::ExtendPiston( int pistx, int pisty, int pistz )
|
|||||||
if (FirstFluidBlock > 0) {
|
if (FirstFluidBlock > 0) {
|
||||||
ChainMove ( pistx, pisty, pistz, pistx, pisty, pistz-FirstFluidBlock );
|
ChainMove ( pistx, pisty, pistz, pistx, pisty, pistz-FirstFluidBlock );
|
||||||
}
|
}
|
||||||
|
Action.m_Byte2 = 2;
|
||||||
m_World->FastSetBlock( pistx, pisty, pistz, piston, (char)metadata + 8 );
|
m_World->FastSetBlock( pistx, pisty, pistz, piston, (char)metadata + 8 );
|
||||||
m_World->SetBlock( pistx, pisty, pistz-1, E_BLOCK_PISTON_EXTENSION, extmetadata+2 );
|
m_World->SetBlock( pistx, pisty, pistz-1, E_BLOCK_PISTON_EXTENSION, extmetadata+2 );
|
||||||
break;
|
break;
|
||||||
@ -57,6 +70,7 @@ void cPiston::ExtendPiston( int pistx, int pisty, int pistz )
|
|||||||
if (FirstFluidBlock > 0) {
|
if (FirstFluidBlock > 0) {
|
||||||
ChainMove ( pistx, pisty, pistz, pistx, pisty, pistz+FirstFluidBlock );
|
ChainMove ( pistx, pisty, pistz, pistx, pisty, pistz+FirstFluidBlock );
|
||||||
}
|
}
|
||||||
|
Action.m_Byte2 = 3;
|
||||||
m_World->FastSetBlock( pistx, pisty, pistz, piston, (char)metadata + 8 );
|
m_World->FastSetBlock( pistx, pisty, pistz, piston, (char)metadata + 8 );
|
||||||
m_World->SetBlock( pistx, pisty, pistz+1, E_BLOCK_PISTON_EXTENSION, extmetadata+3 );
|
m_World->SetBlock( pistx, pisty, pistz+1, E_BLOCK_PISTON_EXTENSION, extmetadata+3 );
|
||||||
break;
|
break;
|
||||||
@ -65,6 +79,7 @@ void cPiston::ExtendPiston( int pistx, int pisty, int pistz )
|
|||||||
if (FirstFluidBlock > 0) {
|
if (FirstFluidBlock > 0) {
|
||||||
ChainMove ( pistx, pisty, pistz, pistx-FirstFluidBlock, pisty, pistz );
|
ChainMove ( pistx, pisty, pistz, pistx-FirstFluidBlock, pisty, pistz );
|
||||||
}
|
}
|
||||||
|
Action.m_Byte2 = 4;
|
||||||
m_World->FastSetBlock( pistx, pisty, pistz, piston, metadata + 8 );
|
m_World->FastSetBlock( pistx, pisty, pistz, piston, metadata + 8 );
|
||||||
m_World->SetBlock( pistx-1, pisty, pistz, E_BLOCK_PISTON_EXTENSION, extmetadata+4 );
|
m_World->SetBlock( pistx-1, pisty, pistz, E_BLOCK_PISTON_EXTENSION, extmetadata+4 );
|
||||||
break;
|
break;
|
||||||
@ -73,10 +88,12 @@ void cPiston::ExtendPiston( int pistx, int pisty, int pistz )
|
|||||||
if (FirstFluidBlock > 0) {
|
if (FirstFluidBlock > 0) {
|
||||||
ChainMove ( pistx, pisty, pistz, pistx+FirstFluidBlock, pisty, pistz );
|
ChainMove ( pistx, pisty, pistz, pistx+FirstFluidBlock, pisty, pistz );
|
||||||
}
|
}
|
||||||
|
Action.m_Byte2 = 5;
|
||||||
m_World->FastSetBlock( pistx, pisty, pistz, piston, metadata + 8 );
|
m_World->FastSetBlock( pistx, pisty, pistz, piston, metadata + 8 );
|
||||||
m_World->SetBlock( pistx+1, pisty, pistz, E_BLOCK_PISTON_EXTENSION, extmetadata+5 );
|
m_World->SetBlock( pistx+1, pisty, pistz, E_BLOCK_PISTON_EXTENSION, extmetadata+5 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
cRoot::Get()->GetServer()->Broadcast( Action );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,45 +108,59 @@ void cPiston::RetractPiston( int pistx, int pisty, int pistz )
|
|||||||
if (metadata > 5) { //piston retracted
|
if (metadata > 5) { //piston retracted
|
||||||
metadata -= 8;//set the piston to retracted state.
|
metadata -= 8;//set the piston to retracted state.
|
||||||
|
|
||||||
m_World->FastSetBlock( pistx, pisty, pistz, m_World->GetBlock( pistx, pisty, pistz ), metadata );
|
//send blockaction packet
|
||||||
|
cPacket_BlockAction Action;
|
||||||
|
Action.m_PosX = (int)pistx;
|
||||||
|
Action.m_PosY = (short)pisty;
|
||||||
|
Action.m_PosZ = (int)pistz;
|
||||||
|
Action.m_Byte1 = 1;
|
||||||
|
|
||||||
switch (metadata) {
|
switch (metadata) {
|
||||||
case 0:
|
case 0:
|
||||||
|
Action.m_Byte2 = 0;
|
||||||
if ( m_World->GetBlock( pistx, pisty-1, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx, pisty-1, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
m_World->SetBlock( pistx, pisty-1, pistz, 0, 0 );
|
m_World->SetBlock( pistx, pisty-1, pistz, 0, 0 );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
|
Action.m_Byte2 = 1;
|
||||||
if ( m_World->GetBlock( pistx, pisty+1, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx, pisty+1, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
m_World->SetBlock( pistx, pisty+1, pistz, 0, 0 );
|
m_World->SetBlock( pistx, pisty+1, pistz, 0, 0 );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
|
Action.m_Byte2 = 2;
|
||||||
if ( m_World->GetBlock( pistx, pisty, pistz-1 ) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx, pisty, pistz-1 ) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
m_World->SetBlock( pistx, pisty, pistz-1, 0, 0 );
|
m_World->SetBlock( pistx, pisty, pistz-1, 0, 0 );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
Action.m_Byte2 = 3;
|
||||||
if ( m_World->GetBlock( pistx, pisty, pistz+1 ) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx, pisty, pistz+1 ) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
m_World->SetBlock( pistx, pisty, pistz+1, 0, 0 );
|
m_World->SetBlock( pistx, pisty, pistz+1, 0, 0 );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
|
Action.m_Byte2 = 4;
|
||||||
if ( m_World->GetBlock( pistx-1, pisty, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx-1, pisty, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
m_World->SetBlock( pistx-1, pisty, pistz, 0, 0 );
|
m_World->SetBlock( pistx-1, pisty, pistz, 0, 0 );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
|
Action.m_Byte2 = 5;
|
||||||
if ( m_World->GetBlock( pistx+1, pisty, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx+1, pisty, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
m_World->SetBlock( pistx+1, pisty, pistz, 0, 0 );
|
m_World->SetBlock( pistx+1, pisty, pistz, 0, 0 );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
m_World->FastSetBlock( pistx, pisty, pistz, m_World->GetBlock( pistx, pisty, pistz ), metadata );
|
||||||
|
cRoot::Get()->GetServer()->Broadcast( Action );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,9 +168,17 @@ void cPiston::RetractPiston( int pistx, int pisty, int pistz )
|
|||||||
if ( (int)m_World->GetBlock( pistx, pisty, pistz ) == E_BLOCK_STICKY_PISTON ) {
|
if ( (int)m_World->GetBlock( pistx, pisty, pistz ) == E_BLOCK_STICKY_PISTON ) {
|
||||||
if (metadata > 5) { //piston retracted
|
if (metadata > 5) { //piston retracted
|
||||||
metadata -= 8;//set the piston to retracted state.
|
metadata -= 8;//set the piston to retracted state.
|
||||||
m_World->FastSetBlock( pistx, pisty, pistz, m_World->GetBlock( pistx, pisty, pistz ), metadata );
|
|
||||||
|
//send blockaction packet
|
||||||
|
cPacket_BlockAction Action;
|
||||||
|
Action.m_PosX = (int)pistx;
|
||||||
|
Action.m_PosY = (short)pisty;
|
||||||
|
Action.m_PosZ = (int)pistz;
|
||||||
|
Action.m_Byte1 = 1;
|
||||||
|
|
||||||
switch (metadata) {
|
switch (metadata) {
|
||||||
case 0:
|
case 0:
|
||||||
|
Action.m_Byte2 = 0;
|
||||||
if ( m_World->GetBlock( pistx, pisty-1, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx, pisty-1, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
tempblock = m_World->GetBlock( pistx, pisty-2, pistz );
|
tempblock = m_World->GetBlock( pistx, pisty-2, pistz );
|
||||||
tempmeta = m_World->GetBlockMeta( pistx, pisty-2, pistz );
|
tempmeta = m_World->GetBlockMeta( pistx, pisty-2, pistz );
|
||||||
@ -150,6 +189,7 @@ void cPiston::RetractPiston( int pistx, int pisty, int pistz )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
|
Action.m_Byte2 = 1;
|
||||||
if ( m_World->GetBlock( pistx, pisty+1, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx, pisty+1, pistz ) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
tempblock = m_World->GetBlock( pistx, pisty+2, pistz );
|
tempblock = m_World->GetBlock( pistx, pisty+2, pistz );
|
||||||
tempmeta = m_World->GetBlockMeta( pistx, pisty+2, pistz );
|
tempmeta = m_World->GetBlockMeta( pistx, pisty+2, pistz );
|
||||||
@ -159,6 +199,7 @@ void cPiston::RetractPiston( int pistx, int pisty, int pistz )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
Action.m_Byte2 = 2;
|
||||||
if ( m_World->GetBlock( pistx, pisty, pistz-1) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx, pisty, pistz-1) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
tempblock = m_World->GetBlock( pistx, pisty, pistz-2 );
|
tempblock = m_World->GetBlock( pistx, pisty, pistz-2 );
|
||||||
tempmeta = m_World->GetBlockMeta( pistx, pisty, pistz-2 );
|
tempmeta = m_World->GetBlockMeta( pistx, pisty, pistz-2 );
|
||||||
@ -168,6 +209,7 @@ void cPiston::RetractPiston( int pistx, int pisty, int pistz )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
Action.m_Byte2 = 3;
|
||||||
if ( m_World->GetBlock( pistx, pisty, pistz+1) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx, pisty, pistz+1) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
tempblock = m_World->GetBlock( pistx, pisty, pistz+2 );
|
tempblock = m_World->GetBlock( pistx, pisty, pistz+2 );
|
||||||
tempmeta = m_World->GetBlockMeta( pistx, pisty, pistz+2 );
|
tempmeta = m_World->GetBlockMeta( pistx, pisty, pistz+2 );
|
||||||
@ -177,6 +219,7 @@ void cPiston::RetractPiston( int pistx, int pisty, int pistz )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
Action.m_Byte2 = 4;
|
||||||
if ( m_World->GetBlock( pistx-1, pisty, pistz) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx-1, pisty, pistz) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
tempblock = m_World->GetBlock( pistx-2, pisty, pistz );
|
tempblock = m_World->GetBlock( pistx-2, pisty, pistz );
|
||||||
tempmeta = m_World->GetBlockMeta( pistx-2, pisty, pistz );
|
tempmeta = m_World->GetBlockMeta( pistx-2, pisty, pistz );
|
||||||
@ -186,6 +229,7 @@ void cPiston::RetractPiston( int pistx, int pisty, int pistz )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
|
Action.m_Byte2 = 5;
|
||||||
if ( m_World->GetBlock( pistx+1, pisty, pistz) == E_BLOCK_PISTON_EXTENSION ) {
|
if ( m_World->GetBlock( pistx+1, pisty, pistz) == E_BLOCK_PISTON_EXTENSION ) {
|
||||||
tempblock = m_World->GetBlock( pistx+2, pisty, pistz );
|
tempblock = m_World->GetBlock( pistx+2, pisty, pistz );
|
||||||
tempmeta = m_World->GetBlockMeta( pistx+2, pisty, pistz );
|
tempmeta = m_World->GetBlockMeta( pistx+2, pisty, pistz );
|
||||||
@ -195,6 +239,8 @@ void cPiston::RetractPiston( int pistx, int pisty, int pistz )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
m_World->FastSetBlock( pistx, pisty, pistz, m_World->GetBlock( pistx, pisty, pistz ), metadata );
|
||||||
|
cRoot::Get()->GetServer()->Broadcast( Action );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ bool cPacket_BlockAction::Send(cSocket & a_Socket)
|
|||||||
AppendShort ( m_PosY, Message, i );
|
AppendShort ( m_PosY, Message, i );
|
||||||
AppendInteger ( m_PosZ, Message, i );
|
AppendInteger ( m_PosZ, Message, i );
|
||||||
AppendByte ( m_Byte1, Message, i );
|
AppendByte ( m_Byte1, Message, i );
|
||||||
AppendByte ( m_Byte1, Message, i );
|
AppendByte ( m_Byte2, Message, i );
|
||||||
|
|
||||||
bool RetVal = !cSocket::IsSocketError( SendData( a_Socket, Message, TotalSize, 0 ) );
|
bool RetVal = !cSocket::IsSocketError( SendData( a_Socket, Message, TotalSize, 0 ) );
|
||||||
delete [] Message;
|
delete [] Message;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user