diff --git a/buildSrc/src/main/java/net/neoforged/neodev/NeoDevConfigurations.java b/buildSrc/src/main/java/net/neoforged/neodev/NeoDevConfigurations.java index 35eb5b570d..17018d54c8 100644 --- a/buildSrc/src/main/java/net/neoforged/neodev/NeoDevConfigurations.java +++ b/buildSrc/src/main/java/net/neoforged/neodev/NeoDevConfigurations.java @@ -138,7 +138,7 @@ private NeoDevConfigurations(Project project) { // Libraries & module libraries & MC dependencies need to be available when compiling in NeoDev, // and on the runtime classpath too for IDE debugging support. - configurations.getByName("implementation").extendsFrom(libraries, moduleLibraries, neoFormDependencies); + configurations.getByName("api").extendsFrom(libraries, moduleLibraries, neoFormDependencies); // runtimeClasspath is our reference for all MC dependency versions. // Make sure that any classpath we resolve is consistent with it. diff --git a/patches/net/minecraft/world/entity/LivingEntity.java.patch b/patches/net/minecraft/world/entity/LivingEntity.java.patch index fd43d4c7b7..7c6604f0a9 100644 --- a/patches/net/minecraft/world/entity/LivingEntity.java.patch +++ b/patches/net/minecraft/world/entity/LivingEntity.java.patch @@ -492,6 +492,18 @@ } protected float getWaterSlowDown() { +@@ -2193,8 +_,9 @@ + public void travel(Vec3 p_21280_) { + if (this.isControlledByLocalInstance()) { + FluidState fluidstate = this.level().getFluidState(this.blockPosition()); +- if ((this.isInWater() || this.isInLava()) && this.isAffectedByFluids() && !this.canStandOnFluid(fluidstate)) { +- this.travelInFluid(p_21280_); ++ // Neo: Call (patched-in overload of) #travelInFluid for custom fluid types ++ if ((this.isInWater() || this.isInLava() || this.isInFluidType(fluidstate)) && this.isAffectedByFluids() && !this.canStandOnFluid(fluidstate)) { ++ this.travelInFluid(p_21280_, fluidstate); + } else if (this.isFallFlying()) { + this.travelFallFlying(); + } else { @@ -2205,7 +_,7 @@ private void travelInAir(Vec3 p_362457_) { diff --git a/projects/neoforge/build.gradle b/projects/neoforge/build.gradle index c7124d2725..79395f6d7f 100644 --- a/projects/neoforge/build.gradle +++ b/projects/neoforge/build.gradle @@ -265,6 +265,12 @@ javaComponent.withVariantsFromConfiguration(configurations.runtimeElements) { // Resolvable configurations only configurations { + runtimeElements { + attributes { + // Add an attribute to disambiguate with the universalJar + attribute(Attribute.of("net.neoforged.neoforge.includes-minecraft", Boolean), true) + } + } modDevBundle { canBeDeclared = false canBeResolved = false @@ -313,7 +319,7 @@ configurations { attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.LIBRARY)) attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.JAVA_RUNTIME)) attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling, Bundling.EXTERNAL)) - attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, JavaVersion.current().majorVersion.toInteger()) + attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, java_version as Integer) attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, LibraryElements.JAR)) } // Publish it diff --git a/src/main/java/net/neoforged/neoforge/data/event/GatherDataEvent.java b/src/main/java/net/neoforged/neoforge/data/event/GatherDataEvent.java index 97c3cb908e..e8e796fba7 100644 --- a/src/main/java/net/neoforged/neoforge/data/event/GatherDataEvent.java +++ b/src/main/java/net/neoforged/neoforge/data/event/GatherDataEvent.java @@ -15,9 +15,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; +import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; @@ -26,11 +28,13 @@ import net.minecraft.client.resources.ClientPackSource; import net.minecraft.client.resources.IndexedAssetSource; import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistrySetBuilder; import net.minecraft.data.DataGenerator; import net.minecraft.data.DataProvider; import net.minecraft.data.PackOutput; import net.minecraft.data.tags.TagsProvider; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; import net.minecraft.server.packs.PackLocationInfo; import net.minecraft.server.packs.PackResources; import net.minecraft.server.packs.PackType; @@ -46,7 +50,10 @@ import net.neoforged.fml.ModList; import net.neoforged.fml.event.IModBusEvent; import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.common.conditions.ICondition; +import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider; import net.neoforged.neoforge.resource.ResourcePackLoader; +import org.apache.commons.lang3.function.Consumers; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -55,6 +62,9 @@ public abstract class GatherDataEvent extends Event implements IModBusEvent { private final DataGeneratorConfig config; private final ModContainer modContainer; + @Nullable + private CompletableFuture registriesWithModdedEntries = null; + public GatherDataEvent(final ModContainer mc, final DataGenerator dataGenerator, final DataGeneratorConfig dataGeneratorConfig) { this.modContainer = mc; this.dataGenerator = dataGenerator; @@ -81,7 +91,7 @@ public DataGenerator getGenerator() { } public CompletableFuture getLookupProvider() { - return this.config.lookupProvider; + return Objects.requireNonNullElse(this.registriesWithModdedEntries, this.config.lookupProvider); } public boolean includeDev() { @@ -216,7 +226,7 @@ public T createProvider(DataProviderFromOutput build } public T createProvider(DataProviderFromOutputLookup builder) { - return addProvider(builder.create(dataGenerator.getPackOutput(), config.lookupProvider)); + return addProvider(builder.create(dataGenerator.getPackOutput(), this.getLookupProvider())); } public void createBlockAndItemTags(DataProviderFromOutputLookup> blockTagsProvider, ItemTagsProvider itemTagsProvider) { @@ -224,6 +234,32 @@ public void createBlockAndItemTags(DataProviderFromOutputLookup modIds) { + this.createDatapackRegistryObjects(datapackEntriesBuilder, Consumers.nop(), modIds); + } + + public void createDatapackRegistryObjects(RegistrySetBuilder datapackEntriesBuilder, Map, List> conditions) { + this.createDatapackRegistryObjects(datapackEntriesBuilder, conditions, Set.of(this.modContainer.getModId())); + } + + public void createDatapackRegistryObjects(RegistrySetBuilder datapackEntriesBuilder, Map, List> conditions, Set modIds) { + var registries = this.createProvider((output, lookupProvider) -> new DatapackBuiltinEntriesProvider(output, lookupProvider, datapackEntriesBuilder, conditions, modIds)); + this.registriesWithModdedEntries = registries.getRegistryProvider(); + } + + public void createDatapackRegistryObjects(RegistrySetBuilder datapackEntriesBuilder, Consumer, ICondition>> conditionsBuilder) { + this.createDatapackRegistryObjects(datapackEntriesBuilder, conditionsBuilder, Set.of(this.modContainer.getModId())); + } + + public void createDatapackRegistryObjects(RegistrySetBuilder datapackEntriesBuilder, Consumer, ICondition>> conditionsBuilder, Set modIds) { + var registries = this.createProvider((output, lookupProvider) -> new DatapackBuiltinEntriesProvider(output, lookupProvider, datapackEntriesBuilder, conditionsBuilder, modIds)); + this.registriesWithModdedEntries = registries.getRegistryProvider(); + } + @FunctionalInterface public interface DataProviderFromOutput { T create(PackOutput output); diff --git a/testframework/build.gradle b/testframework/build.gradle index 5b5a74316f..4de793aeed 100644 --- a/testframework/build.gradle +++ b/testframework/build.gradle @@ -10,11 +10,7 @@ java.withSourcesJar() apply plugin : net.neoforged.minecraftdependencies.MinecraftDependenciesPlugin dependencies { - // TODO: is this leaking in the POM? (most likely yes) - // TODO: does this need to be changed back to runtimeDependencies? - // TODO: should use attributes to resolve the right variant instead of hardcoding - compileOnly project(path: ':neoforge', configuration: 'apiElements') - runtimeOnly project(path: ':neoforge', configuration: 'runtimeElements') + compileOnly project(path: ':neoforge') compileOnly(platform("org.junit:junit-bom:${project.jupiter_api_version}")) compileOnly "org.junit.jupiter:junit-jupiter-params" @@ -23,14 +19,6 @@ dependencies { compileOnly "com.google.code.findbugs:jsr305:3.0.2" } -sourceSets { - main { - // TODO: cursed - compileClasspath += project(':neoforge').sourceSets.main.compileClasspath - runtimeClasspath += project(':neoforge').sourceSets.main.runtimeClasspath - } -} - license { header = rootProject.file('codeformat/HEADER.txt') include '**/*.java' diff --git a/tests/build.gradle b/tests/build.gradle index 898423ccca..44b40f7792 100644 --- a/tests/build.gradle +++ b/tests/build.gradle @@ -22,7 +22,7 @@ sourceSets { } dependencies { - implementation project(path: ':neoforge', configuration: 'runtimeElements') + implementation(neoforgeProject) implementation(testframeworkProject) junitImplementation(platform("org.junit:junit-bom:${project.jupiter_api_version}")) @@ -31,12 +31,21 @@ dependencies { junitImplementation("org.assertj:assertj-core:${project.assertj_core}") junitImplementation "net.neoforged.fancymodloader:junit-fml:${project.fancy_mod_loader_version}" - junitImplementation project(path: ':neoforge', configuration: 'runtimeElements') + junitImplementation(neoforgeProject) junitImplementation(testframeworkProject) compileOnly "org.jetbrains:annotations:${project.jetbrains_annotations_version}" } +// Select runtimeElements rather than universalJar from the neoforge project +sourceSets.each { + configurations.named(it.runtimeClasspathConfigurationName) { + attributes { + attribute(Attribute.of("net.neoforged.neoforge.includes-minecraft", Boolean), true) + } + } +} + junitTest { useJUnitPlatform() classpath = sourceSets.junit.output + sourceSets.junit.runtimeClasspath