1+ import java.util.regex.Matcher
12import se.bjurr.gitchangelog.plugin.gradle.GitChangelogTask
23import static org.apache.commons.lang3.StringUtils.repeat
34
45plugins {
56 id ' java-library'
67 id ' eclipse'
78 id ' idea'
8- id ' net.neoforged.gradle.userdev ' version " $n eo_gradle_version "
9- id ' se.bjurr.gitchangelog.git-changelog-gradle-plugin' version ' 2 .1.2 '
10- id ' me.modmuss50.mod-publish-plugin' version ' 0.5.1 '
11- id ' com.diffplug.spotless' version ' 6.25 .0'
9+ id ' net.neoforged.moddev ' version " $m od_dev_gradle "
10+ id ' se.bjurr.gitchangelog.git-changelog-gradle-plugin' version ' 3 .1.1 '
11+ id ' me.modmuss50.mod-publish-plugin' version ' 1.1.0 '
12+ id ' com.diffplug.spotless' version ' 8.1 .0'
1213}
1314
1415def isRelease = System . getenv(' CURSEFORGE_TOKEN' )
@@ -36,33 +37,64 @@ println("JVM: ${System.getProperty('java.vm.version')} (${System.getProperty('ja
3637println (" Arch: ${ System.getProperty('os.arch')} " )
3738println (repeat(' *' , 60 ))
3839
39- minecraft. accessTransformers. file rootProject. file(' src/main/resources/META-INF/accesstransformer.cfg' )
40-
41- runs {
42- configureEach {
43- systemProperty ' forge.logging.console.level' , ' debug'
40+ sourceSets. main. resources {
41+ srcDir ' src/generated/resources'
42+ exclude ' .cache'
43+ }
4444
45- modSource project . sourceSets . main
46- if ( System . getProperty( ' idea.active ' )) {
47- jvmArguments . add( " -XX:+AllowEnhancedClassRedefinition " )
48- }
45+ neoForge {
46+ enable {
47+ version = project . neo_version
48+ disableRecompilation = System . getenv( " CI " ) == " true "
4949 }
5050
51- client {
51+ parchment {
52+ mappingsVersion = project. parchment_mappings_version
53+ minecraftVersion = project. parchment_minecraft_version
5254 }
5355
54- server {
55- programArgument ' --nogui'
56+ validateAccessTransformers = true
57+
58+ runs {
59+ configureEach {
60+ logLevel = org.slf4j.event.Level . DEBUG
61+
62+ systemProperty ' neoforge.enabledGameTestNamespaces' , ' solargeneration'
63+
64+ if (System . getProperty(' idea.active' )) {
65+ jvmArguments. add(" -XX:+AllowEnhancedClassRedefinition" )
66+ }
67+ }
68+
69+ client {
70+ client()
71+ gameDirectory = project. file(' runs/client' )
72+ }
73+
74+ server {
75+ server()
76+ gameDirectory = project. file(' runs/server' )
77+ programArgument ' --nogui'
78+ }
79+
80+ data {
81+ data()
82+ gameDirectory = project. file(' runs/data' )
83+ programArguments. addAll ' --mod' , ' solargeneration' , ' --all' ,
84+ ' --output' , file(' src/generated/resources/' ). getAbsolutePath(),
85+ ' --existing' , file(' src/main/resources/' ). getAbsolutePath()
86+ }
5687 }
5788
58- data {
59- programArguments. addAll ' --mod' , ' solargeneration' , ' --all' , ' --output' , file(' src/generated/resources/' ). getAbsolutePath(), ' --existing' , file(' src/main/resources/' ). getAbsolutePath()
89+ mods {
90+ solargeneration {
91+ sourceSet(sourceSets. main)
92+ }
6093 }
6194}
6295
63- sourceSets. main. resources {
64- srcDir ' src/generated/resources'
65- exclude ' .cache'
96+ configurations {
97+ runtimeClasspath. extendsFrom localRuntime
6698}
6799
68100repositories {
@@ -79,13 +111,7 @@ repositories {
79111 }
80112}
81113
82- configurations {
83- runtimeClasspath. extendsFrom localRuntime
84- }
85-
86114dependencies {
87- implementation " net.neoforged:neoforge:$neo_version "
88-
89115 // implementation "edivad:EdivadLib-$minecraft_version:3.0.0-snapshot"
90116 implementation " curse.maven:edivadlib-638508:$edivadlib_id "
91117
@@ -100,12 +126,46 @@ spotless {
100126 endWithNewline()
101127 trimTrailingWhitespace()
102128 removeUnusedImports()
103- indentWithSpaces (2 )
129+ leadingTabsToSpaces (2 )
104130 }
105131}
106132
133+ tasks. register(' generatePackageInfos' ) {
134+ def srcDir = layout. projectDirectory. dir(" src/main/java" )
135+ def javaFiles = project. fileTree(srcDir) { include ' **/*.java' }
136+
137+ inputs. dir(srcDir)
138+ outputs. upToDateWhen { false }
139+
140+ doLast {
141+ javaFiles. each { javaFile ->
142+ def packageInfoFile = new File (javaFile. parent, ' package-info.java' )
143+ if (! packageInfoFile. exists()) {
144+ def pkgName = javaFile. toString(). replaceAll(Matcher . quoteReplacement(File . separator), ' /' )
145+ pkgName = pkgName. substring(pkgName. indexOf(' edivad/solargeneration/' ), pkgName. lastIndexOf(' /' ))
146+ pkgName = pkgName. replaceAll(' /' , ' .' )
147+
148+ def pkgInfoText = """
149+ |@FieldsAreNonnullByDefault
150+ |@MethodsReturnNonnullByDefault
151+ |@ParametersAreNonnullByDefault
152+ |package $pkgName ;
153+ |
154+ |import javax.annotation.ParametersAreNonnullByDefault;
155+ |import net.minecraft.FieldsAreNonnullByDefault;
156+ |import net.minecraft.MethodsReturnNonnullByDefault;
157+ """ . stripMargin(). trim()
158+
159+ packageInfoFile. text = pkgInfoText
160+ }
161+ }
162+ }
163+ }
164+
165+
107166tasks. withType(JavaCompile ). configureEach {
108167 options. compilerArgs. addAll([' -Xmaxerrs' , ' 100000' ])
168+ options. encoding = ' UTF-8'
109169}
110170
111171idea {
@@ -115,7 +175,7 @@ idea {
115175 }
116176}
117177
118- tasks. withType( ProcessResources ). configureEach {
178+ var generateModMetadata = tasks. register( " generateModMetadata " , ProcessResources ) {
119179 var replaceProperties = [
120180 minecraft_version : minecraft_version,
121181 minecraft_version_range : minecraft_version_range,
@@ -126,10 +186,21 @@ tasks.withType(ProcessResources).configureEach {
126186 edivadlib_version_range : edivadlib_version_range,
127187 ]
128188 inputs. properties replaceProperties
189+ expand replaceProperties
190+ from " src/main/templates"
191+ into " build/generated/sources/modMetadata"
192+ }
193+ sourceSets. main. resources. srcDir generateModMetadata
194+ neoForge. ideSyncTask generateModMetadata
129195
130- filesMatching([' META-INF/neoforge.mods.toml' ]) {
131- expand replaceProperties
132- }
196+ def lastCommit = providers. exec {
197+ commandLine ' git' , ' rev-parse' , ' HEAD'
198+ }. standardOutput. asText. get(). trim()
199+
200+ def penultimateTag = () -> {
201+ providers. exec {
202+ commandLine ' git' , ' describe' , ' --abbrev=0' , ' --tags' , ' HEAD~'
203+ }. standardOutput. asText. get(). trim()
133204}
134205
135206tasks. named(' jar' , Jar ). configure {
@@ -141,31 +212,19 @@ tasks.named('jar', Jar).configure {
141212 ' Implementation-Title' : ' solargeneration' ,
142213 ' Implementation-Version' : project. version,
143214 ' Implementation-Vendor' : ' Edivad99' ,
144- ' Implementation-Commit' : ' git rev-parse HEAD ' . execute() . text . trim() ,
215+ ' Implementation-Commit' : lastCommit ,
145216 ])
146217 }
147218}
148219
149- def penultimateTag = { ->
150- def stdout = new ByteArrayOutputStream ()
151- try {
152- project. exec { ExecSpec spec ->
153- spec. commandLine(' git' , ' describe' , ' --abbrev=0' , ' --tags' , ' HEAD~' ). standardOutput(stdout)
154- }. assertNormalExitValue(). rethrowFailure()
155- } catch (Exception e) {
156- throw new IllegalStateException (" Failed to get the tag; check if 'git' is on the PATH" , e)
157- }
158- return stdout. toString()
159- }
160-
161220tasks. register(' makeChangelog' , GitChangelogTask ) {
162- fromRepo = projectDir. absolutePath. toString()
163- fromRevision = penultimateTag()
164- toRevision = ' HEAD'
165- file = file(' CHANGELOG.md' )
166- untaggedName = ' Next release'
167- templateContent = file(' changelog.mustache' ). text
168- ignoreCommitsIfMessageMatches = ' ^.*Merge branch.*$'
221+ fromRepo. set( projectDir. absolutePath. toString() )
222+ fromRevision. set( penultimateTag() )
223+ toRevision. set( ' HEAD' )
224+ file. set( file(' CHANGELOG.md' ) )
225+ untaggedName. set( ' Next release' )
226+ templateContent. set( file(' changelog.mustache' ). text)
227+ ignoreCommitsIfMessageMatches. set( ' ^.*Merge branch.*$' )
169228}
170229
171230publishMods {
0 commit comments