Fix bug with Bedrock status
This commit is contained in:
122
src/status.go
122
src/status.go
@@ -308,7 +308,7 @@ func FetchBedrockStatus(host string, port uint16) BedrockStatusResponse {
|
||||
func BuildJavaResponse(host string, port uint16, status interface{}, query *response.FullQuery) (result JavaStatusResponse) {
|
||||
result = JavaStatusResponse{
|
||||
BaseStatus: BaseStatus{
|
||||
Online: status != nil || query != nil,
|
||||
Online: false,
|
||||
Host: host,
|
||||
Port: port,
|
||||
EULABlocked: IsBlockedAddress(host),
|
||||
@@ -318,43 +318,38 @@ func BuildJavaResponse(host string, port uint16, status interface{}, query *resp
|
||||
JavaStatus: nil,
|
||||
}
|
||||
|
||||
if status == nil && query == nil {
|
||||
return
|
||||
}
|
||||
|
||||
result.JavaStatus = &JavaStatus{
|
||||
Players: JavaPlayers{
|
||||
List: make([]Player, 0),
|
||||
},
|
||||
Mods: make([]Mod, 0),
|
||||
Plugins: make([]Plugin, 0),
|
||||
}
|
||||
|
||||
if status != nil {
|
||||
// Status
|
||||
switch s := status.(type) {
|
||||
case *response.JavaStatus:
|
||||
{
|
||||
result.Version = &JavaVersion{
|
||||
if s == nil {
|
||||
break
|
||||
}
|
||||
|
||||
result.Online = true
|
||||
|
||||
result.JavaStatus = &JavaStatus{
|
||||
Version: &JavaVersion{
|
||||
NameRaw: s.Version.NameRaw,
|
||||
NameClean: s.Version.NameClean,
|
||||
NameHTML: s.Version.NameHTML,
|
||||
Protocol: s.Version.Protocol,
|
||||
}
|
||||
|
||||
result.Players = JavaPlayers{
|
||||
},
|
||||
Players: JavaPlayers{
|
||||
Online: s.Players.Online,
|
||||
Max: s.Players.Max,
|
||||
List: make([]Player, 0),
|
||||
}
|
||||
|
||||
result.MOTD = MOTD{
|
||||
},
|
||||
MOTD: MOTD{
|
||||
Raw: s.MOTD.Raw,
|
||||
Clean: s.MOTD.Clean,
|
||||
HTML: s.MOTD.HTML,
|
||||
},
|
||||
Icon: s.Favicon,
|
||||
Mods: make([]Mod, 0),
|
||||
Plugins: make([]Plugin, 0),
|
||||
}
|
||||
|
||||
result.Icon = s.Favicon
|
||||
|
||||
if s.Players.Sample != nil {
|
||||
for _, player := range s.Players.Sample {
|
||||
result.Players.List = append(result.Players.List, Player{
|
||||
@@ -379,6 +374,29 @@ func BuildJavaResponse(host string, port uint16, status interface{}, query *resp
|
||||
}
|
||||
case *response.JavaStatusLegacy:
|
||||
{
|
||||
if s == nil {
|
||||
break
|
||||
}
|
||||
|
||||
result.Online = true
|
||||
|
||||
result.JavaStatus = &JavaStatus{
|
||||
Version: nil,
|
||||
Players: JavaPlayers{
|
||||
Online: &s.Players.Online,
|
||||
Max: &s.Players.Max,
|
||||
List: make([]Player, 0),
|
||||
},
|
||||
MOTD: MOTD{
|
||||
Raw: s.MOTD.Raw,
|
||||
Clean: s.MOTD.Clean,
|
||||
HTML: s.MOTD.HTML,
|
||||
},
|
||||
Icon: nil,
|
||||
Mods: make([]Mod, 0),
|
||||
Plugins: make([]Plugin, 0),
|
||||
}
|
||||
|
||||
if s.Version != nil {
|
||||
result.Version = &JavaVersion{
|
||||
NameRaw: s.Version.NameRaw,
|
||||
@@ -388,27 +406,23 @@ func BuildJavaResponse(host string, port uint16, status interface{}, query *resp
|
||||
}
|
||||
}
|
||||
|
||||
result.Players = JavaPlayers{
|
||||
Online: &s.Players.Online,
|
||||
Max: &s.Players.Max,
|
||||
List: make([]Player, 0),
|
||||
}
|
||||
|
||||
result.MOTD = MOTD{
|
||||
Raw: s.MOTD.Raw,
|
||||
Clean: s.MOTD.Clean,
|
||||
HTML: s.MOTD.HTML,
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
default:
|
||||
panic(fmt.Errorf("unknown status type: %T", status))
|
||||
}
|
||||
}
|
||||
|
||||
// Query
|
||||
if query != nil {
|
||||
if status == nil {
|
||||
result.Online = true
|
||||
|
||||
if result.JavaStatus == nil {
|
||||
result.JavaStatus = &JavaStatus{
|
||||
Players: JavaPlayers{
|
||||
List: make([]Player, 0),
|
||||
},
|
||||
Mods: make([]Mod, 0),
|
||||
Plugins: make([]Plugin, 0),
|
||||
}
|
||||
|
||||
if motd, ok := query.Data["hostname"]; ok {
|
||||
if parsedMOTD, err := description.ParseFormatting(motd); err == nil {
|
||||
result.MOTD = MOTD{
|
||||
@@ -435,16 +449,16 @@ func BuildJavaResponse(host string, port uint16, status interface{}, query *resp
|
||||
}
|
||||
}
|
||||
|
||||
for _, username := range query.Players {
|
||||
parsedName, err := description.ParseFormatting(username)
|
||||
if version, ok := query.Data["version"]; ok {
|
||||
parsedValue, err := description.ParseFormatting(version)
|
||||
|
||||
if err == nil {
|
||||
result.Players.List = append(result.Players.List, Player{
|
||||
UUID: "",
|
||||
NameRaw: parsedName.Raw,
|
||||
NameClean: parsedName.Clean,
|
||||
NameHTML: parsedName.HTML,
|
||||
})
|
||||
result.Version = &JavaVersion{
|
||||
NameRaw: parsedValue.Raw,
|
||||
NameClean: parsedValue.Clean,
|
||||
NameHTML: parsedValue.HTML,
|
||||
Protocol: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -496,7 +510,7 @@ func BuildJavaResponse(host string, port uint16, status interface{}, query *resp
|
||||
func BuildBedrockResponse(host string, port uint16, status interface{}) (result BedrockStatusResponse) {
|
||||
result = BedrockStatusResponse{
|
||||
BaseStatus: BaseStatus{
|
||||
Online: true,
|
||||
Online: false,
|
||||
Host: host,
|
||||
Port: port,
|
||||
EULABlocked: IsBlockedAddress(host),
|
||||
@@ -506,13 +520,15 @@ func BuildBedrockResponse(host string, port uint16, status interface{}) (result
|
||||
BedrockStatus: nil,
|
||||
}
|
||||
|
||||
if status == nil {
|
||||
return
|
||||
}
|
||||
|
||||
switch s := status.(type) {
|
||||
case *response.BedrockStatus:
|
||||
{
|
||||
if s == nil {
|
||||
break
|
||||
}
|
||||
|
||||
result.Online = true
|
||||
|
||||
result.BedrockStatus = &BedrockStatus{
|
||||
Version: nil,
|
||||
Players: nil,
|
||||
@@ -576,8 +592,6 @@ func BuildBedrockResponse(host string, port uint16, status interface{}) (result
|
||||
|
||||
break
|
||||
}
|
||||
default:
|
||||
panic(fmt.Errorf("unknown status type: %T", status))
|
||||
}
|
||||
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user