summaryrefslogtreecommitdiffstats
path: root/src/Protocol
diff options
context:
space:
mode:
author9caihezi <9caihezi@gmail.com>2018-01-08 14:37:10 +0100
committerpeterbell10 <peterbell10@live.co.uk>2018-01-08 14:37:10 +0100
commit4242431407459e91f725de9cb7fb1e2ffade216d (patch)
tree620e7f525183c768bee8014fae7e08ed61089b92 /src/Protocol
parentreadme: Be explicit that Cuberite works with Java Edition Clients. (#4138) (diff)
downloadcuberite-4242431407459e91f725de9cb7fb1e2ffade216d.tar
cuberite-4242431407459e91f725de9cb7fb1e2ffade216d.tar.gz
cuberite-4242431407459e91f725de9cb7fb1e2ffade216d.tar.bz2
cuberite-4242431407459e91f725de9cb7fb1e2ffade216d.tar.lz
cuberite-4242431407459e91f725de9cb7fb1e2ffade216d.tar.xz
cuberite-4242431407459e91f725de9cb7fb1e2ffade216d.tar.zst
cuberite-4242431407459e91f725de9cb7fb1e2ffade216d.zip
Diffstat (limited to 'src/Protocol')
-rw-r--r--src/Protocol/Protocol_1_11.cpp2
-rw-r--r--src/Protocol/Protocol_1_12.cpp2
-rw-r--r--src/Protocol/Protocol_1_8.cpp12
-rw-r--r--src/Protocol/Protocol_1_9.cpp27
-rw-r--r--src/Protocol/Protocol_1_9.h4
5 files changed, 39 insertions, 8 deletions
diff --git a/src/Protocol/Protocol_1_11.cpp b/src/Protocol/Protocol_1_11.cpp
index c0c8815e8..f5df4e646 100644
--- a/src/Protocol/Protocol_1_11.cpp
+++ b/src/Protocol/Protocol_1_11.cpp
@@ -550,7 +550,7 @@ void cProtocol_1_11_0::HandlePacketBlockPlace(cByteBuffer & a_ByteBuffer)
HANDLE_READ(a_ByteBuffer, ReadBEFloat, float, CursorX);
HANDLE_READ(a_ByteBuffer, ReadBEFloat, float, CursorY);
HANDLE_READ(a_ByteBuffer, ReadBEFloat, float, CursorZ);
- m_Client->HandleRightClick(BlockX, BlockY, BlockZ, FaceIntToBlockFace(Face), FloorC(CursorX * 16), FloorC(CursorY * 16), FloorC(CursorZ * 16), m_Client->GetPlayer()->GetEquippedItem());
+ m_Client->HandleRightClick(BlockX, BlockY, BlockZ, FaceIntToBlockFace(Face), FloorC(CursorX * 16), FloorC(CursorY * 16), FloorC(CursorZ * 16), HandIntToEnum(Hand));
}
diff --git a/src/Protocol/Protocol_1_12.cpp b/src/Protocol/Protocol_1_12.cpp
index b804dd351..a3d1952ed 100644
--- a/src/Protocol/Protocol_1_12.cpp
+++ b/src/Protocol/Protocol_1_12.cpp
@@ -363,7 +363,7 @@ void cProtocol_1_12::HandlePacketBlockPlace(cByteBuffer & a_ByteBuffer)
HANDLE_READ(a_ByteBuffer, ReadBEFloat, float, CursorX);
HANDLE_READ(a_ByteBuffer, ReadBEFloat, float, CursorY);
HANDLE_READ(a_ByteBuffer, ReadBEFloat, float, CursorZ);
- m_Client->HandleRightClick(BlockX, BlockY, BlockZ, FaceIntToBlockFace(Face), FloorC(CursorX * 16), FloorC(CursorY * 16), FloorC(CursorZ * 16), m_Client->GetPlayer()->GetEquippedItem());
+ m_Client->HandleRightClick(BlockX, BlockY, BlockZ, FaceIntToBlockFace(Face), FloorC(CursorX * 16), FloorC(CursorY * 16), FloorC(CursorZ * 16), HandIntToEnum(Hand));
}
diff --git a/src/Protocol/Protocol_1_8.cpp b/src/Protocol/Protocol_1_8.cpp
index 4568ad8cb..41e168c95 100644
--- a/src/Protocol/Protocol_1_8.cpp
+++ b/src/Protocol/Protocol_1_8.cpp
@@ -2329,13 +2329,21 @@ void cProtocol_1_8_0::HandlePacketBlockPlace(cByteBuffer & a_ByteBuffer)
HANDLE_READ(a_ByteBuffer, ReadBEInt8, Int8, Face);
- cItem Item;
+ cItem Item; // Ignored
ReadItem(a_ByteBuffer, Item, 3);
HANDLE_READ(a_ByteBuffer, ReadBEUInt8, UInt8, CursorX);
HANDLE_READ(a_ByteBuffer, ReadBEUInt8, UInt8, CursorY);
HANDLE_READ(a_ByteBuffer, ReadBEUInt8, UInt8, CursorZ);
- m_Client->HandleRightClick(BlockX, BlockY, BlockZ, FaceIntToBlockFace(Face), CursorX, CursorY, CursorZ, m_Client->GetPlayer()->GetEquippedItem());
+ eBlockFace blockFace = FaceIntToBlockFace(Face);
+ if (blockFace == eBlockFace::BLOCK_FACE_NONE)
+ {
+ m_Client->HandleUseItem(eHand::hMain);
+ }
+ else
+ {
+ m_Client->HandleRightClick(BlockX, BlockY, BlockZ, blockFace, CursorX, CursorY, CursorZ, eHand::hMain);
+ }
}
diff --git a/src/Protocol/Protocol_1_9.cpp b/src/Protocol/Protocol_1_9.cpp
index 2b66cc7fa..3e600cefd 100644
--- a/src/Protocol/Protocol_1_9.cpp
+++ b/src/Protocol/Protocol_1_9.cpp
@@ -66,6 +66,7 @@ static const Int16 SLOT_NUM_OUTSIDE = -999;
/** Value for main hand in Hand parameter for Protocol 1.9. */
static const UInt32 MAIN_HAND = 0;
+static const UInt32 OFF_HAND = 1;
@@ -2384,7 +2385,7 @@ void cProtocol_1_9_0::HandlePacketBlockPlace(cByteBuffer & a_ByteBuffer)
HANDLE_READ(a_ByteBuffer, ReadBEUInt8, UInt8, CursorX);
HANDLE_READ(a_ByteBuffer, ReadBEUInt8, UInt8, CursorY);
HANDLE_READ(a_ByteBuffer, ReadBEUInt8, UInt8, CursorZ);
- m_Client->HandleRightClick(BlockX, BlockY, BlockZ, FaceIntToBlockFace(Face), CursorX, CursorY, CursorZ, m_Client->GetPlayer()->GetEquippedItem());
+ m_Client->HandleRightClick(BlockX, BlockY, BlockZ, FaceIntToBlockFace(Face), CursorX, CursorY, CursorZ, HandIntToEnum(Hand));
}
@@ -2784,10 +2785,9 @@ void cProtocol_1_9_0::HandlePacketUseEntity(cByteBuffer & a_ByteBuffer)
void cProtocol_1_9_0::HandlePacketUseItem(cByteBuffer & a_ByteBuffer)
{
- HANDLE_READ(a_ByteBuffer, ReadVarInt, UInt64, Hand);
+ HANDLE_READ(a_ByteBuffer, ReadVarInt, Int32, Hand);
- // Didn't click a block - emulate old values used with place block of -1, -1, -1 (and BLOCK_FACE_NONE).
- m_Client->HandleRightClick(-1, 255, -1, BLOCK_FACE_NONE, 0, 0, 0, m_Client->GetPlayer()->GetEquippedItem());
+ m_Client->HandleUseItem(HandIntToEnum(Hand));
}
@@ -3267,6 +3267,25 @@ eBlockFace cProtocol_1_9_0::FaceIntToBlockFace(Int32 a_BlockFace)
+eHand cProtocol_1_9_0::HandIntToEnum(Int32 a_Hand)
+{
+ // Convert hand parameter into eHand enum
+ switch (a_Hand)
+ {
+ case MAIN_HAND: return eHand::hMain;
+ case OFF_HAND: return eHand::hOff;
+ default:
+ {
+ ASSERT(!"Unknown hand value");
+ return eHand::hMain;
+ }
+ }
+}
+
+
+
+
+
////////////////////////////////////////////////////////////////////////////////
// cProtocol_1_9_0::cPacketizer:
diff --git a/src/Protocol/Protocol_1_9.h b/src/Protocol/Protocol_1_9.h
index d08b76755..a7fd137a9 100644
--- a/src/Protocol/Protocol_1_9.h
+++ b/src/Protocol/Protocol_1_9.h
@@ -255,6 +255,10 @@ protected:
If the received value doesn't match any of our eBlockFace constants, BLOCK_FACE_NONE is returned. */
eBlockFace FaceIntToBlockFace(Int32 a_FaceInt);
+ /** Converts the hand parameter received by the protocol into eHand constants.
+ If the received value doesn't match any of the know value, raise an assertion fail or return hMain. */
+ eHand HandIntToEnum(Int32 a_Hand);
+
/** Writes the item data into a packet. */
void WriteItem(cPacketizer & a_Pkt, const cItem & a_Item);