Buggy code:
public class ForgeDownloadProvider extends AbstractMinecraftDownloadProvider implements ExtendedDownloadProvider { private MinecraftDownloadProvider upstreamProvider ; public CombinedDownloadTask < ForgeVersionList > forgeVersionList ( ) { } @ Override public CombinedDownloadTask < String > gameVersionJson ( final MinecraftDirectory mcdir , final String version ) { } @ Override public CombinedDownloadTask < Void > library ( MinecraftDirectory mcdir , final Library library ) { } @ Override public CombinedDownloadTask < Void > gameJar ( final MinecraftDirectory mcdir , final Version version ) { <START_BUG> ResolvedForgeVersion forgeVersion = ResolvedForgeVersion . resolve ( version . getVersion ( ) ) ; <END_BUG> if ( forgeVersion == null ) { return null ; } final String mcversion = forgeVersion . getMinecraftVersion ( ) ; return new CombinedDownloadTask < Void > ( ) { @ Override public void execute ( final CombinedDownloadContext < Void > context ) throws Exception { context . submit ( upstreamProvider . gameVersionJson ( mcdir , mcversion ) , new org . to2mbn . jmccc . mcdownloader . download . combine . AbstractCombinedDownloadCallback < String > ( ) { @ Override public void done ( final String resolvedMcversion ) { try { context . submit ( new Callable < Void > ( ) { @ Override public Void call ( ) throws Exception { Version superversion = Versions . resolveVersion ( mcdir , resolvedMcversion ) ; context . submit ( upstreamProvider . gameJar ( mcdir , superversion ) . andThen ( new org . to2mbn . jmccc . mcdownloader . download . ResultProcessor < Void , Void > ( ) { @ Override public Void process ( Void arg ) throws Exception { File target = mcdir . getVersionJar ( version . getRoot ( ) ) ; FileUtils . prepareWrite ( target ) ; try ( ZipInputStream in = new ZipInputStream ( new FileInputStream ( mcdir . getVersionJar ( resolvedMcversion ) ) ) ; ZipOutputStream out = new ZipOutputStream ( new FileOutputStream ( target ) ) ) { ZipEntry entry ; byte [ ] buf = new byte [ 8192 ] ; int read ; while ( ( entry = in . getNextEntry ( ) ) != null ) { if ( ! ( entry . getName ( ) . startsWith ( "META-INF//" ) ) ) { out . putNextEntry ( entry ) ; while ( ( read = in . read ( buf ) ) != ( - 1 ) ) { out . write ( buf , 0 , read ) ; } out . closeEntry ( ) ; } in . closeEntry ( ) ; } } return null ; } } ) , new org . to2mbn . jmccc . mcdownloader . download . combine . AbstractCombinedDownloadCallback < Void > ( ) { @ Override public void done ( Void result ) { context . done ( null ) ; } } , true ) ; return null ; } } , null , true ) ; } catch ( InterruptedException e ) { Thread . currentThread ( ) . interrupt ( ) ; } } } , true ) ; } } ; } @ Override public void setUpstreamProvider ( MinecraftDownloadProvider upstreamProvider ) { } private CombinedDownloadTask < byte [ ] > installerTask ( ResolvedForgeVersion version ) { } private CombinedDownloadTask < Void > universalTask ( ResolvedForgeVersion version , File target ) { } private CombinedDownloadTask < Void > universalFromInstaller ( ResolvedForgeVersion version , File target ) { } protected String forgeVersionListUrl ( ) { } protected String [ ] forgeInstallerUrls ( ResolvedForgeVersion version ) { } protected String [ ] forgeUniversalUrls ( ResolvedForgeVersion version ) { } protected boolean decompressUniversalFromInstaller ( ) { } }

Fix:
ResolvedForgeVersion forgeVersion = ResolvedForgeVersion . resolve ( version . getRoot ( ) ) ;