2629283

Branches > main > 2629283 > files

Fix stackoverflow, handle player movement

Grahp, 2026-08-24

Commit: 26292837e19c8c215f2a846c58adc1f1f9985ec4
Parent: cf935ce

2 changed files:

src/net/bowmap/protocol/handle.clj modified (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-message

src/net/bowmap/server/logic.clj modified (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)))