-
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use NFRT to get more robust asset downloading.
- Loading branch information
Showing
7 changed files
with
81 additions
and
112 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 0 additions & 21 deletions
21
buildSrc/src/main/groovy/net/minecraftforge/mcpconfig/tasks/CreateAssetsDataJson.groovy
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
106 changes: 45 additions & 61 deletions
106
buildSrc/src/main/groovy/net/minecraftforge/mcpconfig/tasks/DownloadAssets.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,70 +1,54 @@ | ||
package net.minecraftforge.mcpconfig.tasks | ||
|
||
import org.gradle.api.* | ||
import org.gradle.api.file.* | ||
import org.gradle.api.tasks.* | ||
import de.undercouch.gradle.tasks.download.* | ||
import org.gradle.api.DefaultTask | ||
import org.gradle.api.file.ConfigurableFileCollection | ||
import org.gradle.api.file.RegularFileProperty | ||
import org.gradle.api.provider.Property | ||
import org.gradle.api.tasks.Input | ||
import org.gradle.api.tasks.InputFiles | ||
import org.gradle.api.tasks.OutputFile | ||
import org.gradle.api.tasks.TaskAction | ||
import org.gradle.process.ExecOperations | ||
import org.gradle.work.DisableCachingByDefault | ||
|
||
public abstract class DownloadAssets extends DefaultTask { | ||
@InputFile abstract RegularFileProperty getJson() | ||
@OutputDirectory abstract RegularFileProperty getDest() | ||
@Internal DownloadAction indexAction | ||
@Internal DownloadAction assetAction | ||
import javax.inject.Inject | ||
|
||
DownloadAssets() { | ||
indexAction = new DownloadAction(project, this) | ||
indexAction.onlyIfModified(true) | ||
indexAction.useETag('all') | ||
assetAction = new DownloadAction(project, this) | ||
assetAction.overwrite(false) | ||
assetAction.useETag('all') | ||
} | ||
|
||
@TaskAction | ||
def exec() { | ||
Utils.init() | ||
|
||
def dl = json.get().getAsFile().json.assetIndex | ||
def index = new File(dest.get().getAsFile(), 'indexes/' + dl.id + '.json') | ||
if (index.sha1 != dl.sha1) { | ||
indexAction.src dl.url | ||
indexAction.dest index | ||
indexAction.execute().join() | ||
} | ||
|
||
def assets = [] as Set // Some assets are copies of other assets | ||
@DisableCachingByDefault(because = "has its own caching") | ||
abstract class DownloadAssets extends DefaultTask { | ||
/** | ||
* Writes a JSON file detailing the path to the asset index and asset root. | ||
*/ | ||
@OutputFile | ||
abstract RegularFileProperty getAssetJson() | ||
|
||
assetAction.dest(new File(dest.get().getAsFile(), 'objects')) | ||
index.json.objects.each { asset -> | ||
def key = asset.value.hash.take(2) + '/' + asset.value.hash | ||
def target = new File(dest.get().getAsFile(), 'objects/' + key) | ||
if (!target.exists() && assets.add(asset.value.hash)) { | ||
assetAction.src('https://resources.download.minecraft.net/' + key) | ||
} | ||
} | ||
/** | ||
* Points to the single executable jar for | ||
* https://projects.neoforged.net/neoforged/neoformruntime | ||
*/ | ||
@InputFiles | ||
abstract ConfigurableFileCollection getNfrt(); | ||
|
||
if (assets.size() > 1) { | ||
assetAction.eachFile(new Action<DownloadDetails>() { | ||
@Override | ||
public void execute(DownloadDetails details) { | ||
details.relativePath = new RelativePath(false, details.sourceURL.toString().replace('https://resources.download.minecraft.net/', '')) | ||
} | ||
}) | ||
} else if (assets.size() == 1) { | ||
assetAction.dest(new File(dest.get().getAsFile(), 'objects/' + assets[0].take(2) + '/' + assets[0])) | ||
} | ||
/** | ||
* The Minecraft version matching the NeoForge version to install. | ||
*/ | ||
@Input | ||
abstract Property<String> getMinecraftVersion(); | ||
|
||
if (!assets.isEmpty()) { | ||
assetAction.execute() | ||
} | ||
} | ||
@Inject | ||
abstract ExecOperations getExecOperations(); | ||
|
||
def download(def url, def target) { | ||
def ret = new DownloadAction(project, this) | ||
ret.overwrite(false) | ||
ret.useETag('all') | ||
ret.src url | ||
ret.dest target | ||
ret.execute() | ||
@TaskAction | ||
def exec() { | ||
// Download Minecraft Assets and write asset index and location to JSON file to read back for starting the game | ||
execOperations.javaexec(spec -> { | ||
spec.classpath(getNfrt().getSingleFile()); | ||
spec.args( | ||
"download-assets", | ||
"--minecraft-version", | ||
minecraftVersion.get(), | ||
"--write-json", | ||
assetJson.get().asFile.getAbsolutePath() | ||
); | ||
}); | ||
} | ||
} | ||
} |