diff --git a/server/block/jukebox.go b/server/block/jukebox.go index 20520bebe9..8f19301533 100644 --- a/server/block/jukebox.go +++ b/server/block/jukebox.go @@ -5,6 +5,7 @@ import ( "github.com/df-mc/dragonfly/server/block/cube" "github.com/df-mc/dragonfly/server/internal/nbtconv" "github.com/df-mc/dragonfly/server/item" + "github.com/df-mc/dragonfly/server/player/chat" "github.com/df-mc/dragonfly/server/world" "github.com/df-mc/dragonfly/server/world/sound" "time" @@ -66,8 +67,8 @@ func (j Jukebox) BreakInfo() BreakInfo { // jukeboxUser represents an item.User that can use a jukebox. type jukeboxUser interface { item.User - // SendJukeboxPopup sends a jukebox popup to the item.User. - SendJukeboxPopup(a ...any) + // SendJukeboxPopupt sends a translatable jukebox popup to the item.User. + SendJukeboxPopupt(t chat.Translation, a ...any) } // Activate ... @@ -88,7 +89,7 @@ func (j Jukebox) Activate(pos cube.Pos, _ cube.Face, tx *world.Tx, u item.User, tx.PlaySound(pos.Vec3Centre(), sound.MusicDiscPlay{DiscType: m.DiscType}) if u, ok := u.(jukeboxUser); ok { - u.SendJukeboxPopup(fmt.Sprintf("Now playing: %v - %v", m.DiscType.Author(), m.DiscType.DisplayName())) + u.SendJukeboxPopupt(chat.MessageNowPlaying, fmt.Sprintf("%v - %v", m.DiscType.Author(), m.DiscType.DisplayName())) } } } diff --git a/server/player/chat/translate.go b/server/player/chat/translate.go index 5a263e8ebf..577dfc26d3 100644 --- a/server/player/chat/translate.go +++ b/server/player/chat/translate.go @@ -21,6 +21,8 @@ var MessageBedIsOccupied = Translate(str("%tile.bed.occupied"), 0, `This bed is var MessageSleeping = Translate(str("%chat.type.sleeping"), 2, `%v is sleeping in a bed. To skip to dawn, %v more users need to sleep in beds at the same time.`) var MessageBedNotValid = Translate(str("%tile.bed.notValid"), 0, `Your home bed was missing or obstructed`) +var MessageNowPlaying = Translate(str("%record.nowPlaying"), 1, `Now playing: %v`) + type str string // Resolve returns the translation identifier as a string. diff --git a/server/player/player.go b/server/player/player.go index 716f61a11f..062a6881e5 100644 --- a/server/player/player.go +++ b/server/player/player.go @@ -262,6 +262,12 @@ func (p *Player) SendJukeboxPopup(a ...any) { p.session().SendJukeboxPopup(format(a)) } +// SendJukeboxPopupt sends a translatable jukebox popup to the player and parameterises it using the arguments passed. +// SendJukeboxPopupt panics if an incorrect amount of arguments is passed. +func (p *Player) SendJukeboxPopupt(t chat.Translation, a ...any) { + p.session().SendJukeboxTranslation(t, p.locale, a) +} + // SendToast sends a toast to the player. This toast is shown at the top of the screen, similar to achievements or pack // loading. func (p *Player) SendToast(title, message string) { diff --git a/server/session/text.go b/server/session/text.go index d8418df4a8..655135e2ba 100644 --- a/server/session/text.go +++ b/server/session/text.go @@ -61,6 +61,17 @@ func (s *Session) SendJukeboxPopup(message string) { }) } +// SendJukeboxTranslation sends a jukebox popup localised for a specific language.Tag. +func (s *Session) SendJukeboxTranslation(t chat.Translation, l language.Tag, a []any) { + tr := t.F(a...) + s.writePacket(&packet.Text{ + TextType: packet.TextTypeJukeboxPopup, + NeedsTranslation: true, + Message: tr.Resolve(l), + Parameters: tr.Params(l), + }) +} + // SendToast ... func (s *Session) SendToast(title, message string) { s.writePacket(&packet.ToastRequest{