075fef5
Branches > main > 075fef5 > files
Store the next entity id in the server state
Commit: 075fef5a8c6a202799bb11b192611230d51862b9
Parent: 65a4936
4 changed files:
src/net/bowmap/server/game/handle.clj 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 32src/net/bowmap/server/game/server.clj 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 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 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))