Minecraft Launcher für 1.3

  • Hallo.

    Mein Launcher ist nun zu 100% fertiggestellt.

    Dank den Updates von Minecraft, kann man nun eine Verknüpfung mit Parameter starten.

    One cool feature about the new launcher you might want to know about is that you can pass it command-line features! The syntax is:
    Minecraft <username> <password> <server:port>


    Diese Parameter ermöglichen es, ohne etwas im Menü anklicken zu müssen, sich direkt mit seinem Account einzuloggen und sich mit dem Server zu verbinden.

    Dieses Feature habe ich mir zur Nutzen gemacht und habe daraus erstmals einen Launcher geschrieben, nun wurde daraus aber ebenfalls ein Updater für den Launcher.

    Launcher
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=Icon.ico
    #AutoIt3Wrapper_outfile=Launcher_New.exe
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #Region
    #EndRegion
    ; ================================;
    ; Minecraft Launcher
    ; Made by Aldeos
    ; © 2011 Aldeos.de
    ; ================================;

    [/autoit] [autoit][/autoit] [autoit]

    ;====Includes====;
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    If Not FileExists(@AppDataDir & "\.minecraft") Then DirCreate(@AppDataDir & "\.minecraft\")
    If Not FileExists(@AppDataDir & "\.minecraft\Splash.jpg") Then FileInstall("Splash.jpg", @AppDataDir & "\.minecraft\Splash.jpg") ;- Fragt ab, ob Splash.bmp existiert, falls nicht installiert er diese Datei.
    If Not FileExists(@AppDataDir & "\.minecraft\Minecraft.exe") Then FileInstall("Minecraft.exe", @AppDataDir & "\.minecraft\Minecraft.exe") ;- Fragt ab, ob Minecraft.exe existiert, falls nicht installiert er diese Datei.

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $aFav

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;====GUI====;
    $GUI = GUICreate("Minecraft Launcher by Aldeos.de", 401, 251, 273, 176) ;- Erstellt die GUI.
    $DATA = GUICtrlCreateMenu("Datei")
    $EXIT = GUICtrlCreateMenuItem("Beenden", $DATA)
    $SERVER = GUICtrlCreateMenu("Server")
    $ADD = GUICtrlCreateMenuItem("Server hinzufügen", $SERVER)
    $DELETE = GUICtrlCreateMenuItem("Server entfernen", $SERVER)
    $LOGIN = GUICtrlCreateLabel("Login:", 104, 42, 33, 17) ;- Erstellt den Label "Login:".
    $LOGIN_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "NAME", "") ;- Liest aus der Launcher.ini die Wert NAME aus der Sektion Config.
    $LOGIN_INPUT = GUICtrlCreateInput($LOGIN_READ, 160, 40, 121, 21) ;- Erstellt ein Eingabefeld für den Namen.
    $PASSWORD = GUICtrlCreateLabel("Passwort:", 104, 70, 50, 17) ;- Erstellt den Label "Password:".
    $PASS_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "PASS", "");- Liest aus der Launcher.ini die Wert PASS aus der Sektion Config.
    $PASSWORD_INPUT = GUICtrlCreateInput($PASS_READ, 160, 68, 121, 21, $ES_PASSWORD);- Erstellt ein Eingabefeld für das Password.
    $SERVER = GUICtrlCreateLabel("Server:", 104, 98, 50, 17) ;- Erstellt den Label "IP:".
    $IP_INPUT = GUICtrlCreateCombo("", 160, 96, 121, 25) ;-;- Erstellt ein Eingabefeld für die IP.
    $START = GUICtrlCreateButton("Start", 194, 128, 89, 25, $WS_GROUP) ;- Erstellt einen Button mit der Aufschrift "Start" zum starten des Spieles.
    $UPDATE = GUICtrlCreateButton("Update", 104, 128, 81, 25, $WS_GROUP) ;- Erstellt einen Button mit der Aufschrift "Update" zum überprüfen auf Updates.
    $IMG = GUICtrlCreatePic(@AppDataDir & "\.minecraft\Splash.jpg", 0, 0, 400, 230, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    $DL_PROG = GUICtrlCreateProgress(16, 173, 369, 25)
    $DL_LAB = GUICtrlCreateLabel("", 24, 204, 4, 4)
    $VERSION = GUICtrlCreateLabel("V. 1.1", 352, 200, 32, 17)
    GUISetState(@SW_SHOW)
    _IniRead()

    [/autoit] [autoit][/autoit] [autoit]

    ;====Variable====;
    $ServerINI = @TempDir & "\serverversion.ini"
    $LocalINI = @AppDataDir & "\.minecraft\Version.ini"
    $upd_url = IniRead($LocalINI, "File", "URL", "")
    $sString = BinaryToString(InetRead('http://update.aldeos.de/mc/serverversion.ini'))
    $hFile = FileOpen($ServerINI, 2)
    FileWrite($hFile, $sString)
    FileClose($hFile)
    FileDelete($hFile)
    $Ini1 = IniRead($ServerINI, "Update", "VERSION", "")
    $Ini2 = IniRead($LocalINI, "Update", "VERSION", "")
    $url = IniRead($ServerINI, "File", "URL", "")
    $NAME = IniRead($ServerINI, "File", "NAME", "")
    $size = InetGetSize($url & $NAME)

    [/autoit] [autoit][/autoit] [autoit]

    ;====Funktionen====;
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUIDelete($GUI)
    Exit
    Case $EXIT
    GUIDelete($GUI)
    Exit
    Case $IP_INPUT
    $sUrlName = GUICtrlRead($IP_INPUT)
    $sURL = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Favoriten", $sUrlName, "")
    Case $START
    _startcheck()
    Case $UPDATE
    _updatecheck()
    Case $ADD
    _favadd()
    _IniRead() ;<======================
    Case $DELETE
    _favdel()
    _IniRead();<======================
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _IniRead() ;<<================ ganze Func
    $aFav = IniReadSection(@AppDataDir & "\.minecraft\Launcher.ini", "Favoriten")
    ;- Liest aus der Launcher.ini die Favoriten
    If IsArray($aFav) Then
    GUICtrlSetData($IP_INPUT, "", "")
    ;- _ArrayDisplay($aFav,"Favoriten")
    For $i = 1 To $aFav[0][0]
    GUICtrlSetData($IP_INPUT, $aFav[$i][0])
    Next
    EndIf
    EndFunc ;==>_IniRead

    [/autoit] [autoit][/autoit] [autoit]

    Func _run()
    If Not @error Then
    $NAME = GUICtrlRead($LOGIN_INPUT)
    $PASS = GUICtrlRead($PASSWORD_INPUT)
    $IP = GUICtrlRead($IP_INPUT)
    $PASS_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "PASS", "")
    ShellExecute(@AppDataDir & "\.minecraft\Minecraft.exe", $LOGIN_INPUT & " " & $PASS_READ & " " & $sURL) ;- Startet die Datei "Minecraft.exe" mit den folgenden Parametern, $NAME_READ, $PASS_READ und $IP_READ.
    If Not @error Then
    IniWriteSection(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "NAME=" & GUICtrlRead($LOGIN_INPUT) & @LF & "PASS=" & GUICtrlRead($PASSWORD_INPUT) & @LF & "IP=" & GUICtrlRead($IP_INPUT)) ;- Schreit $NAME_INPUT, $PASSWORD_INPUT und $IP_INPUT in die INI.
    Exit
    EndIf
    EndIf
    EndFunc ;==>_run

    [/autoit] [autoit][/autoit] [autoit]

    Func _updatecheck()
    If $Ini1 <> $Ini2 Then
    $iMsgBoxAnswer = MsgBox(52, "Aktualisierung gefunden!", "Es wurde eine Aktualisierung gefunden." & @CRLF & "Möchten Sie diese herunterladen?")
    Select
    Case $iMsgBoxAnswer = 6
    $download = InetGet($url & $NAME, $NAME, 1, 1)
    Do
    $info = InetGetInfo($download, 0)
    $percent = (100 / $size) * $info
    GUICtrlSetData($DL_PROG, $percent)
    $Old = GUICtrlRead($DL_LAB)
    $New = "Geladen:" & Round(($info / 1024) / 1024, 1) & " / " & Round(($size / 1024) / 1024, 1) & "MB"
    If $Old <> $New Then GUICtrlSetData($DL_LAB, $New)
    Until $percent >= 100
    IniWrite($LocalINI, "Update", "VERSION", $Ini1)
    _Update()
    Exit
    Case $iMsgBoxAnswer = 7
    Exit
    EndSelect
    EndIf
    EndFunc ;==>_updatecheck

    [/autoit] [autoit][/autoit] [autoit]

    Func _startcheck()
    If $Ini1 <> $Ini2 Then
    MsgBox(48, "Version nicht aktuell!", "Ihre Version ist nicht aktuell." & @CRLF & "Bitte aktualisieren sie ihren Launcher.")
    ElseIf $Ini1 = $Ini2 Then
    _run()
    EndIf
    EndFunc ;==>_startcheck

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Update($iDelay = 0)
    Local $sCmdFile
    FileDelete(@TempDir & "scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '" > nul' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'ren ' & @ScriptDir & '\Launcher_New.exe Launcher.exe' & @CRLF _
    & 'start ' & @ScriptDir & '\Launcher.exe' & @CRLF _
    & 'del ' & @TempDir & 'scratch.bat'
    FileWrite(@TempDir & "scratch.bat", $sCmdFile)
    Run(@TempDir & "scratch.bat", @TempDir, @SW_HIDE)
    Exit
    EndFunc ;==>_Update

    [/autoit] [autoit][/autoit] [autoit]

    Func _favadd()
    $FAV_ADD = GUICreate("Hinzufügen", 201, 122, 192, 124)
    $SERVER_NAME = GUICtrlCreateInput("", 48, 24, 145, 21)
    $SERVER_IP = GUICtrlCreateInput("", 48, 56, 145, 21)
    $LAB_NAME = GUICtrlCreateLabel("Name:", 8, 26, 35, 17)
    $LAB_IP = GUICtrlCreateLabel("IP:", 24, 58, 17, 17)
    $ADD_SERVER = GUICtrlCreateButton("Hinzufügen", 56, 88, 89, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $ADD_SERVER
    IniWrite(@AppDataDir & "\.minecraft\Launcher.ini", "Favoriten", GUICtrlRead($SERVER_NAME), GUICtrlRead($SERVER_IP))
    ExitLoop
    EndSwitch
    WEnd
    GUIDelete($FAV_ADD)
    EndFunc ;==>_favadd

    [/autoit] [autoit][/autoit] [autoit]

    Func _favdel()
    $FAV_DEL = GUICreate("Entfernen", 194, 99, 192, 124)
    $SERVER_SELECT = GUICtrlCreateCombo("", 16, 24, 161, 25)
    $FAV_DELETE = GUICtrlCreateButton("Entfernen", 56, 56, 81, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    $aFav = IniReadSection(@AppDataDir & "\.minecraft\Launcher.ini", "Favoriten")
    ;- Liest aus der Launcher.ini die Favoriten
    If IsArray($aFav) Then
    GUICtrlSetData($SERVER_SELECT, "", "")
    ;- _ArrayDisplay($aFav,"Favoriten")
    For $i = 1 To $aFav[0][0]
    GUICtrlSetData($SERVER_SELECT, $aFav[$i][0])
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $FAV_DELETE
    IniDelete(@AppDataDir & "\.minecraft\Launcher.ini", "Favoriten", GUICtrlRead($SERVER_SELECT))
    ExitLoop
    EndSwitch
    WEnd
    GUIDelete($FAV_DEL)
    EndFunc ;==>_favdel

    [/autoit]


    Über Feedback, Kritik und Verbesserungsvorschläge würde ich mich freuen.

    Mit freundlichem Gruß
    Aldeos

  • Hier mal eine kleine Änderung, dass erspart dir die seperate Update.exe:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=Icon.ico
    #AutoIt3Wrapper_outfile=Launcher_New.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #Region
    #EndRegion
    ; ================================;
    ; Minecraft Launcher
    ; Made by Kazu
    ; © 2011 Kazu
    ; ================================;

    [/autoit] [autoit][/autoit] [autoit]

    ;====Includes====;
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    If Not FileExists(@AppDataDir & "\.minecraft\Splash.jpg") Then FileInstall("Splash.jpg", @AppDataDir & "\.minecraft\Splash.jpg") ;- Fragt ab, ob Splash.bmp existiert, falls nicht installiert er diese Datei.
    If Not FileExists(@AppDataDir & "\.minecraft\Minecraft.exe") Then FileInstall("Minecraft.exe", @AppDataDir & "\.minecraft\Minecraft.exe") ;- Fragt ab, ob Minecraft.exe existiert, falls nicht installiert er diese Datei.
    If Not FileExists(@AppDataDir & "\.minecraft\Update.exe") Then FileInstall("Update.exe", @AppDataDir & "\.minecraft\Update.exe") ;- Fragt ab, ob Update.exe existiert, falls nicht installiert er diese Datei.

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;====GUI====;
    $GUI = GUICreate("Minecraft Launcher by Aldeos.de", 401, 231, 273, 176) ;- Erstellt die GUI.
    $NAME = GUICtrlCreateLabel("Login:", 104, 42, 33, 17) ;- Erstellt den Label "Login:".
    $NAME_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "NAME", "") ;- Liest aus der Launcher.ini die Wert NAME aus der Sektion Config.
    $NAME_INPUT = GUICtrlCreateInput($NAME_READ, 160, 40, 121, 21) ;- Erstellt ein Eingabefeld für den Namen.
    $PASSWORD = GUICtrlCreateLabel("Password:", 104, 70, 53, 17) ;- Erstellt den Label "Password:".
    $PASS_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "PASS", "");- Liest aus der Launcher.ini die Wert PASS aus der Sektion Config.
    $PASSWORD_INPUT = GUICtrlCreateInput($PASS_READ, 160, 68, 121, 21, $ES_PASSWORD);- Erstellt ein Eingabefeld für das Password.
    $IP = GUICtrlCreateLabel("IP:", 104, 98, 17, 17) ;- Erstellt den Label "IP:".
    $IP_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "IP", "");- Liest aus der Launcher.ini die Wert IP aus der Sektion Config.
    $IP_INPUT = GUICtrlCreateInput($IP_READ, 160, 96, 121, 21);- Erstellt ein Eingabefeld für die IP.
    $START = GUICtrlCreateButton("Start", 194, 128, 89, 25, $WS_GROUP) ;- Erstellt einen Button mit der Aufschrift "Start" zum starten des Spieles.
    $UPDATE = GUICtrlCreateButton("Update", 104, 128, 81, 25, $WS_GROUP) ;- Erstellt einen Button mit der Aufschrift "Update" zum überprüfen auf Updates.
    $IMG = GUICtrlCreatePic(@AppDataDir & "\.minecraft\Splash.jpg", 0, 0, 400, 230, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS)) ;- Erstellt das Hintergrundbild für die GUI.
    $DL_PROG = GUICtrlCreateProgress(16, 173, 369, 25) ;- Progressbar für den Download.
    $DL_LAB = GUICtrlCreateLabel("", 24, 204, 100, 12) ;- Label für den Download.
    $VERSION = GUICtrlCreateLabel("V. 1.0", 352, 200, 32, 17)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    ;====Variable====;
    $ServerINI = @TempDir & "\serverversion.ini"
    $LocalINI = @AppDataDir & "\.minecraft\Version.ini"
    $upd_url = IniRead($LocalINI, "File", "URL", "")
    $sString = BinaryToString(InetRead('http://46.4.146.40/minecraft/updates/serverversion.ini'))
    $hFile = FileOpen($ServerINI, 2)
    FileWrite($hFile, $sString)
    FileClose($hFile)
    FileDelete($hFile)
    $Ini1 = IniRead($ServerINI, "Update", "VERSION", "")
    $Ini2 = IniRead($LocalINI, "Update", "VERSION", "")
    $url = IniRead($ServerINI, "File", "URL", "")
    $NAME = IniRead($ServerINI, "File", "NAME", "")
    $size = InetGetSize($url & $NAME)

    [/autoit] [autoit][/autoit] [autoit]

    ;====Funktionen====;
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $START
    _startcheck()
    Case $UPDATE
    _updatecheck()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _run()
    If Not @error Then
    $NAME = GUICtrlRead($NAME_INPUT)
    $PASS = GUICtrlRead($PASSWORD_INPUT)
    $IP = GUICtrlRead($IP_INPUT)
    $PASS_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "PASS", "")
    ShellExecute(@AppDataDir & "\.minecraft\Minecraft.exe", $NAME & " " & $PASS_READ & " " & $IP) ;- Startet die Datei "Minecraft.exe" mit den folgenden Parametern, $NAME_READ, $PASS_READ und $IP_READ.
    If Not @error Then
    IniWriteSection(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "NAME=" & GUICtrlRead($NAME_INPUT) & @LF & "PASS=" & GUICtrlRead($PASSWORD_INPUT) & @LF & "IP=" & GUICtrlRead($IP_INPUT)) ;- Schreit $NAME_INPUT, $PASSWORD_INPUT und $IP_INPUT in die INI.
    Exit
    EndIf
    EndIf
    EndFunc ;==>_run

    [/autoit] [autoit][/autoit] [autoit]

    Func _updatecheck()
    If $Ini1 <> $Ini2 Then
    $iMsgBoxAnswer = MsgBox(52, "Aktualisierung gefunden!", "Es wurde eine Aktualisierung gefunden." & @CRLF & "Möchten Sie diese herunterladen?")
    Select
    Case $iMsgBoxAnswer = 6
    $download = InetGet($url & $NAME, $NAME, 1, 1)
    Do
    $info = InetGetInfo($download, 0)
    $percent = (100 / $size) * $info
    GUICtrlSetData($DL_PROG, $percent)
    $Old = GUICtrlRead($DL_LAB)
    $New = "Geladen:" & Round(($info / 1024) / 1024, 1) & " / " & Round(($size / 1024) / 1024, 1) & "MB"
    If $Old <> $New Then GUICtrlSetData($DL_LAB, $New)
    Until $percent >= 100
    IniWrite($LocalINI, "Update", "VERSION", $Ini1)
    _Update()
    Exit
    Case $iMsgBoxAnswer = 7
    Exit
    EndSelect
    EndIf
    EndFunc ;==>_updatecheck

    [/autoit] [autoit][/autoit] [autoit]

    Func _startcheck()
    If $Ini1 <> $Ini2 Then
    MsgBox(48, "Version nicht aktuell!", "Ihre Version ist nicht aktuell." & @CRLF & "Bitte aktualisieren sie ihren Clienten.")
    ElseIf $Ini1 = $Ini2 Then
    _run()
    EndIf
    EndFunc ;==>_startcheck

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Update($iDelay = 0)
    Local $sCmdFile
    FileDelete(@TempDir & "scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '" > nul' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'ren ' & @ScriptDir & '\Launcher_New.exe Launcher.exe' & @CRLF _
    & 'start ' & @ScriptDir & '\Launcher.exe' & @CRLF _
    & 'del ' & @TempDir & 'scratch.bat'
    FileWrite(@TempDir & "scratch.bat", $sCmdFile)
    Run(@TempDir & "scratch.bat", @TempDir, @SW_HIDE)
    exit
    EndFunc

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.