diff --git a/src/status.go b/src/status.go index ff6777d..6f0ec0a 100644 --- a/src/status.go +++ b/src/status.go @@ -524,8 +524,8 @@ func BuildJavaResponse(host string, port uint16, status interface{}, query *resp } } - for _, playerName := range query.Players { - parsedName, err := description.ParseFormatting(playerName) + for _, username := range query.Players { + parsedName, err := description.ParseFormatting(username) if err == nil { result.Players.List = append(result.Players.List, Player{ @@ -559,6 +559,23 @@ func BuildJavaResponse(host string, port uint16, status interface{}, query *resp } } } + + for _, username := range query.Players { + if Contains(Map(result.Players.List, func(v Player) string { return v.NameRaw }), username) { + continue + } + + parsedName, err := description.ParseFormatting(username) + + if err == nil { + result.Players.List = append(result.Players.List, Player{ + UUID: "", + NameRaw: parsedName.Raw, + NameClean: parsedName.Clean, + NameHTML: parsedName.HTML, + }) + } + } } return diff --git a/src/util.go b/src/util.go index 5816543..7bf7eb3 100644 --- a/src/util.go +++ b/src/util.go @@ -255,3 +255,25 @@ func SHA256(input string) string { func PointerOf[T any](v T) *T { return &v } + +// Contains returns true if the array contains the value. +func Contains[T comparable](arr []T, v T) bool { + for _, value := range arr { + if value == v { + return true + } + } + + return false +} + +// Map applies the provided map function to all of the values in the array and returns the result. +func Map[I, O any](arr []I, f func(I) O) []O { + result := make([]O, len(arr)) + + for i, v := range arr { + result[i] = f(v) + } + + return result +}