# HG changeset patch # User Steve Losh # Date 1309128449 14400 # Node ID 6799868ce43d248b5bd77c99ed833d1e3066643d # Parent fc293cb5f83e6b0296e9e77bb8ab456633b3564b Refactor ALL the things!! diff -r fc293cb5f83e -r 6799868ce43d src/clojurecraft/core.clj --- a/src/clojurecraft/core.clj Fri Jun 24 21:05:15 2011 -0400 +++ b/src/clojurecraft/core.clj Sun Jun 26 18:47:29 2011 -0400 @@ -3,7 +3,8 @@ (:use [clojurecraft.in]) (:use [clojurecraft.out]) (:import (java.net Socket) - (java.io DataOutputStream DataInputStream))) + (java.io DataOutputStream DataInputStream) + (java.util.concurrent LinkedBlockingQueue))) (def minecraft-local {:name "localhost" :port 25565}) @@ -30,13 +31,33 @@ (read-packet bot))) (println "done")) +(defn location-handler [bot] + (let [conn (:connection bot) + outqueue (:outqueue bot)] + (while (nil? (:exit @conn)) + (let [player (:player bot) + location (:location @player)] + (when (not (nil? location)) + (.put outqueue [:playerpositionlook location])) + (Thread/sleep 50))))) + +(defn output-handler [bot] + (let [conn (:connection bot) + outqueue (:outqueue bot)] + (while (nil? (:exit @conn)) + (let [[packet-type, payload] (.take outqueue)] + (write-packet bot packet-type payload))))) + (defn connect [server] (let [socket (Socket. (:name server) (:port server)) in (DataInputStream. (.getInputStream socket)) out (DataOutputStream. (.getOutputStream socket)) conn (ref {:in in :out out}) - bot {:connection conn}] + outqueue (LinkedBlockingQueue.) + player (ref {:location nil}) + world (ref {}) + bot {:connection conn, :outqueue outqueue, :player player, :world world}] (println "connecting") (login bot) @@ -45,6 +66,15 @@ (println "starting read handler") (doto (Thread. #(input-handler bot)) (.start)) + (println "starting write handler") + (doto (Thread. #(output-handler bot)) (.start)) + + (println "starting location updating handler") + (doto (Thread. #(location-handler bot)) (.start)) + + (println "writing initial keepalive packet") + (.put outqueue [:keepalive {}]) + (println "all systems go, returning bot") bot)) @@ -54,6 +84,6 @@ ; Scratch -------------------------------------------------------------------------- -;(def bot (connect minecraft-local)) -;(disconnect bot) +(def bot (connect minecraft-local)) +(disconnect bot) diff -r fc293cb5f83e -r 6799868ce43d src/clojurecraft/in.clj --- a/src/clojurecraft/in.clj Fri Jun 24 21:05:15 2011 -0400 +++ b/src/clojurecraft/in.clj Sun Jun 26 18:47:29 2011 -0400 @@ -67,385 +67,490 @@ ; Reading Packets ------------------------------------------------------------------ -(defn- read-packet-keepalive [conn] - nil) +(defn- read-packet-keepalive [bot] + {}) -(defn- read-packet-handshake [conn] - (assoc {} - :hash (-read-string-ucs2 conn))) +(defn- read-packet-handshake [bot] + (let [conn (:connection bot) + payload (assoc {} + :hash (-read-string-ucs2 conn))] + payload)) -(defn- read-packet-login [conn] - (assoc {} - :eid (-read-int conn) - :unknown (-read-string-ucs2 conn) - :seed (-read-long conn) - :dimension (-read-byte conn))) +(defn- read-packet-login [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :unknown (-read-string-ucs2 conn) + :seed (-read-long conn) + :dimension (-read-byte conn))] + payload)) -(defn- read-packet-chat [conn] - (assoc {} - :message (-read-string-ucs2 conn))) +(defn- read-packet-chat [bot] + (let [conn (:connection bot) + payload (assoc {} + :message (-read-string-ucs2 conn))] + payload)) -(defn- read-packet-timeupdate [conn] - (assoc {} - :time (-read-long conn))) +(defn- read-packet-timeupdate [bot] + (let [conn (:connection bot) + payload (assoc {} + :time (-read-long conn))] + payload)) -(defn- read-packet-equipment [conn] - (assoc {} - :eid (-read-int conn) - :slot (-read-short conn) - :itemid (-read-short conn) - :unknown (-read-short conn))) +(defn- read-packet-equipment [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :slot (-read-short conn) + :itemid (-read-short conn) + :unknown (-read-short conn))] + payload)) -(defn- read-packet-spawnposition [conn] - (assoc {} - :x (-read-int conn) - :y (-read-int conn) - :z (-read-int conn))) +(defn- read-packet-spawnposition [bot] + (let [conn (:connection bot) + payload (assoc {} + :x (-read-int conn) + :y (-read-int conn) + :z (-read-int conn))] + payload)) -(defn- read-packet-useentity [conn] - (assoc {} - :user (-read-int conn) - :target (-read-int conn) - :leftclick (-read-bool conn))) +(defn- read-packet-useentity [bot] + (let [conn (:connection bot) + payload (assoc {} + :user (-read-int conn) + :target (-read-int conn) + :leftclick (-read-bool conn))] + payload)) -(defn- read-packet-updatehealth [conn] - (assoc {} - :health (-read-short conn))) +(defn- read-packet-updatehealth [bot] + (let [conn (:connection bot) + payload (assoc {} + :health (-read-short conn))] + payload)) -(defn- read-packet-respawn [conn] - (assoc {} - :world (-read-byte conn))) +(defn- read-packet-respawn [bot] + (let [conn (:connection bot) + payload (assoc {} + :world (-read-byte conn))] + payload)) -(defn- read-packet-playerpositionlook [conn] - (assoc {} - :x (-read-double conn) - :stance (-read-double conn) - :y (-read-double conn) - :z (-read-double conn) - :yaw (-read-float conn) - :pitch (-read-float conn) - :onground (-read-bool conn))) +(defn- read-packet-playerpositionlook [bot] + (let [conn (:connection bot) + payload (assoc {} + :x (-read-double conn) + :stance (-read-double conn) + :y (-read-double conn) + :z (-read-double conn) + :yaw (-read-float conn) + :pitch (-read-float conn) + :onground (-read-bool conn))] + (dosync (alter (:player bot) merge {:location payload})) + payload)) -(defn- read-packet-playerdigging [conn] - (assoc {} - :status (-read-byte conn) - :x (-read-int conn) - :y (-read-byte conn) - :z (-read-int conn) - :face (-read-byte conn))) +(defn- read-packet-playerdigging [bot] + (let [conn (:connection bot) + payload (assoc {} + :status (-read-byte conn) + :x (-read-int conn) + :y (-read-byte conn) + :z (-read-int conn) + :face (-read-byte conn))] + payload)) -(defn- read-packet-playerblockplacement [conn] - (assoc {} - :x (-read-int conn) - :y (-read-byte conn) - :z (-read-int conn) - :direction (-read-byte conn) - :id (-read-short conn) - :amount (-read-byte conn) - :damage (-read-short conn))) +(defn- read-packet-playerblockplacement [bot] + (let [conn (:connection bot) + payload (assoc {} + :x (-read-int conn) + :y (-read-byte conn) + :z (-read-int conn) + :direction (-read-byte conn) + :id (-read-short conn) + :amount (-read-byte conn) + :damage (-read-short conn))] + payload)) -(defn- read-packet-holdingchange [conn] - (assoc {} - :slot (-read-short conn))) +(defn- read-packet-holdingchange [bot] + (let [conn (:connection bot) + payload (assoc {} + :slot (-read-short conn))] + payload)) -(defn- read-packet-usebed [conn] - (assoc {} - :eid (-read-int conn) - :inbed (-read-byte conn) - :x (-read-int conn) - :y (-read-byte conn) - :z (-read-int conn))) +(defn- read-packet-usebed [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :inbed (-read-byte conn) + :x (-read-int conn) + :y (-read-byte conn) + :z (-read-int conn))] + payload)) -(defn- read-packet-animate [conn] - (assoc {} - :eid (-read-int conn) - :animate (-read-byte conn))) +(defn- read-packet-animate [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :animate (-read-byte conn))] + payload)) -(defn- read-packet-entityaction [conn] - (assoc {} - :eid (-read-int conn) - :action (-read-byte conn))) +(defn- read-packet-entityaction [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :action (-read-byte conn))] + payload)) -(defn- read-packet-namedentityspawn [conn] - (assoc {} - :eid (-read-int conn) - :playername (-read-string-ucs2 conn) - :x (-read-int conn) - :y (-read-int conn) - :z (-read-int conn) - :rotation (-read-byte conn) - :pitch (-read-byte conn) - :currentitem (-read-short conn))) +(defn- read-packet-namedentityspawn [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :playername (-read-string-ucs2 conn) + :x (-read-int conn) + :y (-read-int conn) + :z (-read-int conn) + :rotation (-read-byte conn) + :pitch (-read-byte conn) + :currentitem (-read-short conn))] + payload)) -(defn- read-packet-pickupspawn [conn] - (assoc {} - :eid (-read-int conn) - :item (-read-short conn) - :count (-read-byte conn) - :damagedata (-read-short conn) - :x (-read-int conn) - :y (-read-int conn) - :z (-read-int conn) - :rotation (-read-byte conn) - :pitch (-read-byte conn) - :roll (-read-byte conn))) +(defn- read-packet-pickupspawn [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :item (-read-short conn) + :count (-read-byte conn) + :damagedata (-read-short conn) + :x (-read-int conn) + :y (-read-int conn) + :z (-read-int conn) + :rotation (-read-byte conn) + :pitch (-read-byte conn) + :roll (-read-byte conn))] + payload)) -(defn- read-packet-collectitem [conn] - (assoc {} - :collectedeid (-read-int conn) - :collectoreid (-read-int conn))) +(defn- read-packet-collectitem [bot] + (let [conn (:connection bot) + payload (assoc {} + :collectedeid (-read-int conn) + :collectoreid (-read-int conn))] + payload)) -(defn- read-packet-addobjectvehicle [conn] - (let [basepacket (assoc {} - :eid (-read-int conn) - :type (-read-byte conn) - :x (-read-int conn) - :y (-read-int conn) - :z (-read-int conn) - :moar (-read-int conn))] - (if (< 0 (:moar basepacket)) - basepacket - (assoc basepacket - :unknownx (-read-int conn) - :unknowny (-read-int conn) - :unknownz (-read-int conn))))) +(defn- read-packet-addobjectvehicle [bot] + (let [conn (:connection bot) + payload (let [basepacket (assoc {} + :eid (-read-int conn) + :type (-read-byte conn) + :x (-read-int conn) + :y (-read-int conn) + :z (-read-int conn) + :moar (-read-int conn))] + (if (< 0 (:moar basepacket)) + basepacket + (assoc basepacket + :unknownx (-read-int conn) + :unknowny (-read-int conn) + :unknownz (-read-int conn))))] + payload)) -(defn- read-packet-mobspawn [conn] - (assoc {} - :eid (-read-int conn) - :type (-read-byte conn) - :x (-read-int conn) - :y (-read-int conn) - :z (-read-int conn) - :yaw (-read-byte conn) - :pitch (-read-byte conn) - :datastream (-read-metadata conn))) +(defn- read-packet-mobspawn [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :type (-read-byte conn) + :x (-read-int conn) + :y (-read-int conn) + :z (-read-int conn) + :yaw (-read-byte conn) + :pitch (-read-byte conn) + :datastream (-read-metadata conn))] + payload)) -(defn- read-packet-entitypainting [conn] - (assoc {} - :eid (-read-int conn) - :type (-read-string-ucs2 conn) - :x (-read-int conn) - :y (-read-int conn) - :z (-read-int conn) - :direction (-read-int conn))) +(defn- read-packet-entitypainting [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :type (-read-string-ucs2 conn) + :x (-read-int conn) + :y (-read-int conn) + :z (-read-int conn) + :direction (-read-int conn))] + payload)) -(defn- read-packet-stanceupdate [conn] - (assoc {} - :unknown1 (-read-float conn) - :unknown2 (-read-float conn) - :unknown3 (-read-bool conn) - :unknown4 (-read-bool conn) - :unknown5 (-read-float conn) - :unknown6 (-read-float conn))) +(defn- read-packet-stanceupdate [bot] + (let [conn (:connection bot) + payload (assoc {} + :unknown1 (-read-float conn) + :unknown2 (-read-float conn) + :unknown3 (-read-bool conn) + :unknown4 (-read-bool conn) + :unknown5 (-read-float conn) + :unknown6 (-read-float conn))] + payload)) -(defn- read-packet-entityvelocity [conn] - (assoc {} - :eid (-read-int conn) - :velocityx (-read-short conn) - :velocityy (-read-short conn) - :velocityz (-read-short conn))) +(defn- read-packet-entityvelocity [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :velocityx (-read-short conn) + :velocityy (-read-short conn) + :velocityz (-read-short conn))] + payload)) -(defn- read-packet-entitydestroy [conn] - (assoc {} - :eid (-read-int conn))) +(defn- read-packet-entitydestroy [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn))] + payload)) -(defn- read-packet-entity [conn] - (assoc {} - :eid (-read-int conn))) +(defn- read-packet-entity [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn))] + payload)) -(defn- read-packet-entityrelativemove [conn] - (assoc {} - :eid (-read-int conn) - :dx (-read-byte conn) - :dy (-read-byte conn) - :dz (-read-byte conn))) +(defn- read-packet-entityrelativemove [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :dx (-read-byte conn) + :dy (-read-byte conn) + :dz (-read-byte conn))] + payload)) -(defn- read-packet-entitylook [conn] - (assoc {} - :eid (-read-int conn) - :yaw (-read-byte conn) - :pitch (-read-byte conn))) +(defn- read-packet-entitylook [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :yaw (-read-byte conn) + :pitch (-read-byte conn))] + payload)) -(defn- read-packet-entitylookandrelativemove [conn] - (assoc {} - :eid (-read-int conn) - :dx (-read-byte conn) - :dy (-read-byte conn) - :dz (-read-byte conn) - :yaw (-read-byte conn) - :pitch (-read-byte conn))) +(defn- read-packet-entitylookandrelativemove [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :dx (-read-byte conn) + :dy (-read-byte conn) + :dz (-read-byte conn) + :yaw (-read-byte conn) + :pitch (-read-byte conn))] + payload)) -(defn- read-packet-entityteleport [conn] - (assoc {} - :eid (-read-int conn) - :x (-read-int conn) - :y (-read-int conn) - :z (-read-int conn) - :yaw (-read-byte conn) - :pitch (-read-byte conn))) +(defn- read-packet-entityteleport [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :x (-read-int conn) + :y (-read-int conn) + :z (-read-int conn) + :yaw (-read-byte conn) + :pitch (-read-byte conn))] + payload)) -(defn- read-packet-entitystatus [conn] - (assoc {} - :eid (-read-int conn) - :entitystatus (-read-byte conn))) +(defn- read-packet-entitystatus [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :entitystatus (-read-byte conn))] + payload)) -(defn- read-packet-attachentity [conn] - (assoc {} - :eid (-read-int conn) - :vehicleid (-read-int conn))) +(defn- read-packet-attachentity [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :vehicleid (-read-int conn))] + payload)) -(defn- read-packet-entitymetadata [conn] - (assoc {} - :eid (-read-int conn) - :metadata (-read-metadata conn))) +(defn- read-packet-entitymetadata [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :metadata (-read-metadata conn))] + payload)) -(defn- read-packet-prechunk [conn] - (assoc {} - :x (-read-int conn) - :z (-read-int conn) - :mode (-read-bool conn))) +(defn- read-packet-prechunk [bot] + (let [conn (:connection bot) + payload (assoc {} + :x (-read-int conn) + :z (-read-int conn) + :mode (-read-bool conn))] + payload)) -(defn- read-packet-mapchunk [conn] - (let [predata (assoc {} - :x (-read-int conn) - :y (-read-short conn) - :z (-read-int conn) - :sizex (-read-byte conn) - :sizey (-read-byte conn) - :sizez (-read-byte conn) - :compressedsize (-read-int conn))] - (assoc predata - :compresseddata - (-read-bytearray conn - (:compressedsize predata))))) +(defn- read-packet-mapchunk [bot] + (let [conn (:connection bot) + payload (let [predata (assoc {} + :x (-read-int conn) + :y (-read-short conn) + :z (-read-int conn) + :sizex (-read-byte conn) + :sizey (-read-byte conn) + :sizez (-read-byte conn) + :compressedsize (-read-int conn))] + (assoc predata + :compresseddata + (-read-bytearray conn + (:compressedsize predata))))] + payload)) -(defn- read-packet-multiblockchange [conn] - (assoc {} - :chunkx (-read-int conn) - :chunkz (-read-int conn) - :arraysize (-read-short conn) - :coordinatearray (-read-shortarray conn) - :typearray (-read-bytearray conn) - :metadataarray (-read-bytearray conn))) +(defn- read-packet-multiblockchange [bot] + (let [conn (:connection bot) + payload (assoc {} + :chunkx (-read-int conn) + :chunkz (-read-int conn) + :arraysize (-read-short conn) + :coordinatearray (-read-shortarray conn arraysize) + :typearray (-read-bytearray conn arraysize) + :metadataarray (-read-bytearray conn arraysize))] + payload)) -(defn- read-packet-blockchange [conn] - (assoc {} - :x (-read-int conn) - :y (-read-byte conn) - :z (-read-int conn) - :blocktype (-read-byte conn) - :blockmetadata (-read-byte conn))) +(defn- read-packet-blockchange [bot] + (let [conn (:connection bot) + payload (assoc {} + :x (-read-int conn) + :y (-read-byte conn) + :z (-read-int conn) + :blocktype (-read-byte conn) + :blockmetadata (-read-byte conn))] + payload)) -(defn- read-packet-playnoteblock [conn] - (assoc {} - :x (-read-int conn) - :y (-read-short conn) - :z (-read-int conn) - :instrumenttype (-read-byte conn) - :pitch (-read-byte conn))) +(defn- read-packet-playnoteblock [bot] + (let [conn (:connection bot) + payload (assoc {} + :x (-read-int conn) + :y (-read-short conn) + :z (-read-int conn) + :instrumenttype (-read-byte conn) + :pitch (-read-byte conn))] + payload)) -(defn- read-packet-explosion [conn] - (let [prerecords (assoc {} - :x (-read-int conn) - :y (-read-short conn) - :z (-read-int conn) - :unknownradius (-read-byte conn) - :recordcount (-read-byte conn))] - (assoc prerecords - :records (-read-bytearray conn - (* 3 (:recordcount prerecords)))))) +(defn- read-packet-explosion [bot] + (let [conn (:connection bot) + payload (let [prerecords (assoc {} + :x (-read-int conn) + :y (-read-short conn) + :z (-read-int conn) + :unknownradius (-read-byte conn) + :recordcount (-read-byte conn))] + (assoc prerecords + :records (-read-bytearray conn + (* 3 (:recordcount prerecords)))))] + payload)) -(defn- read-packet-soundeffect [conn] - (assoc {} - :effectid (-read-int conn) - :x (-read-int conn) - :y (-read-byte conn) - :z (-read-int conn) - :sounddata (-read-int conn))) +(defn- read-packet-soundeffect [bot] + (let [conn (:connection bot) + payload (assoc {} + :effectid (-read-int conn) + :x (-read-int conn) + :y (-read-byte conn) + :z (-read-int conn) + :sounddata (-read-int conn))] + payload)) -(defn- read-packet-newinvalidstate [conn] - (assoc {} - :reason (-read-byte conn))) +(defn- read-packet-newinvalidstate [bot] + (let [conn (:connection bot) + payload (assoc {} + :reason (-read-byte conn))] + payload)) -(defn- read-packet-thunderbolt [conn] - (assoc {} - :eid (-read-int conn) - :unknown (-read-bool conn) - :x (-read-int conn) - :y (-read-int conn) - :z (-read-int conn))) +(defn- read-packet-thunderbolt [bot] + (let [conn (:connection bot) + payload (assoc {} + :eid (-read-int conn) + :unknown (-read-bool conn) + :x (-read-int conn) + :y (-read-int conn) + :z (-read-int conn))] + payload)) -(defn- read-packet-openwindow [conn] - (assoc {} - :windowid (-read-byte conn) - :inventorytype (-read-byte conn) - :windowtitle (-read-string-utf8 conn) - :numberofslots (-read-byte conn))) +(defn- read-packet-openwindow [bot] + (let [conn (:connection bot) + payload (assoc {} + :windowid (-read-byte conn) + :inventorytype (-read-byte conn) + :windowtitle (-read-string-utf8 conn) + :numberofslots (-read-byte conn))] + payload)) -(defn- read-packet-closewindow [conn] - (assoc {} - :windowid (-read-byte conn))) +(defn- read-packet-closewindow [bot] + (let [conn (:connection bot) + payload (assoc {} + :windowid (-read-byte conn))] + payload)) -(defn- read-packet-setslot [conn] - (assoc {} - :windowid (-read-byte conn) - :slot (-read-short conn) - :itemid (-read-short conn) - :itemcount (-read-byte conn) - :itemuses (-read-short conn))) +(defn- read-packet-setslot [bot] + (let [conn (:connection bot) + payload (assoc {} + :windowid (-read-byte conn) + :slot (-read-short conn) + :itemid (-read-short conn) + :itemcount (-read-byte conn) + :itemuses (-read-short conn))] + payload)) -(defn- read-packet-windowitems [conn] - (letfn [(-read-payload-item [] - (let [payload (assoc {} :itemid (-read-short conn))] - (if (= (:itemid payload) -1) - payload - (assoc payload - :count (-read-byte conn) - :uses (-read-short conn)))))] - (let [prepayload (assoc {} - :windowid (-read-byte conn) - :count (-read-short conn)) - payload (repeatedly (:count prepayload) -read-payload-item)] - (assoc prepayload :payload payload)))) +(defn- read-packet-windowitems [bot] + (let [conn (:connection bot) + payload (letfn [(-read-payload-item [] + (let [payload (assoc {} :itemid (-read-short conn))] + (if (= (:itemid payload) -1) + payload + (assoc payload + :count (-read-byte conn) + :uses (-read-short conn)))))] + (let [prepay (assoc {} + :windowid (-read-byte conn) + :count (-read-short conn)) + pay (repeatedly (:count prepay) -read-payload-item)] + (assoc prepay :payload pay)))] + payload)) -(defn- read-packet-updateprogressbar [conn] - (assoc {} - :windowid (-read-byte conn) - :progressbar (-read-short conn) - :value (-read-short conn))) +(defn- read-packet-updateprogressbar [bot] + (let [conn (:connection bot) + payload (assoc {} + :windowid (-read-byte conn) + :progressbar (-read-short conn) + :value (-read-short conn))] + payload)) -(defn- read-packet-transaction [conn] - (assoc {} - :windowid (-read-byte conn) - :actionnumber (-read-short conn) - :accepted (-read-short conn))) +(defn- read-packet-transaction [bot] + (let [conn (:connection bot) + payload (assoc {} + :windowid (-read-byte conn) + :actionnumber (-read-short conn) + :accepted (-read-short conn))] + payload)) -(defn- read-packet-updatesign [conn] - (assoc {} - :x (-read-int conn) - :y (-read-short conn) - :z (-read-int conn) - :text1 (-read-string-ucs2 conn) - :text2 (-read-string-ucs2 conn) - :text3 (-read-string-ucs2 conn) - :text4 (-read-string-ucs2 conn))) +(defn- read-packet-updatesign [bot] + (let [conn (:connection bot) + payload (assoc {} + :x (-read-int conn) + :y (-read-short conn) + :z (-read-int conn) + :text1 (-read-string-ucs2 conn) + :text2 (-read-string-ucs2 conn) + :text3 (-read-string-ucs2 conn) + :text4 (-read-string-ucs2 conn))] + payload)) -(defn- read-packet-mapdata [conn] - (let [pretext (assoc {} - :unknown1 (-read-int conn) - :unknown2 (-read-short conn) - :textlength (-read-int conn))] - (assoc pretext :text (-read-bytearray (:textlength pretext))))) +(defn- read-packet-mapdata [bot] + (let [conn (:connection bot) + payload (let [pretext (assoc {} + :unknown1 (-read-int conn) + :unknown2 (-read-short conn) + :textlength (-read-int conn))] + (assoc pretext :text (-read-bytearray (:textlength pretext))))] + payload)) -(defn- read-packet-incrementstatistic [conn] - (assoc {} - :statisticid (-read-int conn) - :amount (-read-byte conn))) +(defn- read-packet-incrementstatistic [bot] + (let [conn (:connection bot) + payload (assoc {} + :statisticid (-read-int conn) + :amount (-read-byte conn))] + payload)) -(defn- read-packet-disconnectkick [conn] - (assoc {} - :reason (-read-string-ucs2 conn))) +(defn- read-packet-disconnectkick [bot] + (let [conn (:connection bot) + payload (assoc {} + :reason (-read-string-ucs2 conn))] + payload)) ; Reading Wrappers ----------------------------------------------------------------- @@ -454,63 +559,65 @@ packet-id (int (-read-byte conn)) packet-type (packet-types packet-id)] (if (= nil packet-type) - (println (str "UNKNOWN PACKET TYPE: " (Integer/toHexString packet-id))) (do - (println "\n--PACKET--> " packet-type) - (println + (println (str "UNKNOWN PACKET TYPE: " (Integer/toHexString packet-id))) + (/ 1 0)) + (do + (identity (str "\n--PACKET--> " packet-type)) + (identity (case packet-type - :keepalive (read-packet-keepalive conn) - :handshake (read-packet-handshake conn) - :login (read-packet-login conn) - :chat (read-packet-chat conn) - :timeupdate (read-packet-timeupdate conn) - :equipment (read-packet-equipment conn) - :spawnposition (read-packet-spawnposition conn) - :useentity (read-packet-useentity conn) - :updatehealth (read-packet-updatehealth conn) - :respawn (read-packet-respawn conn) - :playerpositionlook (read-packet-playerpositionlook conn) - :playerdigging (read-packet-playerdigging conn) - :playerblockplacement (read-packet-playerblockplacement conn) - :holdingchange (read-packet-holdingchange conn) - :usebed (read-packet-usebed conn) - :animate (read-packet-animate conn) - :entityaction (read-packet-entityaction conn) - :namedentityspawn (read-packet-namedentityspawn conn) - :pickupspawn (read-packet-pickupspawn conn) - :collectitem (read-packet-collectitem conn) - :addobjectvehicle (read-packet-addobjectvehicle conn) - :mobspawn (read-packet-mobspawn conn) - :entitypainting (read-packet-entitypainting conn) - :stanceupdate (read-packet-stanceupdate conn) - :entityvelocity (read-packet-entityvelocity conn) - :entitydestroy (read-packet-entitydestroy conn) - :entity (read-packet-entity conn) - :entityrelativemove (read-packet-entityrelativemove conn) - :entitylook (read-packet-entitylook conn) - :entitylookandrelativemove (read-packet-entitylookandrelativemove conn) - :entityteleport (read-packet-entityteleport conn) - :entitystatus (read-packet-entitystatus conn) - :attachentity (read-packet-attachentity conn) - :entitymetadata (read-packet-entitymetadata conn) - :prechunk (read-packet-prechunk conn) - :mapchunk (read-packet-mapchunk conn) - :multiblockchange (read-packet-multiblockchange conn) - :blockchange (read-packet-blockchange conn) - :playnoteblock (read-packet-playnoteblock conn) - :explosion (read-packet-explosion conn) - :soundeffect (read-packet-soundeffect conn) - :newinvalidstate (read-packet-newinvalidstate conn) - :thunderbolt (read-packet-thunderbolt conn) - :openwindow (read-packet-openwindow conn) - :closewindow (read-packet-closewindow conn) - :setslot (read-packet-setslot conn) - :windowitems (read-packet-windowitems conn) - :updateprogressbar (read-packet-updateprogressbar conn) - :transaction (read-packet-transaction conn) - :updatesign (read-packet-updatesign conn) - :mapdata (read-packet-mapdata conn) - :incrementstatistic (read-packet-incrementstatistic conn) - :disconnectkick (read-packet-disconnectkick conn))))) - (println "\n\n\n"))) + :keepalive (read-packet-keepalive bot) + :handshake (read-packet-handshake bot) + :login (read-packet-login bot) + :chat (read-packet-chat bot) + :timeupdate (read-packet-timeupdate bot) + :equipment (read-packet-equipment bot) + :spawnposition (read-packet-spawnposition bot) + :useentity (read-packet-useentity bot) + :updatehealth (read-packet-updatehealth bot) + :respawn (read-packet-respawn bot) + :playerpositionlook (read-packet-playerpositionlook bot) + :playerdigging (read-packet-playerdigging bot) + :playerblockplacement (read-packet-playerblockplacement bot) + :holdingchange (read-packet-holdingchange bot) + :usebed (read-packet-usebed bot) + :animate (read-packet-animate bot) + :entityaction (read-packet-entityaction bot) + :namedentityspawn (read-packet-namedentityspawn bot) + :pickupspawn (read-packet-pickupspawn bot) + :collectitem (read-packet-collectitem bot) + :addobjectvehicle (read-packet-addobjectvehicle bot) + :mobspawn (read-packet-mobspawn bot) + :entitypainting (read-packet-entitypainting bot) + :stanceupdate (read-packet-stanceupdate bot) + :entityvelocity (read-packet-entityvelocity bot) + :entitydestroy (read-packet-entitydestroy bot) + :entity (read-packet-entity bot) + :entityrelativemove (read-packet-entityrelativemove bot) + :entitylook (read-packet-entitylook bot) + :entitylookandrelativemove (read-packet-entitylookandrelativemove bot) + :entityteleport (read-packet-entityteleport bot) + :entitystatus (read-packet-entitystatus bot) + :attachentity (read-packet-attachentity bot) + :entitymetadata (read-packet-entitymetadata bot) + :prechunk (read-packet-prechunk bot) + :mapchunk (read-packet-mapchunk bot) + :multiblockchange (read-packet-multiblockchange bot) + :blockchange (read-packet-blockchange bot) + :playnoteblock (read-packet-playnoteblock bot) + :explosion (read-packet-explosion bot) + :soundeffect (read-packet-soundeffect bot) + :newinvalidstate (read-packet-newinvalidstate bot) + :thunderbolt (read-packet-thunderbolt bot) + :openwindow (read-packet-openwindow bot) + :closewindow (read-packet-closewindow bot) + :setslot (read-packet-setslot bot) + :windowitems (read-packet-windowitems bot) + :updateprogressbar (read-packet-updateprogressbar bot) + :transaction (read-packet-transaction bot) + :updatesign (read-packet-updatesign bot) + :mapdata (read-packet-mapdata bot) + :incrementstatistic (read-packet-incrementstatistic bot) + :disconnectkick (read-packet-disconnectkick bot))))) + (identity "\n\n\n"))) diff -r fc293cb5f83e -r 6799868ce43d src/clojurecraft/out.clj --- a/src/clojurecraft/out.clj Fri Jun 24 21:05:15 2011 -0400 +++ b/src/clojurecraft/out.clj Sun Jun 26 18:47:29 2011 -0400 @@ -3,17 +3,14 @@ ; Writing Data --------------------------------------------------------------------- (defn- -write-byte [conn i] - (println (str "-> PACKET ID: " (Integer/toHexString i))) (doto (:out @conn) (.writeByte (int i)))) (defn- -write-bytearray [conn ba] - (println (str "-> BYTEARRAY: " ba)) (doto (:out @conn) (.write ba 0 (count ba)))) (defn- -write-short [conn i] - (println (str "-> SHORT: " i)) (doto (:out @conn) (.writeShort (int i)))) @@ -21,38 +18,31 @@ (map #(-write-short %) sa)) (defn- -write-int [conn i] - (println (str "-> INT: " i)) (doto (:out @conn) (.writeInt (int i)))) (defn- -write-long [conn i] - (println (str "-> LONG: " i)) (doto (:out @conn) (.writeLong (int i)))) (defn- -write-double [conn i] - (println (str "-> DOUBLE: " i)) (doto (:out @conn) (.writeDouble (int i)))) (defn- -write-float [conn i] - (println (str "-> FLOAT: " i)) (doto (:out @conn) (.writeFloat (int i)))) (defn- -write-string-utf8 [conn s] - (println (str "-> STRING: " s)) (doto (:out @conn) (.writeUTF s))) (defn- -write-string-ucs2 [conn s] (-write-short conn (count s)) - (println (str "-> STRING: " s)) (doto (:out @conn) (.writeChars s))) (defn- -write-bool [conn b] - (println (str "-> BOOL: " b)) (doto (:out @conn) (.writeBoolean b))) @@ -63,7 +53,7 @@ ; Writing Packets ------------------------------------------------------------------ (defn- write-packet-keepalive [conn _] - (-write-byte conn (:handshake packet-ids))) + (-write-byte conn (:keepalive packet-ids))) (defn- write-packet-handshake [conn {username :username}] (-write-byte conn (:handshake packet-ids)) @@ -317,9 +307,11 @@ (doto (:out @conn) (.flush))) (defn write-packet [bot packet-type payload] + (println (str "<--WRITING-- " packet-type)) + (println payload) (let [conn (:connection bot)] (case packet-type - :keepalive (write-packet-handshake conn payload) + :keepalive (write-packet-keepalive conn payload) :handshake (write-packet-handshake conn payload) :login (write-packet-login conn payload) :chat (write-packet-chat conn payload) @@ -352,5 +344,6 @@ :updatesign (write-packet-updatesign conn payload) :incrementstatistic (write-packet-incrementstatistic conn payload) :disconnectkick (write-packet-disconnectkick conn payload)) - (flushc conn))) + (flushc conn)) + (println "written\n\n"))