Parse settings from the command line (#1578)

Allow specifying any setting as --setting=value
Sections other than main: --section.setting=value
Previous positional arguments are still supported
Update user manual with quick usage and examples
This commit is contained in:
ORelio 2021-05-20 21:40:57 +02:00
parent 9af9fe78ee
commit 172e25fef0
5 changed files with 597 additions and 495 deletions

View file

@ -79,7 +79,7 @@ namespace MinecraftClient
//Process ini configuration file
if (args.Length >= 1 && System.IO.File.Exists(args[0]) && System.IO.Path.GetExtension(args[0]).ToLower() == ".ini")
{
Settings.LoadSettings(args[0]);
Settings.LoadFile(args[0]);
//remove ini configuration file from arguments array
List<string> args_tmp = args.ToList<string>();
@ -88,7 +88,7 @@ namespace MinecraftClient
}
else if (System.IO.File.Exists("MinecraftClient.ini"))
{
Settings.LoadSettings("MinecraftClient.ini");
Settings.LoadFile("MinecraftClient.ini");
}
else Settings.WriteDefaultSettings("MinecraftClient.ini");
@ -98,20 +98,26 @@ namespace MinecraftClient
//Other command-line arguments
if (args.Length >= 1)
{
Settings.Login = args[0];
if (args.Length >= 2)
if (args.Contains("--help"))
{
Settings.Password = args[1];
if (args.Length >= 3)
{
Settings.SetServerIP(args[2]);
Console.WriteLine("Command-Line Help:");
Console.WriteLine("MinecraftClient.exe <username> <password> <server>");
Console.WriteLine("MinecraftClient.exe <username> <password> <server> \"/mycommand\"");
Console.WriteLine("MinecraftClient.exe --setting=value [--other settings]");
Console.WriteLine("MinecraftClient.exe --section.setting=value [--other settings]");
Console.WriteLine("MinecraftClient.exe <settings-file.ini> [--other settings]");
return;
}
//Single command?
if (args.Length >= 4)
{
Settings.SingleCommand = args[3];
}
}
try
{
Settings.LoadArguments(args);
}
catch (ArgumentException e)
{
Settings.interactiveMode = false;
HandleFailure(e.Message);
return;
}
}

View file

@ -82,6 +82,9 @@ error.connection_timeout=§8Es gab einen Timeout während des Verbindungsaufbaus
error.forge=§8Forge Login Handshake konnte nicht erfolgreich abgeschlossen werden.
error.forge_encrypt=§8Forge StartEncryption Handshake konnte nicht erfolgreich abgeschlossen werden.
error.setting.str2int=Konnte '{0}' nicht in einen Int umwandeln. Bitte überprüfe die Einstellungen.
error.setting.argument_syntax={0}: Invalid syntax, expecting --argname=value or --section.argname=value
error.setting.unknown_section={0}: Unknown setting section '{1}'
error.setting.unknown_or_invalid={0}: Unknown setting or invalid value
error.http_code=§8Es gab einen Fehlercode vom Server: {0}
error.auth=§8Es gab einen Fehlercode vom Server, während die Authentication erneuert wurde: {0}
error.realms.ip_error=Konnte die Server-IP deiner Realms-Welt nicht abfragen

View file

@ -82,6 +82,9 @@ error.connection_timeout=§8A timeout occured while attempting to connect to thi
error.forge=§8Forge Login Handshake did not complete successfully
error.forge_encrypt=§8Forge StartEncryption Handshake did not complete successfully
error.setting.str2int=Failed to convert '{0}' into an int. Please check your settings.
error.setting.argument_syntax={0}: Invalid syntax, expecting --argname=value or --section.argname=value
error.setting.unknown_section={0}: Unknown setting section '{1}'
error.setting.unknown_or_invalid={0}: Unknown setting or invalid value
error.http_code=§8Got error code from server: {0}
error.auth=§8Got error code from server while refreshing authentication: {0}
error.realms.ip_error=Cannot retrieve the server IP of your Realms world

File diff suppressed because it is too large Load diff

View file

@ -50,25 +50,59 @@ You can have several INI files and drag & drop one of them over MinecraftClient.
Command-line usage
------
**MinecraftClient.exe username password server:**
Quick usage:
This will automatically connect you to the chosen server.
To specify a server and ask password interactively, use "" as password.
To specify offline mode with no password, use "-" as password.
```
MinecraftClient.exe --help
MinecraftClient.exe <username> <password> <server>
MinecraftClient.exe <username> <password> <server> "/mycommand"
MinecraftClient.exe --setting=value [--other settings]
MinecraftClient.exe --section.setting=value [--other settings]
MinecraftClient.exe <settings-file.ini> [--other settings]
```
You can mix and match arguments by following theses rules:
* First positional argument may be either the login or settings file
* Other positional arguments are read in order: login, password, server, command
* Arguments starting with `--` can be in any order and position
**MinecraftClient.exe username password server "/mycommand":**
Examples and further explanations:
This will automatically send "/mycommand" to the server and close.
To send several commands and maybe stay connected, use the Scripting bot instead.
```
MinecraftClient.exe <login> <password> <server>
```
**MinecraftClient.exe myconfig.ini:**
* This will automatically connect you to the chosen server.
* You may omit password and/or server to specify e.g. only the login
* To specify a server but ask password interactively, use `""` as password.
* To specify offline mode with no password, use `-` as password.
This will load the specified configuration file
If the file contains login / password / server ip, it will automatically connect.
```
MinecraftClient.exe <login> <password> <server> "/mycommand"
```
**MinecraftClient.exe myconfig.ini othername otherpassword otherIP:**
* This will automatically send `/mycommand` to the server and close.
* To send several commands and/or stay connected, use the ScriptScheduler bot instead.
Load the specified configuration file and override some settings from the file.
```
MinecraftClient.exe <myconfig.ini>
```
* This will load the specified configuration file
* If the file contains login / password / server ip, it will automatically connect.
```
MinecraftClient.exe --setting=value [--other settings]
```
* Specify settings on the command-line, see possible value in the configuration file
* Use `--section.setting=value` for settings outside the `[Main]` section
* Example: `--antiafk.enabled=true` for enabling the AntiAFK bot
```
MinecraftClient.exe <myconfig.ini> <login> <password> <server> [--other settings]
```
* Load the specified configuration file and override some settings from the file
Internal commands
------