繁体   English   中英

VB.Net自定义Minecraft启动器

[英]VB.Net Custom Minecraft Launcher

我想在VB.Net中为我和我的朋友创建自己的Minecraft Launcher。 我有此代码,该代码为我提供了访问令牌。

Private ACCESS_TOKEN As String
Public Function GetAccessToken() As String
    Return ACCESS_TOKEN
End Function
Public Sub ObtainAccessToken()
    Dim username As String = TextBox1.Text
    Dim password As String = TextBox2.Text
    Dim UUID As String = Guid.NewGuid.ToString()
    Dim httpWebRequest = DirectCast(WebRequest.Create("https://authserver.mojang.com/authenticate"), HttpWebRequest)
    httpWebRequest.ContentType = "application/json"
    httpWebRequest.Method = "POST"

    Using streamWriter = New StreamWriter(httpWebRequest.GetRequestStream())
        Dim json As String = (Convert.ToString((Convert.ToString("{""agent"":{""name"":""Minecraft"",""version"":1},""username"":""") & username) + """,""password"":""") & password) + """,""clientToken"":" & ControlChars.Quote & UUID & ControlChars.Quote & "}"

        streamWriter.Write(json)
        streamWriter.Flush()
        streamWriter.Close()

        Dim httpResponse = DirectCast(httpWebRequest.GetResponse(), HttpWebResponse)
        Using streamReader = New StreamReader(httpResponse.GetResponseStream())
            Dim result = streamReader.ReadToEnd()
            ACCESS_TOKEN = result
        End Using
    End Using
End Sub

但是该访问令牌怎么办? 如何直接使用Java参数启动minecraft? 我要启动minecraft.jar文件。

在.minecraft文件夹中,所有参数都在version.json中

这是版本1.8.8(.minecraft / versons / 1.8.8)中json的片段

"id": "1.8.8",
"time": "2016-06-01T07:45:48-04:00",
"releaseTime": "2015-07-27T06:31:28-04: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} --userProperties ${user_properties} --userType ${user_type}"

args位于“ minecraftArguments”下,而jar文件位于名为1.8.8.jar的同一目录中。

这些是我编程的开始:)我现在开始用Visual Basic做C ++。 这适用于任何想知道如何制作Minecraft Launcher的人。

首先,您必须下载“游戏文件”,所有内容都在这里进行了详细记录。 然后,您可以开始考虑如何开始游戏。

您将需要访问和客户端令牌,我对代码进行了一些改进:

Imports System.IO
Imports System.Net
Imports System.Web.Script.Serialization ' Add Reference System.Web.Extensions

Module Program

    Public Function Authenticate(ByRef username As String, ByRef password As String) As String

        Dim UUID As String = Guid.NewGuid.ToString()
        Dim Request As HttpWebRequest = DirectCast(WebRequest.Create("https://authserver.mojang.com/authenticate"), HttpWebRequest)
        Request.ContentType = "application/json"
        Request.Method = "POST"

        Using Writer = New StreamWriter(Request.GetRequestStream())

            Dim Json As String = ("{ 'agent': {'name': 'Minecraft', 'version': 1}, 'username': '" + username + "', 'password': '" + password + "', 'clientToken': '" + UUID + "', 'requestUser': true }").Replace("'", Chr(34))

            Writer.Write(Json)
            Writer.Flush()
            Writer.Close()

            Dim Response = DirectCast(Request.GetResponse(), HttpWebResponse)
            Using Reader = New StreamReader(Response.GetResponseStream())
                Return Reader.ReadToEnd()
            End Using

        End Using

    End Function

    Sub Main()

        Dim Response As String = Authenticate("username", "password")
        Dim Serializer As JavaScriptSerializer = New JavaScriptSerializer()

        Dim Dictionary As Dictionary(Of String, Object) = Serializer.Deserialize(Of Dictionary(Of String, Object))(Response)

        Dim AccessToken As String = Dictionary("accessToken")
        Dim ClientToken As String = Dictionary("clientToken")

        Console.WriteLine(AccessToken)
        Console.WriteLine(ClientToken)
        Console.Read()

    End Sub

End Module

在此代码中,您将HTTP POST请求发送到mojang身份验证服务器,然后使用JavaScriptSerializer将响应解析为json。 访问令牌和客户端令牌存储在AccessTokenClientToken变量中。 Mojang身份验证在此处记录 然后,我建议您从System.Diagnostics创建Process并像这样启动它:

Public Sub LaunchMinecraft(ByRef AccessToken As String, ByRef ClientToken As String)

    Dim Xmx As String = "4G"
    Dim Xms As String = "2G"
    Dim Title As String = "My Minecraft Instance"
    Dim Version As String = "1.7.10"
    Dim AssetIndex As String = "..." ' AssetIndex obtained from mojang server
    Dim Username As String = "..." ' Minecraft username obtained from mojang server
    Dim Libraries As String = "..." ' Paths to all libraries separated by ;

    Dim JavaProcess As Process = New Process()
    JavaProcess.StartInfo.UseShellExecute = False
    JavaProcess.StartInfo.CreateNoWindow = False
    JavaProcess.StartInfo.FileName = "..." ' Path to javaw.exe or java.exe
    JavaProcess.StartInfo.Arguments = "-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump" +
                            " -Xmx" + Xmx +
                            " -Xms" + Xms +
                            " -Djava.library.path=.//bin/natives" +
                            " -Dminecraft.client.jar=.//bin/modpack.jar" +
                            " -Dminecraft.applet.TargetDirectory=.//" +
                            " -cp .//bin/modpack.jar;" + Libraries + ";.//bin/minecraft.jar" +
                            " -XX:+UnlockExperimentalVMOptions" +
                            " -XX:+UseG1GC -XX:G1NewSizePercent=20" +
                            " -XX:G1ReservePercent=20" +
                            " -XX:MaxGCPauseMillis=50" +
                            " -XX:G1HeapRegionSize=16M" +
                            " net.minecraft.launchwrapper.Launch" +
                            " --gameDir .//" +
                            " --username " + Username +
                            " --assetsDir ..//..//..//cache/assets" +
                            " --assetIndex " + AssetIndex +
                            " --version " + Version +
                            " --uuid " + ClientToken +
                            " --accessToken " + AccessToken +
                            " --userProperties {}" +
                            " --userType mojang" +
                            " --tweakClass cpw.mods.fml.common.launcher.FMLTweaker" +
                            " --title " + Title
    JavaProcess.Start()

End Sub

该代码未经测试,并且具有相对路径。 这只是一个例子。 请注意,这是用于改装的《我的世界》。 希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM