// 年糕历险记 —— 专用服务器入口。 package main import ( "context" "flag" "os" "os/signal" "mc/internal/config" "mc/internal/engine" "mc/internal/logx" ) // serverApp 服务器应用骨架(世界/网络在后续里程碑接入)。 type serverApp struct { cfg *config.ServerConfig log *logx.Logger tickCount uint64 } // Tick 每 tick(20Hz)服务器逻辑。 func (s *serverApp) Tick(dt float64) { s.tickCount++ if s.tickCount%100 == 0 { // 每 5 秒 s.log.Debugf("tick=%d", s.tickCount) } } func main() { flag.Parse() log, err := logx.New("logs/server.log", logx.LevelInfo) if err != nil { panic(err) } cfg, err := config.Load("config/server.yaml", config.DefaultServer()) if err != nil { log.Warnf("配置加载失败,使用默认值:%v", err) } log.Infof("年糕历险记 服务器启动:端口 %d,世界 %q,种子 %d,tick 率 %d", cfg.Server.Port, cfg.World.Name, cfg.World.Seed, cfg.Server.TickRate) ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) defer stop() app := &serverApp{cfg: cfg, log: log} engine.Run(ctx, app, engine.NoopRenderer{}) log.Infof("服务器已退出") }