support old chat format system which based on §
This commit is contained in:
@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Tnze/go-mc/data"
|
"github.com/Tnze/go-mc/data"
|
||||||
@ -48,29 +49,54 @@ func (m *Message) Decode(r pk.DecodeReader) error {
|
|||||||
return json.NewDecoder(io.LimitReader(r, int64(Len))).Decode(m)
|
return json.NewDecoder(io.LimitReader(r, int64(Len))).Decode(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
var colors = map[string]int{
|
var fmtCode = map[byte]string{
|
||||||
"black": 30,
|
'0': "30",
|
||||||
"dark_blue": 34,
|
'1': "34",
|
||||||
"dark_green": 32,
|
'2': "32",
|
||||||
"dark_aqua": 36,
|
'3': "36",
|
||||||
"dark_red": 31,
|
'4': "31",
|
||||||
"dark_purple": 35,
|
'5': "35",
|
||||||
"gold": 33,
|
'6': "33",
|
||||||
"gray": 37,
|
'7': "37",
|
||||||
"dark_gray": 90,
|
'8': "90",
|
||||||
"blue": 94,
|
'9': "94",
|
||||||
"green": 92,
|
'a': "92",
|
||||||
"aqua": 96,
|
'b': "96",
|
||||||
"red": 91,
|
'c': "91",
|
||||||
"light_purple": 95,
|
'd': "95",
|
||||||
"yellow": 93,
|
'e': "93",
|
||||||
"white": 97,
|
'f': "97",
|
||||||
|
|
||||||
|
// 'k':"", //random
|
||||||
|
'l': "1",
|
||||||
|
'm': "9",
|
||||||
|
'n': "4",
|
||||||
|
'o': "3",
|
||||||
|
'r': "0",
|
||||||
|
}
|
||||||
|
var colors = map[string]string{
|
||||||
|
"black": "30",
|
||||||
|
"dark_blue": "34",
|
||||||
|
"dark_green": "32",
|
||||||
|
"dark_aqua": "36",
|
||||||
|
"dark_red": "31",
|
||||||
|
"dark_purple": "35",
|
||||||
|
"gold": "33",
|
||||||
|
"gray": "37",
|
||||||
|
"dark_gray": "90",
|
||||||
|
"blue": "94",
|
||||||
|
"green": "92",
|
||||||
|
"aqua": "96",
|
||||||
|
"red": "91",
|
||||||
|
"light_purple": "95",
|
||||||
|
"yellow": "93",
|
||||||
|
"white": "97",
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClearString return the message without escape sequence for ansi color.
|
// ClearString return the message without escape sequence for ansi color.
|
||||||
func (m Message) ClearString() string {
|
func (m Message) ClearString() string {
|
||||||
var msg strings.Builder
|
var msg strings.Builder
|
||||||
msg.WriteString(m.Text)
|
msg.WriteString(transf(m.Text, false))
|
||||||
|
|
||||||
//handle translate
|
//handle translate
|
||||||
if m.Translate != "" {
|
if m.Translate != "" {
|
||||||
@ -110,12 +136,12 @@ func (m Message) String() string {
|
|||||||
format.WriteString("9;")
|
format.WriteString("9;")
|
||||||
}
|
}
|
||||||
if m.Color != "" {
|
if m.Color != "" {
|
||||||
fmt.Fprintf(&format, "%d;", colors[m.Color])
|
format.WriteString(colors[m.Color] + ";")
|
||||||
}
|
}
|
||||||
if format.Len() > 0 {
|
if format.Len() > 0 {
|
||||||
msg.WriteString("\033[" + format.String()[:format.Len()-1] + "m")
|
msg.WriteString("\033[" + format.String()[:format.Len()-1] + "m")
|
||||||
}
|
}
|
||||||
msg.WriteString(m.Text)
|
msg.WriteString(transf(m.Text, true))
|
||||||
|
|
||||||
//handle translate
|
//handle translate
|
||||||
if m.Translate != "" {
|
if m.Translate != "" {
|
||||||
@ -140,3 +166,21 @@ func (m Message) String() string {
|
|||||||
}
|
}
|
||||||
return msg.String()
|
return msg.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var fmtPat = regexp.MustCompile("§[0-9A-FK-OR]")
|
||||||
|
|
||||||
|
func transf(str string, ansi bool) string {
|
||||||
|
return fmtPat.ReplaceAllStringFunc(
|
||||||
|
str,
|
||||||
|
func(str string) string {
|
||||||
|
f, ok := fmtCode[str[2]]
|
||||||
|
if ok {
|
||||||
|
if ansi {
|
||||||
|
return "\033[" + f + "m" // enable, add ANSI code
|
||||||
|
}
|
||||||
|
return "" //disable, remove the § code
|
||||||
|
}
|
||||||
|
return str //not a § code
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
@ -26,6 +26,9 @@ var jsons = []string{
|
|||||||
`{"translate":"translation.test.escape","with":["str1","str2"]}`,
|
`{"translate":"translation.test.escape","with":["str1","str2"]}`,
|
||||||
`{"translate":"translation.test.args","with":["str1","str2"]}`,
|
`{"translate":"translation.test.args","with":["str1","str2"]}`,
|
||||||
`{"translate":"translation.test.world"}`,
|
`{"translate":"translation.test.world"}`,
|
||||||
|
|
||||||
|
`"Tnze"`,
|
||||||
|
`"§0Tnze"`,
|
||||||
}
|
}
|
||||||
|
|
||||||
var texts = []string{
|
var texts = []string{
|
||||||
@ -37,6 +40,9 @@ var texts = []string{
|
|||||||
"%s %str1 %%s %%str2",
|
"%s %str1 %%s %%str2",
|
||||||
"str1 str2",
|
"str1 str2",
|
||||||
"world",
|
"world",
|
||||||
|
|
||||||
|
"Tnze",
|
||||||
|
"\033[30mTnze",
|
||||||
}
|
}
|
||||||
|
|
||||||
var ctexts = []string{
|
var ctexts = []string{
|
||||||
@ -48,6 +54,9 @@ var ctexts = []string{
|
|||||||
"%s %str1 %%s %%str2",
|
"%s %str1 %%s %%str2",
|
||||||
"str1 str2",
|
"str1 str2",
|
||||||
"world",
|
"world",
|
||||||
|
|
||||||
|
"Tnze",
|
||||||
|
"Tnze",
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestChatMsgFormatString(t *testing.T) {
|
func TestChatMsgFormatString(t *testing.T) {
|
||||||
|
Reference in New Issue
Block a user