aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/ComplexItemDataPacket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/ComplexItemDataPacket.cpp')
-rw-r--r--Minecraft.World/ComplexItemDataPacket.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/Minecraft.World/ComplexItemDataPacket.cpp b/Minecraft.World/ComplexItemDataPacket.cpp
new file mode 100644
index 00000000..4c365bbd
--- /dev/null
+++ b/Minecraft.World/ComplexItemDataPacket.cpp
@@ -0,0 +1,57 @@
+#include "stdafx.h"
+#include <iostream>
+#include "InputOutputStream.h"
+#include "PacketListener.h"
+#include "ComplexItemDataPacket.h"
+
+
+
+ComplexItemDataPacket::~ComplexItemDataPacket()
+{
+ delete [] data.data;
+}
+
+ComplexItemDataPacket::ComplexItemDataPacket()
+{
+ shouldDelay = true;
+ itemType = 0;
+}
+
+ComplexItemDataPacket::ComplexItemDataPacket(short itemType, short itemId, charArray data)
+{
+ shouldDelay = true;
+ this->itemType = itemType;
+ this->itemId = itemId;
+ // Take copy of array passed in as we want the packets to have full ownership of any data they reference
+ this->data = charArray(data.length);
+ memcpy(this->data.data, data.data, data.length);
+}
+
+void ComplexItemDataPacket::read(DataInputStream *dis) //throws IOException
+{
+ itemType = dis->readShort();
+ itemId = dis->readShort();
+
+ data = charArray(dis->readShort() & 0xffff);
+ dis->readFully(data);
+}
+
+void ComplexItemDataPacket::write(DataOutputStream *dos) //throws IOException
+{
+ dos->writeShort(itemType);
+ dos->writeShort(itemId);
+ dos->writeShort(data.length);
+
+ byteArray ba( (byte*)data.data, data.length );
+ dos->write(ba);
+}
+
+void ComplexItemDataPacket::handle(PacketListener *listener)
+{
+ listener->handleComplexItemData( shared_from_this() );
+}
+
+int ComplexItemDataPacket::getEstimatedSize()
+{
+ return 2+2+2+ data.length;
+}