@@ -21,6 +21,7 @@ import org.gradle.api.file.DirectoryProperty
2121import org.gradle.api.file.ProjectLayout
2222import org.gradle.api.flow.FlowProviders
2323import org.gradle.api.flow.FlowScope
24+ import org.gradle.api.java.archives.Manifest
2425import org.gradle.api.logging.LogLevel
2526import org.gradle.api.model.ObjectFactory
2627import org.gradle.api.plugins.BasePluginExtension
@@ -151,6 +152,8 @@ import static net.minecraftforge.gradleutils.GradleUtilsPlugin.LOGGER
151152 private final Project project
152153
153154 final Property<String > displayName = this . objects. property(String )
155+ final Property<String > vendor = this . objects. property(String )
156+ private final Property<String > version = this . objects. property(String )
154157
155158 protected abstract @Inject ProjectLayout getProjectLayout ()
156159
@@ -164,6 +167,9 @@ import static net.minecraftforge.gradleutils.GradleUtilsPlugin.LOGGER
164167 }
165168
166169 private void setup (Project project ) {
170+ this . vendor. convention(providers. provider { project. group }. map { it. toString(). startsWithIgnoreCase(' net.minecraftforge' ) ? ' Forge Development LLC' : null })
171+ this . version. set(providers. provider { project. version }. map(Object . &toString))
172+
167173 project. tasks. register(GenerateActionsWorkflow . NAME , GenerateActionsWorkflowImpl )
168174
169175 project. pluginManager. withPlugin(' publishing' ) {
@@ -177,6 +183,8 @@ import static net.minecraftforge.gradleutils.GradleUtilsPlugin.LOGGER
177183 }
178184
179185 private void finish (Project project ) {
186+ this . version. finalizeValue()
187+
180188 final parallel = project. gradle. startParameter. parallelProjectExecutionEnabled
181189 project. pluginManager. withPlugin(' com.github.ben-manes.versions' ) {
182190 project. tasks. withType(DependencyUpdatesTask ). configureEach { task ->
@@ -346,6 +354,34 @@ import static net.minecraftforge.gradleutils.GradleUtilsPlugin.LOGGER
346354 }
347355 }
348356
357+ @Override
358+ void manifestDefaults (Manifest manifest , String packageName , Map<? extends CharSequence , ?> additionalEntries ) {
359+ var specificationVersion = providers. provider {
360+ project. extensions. getByName(' gitversion' ). properties. info?. properties?. tag?. toString()
361+ }. orElse(this . version)
362+
363+ var attributes = ([
364+ ' Specification-Title' : this . displayName,
365+ ' Specification-Vendor' : this . vendor,
366+ ' Specification-Version' : specificationVersion,
367+ ' Implementation-Title' : this . displayName,
368+ ' Implementation-Vendor' : this . vendor,
369+ ' Implementation-Version' : this . version
370+ ] as Map<? extends CharSequence , ?> ). tap { putAll(additionalEntries) }. with {
371+ final attributes = new HashMap<String , String > (size())
372+
373+ forEach { key , value ->
374+ var unpacked = this . unpackOrNull(value)
375+ if (unpacked != = null )
376+ attributes. put(key. toString(), unpacked. toString())
377+ }
378+
379+ return attributes
380+ }
381+
382+ manifest. attributes(attributes, packageName)
383+ }
384+
349385 @Override
350386 void pluginDevDefaults (ConfigurationContainer configurations , CharSequence gradleVersion ) {
351387 this . pluginDevDefaults(configurations, this . providers. provider { gradleVersion })
0 commit comments