@@ -250,26 +250,28 @@ private List<String> getVmArgsFor(JSONObject object, JSONObject vanilla)
250250 private String getClassPath (JSONObject vanilla , JSONObject modLoader )
251251 {
252252 final List <String > cp = new ArrayList <>();
253+ final List <String > artifacts = new ArrayList <>();
253254
254255 if (modLoader != null )
255- this .appendLibraries (cp , modLoader );
256- this .appendLibraries (cp , vanilla );
256+ this .appendLibraries (cp , artifacts , modLoader );
257+ this .appendLibraries (cp , artifacts , vanilla );
257258
258259 cp .add (this .gameDir .resolve (this .clientJar ).toAbsolutePath ().toString ());
259260
260261 return this .toString (cp );
261262 }
262263
263- private void appendLibraries (List <String > sb , JSONObject object )
264+ private void appendLibraries (List <String > sb , List < String > artifacts , JSONObject object )
264265 {
265266 object .getJSONArray ("libraries" ).forEach (jsonElement -> {
266267 final JSONObject libraryObject = ((JSONObject )jsonElement );
267268 final Path path ;
269+ final String [] nameParts = libraryObject .getString ("name" ).split (":" );
270+ String internalArtifactName = nameParts [0 ] + ':' + nameParts [1 ];
271+ if (nameParts .length == 4 )
272+ internalArtifactName += ':' + nameParts [3 ];
268273 if (libraryObject .isNull ("downloads" ))
269- {
270- final String [] nameParts = libraryObject .getString ("name" ).split (":" );
271274 path = this .libraries .resolve (nameParts [0 ].replace ('.' , '/' )).resolve (nameParts [1 ]).resolve (nameParts [2 ]).resolve (nameParts [1 ] + "-" + nameParts [2 ] + ".jar" );
272- }
273275 else
274276 {
275277 final JSONObject downloads = libraryObject .getJSONObject ("downloads" );
@@ -279,8 +281,11 @@ private void appendLibraries(List<String> sb, JSONObject object)
279281 path = this .libraries .resolve (downloads .getJSONObject ("artifact" ).getString ("path" ));
280282 }
281283 final String str = path .toAbsolutePath () + File .pathSeparator ;
282- if (!sb .contains (str ) && Files .exists (path ))
284+ if (!sb .contains (str ) && Files .exists (path ) && !artifacts .contains (internalArtifactName ))
285+ {
283286 sb .add (str );
287+ artifacts .add (internalArtifactName );
288+ }
284289 });
285290 }
286291
0 commit comments