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