e46e978
Branches > main > e46e978 > files
Send player join and leave messages
Commit: e46e9787e39f941456f30e8cc20580829db0a3b8
Parent: 1fcddae
2 changed files:
src/net/bowmap/protocol/handle.clj view file
@@ -40,7 +40,10 @@ :timestamp (:timestamp pk)}]}) (defmethod interpret-packet ::serverbound/login-start [{:keys! [uuid username]}]- {:packets [{::pk/id ::clientbound/login-success+ {:events [{::event/id ::event/player-joining+ ::player/uuid uuid+ ::player/username username}]+ :packets [{::pk/id ::clientbound/login-success :profile {:uuid uuid :username username :properties []}src/net/bowmap/server/logic.clj view file
@@ -11,18 +11,30 @@ (fn [event] (::event/id event))) -; Want this to be pure, which means you need a way to encode that state change as data?-(defmethod handle-event ::event/player-joined [{:keys! [::player/uuid ::player/player]}]+(defmethod handle-event ::event/player-joining [{:keys! [::player/uuid ::player/username] :as p}] (dosync (if (@server/players uuid) (throw (Exception. "Player tried to join with an existing UUID"))- (commute server/players assoc uuid player))+ (commute server/players update uuid merge p)) [])) +; Want this to be pure, which means you need a way to encode that state change as data?+(defmethod handle-event ::event/player-joined [{:keys! [::player/uuid ::player/player]}]+ (dosync+ (commute server/players update uuid merge player)+ (for [[recpient-uuid] @server/players]+ {::effect/id ::effect/send-chat-message+ ::player/uuid recpient-uuid+ :message {:text (str (or (::player/username (server/player uuid)) "Unknown Player") " Joined!")}})))+ (defmethod handle-event ::event/player-left [{:keys! [::player/uuid]}] (dosync- (commute server/players dissoc uuid)- []))+ (let [username (::player/username (server/player uuid))]+ (commute server/players dissoc uuid)+ (for [[recpient-uuid] @server/players]+ {::effect/id ::effect/send-chat-message+ ::player/uuid recpient-uuid+ :message {:text (str (or username "Unknown Player") " Left.")}})))) (defmethod handle-event ::event/updated-player-movement [{:keys! [::player/uuid ::position/position] :as e}] (dosync