From 609e6461f70af6fa50b237c98238c4988a6220b5 Mon Sep 17 00:00:00 2001 From: Flemmli97 Date: Thu, 10 Jun 2021 16:55:55 +0200 Subject: [PATCH] add things to make releasing mod easier --- Changelog.txt | 26 +-- build.gradle | 249 +++++++++++++++++++++-------- gradle.properties | 34 ++-- src/main/resources/fabric.mod.json | 2 +- 4 files changed, 211 insertions(+), 100 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 753719b..0e34f90 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -26,13 +26,13 @@ Flan 1.4.0 Flan 1.3.3 ====================== - Some blocks permission changed from PROJECTILES to OPENCONTAINER on direct interaction - Affected blocks: campfire, tnt, (chorus fruit), bells - Direct interaction as in right clicking the block. For actual projectile hits this remains unchanged + Affected blocks: campfire, tnt, (chorus fruit), bells + Direct interaction as in right clicking the block. For actual projectile hits this remains unchanged - Fix several entities not protected on indirect non projectile player attacks (e.g. through player ignited tnt)- - More noticable with other mods #52 + More noticable with other mods #52 - Add gunpowder currency support. - Enables the purchase and selling of claim blocks. Price configurable. Disabled by default - Only selling and purchase of additional claim blocks possible (not the ones you get with time). + Enables the purchase and selling of claim blocks. Price configurable. Disabled by default + Only selling and purchase of additional claim blocks possible (not the ones you get with time). Flan 1.3.2 ====================== @@ -52,13 +52,13 @@ Flan 1.3.0 - Fix inventory desync when using the naming screen - Add /flan help command. For now it only displays all available commands - Add default groups. Set via the config file in defaultGroups. - Every claim created will have those groups by default to make group creation easier - and without having to make the same group for multiple claims again and again. + Every claim created will have those groups by default to make group creation easier + and without having to make the same group for multiple claims again and again. - Add personal groups. Set either via the command /flan permissions personal ... or via the gui /flan personalGroups. - Personal groups are just like default groups except player bound. If a player has any - personal groups that will be used instead of the global default group. That way the player - can also specify what groups a claim should have upon creation. + Personal groups are just like default groups except player bound. If a player has any + personal groups that will be used instead of the global default group. That way the player + can also specify what groups a claim should have upon creation. - Localized various gui strings Flan 1.2.6 @@ -73,9 +73,9 @@ Flan 1.2.5 - Sync itemstack when failing to place blocks - Fix various thrown entitys to not abide by claim protection - Add 2 new permissions: - - Item drop permission: If set to false prevents items being dropped (players only) - - Item pickup permission: If set to false prevents items from being picked up. Player thrown items - (Death included) gets a special tag so that the one who threw them can always pick it up. + Item drop permission: If set to false prevents items being dropped (players only) + Item pickup permission: If set to false prevents items from being picked up. Player thrown items + (Death included) gets a special tag so that the one who threw them can always pick it up. - Change some permissions to default true: Enderchest, Enchanting table, Item drop, Item pickup Flan 1.2.4 diff --git a/build.gradle b/build.gradle index efa11ad..89fd3be 100644 --- a/build.gradle +++ b/build.gradle @@ -1,111 +1,218 @@ -plugins { - id 'fabric-loom' version '0.4-SNAPSHOT' - id 'maven-publish' +buildscript { + dependencies { + classpath group: 'com.diluv.schoomp', name: 'Schoomp', version: '1.1.0' + } } +plugins { + id 'fabric-loom' version '0.4-SNAPSHOT' + id 'maven-publish' + id 'com.matthewprenger.cursegradle' version '1.4.0' +} + +import com.diluv.schoomp.Webhook +import com.diluv.schoomp.message.Message +import com.diluv.schoomp.message.embed.Embed + sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 archivesBaseName = project.archives_base_name -version = project.minecraft_version+"-"+project.mod_version +version = project.minecraft_version + "-" + project.mod_version group = project.maven_group repositories { - mavenCentral() - jcenter() - maven { - name = 'Fabric-Permission-API' - url 'https://oss.sonatype.org/content/repositories/snapshots' - } - maven { - name = "Gunpowder" - url = "https://maven.martmists.com/releases" - } - maven { - name = 'Ladysnake Mods' - url = 'https://ladysnake.jfrog.io/artifactory/mods' - content { - includeGroup 'io.github.ladysnake' - includeGroupByRegex 'io\\.github\\.onyxstudios.*' - } - } + mavenCentral() + jcenter() + maven { + name = 'Fabric-Permission-API' + url 'https://oss.sonatype.org/content/repositories/snapshots' + } + maven { + name = "Gunpowder" + url = "https://maven.martmists.com/releases" + } + maven { + name = 'Ladysnake Mods' + url = 'https://ladysnake.jfrog.io/artifactory/mods' + content { + includeGroup 'io.github.ladysnake' + includeGroupByRegex 'io\\.github\\.onyxstudios.*' + } + } } dependencies { - //to change the versions see the gradle.properties file - minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + //to change the versions see the gradle.properties file + minecraft "com.mojang:minecraft:${project.minecraft_version}" + mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" + modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - // Fabric API. This is technically optional, but you probably want it anyway. - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + // Fabric API. This is technically optional, but you probably want it anyway. + modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - compile group: 'org.yaml', name: 'snakeyaml', version: '1.25' - include group: 'org.yaml', name: 'snakeyaml', version: '1.25' + compile group: 'org.yaml', name: 'snakeyaml', version: '1.25' + include group: 'org.yaml', name: 'snakeyaml', version: '1.25' - modImplementation "me.lucko:fabric-permissions-api:${project.fabric_permissions_api}" - modCompileOnly "io.github.gunpowder:gunpowder-api:${gunpowder_version}+1.16.2" - modImplementation "io.github.ladysnake:PlayerAbilityLib:${project.player_ability_lib}" - // PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs. - // You may need to force-disable transitiveness on them. + modImplementation "me.lucko:fabric-permissions-api:${project.fabric_permissions_api}" + modCompileOnly "io.github.gunpowder:gunpowder-api:${gunpowder_version}+1.16.2" + modImplementation "io.github.ladysnake:PlayerAbilityLib:${project.player_ability_lib}" } processResources { - inputs.property "version", project.version + inputs.property "version", project.version - from(sourceSets.main.resources.srcDirs) { - include "fabric.mod.json" - expand "version": project.version - } + from(sourceSets.main.resources.srcDirs) { + include "fabric.mod.json" + expand "version": project.version + } - from(sourceSets.main.resources.srcDirs) { - exclude "fabric.mod.json" - } + from(sourceSets.main.resources.srcDirs) { + exclude "fabric.mod.json" + } } // ensure that the encoding is set to UTF-8, no matter what the system default is // this fixes some edge cases with special characters not displaying correctly // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html tasks.withType(JavaCompile) { - options.encoding = "UTF-8" + options.encoding = "UTF-8" } // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task // if it is present. // If you remove this task, sources will not be generated. task sourcesJar(type: Jar, dependsOn: classes) { - classifier = "sources" - from sourceSets.main.allSource + classifier = "sources" + from sourceSets.main.allSource } jar { - from "LICENSE" + from "LICENSE" } // configure the maven publication publishing { - publications { - mavenJava(MavenPublication) { - // add all the jars that should be included when publishing to maven - artifact(remapJar) { - builtBy remapJar - } - artifact(sourcesJar) { - builtBy remapSourcesJar - } - artifactId project.archives_base_name - version project.version - } - } - repositories { - maven { - url "https://gitlab.com/api/v4/projects/21830712/packages/maven" - //url "https://maven.pkg.github.com/flemmli97/RuneCraftory" - credentials { - username = project.findProperty("gpr.user") ?: System.getenv("GPR_USER") - password = project.findProperty("gpr.gitlab.token") ?: System.getenv("GPR_GITLAB_TOKEN") - //password = project.findProperty("gpr.github.token") ?: System.getenv("GPR_TOKEN") - } - } - } + publications { + mavenJava(MavenPublication) { + // add all the jars that should be included when publishing to maven + artifact(remapJar) { + builtBy remapJar + } + artifact(sourcesJar) { + builtBy remapSourcesJar + } + artifactId project.archives_base_name + version project.version + } + } + + repositories { + maven { + url "https://gitlab.com/api/v4/projects/21830712/packages/maven" + //url "https://maven.pkg.github.com/flemmli97/RuneCraftory" + credentials { + username = project.findProperty("gpr.user") ?: System.getenv("GPR_USER") + password = project.findProperty("gpr.gitlab.token") ?: System.getenv("GPR_GITLAB_TOKEN") + //password = project.findProperty("gpr.github.token") ?: System.getenv("GPR_TOKEN") + } + } + } } + +def changelog(int versions) { + try { + def changelog = "" + def match = 0 + file("Changelog.txt").eachLine { + if (it.matches("${project.project_name} ([0-9].[0-9].[0-9])")) + match++ + if (match <= versions) { + changelog += it + "\n" + } else + return + } + return changelog + "\n\n" + } catch (exception) { + return "${project.project_name} ${project.mod_version}\n==========\n" + } +} + +//Splits the changelog into multiple parts if they get bigger than discords embed field size (1024) +def discordChangelog() { + def changelog = changelog(1) + def res = new ArrayList() + if (changelog.size() < 1024) { + res.add(changelog) + return res; + } + def temp = "" + changelog.split("\n").each { + it = it + "\n" + if ((temp.size() + it.size()) >= 1024) { + res.add(temp) + temp = it + } else + temp += it + } + res.add(temp) + return res +} + +curseforge { + apiKey = findProperty('curseApiToken') ?: 0 + + project { + id = "${curse_id}" + changelog = changelog(3) + releaseType = 'release' + "${project.curse_versions}".split(', ').each { + addGameVersion "${it}" + } + relations { + "${project.curse_dep}".split(', ').each { + requiredDependency "${it}" + } + } + } +} + +tasks.getByName("curseforge").doLast { + try { + def newFileId = tasks.getByName("curseforge${project.curse_id}").property('mainArtifact').fileID + + def webhook = new Webhook(findProperty('discordHook'), "${project.project_name} Upload") + + def message = new Message() + def version = project.curse_versions.split(', ')[0] + message.setUsername("Release") + message.setContent("@Flan ${project.project_name} ${project.mod_version} for Minecraft ${version} has been released!") + + def embed = new Embed() + embed.addField('Get it here', "${project.findProperty('curse_page')}/files/${newFileId}", false) + def changelog = discordChangelog() + if (changelog.size() == 1) + embed.addField('Change Log', "```md\n${changelog.get(0) ?: 'Unavailable :('}```", false) + else + changelog.forEach { + embed.addField("Change Log", "```md\n${it}```", false) + } + embed.setColor(0xFF8000) + message.addEmbed(embed) + + webhook.sendMessage(message) + } + + catch (IOException e) { + println 'Failed to push to the Discord webhook.' + } +} + +task buildUploadAll(group: "upload") { + dependsOn clean, publish, tasks.getByName("curseforge") + build.mustRunAfter clean + tasks.findByName("curseforge").mustRunAfter publish +} + +tasks.getByName("curseforge").dependsOn build +publish.dependsOn build diff --git a/gradle.properties b/gradle.properties index 728a4b3..ebe0ae1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,20 +1,24 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx2G - # Fabric Properties - # check these on https://fabricmc.net/use - minecraft_version=1.16.2 - yarn_mappings=1.16.2+build.1 - loader_version=0.9.1+build.205 - +# check these on https://fabricmc.net/use +minecraft_version=1.16.2 +yarn_mappings=1.16.2+build.1 +loader_version=0.9.1+build.205 # Mod Properties - mod_version = 1.4.1 - maven_group = io.github.flemmli97 - archives_base_name = flan - +mod_version=1.4.1 +maven_group=io.github.flemmli97 +archives_base_name=flan # Dependencies - # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.19.0+build.398-1.16 - gunpowder_version=0.2.10 - fabric_permissions_api=0.1-SNAPSHOT - player_ability_lib=1.2.2 +# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api +fabric_version=0.19.0+build.398-1.16 +gunpowder_version=0.2.10 +fabric_permissions_api=0.1-SNAPSHOT +player_ability_lib=1.2.2 +# Curse properties +curse_page=https://www.curseforge.com/minecraft/mc-mods/flan +curse_versions=1.16.5 +curse_id=404578 +curse_dep=fabric-api +# Other +project_name=Flan \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f9b6f41..ee8d532 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -8,7 +8,7 @@ "Flemmli97" ], "contact": { - "homepage": "", + "homepage": "https://www.curseforge.com/minecraft/mc-mods/flan", "sources": "https://github.com/Flemmli97/Flan" }, "license": "ARR",