1
0

Parse the MC|AdvCdm plugin message

This commit is contained in:
andrew
2014-01-18 19:58:46 +02:00
parent 1ad6469a18
commit 02c9aa2b1e
4 changed files with 70 additions and 1 deletions

View File

@@ -8,6 +8,7 @@
#include "Entities/Player.h"
#include "Inventory.h"
#include "BlockEntities/ChestEntity.h"
#include "BlockEntities/CommandBlockEntity.h"
#include "BlockEntities/SignEntity.h"
#include "UI/Window.h"
#include "Item.h"
@@ -545,6 +546,15 @@ void cClientHandle::HandlePlayerPos(double a_PosX, double a_PosY, double a_PosZ,
void cClientHandle::HandlePluginMessage(const AString & a_Channel, const AString & a_Message)
{
if (a_Channel == "MC|AdvCdm") // Command block
{
const char* Data = a_Message.c_str();
HandleCommandBlockMessage(Data, a_Message.size());
return;
}
cPluginManager::Get()->CallHookPluginMessage(*this, a_Channel, a_Message);
}
@@ -552,6 +562,60 @@ void cClientHandle::HandlePluginMessage(const AString & a_Channel, const AString
void cClientHandle::HandleCommandBlockMessage(const char* a_Data, unsigned int a_Length)
{
if (a_Length < 14)
{
LOGD("Malformed MC|AdvCdm packet.");
return;
}
int BlockX, BlockY, BlockZ;
AString Command;
switch (a_Data[0])
{
case 0x00:
{
BlockX = GetBEInt(a_Data + 1);
BlockY = GetBEInt(a_Data + 5);
BlockZ = GetBEInt(a_Data + 9);
Command = AString(a_Data + 14, (int)a_Data[13]);
break;
}
default:
{
LOGD("Unhandled MC|AdvCdm packet mode.");
return;
}
}
class cUpdateCommandBlock :
public cCommandBlockCallback
{
AString m_Command;
public:
cUpdateCommandBlock(const AString & a_Command) : m_Command(a_Command) {}
virtual bool Item(cCommandBlockEntity * a_CommandBlock) override
{
a_CommandBlock->SetCommand(m_Command);
return false;
}
} CmdBlockCB (Command);
cWorld * World = m_Player->GetWorld();
World->DoWithCommandBlockAt(BlockX, BlockY, BlockZ, CmdBlockCB);
}
void cClientHandle::HandleLeftClick(int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, char a_Status)
{
LOGD("HandleLeftClick: {%i, %i, %i}; Face: %i; Stat: %i",