Library
This commit is contained in:
parent
0c7202e650
commit
1a7c164690
|
@ -0,0 +1,16 @@
|
||||||
|
# Binaries for programs and plugins
|
||||||
|
*.exe
|
||||||
|
*.exe~
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Test binary, built with `go test -c`
|
||||||
|
*.test
|
||||||
|
|
||||||
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||||
|
*.out
|
||||||
|
|
||||||
|
# Dependency directories (remove the comment below to include it)
|
||||||
|
# vendor/
|
||||||
|
|
|
@ -1,31 +1,6 @@
|
||||||
# Legal
|
# Legal
|
||||||
When including `libmcpilauncher` in your project, you must include these license notices, additionally with the `libmcpilauncher` license notice at the root of the project:
|
When including `libmcpilauncher` in your project, you must include these license notices, additionally with the `libmcpilauncher` license notice at the root of the project:
|
||||||
|
|
||||||
### subprocess license
|
|
||||||
```
|
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2018 Christopher Simpkins
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
```
|
|
||||||
|
|
||||||
### Golang Standart Library licenses
|
### Golang Standart Library licenses
|
||||||
```
|
```
|
||||||
The Go source code and supporting files in this directory
|
The Go source code and supporting files in this directory
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
package launcher
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Fetch the options from an executable_path as a map.
|
||||||
|
// executable_path must be a string with an executable
|
||||||
|
// that provides --print-available-feature-flags and its
|
||||||
|
// functionality.
|
||||||
|
func GetOptionsMap(executable_path string) map[string]bool {
|
||||||
|
|
||||||
|
flags_unformatted, _ := exec.Command(executable_path, "--print-available-feature-flags").Output()
|
||||||
|
flags_newline_split := strings.Split(string(flags_unformatted), "\n")
|
||||||
|
//fmt.Println(flags_newline_split)
|
||||||
|
flags_formatted := map[string]bool{}
|
||||||
|
for i := 0; i <= len(flags_newline_split)-1; i++ {
|
||||||
|
flag := flags_newline_split[i]
|
||||||
|
if strings.HasPrefix(flag, "TRUE") {
|
||||||
|
flags_formatted[string((flag[5:]))] = true
|
||||||
|
} else if strings.HasPrefix(flag, "FALSE") {
|
||||||
|
flags_formatted[string(flag[6:])] = false
|
||||||
|
}
|
||||||
|
//fmt.Println(flags_formatted) // Debug
|
||||||
|
}
|
||||||
|
//fmt.Println(flags_formatted)
|
||||||
|
|
||||||
|
return flags_formatted
|
||||||
|
}
|
||||||
|
|
||||||
|
// Same as GetOptionsMap but returns a slice of option
|
||||||
|
// names instead of options and their values.
|
||||||
|
func GetOptionsList (executable_path string) []string {
|
||||||
|
flags_map := GetOptionsMap(executable_path)
|
||||||
|
flags_slice := []string{}
|
||||||
|
for key, _ := range flags_map {
|
||||||
|
flags_slice = append(flags_slice, key)
|
||||||
|
}
|
||||||
|
return flags_slice
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Launch the game provided the executable path
|
||||||
|
// Features must be a slice with strings of enabled features.
|
||||||
|
func Launch (
|
||||||
|
executable_path string,
|
||||||
|
username string,
|
||||||
|
render_distance string,
|
||||||
|
debug bool,
|
||||||
|
features []string,
|
||||||
|
benchmark bool,
|
||||||
|
) *exec.Cmd {
|
||||||
|
|
||||||
|
var executable_args []string // Arguments slice
|
||||||
|
|
||||||
|
// Set the arguments
|
||||||
|
if debug{
|
||||||
|
executable_args = append(executable_args, "--debug")
|
||||||
|
}
|
||||||
|
if benchmark {
|
||||||
|
executable_args = append(executable_args, "--benchmark")
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := exec.Command(executable_path, executable_args...) // Executable init
|
||||||
|
|
||||||
|
cmd.Env = os.Environ() // This is required, without this Reborn won't work.
|
||||||
|
|
||||||
|
features_string := strings.Join(features, "|") // Python equievelent of .join
|
||||||
|
|
||||||
|
cmd.Env = append(cmd.Env, // Append the enviroment variables
|
||||||
|
"MCPI_USERNAME="+username,
|
||||||
|
"MCPI_RENDER_DISTANCE="+render_distance,
|
||||||
|
"MCPI_FEATURE_FLAGS="+features_string,
|
||||||
|
)
|
||||||
|
|
||||||
|
// Return the Cmd object to let the user do anything they want with it
|
||||||
|
return cmd
|
||||||
|
}
|
Loading…
Reference in New Issue