From 3f6a61d993d6c50135c3cefe3cf362390c4027d5 Mon Sep 17 00:00:00 2001 From: raven Date: Sat, 21 Mar 2026 00:31:49 -0500 Subject: chat commands --- server/player.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 6 deletions(-) (limited to 'server/player.go') diff --git a/server/player.go b/server/player.go index bd0d915..4a562a7 100644 --- a/server/player.go +++ b/server/player.go @@ -18,17 +18,38 @@ type player struct { level *level } +type authLevel int + type playerState struct { LevelId levelId Pos entityPos Facing entityFacing + Auth authLevel } +const ( + defaultAuth = iota + opAuth +) + var playerNameRegex = regexp.MustCompile("^[.-_a-zA-Z0-9]*$") +func loadPlayerData( + from phony.Actor, name string, loaded func(playerState, bool)) { + loadDataFile(from, "player/" + name, loaded) +} + +func savePlayerData( + from phony.Actor, name string, state playerState, done func()) { + saveDataFile(from, "player/" + name, state) + if done != nil { + dataManager.Act(nil, done) + } +} + func newPlayer(s *Server, cl *client, name string) *player { pl := &player {client: cl, server: s, name: name} - loadDataFile(pl, "player/" + name, func(state playerState, ok bool) { + loadPlayerData(pl, name, func(state playerState, ok bool) { if ok { pl.state = state pl.ChangeLevel(pl, state.LevelId, state.Pos) @@ -41,10 +62,7 @@ func newPlayer(s *Server, cl *client, name string) *player { func (p *player) save(done func()) { os.Mkdir("world/player", 0777) - saveDataFile(p, "player/" + p.name, p.state) - if done != nil { - dataManager.Act(nil, done) - } + savePlayerData(p, p.name, p.state, done) } func (p *player) kick(reason string) { @@ -79,7 +97,16 @@ func (p *player) handlePacket(packet classic.Packet) { } p.level.SetBlock(p, pos, block) case *classic.Message: - p.server.OnPlayerMessage(p, p.name, classic.UnpadString(pck.Message)) + message := classic.UnpadString(pck.Message) + isCmd, text := isCommand(message) + if text == "" { + break + } + if !isCmd { + p.server.OnPlayerMessage(p, p.name, text) + } else { + p.server.ExecuteCommand(p, p.state.Auth, text) + } } } @@ -99,6 +126,12 @@ func (p *player) Kick(from phony.Actor, reason string) { }) } +func (p *player) SetAuthLevel(from phony.Actor, auth authLevel) { + p.Act(from, func() { + p.state.Auth = auth + }) +} + func (p *player) OnPacket(from phony.Actor, packet classic.Packet) { p.Act(from, func() { p.handlePacket(packet) @@ -149,6 +182,14 @@ func (p *player) OnPlayerMessage(from *Server, name string, message string) { p.SendMessage(from, fmt.Sprintf("&7<&b%s&7>&f %s", name, message)) } +func (p *player) OnCommandOutput(from *Server, output string) { + p.SendMessage(from, "&e" + output) +} + +func (p *player) OnCommandError(from *Server, err string) { + p.SendMessage(from, "&c" + err) +} + func (p *player) OnLevelData(from *level, info levelInfo, data io.ReadCloser) { p.Act(from, func() { defer data.Close() -- cgit v1.2.3