Skip to content

Instantly share code, notes, and snippets.

@vQuadX
Created May 7, 2016 18:22
Show Gist options
  • Save vQuadX/cd33fd3847d3ecc9d641f622096b582f to your computer and use it in GitHub Desktop.
Save vQuadX/cd33fd3847d3ecc9d641f622096b582f to your computer and use it in GitHub Desktop.
Simple Minecraft 1.9 Launcher
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import java.util.*
import java.util.zip.ZipEntry
import java.util.zip.ZipFile
class MinecraftLauncher {
fun main(args : Array<String>) {
Launcher.launch()
}
}
class Launcher {
companion object {
fun launch() {
var javaParameters = "-Xmx2G"
var gameDir = "\"D:\\Games\\Minecraft\""
var version = "1.9.2"
var nativesPath = "$gameDir\\versions\\$version\\natives"
var librariesPath = "$gameDir\\libraries"
var libraries = arrayOf("$librariesPath\\oshi-project\\oshi-core\\1.1\\oshi-core-1.1.jar",
"$librariesPath\\net\\java\\dev\\jna\\jna\\3.4.0\\jna-3.4.0.jar",
"$librariesPath\\net\\java\\dev\\jna\\platform\\3.4.0\\platform-3.4.0.jar",
"$librariesPath\\com\\ibm\\icu\\icu4j-core-mojang\\51.2\\icu4j-core-mojang-51.2.jar",
"$librariesPath\\net\\sf\\jopt-simple\\jopt-simple\\4.6\\jopt-simple-4.6.jar",
"$librariesPath\\com\\paulscode\\codecjorbis\\20101023\\codecjorbis-20101023.jar",
"$librariesPath\\com\\paulscode\\codecwav\\20101023\\codecwav-20101023.jar",
"$librariesPath\\com\\paulscode\\libraryjavasound\\20101123\\libraryjavasound-20101123.jar",
"$librariesPath\\com\\paulscode\\librarylwjglopenal\\20100824\\librarylwjglopenal-20100824.jar",
"$librariesPath\\com\\paulscode\\soundsystem\\20120107\\soundsystem-20120107.jar",
"$librariesPath\\io\\netty\\netty-all\\4.0.23.Final\\netty-all-4.0.23.Final.jar",
"$librariesPath\\com\\google\\guava\\guava\\17.0\\guava-17.0.jar",
"$librariesPath\\org\\apache\\commons\\commons-lang3\\3.3.2\\commons-lang3-3.3.2.jar",
"$librariesPath\\commons-io\\commons-io\\2.4\\commons-io-2.4.jar",
"$librariesPath\\commons-codec\\commons-codec\\1.9\\commons-codec-1.9.jar",
"$librariesPath\\net\\java\\jinput\\jinput\\2.0.5\\jinput-2.0.5.jar",
"$librariesPath\\net\\java\\jutils\\jutils\\1.0.0\\jutils-1.0.0.jar",
"$librariesPath\\com\\google\\code\\gson\\gson\\2.2.4\\gson-2.2.4.jar",
"$librariesPath\\com\\mojang\\authlib\\1.5.22\\authlib-1.5.22.jar",
"$librariesPath\\com\\mojang\\realms\\1.8.18\\realms-1.8.18.jar",
"$librariesPath\\org\\apache\\commons\\commons-compress\\1.8.1\\commons-compress-1.8.1.jar",
"$librariesPath\\org\\apache\\httpcomponents\\httpclient\\4.3.3\\httpclient-4.3.3.jar",
"$librariesPath\\commons-logging\\commons-logging\\1.1.3\\commons-logging-1.1.3.jar",
"$librariesPath\\org\\apache\\httpcomponents\\httpcore\\4.3.2\\httpcore-4.3.2.jar",
"$librariesPath\\org\\apache\\logging\\log4j\\log4j-api\\2.0-beta9\\log4j-api-2.0-beta9.jar",
"$librariesPath\\org\\apache\\logging\\log4j\\log4j-core\\2.0-beta9\\log4j-core-2.0-beta9.jar",
"$librariesPath\\org\\lwjgl\\lwjgl\\lwjgl\\2.9.4-nightly-20150209\\lwjgl-2.9.4-nightly-20150209.jar",
"$librariesPath\\org\\lwjgl\\lwjgl\\lwjgl_util\\2.9.4-nightly-20150209\\lwjgl_util-2.9.4-nightly-20150209.jar",
"$gameDir\\versions\\1.9.2\\1.9.2.jar")
var mainClass = "net.minecraft.client.main.Main"
var username = "QuadX"
var assetDir = "$gameDir\\assets"
var assetIndex = "1.9"
var uuid = UUID.randomUUID().toString().replace("-", "")
var accessToken = "1a2b3c4d5e6f7g8h9i0g"
var userType = "mojang"
var versionType = "release"
var fullscreen = false
var connectToServer = false
var server = mapOf(
"ip" to "127.0.0.1",
"port" to "25565"
)
var run = "java $javaParameters " +
"-Djava.library.path=$nativesPath " +
"-cp ${libraries.joinToString(";")} $mainClass " +
"--username $username " +
"--version $version " +
"--gameDir $gameDir " +
"--assetsDir $assetDir " +
"--assetIndex $assetIndex " +
"--uuid $uuid " +
"--accessToken $accessToken " +
"--userType $userType " +
"--versionType $versionType" +
"${if (fullscreen) " --fullscreen" else ""} " +
"${if (connectToServer) " --server ${server["ip"]} --port ${server["port"]}" else ""}"
var _nativesPath = Paths.get(nativesPath.replace("\"", ""))
if (Files.notExists(_nativesPath)) {
Files.createDirectories(_nativesPath)
}
if (Utils.isDirEmpty(_nativesPath)) {
var nativesPaths = arrayOf(
"${librariesPath.replace("\"", "")}\\org\\lwjgl\\lwjgl\\lwjgl-platform\\2.9.4-nightly-20150209\\lwjgl-platform-2.9.4-nightly-20150209-natives-windows.jar",
"${librariesPath.replace("\"", "")}\\net\\java\\jinput\\jinput-platform\\2.0.5\\jinput-platform-2.0.5-natives-windows.jar"
)
for (path in nativesPaths) {
Utils.unzip(path, _nativesPath.toString(), arrayOf("META-INF"))
}
}
var p = Runtime.getRuntime().exec(run)
}
}
}
class Utils {
companion object {
fun unzip(zipPath: String, unzipPath: String, skip: Array<String>) {
try {
var zipFile = ZipFile(zipPath)
var enu = zipFile.entries()
while (enu.hasMoreElements()) {
var zipEntry: ZipEntry = enu.nextElement()
var name = zipEntry.name
if (skip.find { it -> name.contains(it) } != null) continue
var file = File("$unzipPath\\$name")
var parent = file.parentFile
if (parent != null) {
parent.mkdirs()
}
var inputStream = zipFile.getInputStream(zipEntry)
var fos = FileOutputStream(file)
var bytes = ByteArray(1024)
var length = inputStream.read(bytes)
while (length >= 0) {
fos.write(bytes, 0, length)
length = inputStream.read(bytes)
}
inputStream.close()
fos.close()
}
zipFile.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
fun isDirEmpty(directory: Path): Boolean {
var dirStream = Files.newDirectoryStream(directory)
return !dirStream.iterator().hasNext();
}
}
}
@vQuadX
Copy link
Author

vQuadX commented May 7, 2016

{
  "id": "1.9.2",
  "family": "1.9",
  "time": "2016-04-25T19:37:54+03:00",
  "releaseTime": "2016-03-30T18:23:55+03:00",
  "type": "release",
  "minecraftArguments": "--username ${auth_player_name} --version ${version_name} --gameDir ${game_directory} --assetsDir ${assets_root} --assetIndex ${assets_index_name} --uuid ${auth_uuid} --accessToken ${auth_access_token} --userType ${user_type} --versionType ${version_type}",
  "mainClass": "net.minecraft.client.main.Main",
  "minimumLauncherVersion": 18,
  "tlauncherVersion": 0,
  "assets": "1.9",
  "source": "official_version_repo",
  "libraries": [
    {
      "name": "oshi-project:oshi-core:1.1"
    },
    {
      "name": "net.java.dev.jna:jna:3.4.0"
    },
    {
      "name": "net.java.dev.jna:platform:3.4.0"
    },
    {
      "name": "com.ibm.icu:icu4j-core-mojang:51.2"
    },
    {
      "name": "net.sf.jopt-simple:jopt-simple:4.6"
    },
    {
      "name": "com.paulscode:codecjorbis:20101023"
    },
    {
      "name": "com.paulscode:codecwav:20101023"
    },
    {
      "name": "com.paulscode:libraryjavasound:20101123"
    },
    {
      "name": "com.paulscode:librarylwjglopenal:20100824"
    },
    {
      "name": "com.paulscode:soundsystem:20120107"
    },
    {
      "name": "io.netty:netty-all:4.0.23.Final"
    },
    {
      "name": "com.google.guava:guava:17.0"
    },
    {
      "name": "org.apache.commons:commons-lang3:3.3.2"
    },
    {
      "name": "commons-io:commons-io:2.4"
    },
    {
      "name": "commons-codec:commons-codec:1.9"
    },
    {
      "name": "net.java.jinput:jinput:2.0.5"
    },
    {
      "name": "net.java.jutils:jutils:1.0.0"
    },
    {
      "name": "com.google.code.gson:gson:2.2.4"
    },
    {
      "name": "com.mojang:authlib:1.5.22"
    },
    {
      "name": "com.mojang:realms:1.8.18"
    },
    {
      "name": "org.apache.commons:commons-compress:1.8.1"
    },
    {
      "name": "org.apache.httpcomponents:httpclient:4.3.3"
    },
    {
      "name": "commons-logging:commons-logging:1.1.3"
    },
    {
      "name": "org.apache.httpcomponents:httpcore:4.3.2"
    },
    {
      "name": "org.apache.logging.log4j:log4j-api:2.0-beta9"
    },
    {
      "name": "org.apache.logging.log4j:log4j-core:2.0-beta9"
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl:2.9.4-nightly-20150209",
      "rules": [
        {
          "action": "allow"
        },
        {
          "action": "disallow",
          "os": {
            "name": "osx"
          }
        }
      ]
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl_util:2.9.4-nightly-20150209",
      "rules": [
        {
          "action": "allow"
        },
        {
          "action": "disallow",
          "os": {
            "name": "osx"
          }
        }
      ]
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.4-nightly-20150209",
      "rules": [
        {
          "action": "allow"
        },
        {
          "action": "disallow",
          "os": {
            "name": "osx"
          }
        }
      ],
      "natives": {
        "linux": "natives-linux",
        "osx": "natives-osx",
        "windows": "natives-windows"
      },
      "extract": {
        "exclude": [
          "META-INF/"
        ]
      }
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl:2.9.2-nightly-20140822",
      "rules": [
        {
          "action": "allow",
          "os": {
            "name": "osx"
          }
        }
      ]
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl_util:2.9.2-nightly-20140822",
      "rules": [
        {
          "action": "allow",
          "os": {
            "name": "osx"
          }
        }
      ]
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.2-nightly-20140822",
      "rules": [
        {
          "action": "allow",
          "os": {
            "name": "osx"
          }
        }
      ],
      "natives": {
        "linux": "natives-linux",
        "osx": "natives-osx",
        "windows": "natives-windows"
      },
      "extract": {
        "exclude": [
          "META-INF/"
        ]
      }
    },
    {
      "name": "net.java.jinput:jinput-platform:2.0.5",
      "natives": {
        "linux": "natives-linux",
        "osx": "natives-osx",
        "windows": "natives-windows"
      },
      "extract": {
        "exclude": [
          "META-INF/"
        ]
      }
    }
  ],
  "downloads": {
    "client": {
      "url": "https://launcher.mojang.com/mc/game/1.9.2/client/19106fd5e222dca0f2dde9f66db8384c9a7db957/client.jar",
      "sha1": "19106fd5e222dca0f2dde9f66db8384c9a7db957",
      "size": 8699297
    },
    "server": {
      "url": "https://launcher.mojang.com/mc/game/1.9.2/server/2b95cc7b136017e064c46d04a5825fe4cfa1be30/server.jar",
      "sha1": "2b95cc7b136017e064c46d04a5825fe4cfa1be30",
      "size": 8848002
    }
  },
  "assetIndex": {
    "id": "1.9",
    "known": true,
    "url": "https://launchermeta.mojang.com/mc-staging/assets/1.9/8549e8aca91ee8b8d1620e9e8252d477f16a56d5/1.9.json",
    "sha1": "8549e8aca91ee8b8d1620e9e8252d477f16a56d5",
    "size": 137552
  }
}

@vQuadX
Copy link
Author

vQuadX commented May 7, 2016

Only for Windows

@YoussefEnnYT
Copy link

how do we run this?
i dont understand

@Stevee4
Copy link

Stevee4 commented Feb 27, 2025

Can you make it an ChromeOS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment