Skip to content

Commit ad0407e

Browse files
committed
Port to MC 1.20.3
1 parent 28ec82d commit ad0407e

32 files changed

+1191
-451
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,3 @@ build
2121
eclipse
2222
run
2323
runs
24-
.DS_Store

Jenkinsfile

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,28 @@ pipeline {
1010

1111
stages {
1212

13+
stage('Setup') {
14+
15+
steps {
16+
17+
echo 'Setup Project'
18+
sh 'chmod +x gradlew'
19+
sh './gradlew clean'
20+
}
21+
}
22+
1323
stage('Build') {
1424

1525
steps {
1626

1727
withCredentials([
18-
file(credentialsId: 'mod_build_secrets', variable: 'ORG_GRADLE_PROJECT_secretFile'),
19-
file(credentialsId: 'java_keystore', variable: 'ORG_GRADLE_PROJECT_keyStore')
28+
file(credentialsId: 'build_secrets', variable: 'ORG_GRADLE_PROJECT_secretFile'),
29+
file(credentialsId: 'java_keystore', variable: 'ORG_GRADLE_PROJECT_keyStore'),
30+
file(credentialsId: 'gpg_key', variable: 'ORG_GRADLE_PROJECT_pgpKeyRing')
2031
]) {
2132

2233
echo 'Building project.'
23-
sh 'chmod +x gradlew'
24-
sh './gradlew clean build publish curseforge updateVersionTracker --stacktrace --warn'
34+
sh './gradlew build publish publishCurseForge modrinth updateVersionTracker postDiscord --stacktrace --warn'
2535
}
2636
}
2737
}

build.gradle

Lines changed: 67 additions & 209 deletions
Original file line numberDiff line numberDiff line change
@@ -1,253 +1,111 @@
1+
// TODO remove buildscript block
12
buildscript {
3+
24
repositories {
3-
maven { url = 'https://files.minecraftforge.net/maven' }
4-
maven { url 'https://plugins.gradle.org/m2/' }
5-
jcenter()
5+
66
mavenCentral()
77
}
8+
89
dependencies {
9-
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1+', changing: true
10-
classpath 'gradle.plugin.com.matthewprenger:CurseGradle:1.4.0'
11-
classpath group: 'com.diluv.schoomp', name: 'Schoomp', version: '1.1.0'
10+
11+
classpath group: 'com.diluv.schoomp', name: 'Schoomp', version: '1.2.5'
1212
}
1313
}
1414

15-
apply plugin: 'net.minecraftforge.gradle'
16-
apply plugin: 'com.matthewprenger.cursegradle'
17-
apply plugin: 'maven-publish'
18-
apply plugin: 'eclipse'
19-
20-
apply from: './gradle/secrets.gradle'
21-
apply from: './gradle/markdown-git-changelog.gradle'
22-
apply from: './gradle/artifacts.gradle'
23-
apply from: './gradle/patreon.gradle'
24-
25-
import groovy.json.JsonSlurper
26-
import groovy.json.JsonOutput
27-
import com.diluv.schoomp.Webhook
28-
import com.diluv.schoomp.message.Message
29-
import com.diluv.schoomp.message.embed.Embed
30-
import com.diluv.schoomp.message.embed.Footer
31-
32-
if (project.hasProperty('secretFile')) {
33-
loadSecrets(new File((String) findProperty('secretFile')))
15+
plugins {
16+
id 'net.darkhax.curseforgegradle' version '1.1.17' apply(false)
17+
id 'com.modrinth.minotaur' version '2.8.5' apply(false)
18+
id 'org.jetbrains.gradle.plugin.idea-ext' version '1.1.7'
3419
}
3520

36-
version = "${mod_version}." + getBuildNumber()
37-
archivesBaseName = "${mod_name}-${minecraft_version}"
21+
apply from: 'gradle/property_loader.gradle'
22+
apply from: 'gradle/build_number.gradle'
23+
apply from: 'gradle/git_changelog.gradle'
24+
apply from: 'gradle/version_checker.gradle'
3825

39-
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
26+
subprojects {
4027

41-
minecraft {
28+
apply plugin: 'maven-publish'
4229

43-
mappings channel: 'official', version: "${minecraft_version}".toString()
44-
45-
if (project.hasProperty('mod_at')) {
46-
47-
accessTransformer = file(findProperty('mod_at'))
48-
}
49-
50-
runs {
51-
client {
52-
53-
workingDirectory project.file('run')
54-
taskName "${mod_name}Client"
55-
56-
mods {
57-
badmobs {
58-
source sourceSets.main
59-
}
60-
}
61-
}
30+
apply from: '../gradle/property_loader.gradle'
31+
apply from: '../gradle/java.gradle'
32+
apply from: '../gradle/build_number.gradle'
33+
apply from: '../gradle/git_changelog.gradle'
34+
apply from: '../gradle/minify_jsons.gradle'
35+
apply from: '../gradle/signing.gradle'
6236

63-
server {
64-
workingDirectory project.file('run')
65-
taskName "${mod_name}Server"
66-
67-
mods {
68-
badmobs {
69-
source sourceSets.main
70-
}
71-
}
72-
}
73-
}
74-
}
37+
// Disables Gradle's custom module metadata from being published to maven. The
38+
// metadata includes mapped dependencies which are not reasonably consumable by
39+
// other mod developers.
40+
tasks.withType(GenerateModuleMetadata) {
7541

76-
dependencies {
77-
78-
minecraft "net.minecraftforge:forge:${forge_version}"
79-
}
80-
81-
jar {
82-
manifest {
83-
attributes([
84-
'Timestamp': System.currentTimeMillis(),
85-
'Specification-Title': "${mod_name}",
86-
'Specification-Vendor': "${mod_vendor}",
87-
'Specification-Version': "${version}",
88-
'Implementation-Title': project.archivesBaseName,
89-
'Implementation-Version': project.version,
90-
'Implementation-Vendor' :"${mod_vendor}",
91-
'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
92-
'Built-On-Java': "${System.getProperty('java.vm.version')} (${System.getProperty('java.vm.vendor')})",
93-
'Built-On': "${forge_version}"
94-
])
42+
enabled = false
9543
}
96-
}
97-
98-
String getBuildNumber() {
9944

100-
return System.getenv('BUILD_NUMBER') ? System.getenv('BUILD_NUMBER') : System.getenv('TRAVIS_BUILD_NUMBER') ? System.getenv('TRAVIS_BUILD_NUMBER') : '0';
101-
}
102-
103-
processResources {
45+
// Enable Mixins
46+
project.ext.mixin_enabled = project.file("src/main/resources/${mod_id}.mixins.json").exists()
47+
project.logger.lifecycle("Mixin ${project.ext.mixin_enabled ? 'enabled' : 'disabled'} for project ${project.name}.")
10448

105-
def buildProps = project.properties.clone()
106-
107-
// Replaces FML's magic file.jarVersion string with the correct version at
108-
// build time.
109-
buildProps.put('file', [jarVersion: project.version])
49+
repositories {
11050

111-
filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) {
51+
mavenCentral()
11252

113-
expand buildProps
53+
maven {
54+
name = 'Sponge / Mixin'
55+
url = 'https://repo.spongepowered.org/repository/maven-public/'
56+
}
11457
}
11558
}
11659

117-
curseforge {
11860

119-
apiKey = findProperty('curse_auth') ?: 0
120-
def versions = "${curse_versions}".split(', ')
121-
project {
122-
123-
id = "${curse_project}"
124-
releaseType = 'alpha'
125-
changelog = getGitChangelog() + "\n\nLike the mod? Consider following me on [Twitter](https://twitter.com/darkhaxdev) and joining the [Discord](https://discord.darkhax.net)\n\nHuge thanks to my supporters on [Patreon](https://www.patreon.com/Darkhax?MCChangelog?${mod_name})\n\n" + getPledgeLog()
126-
changelogType = 'markdown'
127-
128-
versions.each {
129-
130-
addGameVersion "${it}"
131-
}
61+
import com.diluv.schoomp.Webhook
62+
import com.diluv.schoomp.message.Message
63+
import com.diluv.schoomp.message.embed.Embed
13264

133-
if (project.hasProperty('curse_requirements') || project.hasProperty('curse_optionals')) {
65+
task postDiscord() {
13466

135-
mainArtifact(jar) {
67+
doLast {
68+
try {
13669

137-
relations {
70+
// Create a new webhook instance for Discord
71+
def webhook = new Webhook(findProperty('curse_discord_webhook'), "${project.ext.mod_name} CurseForge Gradle Upload")
13872

139-
if (project.hasProperty('curse_requirements')) {
140-
def requirements = "${curse_requirements}".split(', ')
141-
requirements.each {
73+
// Craft a message to send to Discord using the webhook.
74+
def message = new Message()
75+
message.setUsername("Mod Update: ${project.ext.mod_name}")
76+
message.setContent("${project.ext.mod_name} ${project.version} for Minecraft ${project.ext.minecraft_version} has been published!")
14277

143-
requiredLibrary "${it}"
144-
}
145-
}
78+
def embed = new Embed();
79+
def downloadSources = new StringJoiner('\n')
14680

147-
if (project.hasProperty('curse_optionals')) {
148-
def optionals = "${curse_optionals}".split(', ')
149-
optionals.each {
81+
if (project(':forge').hasProperty('curse_file_url')) {
15082

151-
optionalLibrary "${it}"
152-
}
153-
}
154-
}
83+
downloadSources.add("<:forge:916233930091401266> [Forge](${project(':forge').findProperty('curse_file_url')})")
15584
}
156-
}
157-
158-
addArtifact(sourcesJar)
159-
addArtifact(javadocJar)
160-
addArtifact(deobfJar)
161-
}
162-
}
163-
164-
tasks.getByName("curseforge").doLast {
165-
166-
try {
167-
168-
// Reads the file ID given to us by CurseForge
169-
def newFileId = tasks.getByName("curseforge${curse_project}").property('mainArtifact').fileID
170-
171-
def webhook = new Webhook(findProperty('discordCFWebhook'), "${project.findProperty('mod_name')} Gradle Upload");
172-
173-
def message = new Message();
174-
message.setUsername(findProperty('mod_name'));
175-
message.setContent("${project.findProperty('mod_name')} ${version} for Minecraft ${findProperty('minecraft_version')} has been released! The download will be public soon.");
176-
177-
def embed = new Embed();
178-
embed.addField('Download', "${project.findProperty('curse_page')}/files/$newFileId", false);
179-
embed.addField('Change Log', "${getGitChangelog() ?: 'Unavailable :('}", false);
180-
embed.setColor(0xFF8000);
181-
message.addEmbed(embed);
182-
183-
webhook.sendMessage(message);
184-
}
185-
186-
catch (IOException e) {
187-
println 'Failed to push to the Discord webhook.'
188-
}
189-
}
19085

191-
task updateVersionTracker {
192-
193-
onlyIf {
194-
195-
project.hasProperty('versionTrackerAPI')
196-
}
197-
198-
doLast {
199-
def body = [
200-
'author': "${project.findProperty('mod_vendor')}",
201-
'projectName': "${project.findProperty('mod_name').toLowerCase()}",
202-
'gameVersion': "${project.findProperty('minecraft_version')}",
203-
'projectVersion': "${version}",
204-
'homepage': "${project.findProperty('mod_download')}",
205-
'uid': "${project.findProperty('versionTrackerKey')}"
206-
]
207-
208-
// Opens a connection to the version tracker API and writes the payload JSON.
209-
def req = new URL(project.findProperty('versionTrackerAPI')).openConnection()
210-
req.setRequestMethod('POST')
211-
req.setRequestProperty('Content-Type', 'application/json; charset=UTF-8')
212-
req.setRequestProperty('User-Agent', "${project.findProperty('mod_name')} Tracker Gradle")
213-
req.setDoOutput(true)
214-
req.getOutputStream().write(JsonOutput.toJson(body).getBytes("UTF-8"))
215-
216-
// We need to attempt a read in order to actually send the message.
217-
println "VersionCheck Status code: ${req.getResponseCode()}"
218-
println "VersionCheck Response: ${req.getInputStream().getText()}"
219-
}
220-
}
86+
// Add Curseforge DL link if available.
87+
def downloadString = downloadSources.toString()
22188

222-
publishing {
89+
if (downloadString && !downloadString.isEmpty()) {
22390

224-
tasks.publish.dependsOn 'build'
225-
226-
publications {
91+
embed.addField('Download', downloadString, false)
92+
}
22793

228-
mavenJava(MavenPublication) {
229-
230-
artifactId project.archivesBaseName
94+
// Add a changelog field if a changelog exists.
95+
if (project.ext.mod_changelog && !project.ext.mod_changelog.isEmpty()) {
23196

232-
// Base mod archive.
233-
artifact jar
234-
235-
// Adds the sources as an artifact.
236-
artifact sourcesJar {
237-
classifier 'sources'
97+
embed.addField('Changelog', getChangelog(1500), false)
23898
}
23999

240-
// Adds the javadocs as an artifact.
241-
artifact javadocJar {
242-
classifier 'javadoc'
243-
}
100+
embed.setColor(0xFF8000)
101+
message.addEmbed(embed)
102+
103+
webhook.sendMessage(message)
244104
}
245-
}
246105

247-
repositories {
248-
maven {
249-
// Sets the maven URL
250-
url findProperty('localMaven')
106+
catch (IOException e) {
107+
108+
project.logger.error('Failed to push CF Discord webhook.')
251109
}
252110
}
253111
}

0 commit comments

Comments
 (0)