Описание
# Before Running This Mod
This mod is designed for advanced Minecraft users / mod developers. If you do not know how Java handles Program arguments, don't run it.
**WARN: ANY COMMAND CAN BE EXECUTED THROUGH THIS MOD LOADING, INCLUDING WHICH IS MALICIOUS. THE AUTHOR WILL NOT BE RESPONSIBLE FOR ANYTHING CAUSED BY RUNNING THIS MOD.**
# Mod Synopsis
This mod is a simple but powerful tool for overriding Java Program arguments.
# How to Use This Mod
This mod uses 2 Java Properties: `rege.rege.misc.javaprogargoverride.Util.overridingArgs` (called `overridingArgs` below for convenience) and `rege.rege.misc.javaprogargoverride.Util.overridingArgsType` (called `overridingArgsType` below for convenience).
This is a simple example that works (for client-side):
1\. Create `overrideargs.py` at the root directory of the Minecraft instance with following content:
```python
#!/usr/bin/env python
from sys import stdin, stdout
stdout.write(stdin.read())
stdout.write(" --fullscreen")
```
2\. Edit the content of Java Properties arguments (e.g. “Settings/Java arguments” in Prism Launcher), add these: `-Drege.rege.misc.javaprogargoverride.Util.overridingArgs="python overrideargs.py" -Drege.rege.misc.javaprogargoverride.Util.overridingArgsType=exec`.
3\. Launch the game, and you will find that the Minecraft window is created in a fullscreen state.
Explanation of the example:
1. This mod will first check whether Property `overridingArgs` is present. If no, this mod will do nothing.
2. There are 2 types available for Property `overridingArgsType`: `plain` and `exec`. The default is `plain`. If it is `plain`, then the arguments specified by `overridingArgs` will be directly used as the overriding arguments, in UNIX-Shell-styled format. If it is `exec`, then the arguments specified by `overridingArgs` will be executed as a command (like Batch / Shell commands), the arguments to be overridden will be passed into STDIN in UNIX-Shell-styled format. The STDOUT of the command will be used as the overriding arguments, in UNIX-Shell-styled format.
1. For example, raw argument string `arg1 'arg2' "arg3" \a\r\g\4` will be resolved as 4 arguments `arg1`, `arg2`, `arg3` and `arg4`; raw argument string `arg\\1 'arg\\2' "arg\\3" 'a'"r"g\''4' ""` will be resolved as 5 arguments `arg\1`, `arg\\2`, `arg\3`, `arg'4` and ``(empty string); raw argument string `"arg\"1" 'arg'\'"2" "arg\\\\3" arg\ \\4` will be resolved as 4 arguments `arg"1`, `arg'2`, `arg\\3` and `arg \4`.
2. For example, arguments `--width`, `1800`, `--height` and `1200` will be passed to STDIN as `--width 1800 --height 1200`; arguments `--version`, ``(empty string), `--gameDir` and `/home/this/is/a/path/with/"doubles"/'singles'/and/s p a c e s/and/even/\backslashes\` will be passed to STDIN as `--version '' --gamedir /home/this/is/a/path/with/\"doubles\"/\'singles\'/and/s\ p\ a\ c\ e\ s/and/even/\\backslashes\\`.
3. Appending arguments only is recommended (output the original arguments by using e.g. `sys.stdout.write(sys.stdin.read())` in Python, `System.out.write(System.in.readAllBytes())` in Java and `cat -` in Shell Script). But if you want, you can even make full use of the arguments!
# Notice
This mod is “Client-side optional, Server-side optional”, and client-side and server-side version of this mod work independently, and they have nothing to do with each other.
The client-side mod JAR will not be run on the server-side and vice versa. Please ensure you are running the correct version of the mod JAR on the correct side.
If the argument format (by `overridingArgs` or the STDOUT when `overridingArgsType` is `exec`) is incorrect, Minecraft will crash:
* Quote not close, for example: If the raw argument string is `python "overrideargs.py`, `java.lang.IllegalArgumentException: quote at index 7 not closed` will be thrown.
* Unexpected escape character(`\`) at the end of the raw argument string, for example: If the raw argument string is `python overrideargs.py\`, `java.lang.IllegalArgumentException: unexpected escape at the end` will be thrown.
* Command not found, for example: If the raw argument string is `pyhon overrideargs.py`, `java.io.IOException: Cannot run program "pyhon": error=2, No such file or directory` (may vary by operating system) will be thrown.
# Report Issues
Please leave a comment about your issue under [the gist](https://gist.github.com/IAmREGE/b8ec30889c2829c26ed636a64e78ac60).