summaryrefslogtreecommitdiff
path: root/server/server.go
diff options
context:
space:
mode:
authorraven <citrons@mondecitronne.com>2026-03-20 17:01:30 -0500
committerraven <citrons@mondecitronne.com>2026-03-20 17:01:30 -0500
commit4247e0efaaab9560afa5ce2ca8b3aec80141a6d9 (patch)
tree620c6f0b5071351f8b19bc45bf075f90491fbefa /server/server.go
parentc3d63652a4b80add587ee17f5c9f3773417203ad (diff)
store world data in JSON
Diffstat (limited to 'server/server.go')
-rw-r--r--server/server.go25
1 files changed, 13 insertions, 12 deletions
diff --git a/server/server.go b/server/server.go
index 13e06f6..8499301 100644
--- a/server/server.go
+++ b/server/server.go
@@ -6,7 +6,6 @@ import (
"log"
"fmt"
"time"
- "binary"
"os/signal"
"git.citrons.xyz/metronode/classic"
"git.citrons.xyz/metronode/phony"
@@ -58,14 +57,12 @@ func NewServer(info ServerInfo) *Server {
128*blockSize,
}
} else {
- f, err := os.Open("world/world.bin")
- if err != nil {
- log.Fatal(err)
- }
- err = binary.Read(f, binary.BigEndian, &s.worldState)
- if err != nil {
- log.Fatal("read world data: %s", err)
- }
+ loaded := make(chan worldState, 1)
+ loadDataFile(s, "world", func(state worldState, ok bool) {
+ loaded <- state
+ })
+ s.worldState = <-loaded
+ }
return s
}
@@ -117,10 +114,13 @@ func (s *Server) stop() {
)
checkSaved := func() {
if savedLevels >= len(s.levels) && savedPlayers >= len(s.players) {
- close(s.stopped)
for client := range s.clients {
client.Disconnect(s, "Shutting down...")
}
+ saveDataFile(s, "world", s.worldState)
+ dataManager.Act(s, func() {
+ close(s.stopped)
+ })
}
}
for _, player := range s.players {
@@ -143,6 +143,7 @@ func (s *Server) Stop(from phony.Actor) {
func (s *Server) Save(from phony.Actor) {
s.Act(from, func() {
+ saveDataFile(s, "world", s.worldState)
for _, player := range s.players {
player.Save(s, nil)
}
@@ -229,7 +230,7 @@ func (s *Server) NewPlayer(
func (s *Server) getLevel(lvl levelId) *level {
if s.levels[lvl] == nil {
- s.levels[lvl] = loadLevel(s, lvl, lvl == s.spawnLevel)
+ s.levels[lvl] = loadLevel(s, lvl, lvl == s.SpawnLevel)
}
return s.levels[lvl]
}
@@ -247,7 +248,7 @@ func (s *Server) GetLevel(
func (s *Server) SendToSpawn(from phony.Actor, pl *player) {
s.Act(from, func() {
- pl.ChangeLevel(s, s.spawnLevel, s.spawnPos)
+ pl.ChangeLevel(s, s.SpawnLevel, s.SpawnPos)
})
}