2629283
Branches > main > 2629283 > files
Fix stackoverflow, handle player movement
Commit: 26292837e19c8c215f2a846c58adc1f1f9985ec4
Parent: cf935ce
2 changed files:
src/net/bowmap/protocol/handle.clj view file
@@ -10,6 +10,7 @@ [net.bowmap.server.gamemode :as gamemode] [net.bowmap.server.ping :as ping] [net.bowmap.server.player :as player]+ [net.bowmap.server.position :as position] [net.bowmap.server.server :as server] [net.bowmap.stormbow.event :as event] [net.bowmap.transport.connection :as connection]))@@ -122,25 +123,23 @@ :pitch 0 :flags #{}}))})) -;(defn handle-player-update-movement-packet [{::player/keys! [uuid]}-; {:keys [& ::position/x ::position/y ::position/z ::position/yaw ::position/pitch]-; ; :flags are currently unused-; :select movement}]-; {:events [(merge {::event/id ::event/updated-player-movement-; ::player/uuid uuid-; ::position/position movement})]})-;-;(defmethod interpret-packet ::serverbound/set-player-rotation [client pk]-; (handle-player-update-movement-packet client pk))-;-;(defmethod interpret-packet ::serverbound/set-player-position-and-rotation [client pk]-; (handle-player-update-movement-packet client pk))-;-;(defmethod interpret-packet ::serverbound/set-player-position [client pk]-; (handle-player-update-movement-packet client pk))-;-;(defmethod interpret-packet ::serverbound/set-player-movement-flags [client pk]-; (handle-player-update-movement-packet client pk))+(defn handle-player-update-movement-packet [{:keys! [::player/uuid] :as pk}]+ {:events [{::event/id ::event/updated-player-movement+ ::player/uuid uuid+ ; Flags are currently unused+ ::position/position (select-keys pk [::position/x ::position/y ::position/z ::position/yaw ::position/pitch])}]})++(defmethod interpret-packet ::serverbound/set-player-rotation [pk]+ (handle-player-update-movement-packet pk))++(defmethod interpret-packet ::serverbound/set-player-position-and-rotation [pk]+ (handle-player-update-movement-packet pk))++(defmethod interpret-packet ::serverbound/set-player-position [pk]+ (handle-player-update-movement-packet pk))++(defmethod interpret-packet ::serverbound/set-player-movement-flags [pk]+ (handle-player-update-movement-packet pk)) (defmethod interpret-packet ::serverbound/chat-message [{:keys! [message ::player/uuid]}] {:events [{::event/id ::event/player-sent-chat-messagesrc/net/bowmap/server/logic.clj view file
@@ -26,13 +26,16 @@ (commute server/players dissoc uuid) [])) -(defmethod handle-event ::event/updated-player-movement [{:keys! [::player/uuid ::position/position]}]+(defmethod handle-event ::event/updated-player-movement [{:keys! [::player/uuid ::position/position] :as e}] (dosync- (alter (@server/players uuid) update ::position/position merge position)- []))+ (when (not= position (::position/position (@server/players uuid)))+ [(assoc e ::event/id ::event/player-moved)]))) ; Called when the player actually moves, not just when a position is sent-(defmethod handle-event ::event/player-moved [_])+(defmethod handle-event ::event/player-moved [{:keys! [::player/uuid ::position/position]}]+ (dosync+ (commute server/players update-in [uuid ::position/position] merge position)+ [])) (defmethod handle-event ::event/player-sent-chat-message [{:keys! [message]}] (for [[uuid] @server/players]@@ -46,6 +49,6 @@ [event] (reduce (fn [effects result] (if (::event/id result)- (into effects (handle-events event))+ (into effects (handle-events result)) (conj effects result))) [] (handle-event event)))