88import dataclasses
99from typing import TypeAlias
1010
11- from mcstatus import JavaServer , BedrockServer
11+ from mcstatus import JavaServer , LegacyServer , BedrockServer
1212from mcstatus .responses import JavaStatusResponse
1313from mcstatus .motd import Motd
1414
15- SupportedServers : TypeAlias = "JavaServer | BedrockServer"
15+ SupportedServers : TypeAlias = "JavaServer | LegacyServer | BedrockServer"
1616
1717PING_PACKET_FAIL_WARNING = (
1818 "warning: contacting {address} failed with a 'ping' packet but succeeded with a 'status' packet,\n "
@@ -39,15 +39,17 @@ def _motd(motd: Motd) -> str:
3939def _kind (serv : SupportedServers ) -> str :
4040 if isinstance (serv , JavaServer ):
4141 return "Java"
42+ elif isinstance (serv , LegacyServer ):
43+ return "Java (pre-1.7)"
4244 elif isinstance (serv , BedrockServer ):
4345 return "Bedrock"
4446 else :
4547 raise ValueError (f"unsupported server for kind: { serv } " )
4648
4749
4850def _ping_with_fallback (server : SupportedServers ) -> float :
49- # bedrock doesn't have ping method
50- if isinstance (server , BedrockServer ):
51+ # only Java has ping method
52+ if not isinstance (server , JavaServer ):
5153 return server .status ().latency
5254
5355 # try faster ping packet first, falling back to status with a warning.
@@ -161,14 +163,17 @@ def main(argv: list[str] = sys.argv[1:]) -> int:
161163 parser = argparse .ArgumentParser (
162164 "mcstatus" ,
163165 description = """
164- mcstatus provides an easy way to query 1.7 or newer Minecraft servers for any
165- information they can expose. It provides three modes of access: query, status,
166- ping and json.
166+ mcstatus provides an easy way to query Minecraft servers for any information
167+ they can expose. It provides three modes of access: query, status, ping and json.
167168 """ ,
168169 )
169170
170171 parser .add_argument ("address" , help = "The address of the server." )
171- parser .add_argument ("--bedrock" , help = "Specifies that 'address' is a Bedrock server (default: Java)." , action = "store_true" )
172+ group = parser .add_mutually_exclusive_group ()
173+ group .add_argument ("--bedrock" , help = "Specifies that 'address' is a Bedrock server (default: Java)." , action = "store_true" )
174+ group .add_argument (
175+ "--legacy" , help = "Specifies that 'address' is a pre-1.7 Java server (default: 1.7+)." , action = "store_true"
176+ )
172177
173178 subparsers = parser .add_subparsers (title = "commands" , description = "Command to run, defaults to 'status'." )
174179 parser .set_defaults (func = status_cmd )
@@ -184,7 +189,12 @@ def main(argv: list[str] = sys.argv[1:]) -> int:
184189 ).set_defaults (func = json_cmd )
185190
186191 args = parser .parse_args (argv )
187- lookup = JavaServer .lookup if not args .bedrock else BedrockServer .lookup
192+ if args .bedrock :
193+ lookup = BedrockServer .lookup
194+ elif args .legacy :
195+ lookup = LegacyServer .lookup
196+ else :
197+ lookup = JavaServer .lookup
188198
189199 try :
190200 server = lookup (args .address )
0 commit comments