1212import java .time .Instant ;
1313import java .util .ArrayList ;
1414import java .util .Arrays ;
15+ import java .util .HashMap ;
1516import java .util .List ;
17+ import java .util .Map ;
1618import java .util .stream .Collectors ;
1719
1820import org .json .JSONArray ;
@@ -58,22 +60,33 @@ public void generate() throws IOException {
5860 }
5961 if (generateManifest ) {
6062 generateManifest (false );
63+ generateManifest (true );
6164 }
6265 }
6366
6467 public void update () throws IOException {
68+ Map <String , String > versionServers = new HashMap <>();
69+ JSONArray versionsIndex = parseJSONArray (ClassLoader .getSystemResourceAsStream ("versions.json" ));
70+ for (int i = 0 ; i < versionsIndex .length (); i ++) {
71+ JSONObject ver = versionsIndex .getJSONObject (i );
72+ if (ver .has ("urlServer" )) {
73+ versionServers .put (ver .getString ("id" ), ver .getString ("urlServer" ));
74+ }
75+ }
76+ JSONObject preset = getPresetJSON ();
77+ JSONArray libraries = getPresetLibraries (preset );
78+ JSONArray librariesNoSoundLib = removePaulscode (libraries );
6579 for (Path p : collectJSONs (basePath )) {
6680 try {
6781 JSONObject json = parseJSON (p );
68- JSONObject preset = getPresetJSON ();
69- JSONArray libraries = getPresetLibraries (preset );
70- JSONArray librariesNoSoundLib = removePaulscode (libraries );
7182 boolean updated = false ;
72- if (json .getString ("assets" ).equals ("empty" )) {
83+ Instant time = getTime (json .getString ("releaseTime" ));
84+ String id = json .getString ("id" );
85+ if (!hasAssetIndex (time , id )) {
7386 json .put ("assetIndex" , preset .getJSONObject ("assetIndex" ));
87+ json .put ("assets" , preset .getString ("assets" ));
7488 }
7589 JSONArray verLibs = json .getJSONArray ("libraries" );
76- Instant time = getTime (json .getString ("releaseTime" ));
7790 if (time .compareTo (PAULSCODE_TIME ) > 0 ) {
7891 for (int i2 = 0 ; i2 < libraries .length (); i2 ++) {
7992 updated |= replaceLibrary (verLibs , libraries .getJSONObject (i2 ));
@@ -85,7 +98,7 @@ public void update() throws IOException {
8598 }
8699 String args = json .getString ("minecraftArguments" );
87100 Instant releaseTimeInstant = getTime (json .getString ("releaseTime" ));
88- int port = getPort (releaseTimeInstant );
101+ int port = getPort (releaseTimeInstant , id );
89102 if (port != -1 ) {
90103 if (args .contains ("--resourcesProxyPort" )) {
91104 String old = args ;
@@ -96,7 +109,6 @@ public void update() throws IOException {
96109 updated = true ;
97110 }
98111 }
99- String id = json .getString ("id" );
100112 String skin = getSkin (releaseTimeInstant , id );
101113 if (skin != null ) {
102114 if (args .contains ("--skinProxy" )) {
@@ -108,6 +120,11 @@ public void update() throws IOException {
108120 updated = true ;
109121 }
110122 }
123+ JSONObject dls = json .getJSONObject ("downloads" );
124+ if (!dls .has ("server" ) && versionServers .containsKey (id )) {
125+ updated = true ;
126+ dls .put ("server" , getLibraryArtifact (versionServers .get (id )));
127+ }
111128 json .put ("minecraftArguments" , args );
112129 if (updated ) {
113130 System .out .println ("Modified version: " + id );
@@ -165,92 +182,97 @@ public void generateJSONs() throws IOException {
165182 Files .createDirectories (basePath );
166183 List <String > savedJSONs = new ArrayList <>();
167184 if (!skipManifest ) {
168- JSONArray versions = manifest .getJSONArray ("versions" );
169- for (int i = 0 ; i < versions .length (); i ++) {
170- JSONObject ver = versions .getJSONObject (i );
171- URL versionUrl = new URL (ver .getString ("url" ));
172- String id = ver .getString ("id" );
173- if (savedJSONs .contains (id )) {
174- continue ;
175- }
176- System .out .println (id );
177- JSONObject version = parseJSON (versionUrl .openStream ());
178- if (!version .has ("minecraftArguments" )) {
179- continue ;
180- }
181- JSONArray verLibs = version .getJSONArray ("libraries" );
182- boolean hasWrapper = false ;
183- for (int i2 = 0 ; i2 < verLibs .length (); i2 ++) {
184- String [] lib = verLibs .getJSONObject (i2 ).getString ("name" ).split (":" );
185- if (lib [0 ].equals ("net.minecraft" ) && lib [1 ].equals ("launchwrapper" )) {
186- hasWrapper = true ;
185+ try {
186+ JSONArray versions = manifest .getJSONArray ("versions" );
187+ for (int i = 0 ; i < versions .length (); i ++) {
188+ JSONObject ver = versions .getJSONObject (i );
189+ URL versionUrl = new URL (ver .getString ("url" ));
190+ String id = ver .getString ("id" );
191+ if (savedJSONs .contains (id )) {
192+ continue ;
187193 }
188- }
189- if (hasWrapper ) {
190- removeLibrary (verLibs , "org.ow2.asm" , "asm-all" );
191- removeLibrary (verLibs , "net.sf.jopt-simple" , "jopt-simple" );
192- removeLibrary (verLibs , "net.minecraft" , "launchwrapper" );
193- }
194- Instant time = getTime (version .getString ("releaseTime" ));
195- if (time .compareTo (PAULSCODE_TIME ) > 0 ) {
196- for (int i2 = 0 ; i2 < libraries .length (); i2 ++) {
197- replaceLibrary (verLibs , libraries .getJSONObject (i2 ));
194+ System .out .println (id );
195+ JSONObject version = parseJSON (versionUrl .openStream ());
196+ if (!version .has ("minecraftArguments" )) {
197+ continue ;
198198 }
199- } else {
200- for (int i2 = 0 ; i2 < librariesNoSoundLib .length (); i2 ++) {
201- replaceLibrary (verLibs , librariesNoSoundLib .getJSONObject (i2 ));
199+ JSONArray verLibs = version .getJSONArray ("libraries" );
200+ boolean hasWrapper = false ;
201+ for (int i2 = 0 ; i2 < verLibs .length (); i2 ++) {
202+ String [] lib = verLibs .getJSONObject (i2 ).getString ("name" ).split (":" );
203+ if (lib [0 ].equals ("net.minecraft" ) && lib [1 ].equals ("launchwrapper" )) {
204+ hasWrapper = true ;
205+ }
202206 }
203- }
204- if (id .equals ("1.7.6-pre1" ) || id .equals ("1.7.6-pre2" ) || id .equals ("1.7.7" )) {
205- replaceLibrary (verLibs , authLib156 );
206- }
207- boolean keepAssetsIndex = time .compareTo (ASSETINDEX_TIME ) > 0 ;
208- if (keepAssetsIndex ) {
209- if (version .getString ("assets" ).equals ("pre-1.6" )) {
210- version .put ("assets" , "legacy" );
211- version .put ("assetIndex" , legacyAssetIndex );
207+ if (hasWrapper ) {
208+ removeLibrary (verLibs , "org.ow2.asm" , "asm-all" );
209+ removeLibrary (verLibs , "net.sf.jopt-simple" , "jopt-simple" );
210+ removeLibrary (verLibs , "net.minecraft" , "launchwrapper" );
212211 }
213- }
214- for (String key : preset .keySet ()) {
212+ Instant time = getTime (version .getString ("releaseTime" ));
213+ if (time .compareTo (PAULSCODE_TIME ) > 0 ) {
214+ for (int i2 = 0 ; i2 < libraries .length (); i2 ++) {
215+ replaceLibrary (verLibs , libraries .getJSONObject (i2 ));
216+ }
217+ } else {
218+ for (int i2 = 0 ; i2 < librariesNoSoundLib .length (); i2 ++) {
219+ replaceLibrary (verLibs , librariesNoSoundLib .getJSONObject (i2 ));
220+ }
221+ }
222+ if (id .equals ("1.7.6-pre1" ) || id .equals ("1.7.6-pre2" ) || id .equals ("1.7.7" )) {
223+ replaceLibrary (verLibs , authLib156 );
224+ }
225+ boolean keepAssetsIndex = hasAssetIndex (time , id );
215226 if (keepAssetsIndex ) {
216- if (key .equals ("assets" ) || key .equals ("assetIndex" )) {
227+ if (version .getString ("assets" ).equals ("pre-1.6" )) {
228+ version .put ("assets" , "legacy" );
229+ version .put ("assetIndex" , legacyAssetIndex );
230+ }
231+ }
232+ for (String key : preset .keySet ()) {
233+ if (keepAssetsIndex ) {
234+ if (key .equals ("assets" ) || key .equals ("assetIndex" )) {
235+ continue ;
236+ }
237+ }
238+ if (key .equals ("libraries" )) {
217239 continue ;
218240 }
241+ version .put (key , preset .get (key ));
219242 }
220- if (key .equals ("libraries" )) {
221- continue ;
243+ String args = version .getString ("minecraftArguments" );
244+ args = args .replace ("${auth_player_name} ${auth_session}" , "--username ${auth_player_name} --session ${auth_session}" );
245+ List <String > argsList = Arrays .asList (version .getString ("minecraftArguments" ).split (" " ));
246+ if (!argsList .contains ("--gameDir" )) {
247+ args += " --gameDir ${game_directory}" ;
248+ }
249+ if (!argsList .contains ("--assetsDir" )) {
250+ args += " --assetsDir ${game_assets}" ;
251+ }
252+ int port = getPort (time , id );
253+ if (port != -1 ) {
254+ args += " --resourcesProxyPort " + port ;
255+ }
256+ String skin = getSkin (time , id );
257+ if (skin != null ) {
258+ args += " --skinProxy " + skin ;
259+ }
260+ version .put ("time" , getTimeString (startTime ));
261+ version .put ("minecraftArguments" , args );
262+ Path jsonOut = basePath .resolve (id + ".json" );
263+ try (BufferedWriter writer = Files .newBufferedWriter (jsonOut )) {
264+ version .write (writer );
265+ }
266+ if (packToFolders ) {
267+ Path outPath = Files .createDirectory (basePath .resolve (id )).resolve (id + ".json" );
268+ Files .deleteIfExists (outPath );
269+ Files .copy (jsonOut , outPath );
222270 }
223- version .put (key , preset .get (key ));
224- }
225- String args = version .getString ("minecraftArguments" );
226- args = args .replace ("${auth_player_name} ${auth_session}" , "--username ${auth_player_name} --session ${auth_session}" );
227- List <String > argsList = Arrays .asList (version .getString ("minecraftArguments" ).split (" " ));
228- if (!argsList .contains ("--gameDir" )) {
229- args += " --gameDir ${game_directory}" ;
230- }
231- if (!argsList .contains ("--assetsDir" )) {
232- args += " --assetsDir ${game_assets}" ;
233- }
234- int port = getPort (time );
235- if (port != -1 ) {
236- args += " --resourcesProxyPort " + port ;
237- }
238- String skin = getSkin (time , id );
239- if (skin != null ) {
240- args += " --skinProxy " + skin ;
241- }
242- version .put ("time" , getTimeString (startTime ));
243- version .put ("minecraftArguments" , args );
244- Path jsonOut = basePath .resolve (id + ".json" );
245- try (BufferedWriter writer = Files .newBufferedWriter (jsonOut )) {
246- version .write (writer );
247- }
248- if (packToFolders ) {
249- Path outPath = Files .createDirectory (basePath .resolve (id )).resolve (id + ".json" );
250- Files .deleteIfExists (outPath );
251- Files .copy (jsonOut , outPath );
252271 }
253272 }
273+ catch (IOException e ) {
274+ e .printStackTrace ();
275+ }
254276 }
255277 }
256278
@@ -291,6 +313,10 @@ public void generateManifest(boolean v2) throws IOException {
291313 version .put ("time" , json .getString ("time" ));
292314 version .put ("type" , type );
293315 version .put ("url" , "https://mcphackers.github.io/BetterJSONs/jsons/" + id + ".json" );
316+ if (v2 ) {
317+ version .put ("sha1" , Util .getSHA1 (Files .newInputStream (p )));
318+ version .put ("complianceLevel" , 0 );
319+ }
294320 versionsList .add (version );
295321 if (type .equals ("release" )) {
296322 Instant time = getTime (releaseTime );
@@ -315,7 +341,7 @@ public void generateManifest(boolean v2) throws IOException {
315341 versions .putAll (versionsList );
316342 latest .put ("release" , latestRelease );
317343 latest .put ("snapshot" , latestSnapshot );
318- try (BufferedWriter writer = Files .newBufferedWriter (basePath .getParent ().resolve ("version_manifest.json" ))) {
344+ try (BufferedWriter writer = Files .newBufferedWriter (basePath .getParent ().resolve (v2 ? "version_manifest_v2.json" : "version_manifest.json" ))) {
319345 manifest .write (writer );
320346 }
321347 }
@@ -378,7 +404,7 @@ else if(id.charAt(2) == 'w' || id.equals("1.2")) {
378404 version .put (key , preset .get (key ));
379405 }
380406 String args = "--username ${auth_player_name} --sessionid ${auth_session} --gameDir ${game_directory} --assetsDir ${game_assets}" ;
381- int port = getPort (releaseTimeInstant );
407+ int port = getPort (releaseTimeInstant , id );
382408 if (port != -1 ) {
383409 args += " --resourcesProxyPort " + port ;
384410 }
0 commit comments