Support 1.19-pre1, natives are now all loaded via the classpath.

This commit is contained in:
modmuss50
2022-05-18 18:27:11 +01:00
parent bab1aa8216
commit b8687c87ce
7 changed files with 68 additions and 15 deletions

View File

@@ -72,7 +72,6 @@ public final class CompileConfiguration {
configuration.extendsFrom(serverDeps.get());
configuration.setTransitive(false);
});
extension.createLazyConfiguration(Constants.Configurations.MINECRAFT_NATIVES, configuration -> configuration.setTransitive(false));
extension.createLazyConfiguration(Constants.Configurations.LOADER_DEPENDENCIES, configuration -> configuration.setTransitive(false));
extension.createLazyConfiguration(Constants.Configurations.MINECRAFT, configuration -> configuration.setTransitive(false));
extension.createLazyConfiguration(Constants.Configurations.INCLUDE, configuration -> configuration.setTransitive(false)); // Dont get transitive deps

View File

@@ -29,10 +29,13 @@ import java.util.regex.Pattern;
import org.gradle.api.Project;
import org.gradle.api.artifacts.ExternalModuleDependency;
import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.TaskProvider;
import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.LoomRepositoryPlugin;
import net.fabricmc.loom.configuration.providers.BundleMetadata;
import net.fabricmc.loom.task.ExtractNativesTask;
import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.OperatingSystem;
@@ -53,6 +56,18 @@ public class MinecraftLibraryProvider {
project.getLogger().warn("Loom is upgrading Minecraft's LWJGL version to {}", LWJGLVersionOverride.LWJGL_VERSION);
}
if (versionInfo.hasNativesToExtract()) {
final TaskContainer tasks = project.getTasks();
extension.createLazyConfiguration(Constants.Configurations.MINECRAFT_NATIVES, configuration -> configuration.setTransitive(false));
TaskProvider<ExtractNativesTask> extractNativesTask = tasks.register("extractNatives", ExtractNativesTask.class, t -> {
t.setDescription("Extracts the minecraft platform specific natives.");
});
tasks.named("configureClientLaunch", configureClientLaunch -> configureClientLaunch.dependsOn(extractNativesTask));
}
for (MinecraftVersionMeta.Library library : versionInfo.libraries()) {
if (overrideLWJGL && library.name().startsWith("org.lwjgl")) {
continue;

View File

@@ -56,6 +56,10 @@ public record MinecraftVersionMeta(
return this.releaseTime().compareTo(releaseTime) >= 0;
}
public boolean hasNativesToExtract() {
return libraries.stream().anyMatch(Library::hasNatives);
}
public record AssetIndex(String id, long totalSize, String path, String sha1, long size, String url) {
public String fabricId(String version) {
return id.equals(version) ? version : version + "-" + id;
@@ -64,17 +68,20 @@ public record MinecraftVersionMeta(
public record Library(Downloads downloads, String name, Map<String, String> natives, List<Rule> rules, Object extract) {
public boolean isValidForOS() {
if (rules == null || rules.isEmpty()) {
if (rules == null) {
// No rules allow everything.
return true;
}
for (Rule rule : rules) {
if (rule.appliesToOS() && !rule.isAllowed()) {
return false;
boolean valid = false;
for (Rule rule : this.rules) {
if (rule.appliesToOS()) {
valid = rule.isAllowed();
}
}
return true;
return valid;
}
public boolean hasNatives() {

View File

@@ -54,9 +54,6 @@ public final class LoomTasks {
RemapTaskConfiguration.setupRemap(project);
tasks.register("extractNatives", ExtractNativesTask.class, t -> {
t.setDescription("Extracts the minecraft platform specific natives.");
});
tasks.register("downloadAssets", DownloadAssetsTask.class, t -> {
t.setDescription("Downloads required assets for Fabric.");
});
@@ -80,7 +77,6 @@ public final class LoomTasks {
});
tasks.register("configureClientLaunch", task -> {
task.dependsOn(tasks.named("extractNatives"));
task.dependsOn(tasks.named("downloadAssets"));
task.dependsOn(tasks.named("configureLaunch"));

View File

@@ -47,8 +47,6 @@ import net.fabricmc.loom.util.gradle.SourceSetHelper;
public abstract class GenerateDLIConfigTask extends AbstractLoomTask {
@TaskAction
public void run() throws IOException {
final String nativesPath = getExtension().getFiles().getNativesDirectory(getProject()).getAbsolutePath();
final MinecraftVersionMeta versionInfo = getExtension().getMinecraftProvider().getVersionInfo();
File assetsDirectory = new File(getExtension().getFiles().getUserCache(), "assets");
@@ -62,14 +60,19 @@ public abstract class GenerateDLIConfigTask extends AbstractLoomTask {
.property("log4j.configurationFile", getAllLog4JConfigFiles())
.property("log4j2.formatMsgNoLookups", "true")
.property("client", "java.library.path", nativesPath)
.property("client", "org.lwjgl.librarypath", nativesPath)
.argument("client", "--assetIndex")
.argument("client", getExtension().getMinecraftProvider().getVersionInfo().assetIndex().fabricId(getExtension().getMinecraftProvider().minecraftVersion()))
.argument("client", "--assetsDir")
.argument("client", assetsDirectory.getAbsolutePath());
if (versionInfo.hasNativesToExtract()) {
String nativesPath = getExtension().getFiles().getNativesDirectory(getProject()).getAbsolutePath();
launchConfig
.property("client", "java.library.path", nativesPath)
.property("client", "org.lwjgl.librarypath", nativesPath);
}
if (getExtension().areEnvironmentSourceSetsSplit()) {
launchConfig.property("client", "fabric.gameJarPath.client", getGameJarPath("client"));
launchConfig.property("fabric.gameJarPath", getGameJarPath("common"));

View File

@@ -69,6 +69,9 @@ public class Constants {
public static final String MINECRAFT_SERVER_DEPENDENCIES = "minecraftServerLibraries";
public static final String MINECRAFT_DEPENDENCIES = "minecraftLibraries";
public static final String MINECRAFT_RUNTIME_DEPENDENCIES = "minecraftRuntimeOnlyLibraries";
/**
* Not used on Minecraft 1.19-pre1 or later. Natives are all loaded from the classpath.
*/
public static final String MINECRAFT_NATIVES = "minecraftNatives";
public static final String MAPPINGS = "mappings";
public static final String MAPPINGS_FINAL = "mappingsFinal";