# HG changeset patch # User Steve Losh # Date 1308863661 14400 # Node ID 220cb231132bc4f75898535b79c1289247bc7833 # Parent b64a2eaf24ac557675b159e53ed59bee2e431792 Clean up whitespace. diff -r b64a2eaf24ac -r 220cb231132b src/clojurecraft/core.clj --- a/src/clojurecraft/core.clj Tue Jun 21 21:59:13 2011 -0400 +++ b/src/clojurecraft/core.clj Thu Jun 23 17:14:21 2011 -0400 @@ -1,29 +1,29 @@ (ns clojurecraft.core - (:import (java.net Socket) - (java.io DataOutputStream DataInputStream))) + (:import (java.net Socket) + (java.io DataOutputStream DataInputStream))) (def minecraft-local {:name "localhost" :port 25565}) ; Packet Type Maps ----------------------------------------------------------------- (def packet-types { - 0x00 :keepalive - 0x01 :login - 0x02 :handshake - 0x03 :chat - 0x04 :timeupdate - 0x05 :equipment - 0x06 :spawnposition - 0x07 :useentity - 0x08 :updatehealth - 0x09 :respawn - 0x0A :player - 0x0B :playerposition - 0x0C :playerlook - 0x0D :playerpositionlook - 0x0E :playerdigging - 0x0F :playerblockplacement - 0x10 :holdingchange - 0x11 :usebed + 0x00 :keepalive + 0x01 :login + 0x02 :handshake + 0x03 :chat + 0x04 :timeupdate + 0x05 :equipment + 0x06 :spawnposition + 0x07 :useentity + 0x08 :updatehealth + 0x09 :respawn + 0x0A :player + 0x0B :playerposition + 0x0C :playerlook + 0x0D :playerpositionlook + 0x0E :playerdigging + 0x0F :playerblockplacement + 0x10 :holdingchange + 0x11 :usebed }) (def packet-ids (apply assoc {} (mapcat reverse packet-types))) @@ -31,354 +31,354 @@ ; Connection Wrappers -------------------------------------------------------------- (defn connect [server] - (let [socket (Socket. (:name server) (:port server)) - in (DataInputStream. (.getInputStream socket)) - out (DataOutputStream. (.getOutputStream socket)) - conn (ref {:in in :out out})] - (doto (Thread. #(conn-handler conn)) (.start)) - conn)) + (let [socket (Socket. (:name server) (:port server)) + in (DataInputStream. (.getInputStream socket)) + out (DataOutputStream. (.getOutputStream socket)) + conn (ref {:in in :out out})] + (doto (Thread. #(conn-handler conn)) (.start)) + conn)) (defn disconnect [conn] - (dosync (alter conn merge {:exit true}))) + (dosync (alter conn merge {:exit true}))) ; Writing Data --------------------------------------------------------------------- (defn -write-byte [conn i] - (println (str "-> PACKET ID: " (Integer/toHexString i))) - (doto (:out @conn) - (.writeByte (int i)))) + (println (str "-> PACKET ID: " (Integer/toHexString i))) + (doto (:out @conn) + (.writeByte (int i)))) (defn -write-short [conn i] - (println (str "-> SHORT: " i)) - (doto (:out @conn) - (.writeShort (int i)))) + (println (str "-> SHORT: " i)) + (doto (:out @conn) + (.writeShort (int i)))) (defn -write-int [conn i] - (println (str "-> INT: " i)) - (doto (:out @conn) - (.writeInt (int 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)))) + (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)))) + (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)))) + (println (str "-> FLOAT: " i)) + (doto (:out @conn) + (.writeFloat (int i)))) (defn -write-string16 [conn s] - (-write-short conn (count s)) - (println (str "-> STRING: " s)) - (doto (:out @conn) - (.writeChars 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))) + (println (str "-> BOOL: " b)) + (doto (:out @conn) + (.writeBoolean b))) ; Writing Packets ------------------------------------------------------------------ (defn write-packet-keepalive [conn _] - (-write-byte conn (:handshake packet-ids))) + (-write-byte conn (:handshake packet-ids))) (defn write-packet-handshake [conn {username :username}] - (-write-byte conn (:handshake packet-ids)) + (-write-byte conn (:handshake packet-ids)) - (-write-string16 conn username)) + (-write-string16 conn username)) (defn write-packet-login [conn {version :version, username :username}] - (-write-byte conn (:login packet-ids)) + (-write-byte conn (:login packet-ids)) - (-write-int conn version) - (-write-string16 conn username) - (-write-long conn 0) - (-write-byte conn 0)) + (-write-int conn version) + (-write-string16 conn username) + (-write-long conn 0) + (-write-byte conn 0)) (defn write-packet-chat [conn {message :message}] - (-write-byte conn (:chat packet-ids)) + (-write-byte conn (:chat packet-ids)) - (-write-string16 conn message)) + (-write-string16 conn message)) (defn write-packet-respawn [conn {world :world}] - (-write-byte conn (:respawn packet-ids)) + (-write-byte conn (:respawn packet-ids)) - (-write-bool conn world)) + (-write-bool conn world)) (defn write-packet-player [conn {onground :onground}] - (-write-byte conn (:player packet-ids)) + (-write-byte conn (:player packet-ids)) - (-write-bool conn onground)) + (-write-bool conn onground)) (defn write-packet-playerposition [conn {x :x y :y stance :stance z :z onground :onground}] - (-write-byte conn (:playerposition packet-ids)) + (-write-byte conn (:playerposition packet-ids)) - (-write-double conn x) - (-write-double conn y) - (-write-double conn stance) - (-write-double conn z) - (-write-bool conn onground)) + (-write-double conn x) + (-write-double conn y) + (-write-double conn stance) + (-write-double conn z) + (-write-bool conn onground)) (defn write-packet-playerlook [conn {yaw :yaw pitch :pitch onground :onground}] - (-write-byte conn (:playerlook packet-ids)) + (-write-byte conn (:playerlook packet-ids)) - (-write-float conn yaw) - (-write-float conn pitch) - (-write-bool conn onground)) + (-write-float conn yaw) + (-write-float conn pitch) + (-write-bool conn onground)) (defn write-packet-playerpositionlook [conn {x :x y :y stance :stance z :z yaw :yaw pitch :pitch onground :onground}] - (-write-byte conn (:playerpositionlook packet-ids)) + (-write-byte conn (:playerpositionlook packet-ids)) - (-write-double conn x) - (-write-double conn y) - (-write-double conn stance) - (-write-double conn z) - (-write-float conn yaw) - (-write-float conn pitch) - (-write-bool conn onground)) + (-write-double conn x) + (-write-double conn y) + (-write-double conn stance) + (-write-double conn z) + (-write-float conn yaw) + (-write-float conn pitch) + (-write-bool conn onground)) (defn write-packet-playerdigging [conn {status :status x :x y :y z :z face :face}] - (-write-byte conn (:playerdigging packet-ids)) + (-write-byte conn (:playerdigging packet-ids)) - (-write-byte conn status) - (-write-int conn x) - (-write-byte conn y) - (-write-int conn z) - (-write-byte conn face)) + (-write-byte conn status) + (-write-int conn x) + (-write-byte conn y) + (-write-int conn z) + (-write-byte conn face)) (defn write-packet-playerblockplacement [conn {x :x y :y z :z direction :direction id :id amount :amount damage :damage}] - (-write-byte conn (:playerblockplacement packet-ids)) + (-write-byte conn (:playerblockplacement packet-ids)) - (-write-int conn x) - (-write-byte conn y) - (-write-int conn z) - (-write-byte conn direction) - (-write-short conn id) - (-write-byte conn amount) - (-write-short conn damage)) + (-write-int conn x) + (-write-byte conn y) + (-write-int conn z) + (-write-byte conn direction) + (-write-short conn id) + (-write-byte conn amount) + (-write-short conn damage)) (defn write-packet-holdingchange [conn {slot :slot}] - (-write-byte conn (:holdingchange packet-ids)) + (-write-byte conn (:holdingchange packet-ids)) - (-write-short conn slot)) + (-write-short conn slot)) (defn write-packet-usebed [conn {eid :eid inbed :inbed x :x y :y z :z}] - (-write-byte conn (:usebed packet-ids)) + (-write-byte conn (:usebed packet-ids)) - (-write-int conn eid) - (-write-byte conn inbed) - (-write-int conn x) - (-write-byte conn y) - (-write-int conn z)) + (-write-int conn eid) + (-write-byte conn inbed) + (-write-int conn x) + (-write-byte conn y) + (-write-int conn z)) ; Writing Wrappers ----------------------------------------------------------------- (defn flushc [conn] - (doto (:out @conn) (.flush))) + (doto (:out @conn) (.flush))) (defn write-packet [conn packet-type payload] - (cond - (= packet-type :keepalive) (write-packet-handshake conn payload) - (= packet-type :handshake) (write-packet-handshake conn payload) - (= packet-type :login) (write-packet-login conn payload) - (= packet-type :chat) (write-packet-chat conn payload) - (= packet-type :respawn) (write-packet-respawn conn payload) - (= packet-type :player) (write-packet-player conn payload) - (= packet-type :playerposition) (write-packet-playerposition conn payload) - (= packet-type :playerlook) (write-packet-playerlook conn payload) - (= packet-type :playerpositionlook) (write-packet-playerpositionlook conn payload) - (= packet-type :playerdigging) (write-packet-playerdigging conn payload) - (= packet-type :playerblockplacement) (write-packet-playerblockplacement conn payload) - (= packet-type :holdingchange) (write-packet-holdingchange conn payload) - (= packet-type :usebed) (write-packet-usebed conn payload) - ) - (flushc conn)) + (cond + (= packet-type :keepalive) (write-packet-handshake conn payload) + (= packet-type :handshake) (write-packet-handshake conn payload) + (= packet-type :login) (write-packet-login conn payload) + (= packet-type :chat) (write-packet-chat conn payload) + (= packet-type :respawn) (write-packet-respawn conn payload) + (= packet-type :player) (write-packet-player conn payload) + (= packet-type :playerposition) (write-packet-playerposition conn payload) + (= packet-type :playerlook) (write-packet-playerlook conn payload) + (= packet-type :playerpositionlook) (write-packet-playerpositionlook conn payload) + (= packet-type :playerdigging) (write-packet-playerdigging conn payload) + (= packet-type :playerblockplacement) (write-packet-playerblockplacement conn payload) + (= packet-type :holdingchange) (write-packet-holdingchange conn payload) + (= packet-type :usebed) (write-packet-usebed conn payload) + ) + (flushc conn)) ; Reading Data --------------------------------------------------------------------- (defn -read-byte [conn] - (let [b (.readByte (:in @conn))] - b)) + (let [b (.readByte (:in @conn))] + b)) (defn -read-int [conn] - (let [i (.readInt (:in @conn))] - i)) + (let [i (.readInt (:in @conn))] + i)) (defn -read-long [conn] - (let [i (.readLong (:in @conn))] - i)) + (let [i (.readLong (:in @conn))] + i)) (defn -read-short [conn] - (let [i (.readShort (:in @conn))] - i)) + (let [i (.readShort (:in @conn))] + i)) (defn -read-bool [conn] - (let [b (.readBoolean (:in @conn))] - b)) + (let [b (.readBoolean (:in @conn))] + b)) (defn -read-double [conn] - (let [i (.readDouble (:in @conn))] - i)) + (let [i (.readDouble (:in @conn))] + i)) (defn -read-float [conn] - (let [i (.readFloat (:in @conn))] - i)) + (let [i (.readFloat (:in @conn))] + i)) (defn -read-string16 [conn] (let [str-len (.readShort (:in @conn)) - s (apply str (repeatedly str-len #(.readChar (:in @conn))))] + s (apply str (repeatedly str-len #(.readChar (:in @conn))))] s)) ; Reading Packets ------------------------------------------------------------------ (defn read-packet-keepalive [conn] - nil) + nil) (defn read-packet-handshake [conn] - (-> {} - (assoc :hash (-read-string16 conn)))) + (-> {} + (assoc :hash (-read-string16 conn)))) (defn read-packet-login [conn] - (-> {} - (assoc :eid (-read-int conn)) - (assoc :unknown (-read-string16 conn)) - (assoc :seed (-read-long conn)) - (assoc :dimension (-read-byte conn)))) + (-> {} + (assoc :eid (-read-int conn)) + (assoc :unknown (-read-string16 conn)) + (assoc :seed (-read-long conn)) + (assoc :dimension (-read-byte conn)))) (defn read-packet-chat [conn] - (-> {} - (assoc :message (-read-string16 conn)))) + (-> {} + (assoc :message (-read-string16 conn)))) (defn read-packet-timeupdate [conn] - (-> {} - (assoc :time (-read-long conn)))) + (-> {} + (assoc :time (-read-long conn)))) (defn read-packet-equipment [conn] - (-> {} - (assoc :eid (-read-int conn)) - (assoc :slot (-read-short conn)) - (assoc :itemid (-read-short conn)) - (assoc :unknown (-read-short conn)))) + (-> {} + (assoc :eid (-read-int conn)) + (assoc :slot (-read-short conn)) + (assoc :itemid (-read-short conn)) + (assoc :unknown (-read-short conn)))) (defn read-packet-spawnposition [conn] - (-> {} - (assoc :x (-read-int conn)) - (assoc :y (-read-int conn)) - (assoc :z (-read-int conn)))) + (-> {} + (assoc :x (-read-int conn)) + (assoc :y (-read-int conn)) + (assoc :z (-read-int conn)))) (defn read-packet-useentity [conn] - (-> {} - (assoc :user (-read-int conn)) - (assoc :target (-read-int conn)) - (assoc :leftclick (-read-bool conn)))) + (-> {} + (assoc :user (-read-int conn)) + (assoc :target (-read-int conn)) + (assoc :leftclick (-read-bool conn)))) (defn read-packet-updatehealth [conn] - (-> {} - (assoc :health (-read-short conn)))) + (-> {} + (assoc :health (-read-short conn)))) (defn read-packet-respawn [conn] - (-> {} - (assoc :world (-read-byte conn)))) + (-> {} + (assoc :world (-read-byte conn)))) (defn read-packet-playerpositionlook [conn] - (-> {} - (assoc :x (-read-double conn)) - (assoc :stance (-read-double conn)) - (assoc :y (-read-double conn)) - (assoc :z (-read-double conn)) - (assoc :yaw (-read-float conn)) - (assoc :pitch (-read-float conn)) - (assoc :onground (-read-bool conn)))) + (-> {} + (assoc :x (-read-double conn)) + (assoc :stance (-read-double conn)) + (assoc :y (-read-double conn)) + (assoc :z (-read-double conn)) + (assoc :yaw (-read-float conn)) + (assoc :pitch (-read-float conn)) + (assoc :onground (-read-bool conn)))) (defn read-packet-playerdigging [conn] - (-> {} - (assoc :status (-read-byte conn)) - (assoc :x (-read-int conn)) - (assoc :y (-read-byte conn)) - (assoc :z (-read-int conn)) - (assoc :face (-read-byte conn)))) + (-> {} + (assoc :status (-read-byte conn)) + (assoc :x (-read-int conn)) + (assoc :y (-read-byte conn)) + (assoc :z (-read-int conn)) + (assoc :face (-read-byte conn)))) (defn read-packet-playerblockplacement [conn] - (-> {} - (assoc :x (-read-int conn)) - (assoc :y (-read-byte conn)) - (assoc :z (-read-int conn)) - (assoc :direction (-read-byte conn)) - (assoc :id (-read-short conn)) - (assoc :amount (-read-byte conn)) - (assoc :damage (-read-short conn)))) + (-> {} + (assoc :x (-read-int conn)) + (assoc :y (-read-byte conn)) + (assoc :z (-read-int conn)) + (assoc :direction (-read-byte conn)) + (assoc :id (-read-short conn)) + (assoc :amount (-read-byte conn)) + (assoc :damage (-read-short conn)))) (defn read-packet-holdingchange [conn] - (-> {} - (assoc :slot (-read-short conn)))) + (-> {} + (assoc :slot (-read-short conn)))) (defn read-packet-usebed [conn] - (-> {} - (assoc :eid (-read-int conn)) - (assoc :inbed (-read-byte conn)) - (assoc :x (-read-int conn)) - (assoc :y (-read-byte conn)) - (assoc :z (-read-int conn)))) + (-> {} + (assoc :eid (-read-int conn)) + (assoc :inbed (-read-byte conn)) + (assoc :x (-read-int conn)) + (assoc :y (-read-byte conn)) + (assoc :z (-read-int conn)))) ; Reading Wrappers ----------------------------------------------------------------- (defn read-packet [conn packet-id] - (let [packet-id (int packet-id) - packet-type (packet-types packet-id)] - (println "\n----->") - (println - (cond - (= packet-type :keepalive) (read-packet-keepalive conn) - (= packet-type :handshake) (read-packet-handshake conn) - (= packet-type :login) (read-packet-login conn) - (= packet-type :chat) (read-packet-chat conn) - (= packet-type :timeupdate) (read-packet-timeupdate conn) - (= packet-type :equipment) (read-packet-equipment conn) - (= packet-type :spawnposition) (read-packet-spawnposition conn) - (= packet-type :useentity) (read-packet-useentity conn) - (= packet-type :updatehealth) (read-packet-updatehealth conn) - (= packet-type :respawn) (read-packet-respawn conn) - (= packet-type :playerpositionlook) (read-packet-playerpositionlook conn) - (= packet-type :playerdigging) (read-packet-playerdigging conn) - (= packet-type :playerblockplacement) (read-packet-playerblockplacement conn) - (= packet-type :holdingchange) (read-packet-holdingchange conn) - (= packet-type :usebed) (read-packet-usebed conn) - :else (str "UNKNOWN PACKET TYPE: " packet-id) - )) - (println "\n\n\n"))) + (let [packet-id (int packet-id) + packet-type (packet-types packet-id)] + (println "\n----->") + (println + (cond + (= packet-type :keepalive) (read-packet-keepalive conn) + (= packet-type :handshake) (read-packet-handshake conn) + (= packet-type :login) (read-packet-login conn) + (= packet-type :chat) (read-packet-chat conn) + (= packet-type :timeupdate) (read-packet-timeupdate conn) + (= packet-type :equipment) (read-packet-equipment conn) + (= packet-type :spawnposition) (read-packet-spawnposition conn) + (= packet-type :useentity) (read-packet-useentity conn) + (= packet-type :updatehealth) (read-packet-updatehealth conn) + (= packet-type :respawn) (read-packet-respawn conn) + (= packet-type :playerpositionlook) (read-packet-playerpositionlook conn) + (= packet-type :playerdigging) (read-packet-playerdigging conn) + (= packet-type :playerblockplacement) (read-packet-playerblockplacement conn) + (= packet-type :holdingchange) (read-packet-holdingchange conn) + (= packet-type :usebed) (read-packet-usebed conn) + :else (str "UNKNOWN PACKET TYPE: " packet-id) + )) + (println "\n\n\n"))) ; Connection Handling -------------------------------------------------------------- (defn login [conn] - ; Send handshake - (write-packet conn :handshake {:username "timmy"}) + ; Send handshake + (write-packet conn :handshake {:username "timmy"}) - ; Get handshake - (let [packet-id (-read-byte conn)] - (read-packet conn packet-id)) + ; Get handshake + (let [packet-id (-read-byte conn)] + (read-packet conn packet-id)) - ; Send login - (write-packet conn :login {:version 13 :username "timmy"}) + ; Send login + (write-packet conn :login {:version 13 :username "timmy"}) - ; Get login - (let [packet-id (-read-byte conn)] - (read-packet conn packet-id))) + ; Get login + (let [packet-id (-read-byte conn)] + (read-packet conn packet-id))) (defn conn-handler [conn] - (println "connecting") - (login conn) - (while (nil? (:exit @conn)) - (let [packet-id (.readByte (:in @conn))] - (read-packet conn packet-id) - )) - (println "done")) + (println "connecting") + (login conn) + (while (nil? (:exit @conn)) + (let [packet-id (.readByte (:in @conn))] + (read-packet conn packet-id) + )) + (println "done"))