- Todo sobre los
.bat
, .ps1
y .sh
que he hecho para el Minecraft: Java Edition.
- Estos scripts te permiten convertir tu juego en portable, elegir en que lugar quieres que se instalen, tener la cantidad de
.minecraft
que quieras, etc.
- El uso que yo le doy es, ni más ni menos, tener varios
.minecraft
para no arriesgarme a que algún mod rompa todo. :P
- Esto funciona para cualquier lanzador, no solo para SKlauncher.
- Lo ideal es usar la Opción A, pero si el lanzador no lo soporta tendrías que usar la Opción B.
- Todo está pensado como si has descargado el SKlauncher Universal (
.jar
), que le has cambiado al nombre a SKlauncher.jar
y que tienes solamente Liberica Full JDK 8 instalado (con todas las opciones).
:: .bat
@SETLOCAL ENABLEEXTENSIONS
@CD /D "%~dp0" || PAUSE && EXIT /B
# .ps1
$DIR = Split-Path -Parent $MyInvocation.MyCommand.Definition
cd "$DIR"; if (-not $?) {Pause; Exit}
# .sh
DIR="$( cd "$( dirname "$0" )" && pwd )"
cd "$DIR" || { pause; exit; }
- El Directorio de Trabajo al iniciar el archivo siempre será donde se encuentra el mismo.
- Iniciar el archivo desde otro lugar (o incluso iniciarlo como administrador / root) no hará que cambie.
--workDir "."
: Se utiliza el directorio actual.
--workDir "Ejemplo\Carpeta"
: Esta carpeta se encuentra en el directorio actual (ruta relativa).
- Funciona pero el juego no puede iniciar, cabe destacar que la ruta es relativa al Lanzador y no al Directorio de Trabajo.
--workDir "C:\Juegos\Minecraft"
: Ruta absoluta.
- Se puede usar
%CD%
/ $DIR
como verás en el .bat
/ .ps1
--workDir "."
: Se utiliza el directorio actual.
--workDir "Ejemplo/Carpeta"
: Esta carpeta se encuentra en el directorio actual (ruta relativa).
- Funciona pero el juego no puede iniciar, cabe destacar que la ruta es relativa al Lanzador y no al Directorio de Trabajo.
--workDir "/home/TuNombre/Juegos/Minecraft"
: Ruta absoluta.
- Se puede usar
$DIR
como verás en el .sh
:: .bat
:: Se puede agregar \Ejemplo\Carpeta
SET APPDATA=%CD%
:: Crea la ruta absoluta si fuera necesario
:: 2>NUL es para que no diga nada
MKDIR "%APPDATA%" 2>NUL
# .ps1
# Se puede agregar \Ejemplo\Carpeta
$Env:APPDATA = "$DIR"
# Crea la ruta absoluta si fuera necesario
# $null es para que no diga nada
$null = New-Item -Path "$Env:APPDATA" -ItemType Directory -Force
# .sh
# Se puede agregar /Ejemplo/Carpeta
AppData="$DIR"
# Crea la ruta absoluta si fuera necesario
mkdir -p "$AppData"
# El equivalente al %APPDATA% en Windows
java -Duser.home="$AppData" -jar
- El Lanzador utiliza la variable del sistema
%APPDATA%
(en el caso de Windows), entonces aquí lo que se hace es cambiar el valor de dicha variable usando una ruta absoluta (por eso %CD%
/ $DIR
que representan el Directorio de Trabajo).
:: .bat
:: Opción 1 : No especificas cual Java usar
SKlauncher.jar --workDir "%CD%"
:: Opción 2 : Utilizas el Java que tu quieras
:: javaw.exe no dice nada mientras que java.exe te mostrará mucho texto
"%JAVA_HOME%bin\javaw.exe" -jar SKlauncher.jar --workDir "%CD%"
# .ps1
# Opción 1 : No especificas cual Java usar
Start-Process -FilePath ".\SKlauncher.jar" -ArgumentList "--workDir `"$DIR`"" -Wait
# Opción 2 : Utilizas el Java que tu quieras
# javaw.exe no dice nada mientras que java.exe te mostrará mucho texto
Start-Process -FilePath "$($Env:JAVA_HOME)bin\javaw.exe" -ArgumentList "-jar .\SKlauncher.jar --workDir `"$DIR`"" -NoNewWindow -Wait
# .sh
# Opción 1 : No especificas cual Java usar
java -jar SKlauncher.jar --workDir "$DIR"
# Opción 2 : Utilizas el Java que tu quieras
# Linux https://askubuntu.com/a/772236
# macOS https://stackoverflow.com/a/15826712
"/usr/lib/jvm/bellsoft-java8-full-amd64/bin/java" -jar SKlauncher.jar --workDir "$DIR"
- ShellCheck : Además de verificar que todo esté bien, me dio sugerencias que pude implementar en el
.bat
y .ps1
(como usar cd "Ejemplo/" || exit
, cosa que si cd
falla se cierra todo).
- Directorio de Trabajo en Linux y macOS : Aunque lo he modificado un poco, estas dos partes salen de ahí.
# Directorio de Trabajo
DIR="$( cd "$( dirname "$0" )" && pwd )"
cd "$DIR" || { pause; exit; }
# Iniciar Java con esto
-Duser.home="$DIR"
- La idea es que sea fácil de editar, que el usuario solo tenga que copiar "2 líneas" y ya (nada de analizar como loco para agregar otro "Minecraft" a la lista).
- La razón de usar
function Pause {...}
en vez de Pause
en el .ps1
es para que sea compatible con Windows PowerShell 2.0 y para que sea como en los otros archivos: pulsar cualquier tecla en vez de solamente enter.
- No funciona en el Windows PowerShell ISE y en el caso de los
.sh
es para que, en caso de iniciar sin Terminal, puedan ver la causa de que se detenga todo.
tput reset
va perfecto para Linux mientras que printf '\e[3J'
va perfecto para macOS.
- El
SKlauncher.desktop
es como un acceso directo en Linux, te tocará editarlo porque las rutas son absolutas.
- Si quieres que ejecute el
.jar
en vez del .sh
, tendrías que usar algo como esto:
PD: No estoy seguro como se crea un acceso directo (que puedas cambiarle el icono y esas cosas) en macOS.
[Desktop Entry]
Exec=java -jar SKlauncher.jar --workDir "/home/TuNombre/.minecraft/Cliente/Minecraft"
Path=/home/TuNombre/.minecraft
Terminal=false