075fef5

Bowmap · bowmap.git · Tickets

Branches > main > 075fef5 > files

Store the next entity id in the server state

Grahp, 2026-10-10

Commit: 075fef5a8c6a202799bb11b192611230d51862b9
Parent: 65a4936

4 changed files:

src/net/bowmap/server/game/handle.clj modified (view file)

@@ -5,7 +5,6 @@    [net.bowmap.server.game.server :as server]    [net.bowmap.server.game.text :as text]    [net.bowmap.server.packet.clientbound :as clientbound]-   [net.bowmap.server.packet.entity :as entity]    [net.bowmap.server.packet.gamemode :as gamemode]    [net.bowmap.server.packet.phase :as phase]    [net.bowmap.server.packet.registry :as registry]@@ -70,15 +69,17 @@  (defmethod handle-packet ::serverbound/finish-config   [server {::player/keys! [uuid] :as session} _]-  (let [entity-id (entity/next-entity-id)]+  (let [entity-id (inc (server/env server ::server/entity-id))]     {:server (rel/transact server                            [:update ::server/players                             {::server/playing? true-                             ::entity/id entity-id}-                            [= ::player/uuid uuid]])+                             ::server/entity-id entity-id}+                            [= ::player/uuid uuid]]+                           [:update ::server/env+                            {::server/entity-id entity-id}])      :session (assoc session ::phase/phase ::phase/play)      :packets [{::p/id ::clientbound/login-                ::entity/id entity-id+                ::server/entity-id entity-id                 :dimensions [registry/world-dimension]                 ::p/max-player-count server/max-player-count                 :render-distance 32

src/net/bowmap/server/game/server.clj modified (view file)

@@ -7,11 +7,19 @@ (def max-player-count 1000)  (s/def ::players (s/coll-of ::player/player :kind set?))-(s/def ::server (s/keys :opt [::players]))+(s/def ::entity-id pos-int?)+(s/def ::env (s/keys :opt [::entity-id]))+(s/def ::server (s/keys :opt [::players ::env]))  (def players-by-uuid   [[:from ::players]    [:unique ::player/uuid]]) -(defonce state (atom (relic/mat {}-                                players-by-uuid)))+(defonce state (atom (-> (relic/mat {::env #{{::entity-id 0}}}+                                    players-by-uuid))))++(defn env+  ([state]+   (first (::env state)))+  ([state k]+   (req! (env state) k)))

src/net/bowmap/server/packet/clientbound.clj modified (view file)

@@ -1,6 +1,6 @@ (ns net.bowmap.server.packet.clientbound   (:require-   [net.bowmap.server.packet.entity :as entity]+   [net.bowmap.server.game.server :as server]    [net.bowmap.server.packet.gamemode :as gamemode]    [net.bowmap.server.packet.phase :as phase]    [net.bowmap.server.packet.schema :as p]@@ -100,7 +100,7 @@     ::world-event nil     ::particle nil     ::update-light nil-    ::login (map> ::entity/id int>+    ::login (map> ::server/entity-id int>                   :hardcore? boolean>                   :dimensions (list> identifier>)                   ::p/max-player-count varint>

src/net/bowmap/server/packet/entity.clj deleted (view file)

@@ -1,13 +0,0 @@-(ns net.bowmap.server.packet.entity-  (:require-   [clojure.spec.alpha :as s]))--(s/def ::id pos-int?)--(defonce highest-entity-id (atom 0))--(defn next-entity-id-  "Returns a new entity ID, unique for the lifetime of the server.-   Most packets refer to entities by their ID rather than their UUID."-  []-  (swap! highest-entity-id inc))