Skip to content

Instantly share code, notes, and snippets.

@vQuadX
Created May 2, 2016 13:42
Show Gist options
  • Save vQuadX/3172ab19c59281a3e4d4579bca2b24c4 to your computer and use it in GitHub Desktop.
Save vQuadX/3172ab19c59281a3e4d4579bca2b24c4 to your computer and use it in GitHub Desktop.
Simple Minecraft 1.9 Launcher
import os
import uuid
import subprocess
from zipfile import ZipFile
java_parameters = '-Xmx2G'
game_dir = r'"D:\Games\Minecraft"'
version = '1.9.2'
natives_path = r'{}\versions\{}\natives'.format(game_dir, version)
libraries_path = '{}\{}'.format(game_dir, 'libraries')
libraries = [r'{}\oshi-project\oshi-core\1.1\oshi-core-1.1.jar'.format(libraries_path),
r'{}\net\java\dev\jna\jna\3.4.0\jna-3.4.0.jar'.format(libraries_path),
r'{}\net\java\dev\jna\platform\3.4.0\platform-3.4.0.jar'.format(libraries_path),
r'{}\com\ibm\icu\icu4j-core-mojang\51.2\icu4j-core-mojang-51.2.jar'.format(libraries_path),
r'{}\net\sf\jopt-simple\jopt-simple\4.6\jopt-simple-4.6.jar'.format(libraries_path),
r'{}\com\paulscode\codecjorbis\20101023\codecjorbis-20101023.jar'.format(libraries_path),
r'{}\com\paulscode\codecwav\20101023\codecwav-20101023.jar'.format(libraries_path),
r'{}\com\paulscode\libraryjavasound\20101123\libraryjavasound-20101123.jar'.format(libraries_path),
r'{}\com\paulscode\librarylwjglopenal\20100824\librarylwjglopenal-20100824.jar'.format(libraries_path),
r'{}\com\paulscode\soundsystem\20120107\soundsystem-20120107.jar'.format(libraries_path),
r'{}\io\netty\netty-all\4.0.23.Final\netty-all-4.0.23.Final.jar'.format(libraries_path),
r'{}\com\google\guava\guava\17.0\guava-17.0.jar'.format(libraries_path),
r'{}\org\apache\commons\commons-lang3\3.3.2\commons-lang3-3.3.2.jar'.format(libraries_path),
r'{}\commons-io\commons-io\2.4\commons-io-2.4.jar'.format(libraries_path),
r'{}\commons-codec\commons-codec\1.9\commons-codec-1.9.jar'.format(libraries_path),
r'{}\net\java\jinput\jinput\2.0.5\jinput-2.0.5.jar'.format(libraries_path),
r'{}\net\java\jutils\jutils\1.0.0\jutils-1.0.0.jar'.format(libraries_path),
r'{}\com\google\code\gson\gson\2.2.4\gson-2.2.4.jar'.format(libraries_path),
r'{}\com\mojang\authlib\1.5.22\authlib-1.5.22.jar'.format(libraries_path),
r'{}\com\mojang\realms\1.8.18\realms-1.8.18.jar'.format(libraries_path),
r'{}\org\apache\commons\commons-compress\1.8.1\commons-compress-1.8.1.jar'.format(libraries_path),
r'{}\org\apache\httpcomponents\httpclient\4.3.3\httpclient-4.3.3.jar'.format(libraries_path),
r'{}\commons-logging\commons-logging\1.1.3\commons-logging-1.1.3.jar'.format(libraries_path),
r'{}\org\apache\httpcomponents\httpcore\4.3.2\httpcore-4.3.2.jar'.format(libraries_path),
r'{}\org\apache\logging\log4j\log4j-api\2.0-beta9\log4j-api-2.0-beta9.jar'.format(libraries_path),
r'{}\org\apache\logging\log4j\log4j-core\2.0-beta9\log4j-core-2.0-beta9.jar'.format(libraries_path),
r'{}\org\lwjgl\lwjgl\lwjgl\2.9.4-nightly-20150209\lwjgl-2.9.4-nightly-20150209.jar'.format(libraries_path),
r'{}\org\lwjgl\lwjgl\lwjgl_util\2.9.4-nightly-20150209\lwjgl_util-2.9.4-nightly-20150209.jar'.format(libraries_path),
r'{0}\versions\{1}\{1}.jar'.format(game_dir, '1.9.2', )]
main_class = 'net.minecraft.client.main.Main'
username = 'QuadX'
asset_dir = r'{}\assets'.format(game_dir)
asset_index = '1.9'
uuid = uuid.uuid1()
access_token = '1a2b3c4d5e6f7g8h9i0g'
user_type = 'mojang'
version_type = 'release'
fullscreen = False
connect_to_server = False
server = {
'ip': '127.0.0.1',
'port': '25565'
}
run = 'java {} -Djava.library.path={} -cp {} {}' \
' --username {}' \
' --version {}' \
' --gameDir {}' \
' --assetsDir {}' \
' --assetIndex {}' \
' --uuid {}' \
' --accessToken {}' \
' --userType {}' \
' --versionType {} {}'.format(java_parameters,
natives_path,
';'.join(libraries),
main_class,
username,
version,
game_dir,
asset_dir,
asset_index,
uuid,
access_token,
user_type,
version_type,
'--fullscreen' if fullscreen else '',
'--server {} --port {}'.format(server['ip'], server['port'])
if connect_to_server else '')
natives_path = natives_path.replace('"', '')
if not os.path.isdir(natives_path) or not os.listdir(natives_path):
natives_paths = [
r'{}\org\lwjgl\lwjgl\lwjgl-platform\2.9.4-nightly-20150209\lwjgl-platform-2.9.4-nightly-20150209-natives-windows.jar'.format(libraries_path.replace('"', '')),
r'{}\net\java\jinput\jinput-platform\2.0.5\jinput-platform-2.0.5-natives-windows.jar'.format(libraries_path.replace('"', ''))
]
if os.listdir(natives_path):
os.mkdir(natives_path)
for natives in natives_paths:
with ZipFile(natives) as jar:
for filename in jar.filelist:
if not str.startswith(filename.filename, 'META-INF'):
jar.extract(filename, path=natives_path)
subprocess.run(run, shell=True)
@vQuadX
Copy link
Author

vQuadX commented May 2, 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 2, 2016

Only for Windows

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