packet_handling.clj
Branches > main > 4af8254 > files / src / net / bowmap / packet_handling.clj
(ns net.bowmap.packet-handling
(:require
[net.bowmap.client.state :as state]
[net.bowmap.packet :as pk]
[net.bowmap.packet.client :as cp]
[net.bowmap.packet.registry :as registry]
[net.bowmap.packet.server :as sp]))
(defmulti handle-packet
(fn [pk client]
(::pk/id pk)))
(defmethod handle-packet :default [pk client]
(prn "Unhandled packet:" pk))
(defmethod handle-packet ::sp/handshaking [pk client]
{::state/state (:intent pk)})
(defmethod handle-packet ::sp/status-request [pk client]
{:response [{::pk/id ::cp/status-response
:response {:version {:name "1.21.11"
:protocol 774}
:players {:max 1000
:online 0}
:description {:text "Bowmap!"}
:enforcesSecureChat false}}]})
(defmethod handle-packet ::sp/ping-request [pk client]
{:response [{::pk/id ::cp/pong-response
:timestamp (:timestamp pk)}]})
(defmethod handle-packet ::sp/login-start [pk client]
{:response [{::pk/id ::cp/login-success
:uuid (:uuid pk)
:username (:username pk)
:properties []}]})
(defmethod handle-packet ::sp/login-acknowledged [pk client]
{::state/state ::state/config
:response [{::pk/id ::cp/known-packs
:known-packs [{:namespace "minecraft" :id "core" :version "1.12.11"}]}]})
(defmethod handle-packet ::sp/known-packs [pk client]
{:response (conj (vec registry/registry-packets)
{::pk/id ::cp/finish-config})})
(defmethod handle-packet ::sp/ack-finish-config [pk client]
{::state/state ::state/play})