2015-08-25 43 views
-4

我在生成和下载minecraft图书馆和本地人的Windows时遇到问题。Minecraft图书馆从文件json下载并启动

来自:

<package>:<name>:<version> 

到:

<package>/<name>/<version>/<name>-<version> 

请帮助!

JSON文件:

{ 
    "id": "1.8.8", 
    "time": "2015-07-27T12:31:28+02:00", 
    "releaseTime": "2015-07-27T12:31:28+02: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}", 
    "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.21" 
    }, 
    { 
     "name": "com.mojang:realms:1.7.28" 
    }, 
    { 
     "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", 
     "windows": "natives-windows", 
     "osx": "natives-osx" 
     }, 
     "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", 
     "windows": "natives-windows", 
     "osx": "natives-osx" 
     }, 
     "extract": { 
     "exclude": [ 
      "META-INF/" 
     ] 
     } 
    }, 
    { 
     "name": "net.java.jinput:jinput-platform:2.0.5", 
     "natives": { 
     "linux": "natives-linux", 
     "windows": "natives-windows", 
     "osx": "natives-osx" 
     }, 
     "extract": { 
     "exclude": [ 
      "META-INF/" 
     ] 
     } 
    }, 
    { 
     "name": "tv.twitch:twitch:6.5" 
    }, 
    { 
     "name": "tv.twitch:twitch-platform:6.5", 
     "rules": [ 
     { 
      "action": "allow" 
     }, 
     { 
      "action": "disallow", 
      "os": { 
      "name": "linux" 
      } 
     } 
     ], 
     "natives": { 
     "linux": "natives-linux", 
     "windows": "natives-windows-${arch}", 
     "osx": "natives-osx" 
     }, 
     "extract": { 
     "exclude": [ 
      "META-INF/" 
     ] 
     } 
    }, 
    { 
     "name": "tv.twitch:twitch-external-platform:4.5", 
     "rules": [ 
     { 
      "action": "allow", 
      "os": { 
      "name": "windows" 
      } 
     } 
     ], 
     "natives": { 
     "windows": "natives-windows-${arch}" 
     }, 
     "extract": { 
     "exclude": [ 
      "META-INF/" 
     ] 
     } 
    } 
    ], 
    "mainClass": "net.minecraft.client.main.Main", 
    "minimumLauncherVersion": 14, 
    "assets": "1.8" 
} 

例如:

oshi-project:oshi-core:1.1 

到:

oshi-project/oshi-core/1.1/oshi-core-1.1.jar 

和链接libraries.minecraft.net (JAR file)

从Mojang提供下载链接:

https://libraries.minecraft.net/<package>/<name>/<version>/<name>-<version>.jar 
+0

JSON序列化** **数据不只是看中字符串。如果你不能反序列化它,解析它:'Dim jData = JObject.Parse(jstr)'then Dim DimShiInfo = jData(“libraries”)(0)(“name”)。ToString.Replace(“:”c,“ /“c)'将项目提取并格式化为'oshi-project/oshi-core/1。1' – Plutonix

回答

0

阅读Plutonix's comment后,我又写代码应该更好地工作。 (我不知道JSON是序列化的数据)。

要运行下面的代码,您必须安装Json.NET framework for .NET(使用的NuGet软件包是更好的办法),并进口Newtonsoft.Json.LinqImports Newtonsoft.Json.Linq)。

Dim Libraries As New List(Of List(Of String)) 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    'The path of your json file. 
    Dim FilePath As String = "C:\Users\Drarig29\Desktop\File.json" 

    'Parses the your json file. 
    Dim FileData = JObject.Parse(My.Computer.FileSystem.ReadAllText(FilePath)) 

    For Each Library In FileData("libraries") 

     'The extracted library (<package>:<name>:<version>). 
     Dim ExtractedLibrary As String = CStr(Library("name")) 

     'The extracted under splitted by ":" form. 
     'LibrarySplitted(0) = <package> 
     'LibrarySplitted(1) = <name> 
     'LibrarySplitted(2) = <version> 
     Dim LibrarySplitted() As String = ExtractedLibrary.Split(CChar(":")) 

     Dim Package As String = LibrarySplitted(0) '<package> 
     Dim Name As String = LibrarySplitted(1) '<name> 
     Dim Version As String = LibrarySplitted(2) '<version> 

     'The string with the slashes (<package>/<name>/<version>/<name>-<version>). 
     Dim WithSlashes As String = CreateWithSlashesString(Package, Name, Version) 

     'The link (https://libraries.minecraft.net/<package>/<name>/<version>/<name>-<version>.jar). 
     Dim Link As String = CreateLink(Package, Name, Version) 

     Dim AllTheForms As New List(Of String) 
     AllTheForms.Add(ExtractedLibrary) 
     AllTheForms.Add(WithSlashes) 
     AllTheForms.Add(Link) 

     Libraries.Add(AllTheForms) 
    Next 
End Sub 

'Creates a string with slashes (<package>/<name>/<version>/<name>-<version>). 
Private Function CreateWithSlashesString(Package As String, Name As String, Version As String) As String 
    Return Package & "/" & Name & "/" & Version & "/" & Name & "-" & Version 
End Function 

'Creates a web link to the library. 
Private Function CreateLink(Package As String, Name As String, Version As String) As String 
    Return "https://libraries.minecraft.net/" & Package & "/" & Name & "/" & Version & "/" & Name & "-" & Version 
End Function 

一旦完成,就可以访问每个项目ExtractedLibraryWithSlashes,或Link)每个库的Libraries(<library's index>)(item's index)

例如,如果你想获得所有库链接,你可以这样做:

For Each Library In Libraries 
    'Library(0) corresponds to the name of the library. 
    'Library(1) corresponds to the "WithSlashes" string of the library. 
    MsgBox(Library(2)) 'Library(2) corresponds to the link of the library. 
Next 
0

下面的代码:

Dim Libraries As New List(Of List(Of String)) 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    'The path of your json file. 
    Dim FilePath As String = "C:\Users\Drarig29\Desktop\File.json" 

    'Gets all the json file content. 
    Dim FileContent As String = My.Computer.FileSystem.ReadAllText(FilePath) 

    'Gets only the libraries. 
    FileContent = FileContent.Substring(FileContent.IndexOf(" ""libraries"": [")) 

    Dim NextLineIsOsName As Boolean = False 

    For Each Line In ReadAllLines(FileContent) 
     If Line.Contains("""name"":") Then 
      If NextLineIsOsName Then 
       NextLineIsOsName = False 
      Else 
       'The extracted library (<package>:<name>:<version>). 
       Dim ExtractedLibrary As String = Line.Split({"""name"": """}, StringSplitOptions.RemoveEmptyEntries)(1).Replace("""", "").Replace(",", "") 

       'The extracted under splitted by ":" form. 
       'LibrarySplitted(0) = <package> 
       'LibrarySplitted(1) = <name> 
       'LibrarySplitted(2) = <version> 
       Dim LibrarySplitted() As String = ExtractedLibrary.Split(CChar(":")) 

       Dim Package As String = LibrarySplitted(0) '<package> 
       Dim Name As String = LibrarySplitted(1) '<name> 
       Dim Version As String = LibrarySplitted(2) '<version> 

       'The string with the slashes (<package>/<name>/<version>/<name>-<version>). 
       Dim WithSlashes As String = Package & "/" & Name & "/" & Version & "/" & Name & "-" & Version 

       'The link (https://libraries.minecraft.net/<package>/<name>/<version>/<name>-<version>.jar). 
       Dim Link As String = "https://libraries.minecraft.net/" & Package & "/" & Name & "/" & Version & "/" & Name & "-" & Version 

       Dim AllTheForms As New List(Of String) 
       AllTheForms.Add(ExtractedLibrary) 
       AllTheForms.Add(WithSlashes) 
       AllTheForms.Add(Link) 

       Libraries.Add(AllTheForms) 
      End If 
     ElseIf Line.Contains("""os"": {") Then 
      NextLineIsOsName = True 
     End If 
    Next 
End Sub 

Private Function ReadAllLines(value As String) As List(Of String) 
    If value Is Nothing Then 
     Return Nothing 
    End If 

    Dim lines As New List(Of String) 
    Using StringRdr As New StringReader(value) 
     While StringRdr.Peek() <> -1 
      Dim line As String = StringRdr.ReadLine 
      If Not String.IsNullOrWhiteSpace(line) Then 
       lines.Add(line) 
      End If 
     End While 
    End Using 

    Return lines 
End Function 

一旦完成,就可以访问每个项目ExtractedLibraryWithSlashes,或Link)每个库的Libraries(<library's index>)(item's index)

例如,如果你想获得所有库链接,你可以这样做:

For Each Library In Libraries 
    'Library(0) corresponds to the name of the library. 
    'Library(1) corresponds to the "WithSlashes" string of the library. 
    MsgBox(Library(2)) 'Library(2) corresponds to the link of the library. 
Next 
+0

我遇到了“filecontent = filecontent.substring ....”的问题 mscorlib.dll中出现未处理的类型为“System.ArgumentOutOfRangeException”的异常 –

+0

@MateuszBagiskiCzR它必须是您的json文件不像你在你的问题中写道... – Drarig29

+0

@MateuszBagiskiCzR System.ArgumentOutOfRangeException意味着'子串方法'中的一个整数超出了字符串长度。 – Drarig29