# HG changeset patch # User Steve Losh # Date 1308868211 14400 # Node ID 6b09412b7f741d7153e0e4a563f7fe60bbdce7ab # Parent d79ade1e2aaa27b24c3a41ab1e16601bebe1427b Moar. diff -r d79ade1e2aaa -r 6b09412b7f74 src/clojurecraft/core.clj --- a/src/clojurecraft/core.clj Thu Jun 23 18:17:32 2011 -0400 +++ b/src/clojurecraft/core.clj Thu Jun 23 18:30:11 2011 -0400 @@ -42,6 +42,9 @@ 0x22 :entityteleport 0x26 :entitystatus 0x27 :attachentity + 0x28 :entitymetadata + 0x32 :prechunk + 0x33 :mapchunk }) (def packet-ids (apply assoc {} (mapcat reverse packet-types))) @@ -102,6 +105,10 @@ (doto (:out @conn) (.writeBoolean b))) +(defn -write-metadata [conn m] + ; TODO: Implement this. + nil) + ; Writing Packets ------------------------------------------------------------------ (defn write-packet-keepalive [conn _] @@ -256,6 +263,12 @@ (-write-int conn eid) (-write-int conn vehicleid)) +(defn write-packet-entitymetadata [conn {eid :eid metadata :metadata}] + (-write-byte conn (:attachentity packet-ids)) + + (-write-int conn eid) + (-write-metadata conn metadata)) + ; Writing Wrappers ----------------------------------------------------------------- (defn flushc [conn] @@ -283,6 +296,7 @@ (= packet-type :stanceupdate) (write-packet-stanceupdate conn payload) (= packet-type :entityvelocity) (write-packet-entityvelocity conn payload) (= packet-type :attachentity) (write-packet-attachentity conn payload) + (= packet-type :entitymetadata) (write-packet-entitymetadata conn payload) ) (flushc conn)) @@ -293,6 +307,10 @@ (let [b (.readByte (:in @conn))] b)) +(defn -read-bytearray [conn size] + ; TODO: Implement this. + nil) + (defn -read-int [conn] (let [i (.readInt (:in @conn))] i)) @@ -556,6 +574,31 @@ (assoc :eid (-read-int conn)) (assoc :vehicleid (-read-int conn)))) +(defn read-packet-entitymetadata [conn] + (-> {} + (assoc :eid (-read-int conn)) + (assoc :metadata (-read-metadata conn)))) + +(defn read-packet-prechunk [conn] + (-> {} + (assoc :x (-read-int conn)) + (assoc :z (-read-int conn)) + (assoc :mode (-read-bool conn)))) + +(defn read-packet-mapchunk [conn] + (let [predata (-> {} + (assoc :x (-read-int conn)) + (assoc :y (-read-short conn)) + (assoc :z (-read-int conn)) + (assoc :sizex (-read-byte conn)) + (assoc :sizey (-read-byte conn)) + (assoc :sizez (-read-byte conn)) + (assoc :compressedsize (-read-int conn)))] + (assoc predata + :compresseddata + (-read-bytearray conn + (:compressedsize predata))))) + ; Reading Wrappers ----------------------------------------------------------------- (defn read-packet [conn packet-id] @@ -597,6 +640,9 @@ (= packet-type :entityteleport) (read-packet-entityteleport conn) (= packet-type :entitystatus) (read-packet-entitystatus conn) (= packet-type :attachentity) (read-packet-attachentity conn) + (= packet-type :entitymetadata) (read-packet-entitymetadata conn) + (= packet-type :prechunk) (read-packet-prechunk conn) + (= packet-type :mapchunk) (read-packet-mapchunk conn) :else (str "UNKNOWN PACKET TYPE: " packet-id) ))