Erstellung eines MineCraft Launchers

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 51 Antworten in diesem Thema. Der letzte Beitrag () ist von ichduersie.

    Ich hab das so gelöst mit der Newtonsoft.JSON-Library:

    C#-Quellcode

    1. public static SessionInfo CreateSession(string username, string password)
    2. {
    3. //WebRequest Setup
    4. HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://authserver.mojang.com/authenticate");
    5. request.UserAgent = "CustomLauncher/CustomLauncher/1.0";
    6. request.ContentType = "application/json";
    7. request.Method = "POST";
    8. //Payload
    9. string payload = JsonConvert.SerializeObject(new { agent = new { name = "Minecraft", version = 1 }, username = username, password = password });
    10. using (Stream stream = request.GetRequestStream())
    11. {
    12. stream.WriteString(Encoding.UTF8, payload);
    13. }
    14. //Response
    15. try
    16. {
    17. using (WebResponse response = request.GetResponse())
    18. using (Stream stream = response.GetResponseStream())
    19. using (StreamReader reader = new StreamReader(stream))
    20. {
    21. dynamic responseObject = JObject.Parse(reader.ReadToEnd());
    22. //Fehler finden und evtl. Exception werfen
    23. if (responseObject.accessToken == null)
    24. if (responseObject.errorMessage == null)
    25. throw new Exception("Response Empty");
    26. else
    27. throw new Exception("Response Error: " + responseObject.errorMessage);
    28. else if (responseObject.selectedProfile.id == null)
    29. throw new Exception("Response Error: Payload missing UUID and/or Username");
    30. String accessToken = responseObject.accessToken;
    31. String clientToken = responseObject.clientToken;
    32. String id = responseObject.selectedProfile.id;
    33. String name = responseObject.selectedProfile.name;
    34. return new SessionInfo(accessToken, clientToken, id, name);
    35. }
    36. }
    37. catch (WebException e)
    38. {
    39. System.Windows.Forms.MessageBox.Show(e.Status.ToString());
    40. return new SessionInfo(null, null, null, null);
    41. }
    42. }


    ~ Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D

    kingsunil2000 schrieb:

    Das ist Visual c#.

    Das ist C#. Visual C# ist was anderes, das ist ne IDE.
    Wo ist das Problem? Schnappste Dir nen Online-Konverter und liest Dir das durch:
    google.de/url?sa=t&rct=j&q=&es…kBQ&bvm=bv.76802529,d.bGQ
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    So treten einige Fehler auf:

    VB.NET-Quellcode

    1. Public Shared Function CreateSession(ByVal username As String, ByVal password As String) As SessionInfo
    2. 'WebRequest Setup
    3. Dim request As HttpWebRequest = CType(WebRequest.Create("https://authserver.mojang.com/authenticate"), HttpWebRequest)
    4. request.UserAgent = "CustomLauncher/CustomLauncher/1.0"
    5. request.ContentType = "application/json"
    6. request.Method = "POST"
    7. 'Payload
    8. Dim payload As String = JsonConvert.SerializeObject(New Object() {agent=new{name=Minecraft,version=1Unknown, username=username, password=password})
    9. Dim stream As Stream = request.GetRequestStream
    10. stream.WriteString(Encoding.UTF8, payload)
    11. 'Response
    12. Try
    13. Dim response As WebResponse = request.GetResponse
    14. Dim stream As Stream = response.GetResponseStream
    15. Dim reader As StreamReader = New StreamReader(stream)
    16. Dim responseObject As dynamic = JObject.Parse(reader.ReadToEnd)
    17. 'Fehler finden und evtl. Exception werfen
    18. If (responseObject.accessToken Is Nothing) Then
    19. If (responseObject.errorMessage Is Nothing) Then
    20. Throw New Exception("Response Empty")
    21. Else
    22. Throw New Exception(("Response Error: " + responseObject.errorMessage))
    23. End If
    24. ElseIf (responseObject.selectedProfile.id Is Nothing) Then
    25. Throw New Exception("Response Error: Payload missing UUID and/or Username")
    26. End If
    27. Dim accessToken As String = responseObject.accessToken
    28. Dim clientToken As String = responseObject.clientToken
    29. Dim id As String = responseObject.selectedProfile.id
    30. Dim name As String = responseObject.selectedProfile.name
    31. Return New SessionInfo(accessToken, clientToken, id, name)
    32. Catch e As WebException
    33. System.Windows.Forms.MessageBox.Show(e.Status.ToString)
    34. Return New SessionInfo(Nothing, Nothing, Nothing, Nothing)
    35. End Try
    36. End Function
    Ehrlich gesagt, wie oft soll man es noch sagen? Was denn für Fehler?
    Denkst Du wir wären Hellseher und könnten sehen, was das Problem ist? Außerdem solltest Du echt mal etwas Eigeninitiative zeigen.

    Hast Du schon Google bedient?
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Der Typ "SessionInfo" ist nicht definiert. in Zeile 1
    Typ oder "With" erwartet. Zeile 8
    "payload" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. Zeile 10
    "WriteString" ist kein Member von "System.IO.Stream". Zeile 10
    Die Variable "stream" verbirgt eine Variable in einem einschließenden Block. Zeile 14
    Typ erwartet. Zeile 16
    Der Typ "SessionInfo" ist nicht definiert. Zeile 31
    Der Typ "SessionInfo" ist nicht definiert. Zeile 34
    SessionInfo ist eine eigene Klasse und WriteString hab ich vergessen, mein Fehler:

    C#-Quellcode

    1. public class SessionInfo
    2. {
    3. public SessionInfo(string accessToken, string clientToken, string uuid, string displayName)
    4. {
    5. this.AccessToken = accessToken;
    6. this.ClientToken = clientToken;
    7. this.Uuid = uuid;
    8. this.DisplayName = displayName;
    9. }
    10. public string AccessToken { get; private set; }
    11. public string ClientToken { get; private set; }
    12. public string Uuid { get; private set; }
    13. public string DisplayName { get; private set; }
    14. }
    15. //Extension
    16. private static void WriteString(this Stream stream, Encoding encoding, string @string)
    17. {
    18. var data = encoding.GetBytes(@string);
    19. stream.Write(data, 0, data.Length);
    20. }
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Warnung 11 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\SessionInfo.vb Von der Eigenschaft "AccessToken" wird nicht in allen Codepfaden ein Wert zurückgegeben. Wenn das Ergebnis verwendet wird, kann zur Laufzeit eine NULL-Verweisausnahme auftreten. 15 9 MCLauncher
    Warnung 12 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\SessionInfo.vb Von der Eigenschaft "ClientToken" wird nicht in allen Codepfaden ein Wert zurückgegeben. Wenn das Ergebnis verwendet wird, kann zur Laufzeit eine NULL-Verweisausnahme auftreten. 24 9 MCLauncher
    Warnung 13 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\SessionInfo.vb Von der Eigenschaft "Uuid" wird nicht in allen Codepfaden ein Wert zurückgegeben. Wenn das Ergebnis verwendet wird, kann zur Laufzeit eine NULL-Verweisausnahme auftreten. 33 9 MCLauncher
    Warnung 14 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\SessionInfo.vb Von der Eigenschaft "DisplayName" wird nicht in allen Codepfaden ein Wert zurückgegeben. Wenn das Ergebnis verwendet wird, kann zur Laufzeit eine NULL-Verweisausnahme auftreten. 42 9 MCLauncher
    Fehler 1 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\Form1.vb Typ oder "With" erwartet. 82 85 MCLauncher
    Fehler 2 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\Form1.vb "WriteString" ist kein Member von "System.IO.Stream". 84 9 MCLauncher
    Fehler 3 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\Form1.vb "payload" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. 84 43 MCLauncher
    Fehler 4 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\Form1.vb Die Variable "stream" verbirgt eine Variable in einem einschließenden Block. 88 17 MCLauncher
    Fehler 5 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\Form1.vb Typ erwartet. 90 35 MCLauncher
    Fehler 6 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\Form1.vb "Option Strict On" erfordert, dass alle Methodenparameter eine As-Klausel enthalten. 114 37 MCLauncher
    Fehler 7 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\Form1.vb Alle Parameter müssen explizit typisiert sein, wenn einer von ihnen explizit typisiert ist. 114 37 MCLauncher
    Fehler 8 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\Form1.vb Komma oder ")" erwartet. 114 42 MCLauncher
    Fehler 9 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\Form1.vb Das Schlüsselwort ist kein gültiger Bezeichner. 114 100 MCLauncher
    Fehler 10 C:\Users\Linus\documents\visual studio 2013\Projects\MCLauncher\MCLauncher\Form1.vb Der Typ "var" ist nicht definiert. 115 21 MCLauncher


    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Net
    3. Imports System.IO
    4. Imports System.Text
    5. Public Class Form1
    6. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    7. Dim token As String = CStr(gettokenresult("https://authserver.mojang.com?user=" + TextBox1.Text + "&password=" + TextBox2.Text + "&version=13"))
    8. Try
    9. If token = "Bad login" Then
    10. MsgBox("Fehler!")
    11. ElseIf token = "Bad request" Then
    12. MsgBox("Fehler!")
    13. Else
    14. Dim str() As String = token.Split(CChar(":"))
    15. Dim IdConnect As String = (str(3) + ":" + str(4))
    16. Dim user As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\.minecraft"
    17. Dim cmd As String = "/c C:\Program Files\Java\jre7\bin\jawaw.exe -XX:HeapDumpPath=MojangTricksIntelDriversForPerfomance_jawaw.exe_minecraft.exe.heapdump -Xmx1G -Djava.library.path=" & user & "\.minecraft\versions\1.7.10\1.7.10.jar"
    18. Dim p As New Process
    19. p.StartInfo.FileName = "cmd.exe"
    20. p.StartInfo.Arguments = cmd
    21. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    22. p.Start()
    23. End If
    24. Catch ex As Exception
    25. MsgBox(ex.Message)
    26. End Try
    27. End Sub
    28. Function gettokenresult(url As String) As Double
    29. Dim HttpWResponse As HttpWebResponse = Nothing
    30. Dim sr As StreamReader = Nothing
    31. Dim ans As String = Nothing
    32. Try
    33. Dim HttpWRequest As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
    34. HttpWResponse = CType(HttpWRequest.GetResponse, HttpWebResponse)
    35. sr = New StreamReader(HttpWResponse.GetResponseStream(), Encoding.GetEncoding("iso-0859-1"))
    36. ans = sr.ReadToEnd
    37. Catch ex As Exception
    38. ans = Nothing
    39. Finally
    40. If HttpWResponse Is Nothing Then
    41. Else
    42. HttpWResponse.Close()
    43. End If
    44. If sr Is Nothing Then
    45. Else
    46. sr.Close()
    47. End If
    48. End Try
    49. Return CDbl(ans)
    50. End Function
    51. Public Shared Function CreateSession(ByVal username As String, ByVal password As String) As SessionInfo
    52. 'WebRequest Setup
    53. Dim request As HttpWebRequest = CType(WebRequest.Create("https://authserver.mojang.com/authenticate"), HttpWebRequest)
    54. request.UserAgent = "CustomLauncher/CustomLauncher/1.0"
    55. request.ContentType = "application/json"
    56. request.Method = "POST"
    57. 'Payload
    58. Dim payload As String = JsonConvert.SerializeObject(New Object() {agent=new{name=Minecraft,version=1Unknown, username=username, password=password})
    59. Dim stream As Stream = request.GetRequestStream
    60. stream.WriteString(Encoding.UTF8, payload)
    61. 'Response
    62. Try
    63. Dim response As WebResponse = request.GetResponse
    64. Dim stream As Stream = response.GetResponseStream
    65. Dim reader As StreamReader = New StreamReader(stream)
    66. Dim responseObject As dynamic = JObject.Parse(reader.ReadToEnd)
    67. 'Fehler finden und evtl. Exception werfen
    68. If (responseObject.accessToken Is Nothing) Then
    69. If (responseObject.errorMessage Is Nothing) Then
    70. Throw New Exception("Response Empty")
    71. Else
    72. Throw New Exception(("Response Error: " + responseObject.errorMessage))
    73. End If
    74. ElseIf (responseObject.selectedProfile.id Is Nothing) Then
    75. Throw New Exception("Response Error: Payload missing UUID and/or Username")
    76. End If
    77. Dim accessToken As String = responseObject.accessToken
    78. Dim clientToken As String = responseObject.clientToken
    79. Dim id As String = responseObject.selectedProfile.id
    80. Dim name As String = responseObject.selectedProfile.name
    81. Return New SessionInfo(accessToken, clientToken, id, name)
    82. Catch e As WebException
    83. System.Windows.Forms.MessageBox.Show(e.Status.ToString)
    84. Return New SessionInfo(Nothing, Nothing, Nothing, Nothing)
    85. End Try
    86. End Function
    87. 'Extension
    88. Private Shared Sub WriteString(this ByVal stream As Stream, ByVal encoding As Encoding, ByVal string As String)
    89. Dim data As var = encoding.GetBytes(Of String)()
    90. stream.Write(data, 0, data.Length)
    91. End Sub
    92. End Class
    Jo und jetzt?
    Was erwartest du? Schalt dein Hirn ein und versuch die Probleme zu lösen.
    Wenn nicht, dann können wir gern einen Preis aushandeln und ich schreib dir das Teil. Alles andere: nö. Irgendwas hinklatschen nach dem Motto ich hab keinen Bock auf gar nichts funktioniert nicht. Muss ich dir leider ganz klar sagen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ok, und es macht ganz einfach zusammen zufassen:

    Option Strict On sorgt unter anderem dafür, dass ein Programm welches bspw. folgenden Quellcode enthält, nicht erst beim ausführen abbricht, sondern erst gar nicht ausgeführt werden kann:

    VB.NET-Quellcode

    1. Dim i As Integer = TextBox1.Text


    @kingsunil2000 Und kannst du uns sagen, warum so ein Programm nicht ausgeführt werden darf?

    Edit: Bevor Ich es vergesse, Ich kann dir folgendes ganz stark ans Herz legen: microsoft.com/germany/visualst…how.aspx?id=msdn_de_49057