Send player join/left message
This commit is contained in:
@ -21,6 +21,26 @@ import (
|
|||||||
pk "github.com/Tnze/go-mc/net/packet"
|
pk "github.com/Tnze/go-mc/net/packet"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Colors
|
||||||
|
const (
|
||||||
|
Black = "black"
|
||||||
|
DarkBlue = "dark_blue"
|
||||||
|
DarkGreen = "dark_green"
|
||||||
|
DarkAqua = "dark_aqua"
|
||||||
|
DarkRed = "dark_red"
|
||||||
|
DarkPurple = "dark_purple"
|
||||||
|
Gold = "gold"
|
||||||
|
Gray = "gray"
|
||||||
|
DarkGray = "dark_gray"
|
||||||
|
Blue = "blue"
|
||||||
|
Green = "green"
|
||||||
|
Aqua = "aqua"
|
||||||
|
Red = "red"
|
||||||
|
LightPurple = "light_purple"
|
||||||
|
Yellow = "yellow"
|
||||||
|
White = "white"
|
||||||
|
)
|
||||||
|
|
||||||
// Message is a message sent by other
|
// Message is a message sent by other
|
||||||
type Message struct {
|
type Message struct {
|
||||||
Text string `json:"text,omitempty"`
|
Text string `json:"text,omitempty"`
|
||||||
@ -99,6 +119,11 @@ func (m Message) Append(extraMsg ...Message) Message {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m Message) SetColor(color string) Message {
|
||||||
|
m.Color = color
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
func Text(str string) Message {
|
func Text(str string) Message {
|
||||||
return Message{Text: str}
|
return Message{Text: str}
|
||||||
}
|
}
|
||||||
|
@ -47,32 +47,53 @@ func (g *GlobalChat) Init(game *Game) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
chatPosChat = iota
|
||||||
|
chatPosSystem
|
||||||
|
chatPosGameInfo
|
||||||
|
)
|
||||||
|
|
||||||
func (g *GlobalChat) Run(ctx context.Context) {
|
func (g *GlobalChat) Run(ctx context.Context) {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return
|
return
|
||||||
case item := <-g.msg:
|
case item := <-g.msg:
|
||||||
packet := Packet757(pk.Marshal(
|
g.broadcast(Packet757(pk.Marshal(
|
||||||
packetid.ClientboundChat,
|
packetid.ClientboundChat,
|
||||||
item.toMessage(),
|
item.toMessage(),
|
||||||
pk.Byte(0),
|
pk.Byte(chatPosChat),
|
||||||
pk.UUID(item.p.UUID),
|
pk.UUID(item.p.UUID),
|
||||||
))
|
)))
|
||||||
for _, p := range g.players {
|
|
||||||
err := p.WritePacket(packet)
|
|
||||||
if err != nil {
|
|
||||||
p.PutErr(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case p := <-g.join:
|
case p := <-g.join:
|
||||||
|
g.broadcast(Packet757(pk.Marshal(
|
||||||
|
packetid.ClientboundChat,
|
||||||
|
chat.TranslateMsg("multiplayer.player.joined", chat.Text(p.Name)).SetColor(chat.Yellow),
|
||||||
|
pk.Byte(chatPosSystem),
|
||||||
|
pk.UUID(uuid.Nil),
|
||||||
|
)))
|
||||||
g.players[p.UUID] = p
|
g.players[p.UUID] = p
|
||||||
case p := <-g.quit:
|
case p := <-g.quit:
|
||||||
|
g.broadcast(Packet757(pk.Marshal(
|
||||||
|
packetid.ClientboundChat,
|
||||||
|
chat.TranslateMsg("multiplayer.player.left", chat.Text(p.Name)).SetColor(chat.Yellow),
|
||||||
|
pk.Byte(chatPosSystem),
|
||||||
|
pk.UUID(uuid.Nil),
|
||||||
|
)))
|
||||||
delete(g.players, p.UUID)
|
delete(g.players, p.UUID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GlobalChat) broadcast(packet Packet757) {
|
||||||
|
for _, p := range g.players {
|
||||||
|
err := p.WritePacket(packet)
|
||||||
|
if err != nil {
|
||||||
|
p.PutErr(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (g *GlobalChat) AddPlayer(player *Player) { g.join <- player }
|
func (g *GlobalChat) AddPlayer(player *Player) { g.join <- player }
|
||||||
|
|
||||||
func (g *GlobalChat) RemovePlayer(p *Player) { g.quit <- p }
|
func (g *GlobalChat) RemovePlayer(p *Player) { g.quit <- p }
|
||||||
|
Reference in New Issue
Block a user