diff --git a/lib/protocol.js b/lib/protocol.js
old mode 100644
new mode 100755
index 357aaa6..4dd0d14
--- a/lib/protocol.js
+++ b/lib/protocol.js
@@ -470,7 +470,7 @@ var packets = {
       ],
       0x02: [
         { name: "target", type: "int" },
-        { name: "leftClick", type: "byte" }
+        { name: "mouse", type: "byte" }
       ],
       0x03: [
         { name: "onGround", type: "bool" }
@@ -1352,19 +1352,22 @@ function writeSlot(value, buffer, offset) {
 }
 
 function sizeOfString(value) {
-  assert.ok(value.length < STRING_MAX_LENGTH, "string greater than max length");
-  return sizeOfVarInt(value.length) + value.length;
+  var length = Buffer.byteLength(value, 'utf8');
+  assert.ok(length < STRING_MAX_LENGTH, "string greater than max length");
+  return sizeOfVarInt(length) + length;
 }
 
 function sizeOfUString(value) {
-  assert.ok(value.length < SRV_STRING_MAX_LENGTH, "string greater than max length");
-  return sizeOfVarInt(value.length) + value.length;
+  var length = Buffer.byteLength(value, 'utf8');
+  assert.ok(length < SRV_STRING_MAX_LENGTH, "string greater than max length");
+  return sizeOfVarInt(length) + length;
 }
 
 function writeString(value, buffer, offset) {
-  offset = writeVarInt(value.length, buffer, offset);
-  buffer.write(value, offset, value.length, 'utf8');
-  return offset + value.length;
+  var length = Buffer.byteLength(value, 'utf8');
+  offset = writeVarInt(length, buffer, offset);
+  buffer.write(value, offset, length, 'utf8');
+  return offset + length;
 }
 
 function sizeOfAscii(value) {