-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
13 changed files
with
153 additions
and
292 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,192 +1,50 @@ | ||
@file:Suppress("UnstableApiUsage", "PropertyName") | ||
|
||
import org.polyfrost.gradle.util.noServerRunConfigs | ||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar | ||
import dev.deftu.gradle.utils.GameSide | ||
import dev.deftu.gradle.utils.MinecraftVersion | ||
|
||
// Adds support for kotlin, and adds the Polyfrost Gradle Toolkit | ||
// which we use to prepare the environment. | ||
plugins { | ||
kotlin("jvm") | ||
id("org.polyfrost.multi-version") | ||
id("org.polyfrost.defaults.repo") | ||
id("org.polyfrost.defaults.java") | ||
id("org.polyfrost.defaults.loom") | ||
id("com.github.johnrengelman.shadow") | ||
id("net.kyori.blossom") version "1.3.2" | ||
id("signing") | ||
java | ||
kotlin("jvm") | ||
id("dev.deftu.gradle.multiversion") // Applies preprocessing for multiple versions of Minecraft and/or multiple mod loaders. | ||
id("dev.deftu.gradle.tools") // Applies several configurations to things such as the Java version, project name/version, etc. | ||
id("dev.deftu.gradle.tools.resources") // Applies resource processing so that we can replace tokens, such as our mod name/version, in our resources. | ||
id("dev.deftu.gradle.tools.bloom") // Applies the Bloom plugin, which allows us to replace tokens in our source files, such as being able to use `@MOD_VERSION` in our source files. | ||
id("dev.deftu.gradle.tools.shadow") // Applies the Shadow plugin, which allows us to shade our dependencies into our mod JAR. This is NOT recommended for Fabric mods, but we have an *additional* configuration for those! | ||
id("dev.deftu.gradle.tools.minecraft.loom") // Applies the Loom plugin, which automagically configures Essential's Architectury Loom plugin for you. | ||
id("dev.deftu.gradle.tools.minecraft.releases") // Applies the Minecraft auto-releasing plugin, which allows you to automatically release your mod to CurseForge and Modrinth. | ||
} | ||
|
||
// Gets the mod name, version and id from the `gradle.properties` file. | ||
val mod_name: String by project | ||
val mod_version: String by project | ||
val mod_id: String by project | ||
val mod_archives_name: String by project | ||
|
||
// Replaces the variables in `ExampleMod.java` to the ones specified in `gradle.properties`. | ||
blossom { | ||
replaceToken("@VER@", mod_version) | ||
replaceToken("@NAME@", mod_name) | ||
replaceToken("@ID@", mod_id) | ||
} | ||
|
||
// Sets the mod version to the one specified in `gradle.properties`. Make sure to change this following semver! | ||
version = mod_version | ||
// Sets the group, make sure to change this to your own. It can be a website you own backwards or your GitHub username. | ||
// e.g. com.github.<your username> or com.<your domain> | ||
group = "org.polyfrost" | ||
|
||
// Sets the name of the output jar (the one you put in your mods folder and send to other people) | ||
// It outputs all versions of the mod into the `versions/{mcVersion}/build` directory. | ||
base { | ||
archivesName.set("$mod_archives_name-$platform") | ||
} | ||
|
||
// Configures Polyfrost Loom, our plugin fork to easily set up the programming environment. | ||
loom { | ||
// Removes the server configs from IntelliJ IDEA, leaving only client runs. | ||
noServerRunConfigs() | ||
|
||
// Adds the tweak class if we are building legacy version of forge as per the documentation (https://docs.polyfrost.org) | ||
if (project.platform.isLegacyForge) { | ||
runConfigs { | ||
"client" { | ||
programArgs("--tweakClass", "cc.polyfrost.oneconfig.loader.stage0.LaunchWrapperTweaker") | ||
property("mixin.debug.export", "true") // Outputs all mixin changes to `versions/{mcVersion}/run/.mixin.out/class` | ||
} | ||
} | ||
} | ||
// Configures the mixins if we are building for forge | ||
if (project.platform.isForge) { | ||
forge { | ||
mixinConfig("mixins.${mod_id}.json") | ||
} | ||
} | ||
// Configures the name of the mixin "refmap" | ||
mixin.defaultRefmapName.set("mixins.${mod_id}.refmap.json") | ||
} | ||
|
||
// Creates the shade/shadow configuration, so we can include libraries inside our mod, rather than having to add them separately. | ||
val shade: Configuration by configurations.creating { | ||
configurations.implementation.get().extendsFrom(this) | ||
} | ||
val modShade: Configuration by configurations.creating { | ||
configurations.modImplementation.get().extendsFrom(this) | ||
} | ||
|
||
// Configures the output directory for when building from the `src/resources` directory. | ||
sourceSets { | ||
main { | ||
output.setResourcesDir(java.classesDirectory) | ||
} | ||
} | ||
|
||
// Adds the Polyfrost maven repository so that we can get the libraries necessary to develop the mod. | ||
repositories { | ||
maven("https://repo.polyfrost.org/releases") | ||
} | ||
toolkitLoomHelper { | ||
useOneConfig { | ||
version = "1.0.0-alpha.47" | ||
loaderVersion = "1.1.0-alpha.34" | ||
|
||
// Configures the libraries/dependencies for your mod. | ||
dependencies { | ||
// Adds the OneConfig library, so we can develop with it. | ||
modCompileOnly("cc.polyfrost:oneconfig-$platform:0.2.2-alpha+") | ||
usePolyMixin = true | ||
polyMixinVersion = "0.8.4+build.2" | ||
|
||
// Adds DevAuth, which we can use to log in to Minecraft in development. | ||
modRuntimeOnly("me.djtheredstoner:DevAuth-${if (platform.isFabric) "fabric" else if (platform.isLegacyForge) "forge-legacy" else "forge-latest"}:1.2.0") | ||
applyLoaderTweaker = true | ||
|
||
// If we are building for legacy forge, includes the launch wrapper with `shade` as we configured earlier, as well as mixin 0.7.11 | ||
if (platform.isLegacyForge) { | ||
compileOnly("org.spongepowered:mixin:0.7.11-SNAPSHOT") | ||
shade("cc.polyfrost:oneconfig-wrapper-launchwrapper:1.0.0-beta17") | ||
} | ||
} | ||
|
||
tasks { | ||
// Processes the `src/resources/mcmod.info`, `fabric.mod.json`, or `mixins.${mod_id}.json` and replaces | ||
// the mod id, name and version with the ones in `gradle.properties` | ||
processResources { | ||
inputs.property("id", mod_id) | ||
inputs.property("name", mod_name) | ||
val java = if (project.platform.mcMinor >= 18) { | ||
17 // If we are playing on version 1.18, set the java version to 17 | ||
} else { | ||
// Else if we are playing on version 1.17, use java 16. | ||
if (project.platform.mcMinor == 17) | ||
16 | ||
else | ||
8 // For all previous versions, we **need** java 8 (for Forge support). | ||
} | ||
val compatLevel = "JAVA_${java}" | ||
inputs.property("java", java) | ||
inputs.property("java_level", compatLevel) | ||
inputs.property("version", mod_version) | ||
inputs.property("mcVersionStr", project.platform.mcVersionStr) | ||
filesMatching(listOf("mcmod.info", "mixins.${mod_id}.json", "mods.toml")) { | ||
expand( | ||
mapOf( | ||
"id" to mod_id, | ||
"name" to mod_name, | ||
"java" to java, | ||
"java_level" to compatLevel, | ||
"version" to mod_version, | ||
"mcVersionStr" to project.platform.mcVersionStr | ||
) | ||
) | ||
} | ||
filesMatching("fabric.mod.json") { | ||
expand( | ||
mapOf( | ||
"id" to mod_id, | ||
"name" to mod_name, | ||
"java" to java, | ||
"java_level" to compatLevel, | ||
"version" to mod_version, | ||
"mcVersionStr" to project.platform.mcVersionStr.substringBeforeLast(".") + ".x" | ||
) | ||
) | ||
for (module in arrayOf("commands", "config", "config-impl", "events", "internal", "ui", "utils")) { | ||
+module | ||
} | ||
} | ||
|
||
// Configures the resources to include if we are building for forge or fabric. | ||
withType(Jar::class.java) { | ||
if (project.platform.isFabric) { | ||
exclude("mcmod.info", "mods.toml") | ||
} else { | ||
exclude("fabric.mod.json") | ||
if (project.platform.isLegacyForge) { | ||
exclude("mods.toml") | ||
} else { | ||
exclude("mcmod.info") | ||
} | ||
} | ||
} | ||
// Turns off the server-side run configs, as we're building a client-sided mod. | ||
disableRunConfigs(GameSide.SERVER) | ||
|
||
// Configures our shadow/shade configuration, so we can | ||
// include some dependencies within our mod jar file. | ||
named<ShadowJar>("shadowJar") { | ||
archiveClassifier.set("dev") | ||
configurations = listOf(shade, modShade) | ||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE | ||
// Defines the name of the Mixin refmap, which is used to map the Mixin classes to the obfuscated Minecraft classes. | ||
if (!mcData.isNeoForge) { | ||
useMixinRefMap(modData.id) | ||
} | ||
|
||
remapJar { | ||
inputFile.set(shadowJar.get().archiveFile) | ||
archiveClassifier.set("") | ||
if (mcData.isForge) { | ||
// Configures the Mixin tweaker if we are building for Forge. | ||
useForgeMixin(modData.id) | ||
} | ||
|
||
jar { | ||
// Sets the jar manifest attributes. | ||
if (platform.isLegacyForge) { | ||
manifest.attributes += mapOf( | ||
"ModSide" to "CLIENT", // We aren't developing a server-side mod | ||
"ForceLoadAsMod" to true, // We want to load this jar as a mod, so we force Forge to do so. | ||
"TweakOrder" to "0", // Makes sure that the OneConfig launch wrapper is loaded as soon as possible. | ||
"MixinConfigs" to "mixins.${mod_id}.json", // We want to use our mixin configuration, so we specify it here. | ||
"TweakClass" to "cc.polyfrost.oneconfig.loader.stage0.LaunchWrapperTweaker" // Loads the OneConfig launch wrapper. | ||
) | ||
} | ||
dependsOn(shadowJar) | ||
archiveClassifier.set("") | ||
enabled = false | ||
// Sets up the KotlinForForge library for Forge 1.16.5+ and NeoForge. | ||
if (mcData.isForgeLike && mcData.version >= MinecraftVersion.VERSION_1_16_5) { | ||
useKotlinForForge() | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,17 @@ | ||
# gradle.properties file -- CHANGE THE VALUES STARTING WITH `mod_*` AND REMOVE THIS COMMENT. | ||
|
||
# Sets the name of your mod. | ||
mod_name=ExampleMod | ||
# Sets the id of your mod that mod loaders use to recognize it. | ||
mod_id=examplemod | ||
# Sets the version of your mod. Make sure to update this when you make changes according to semver. | ||
mod_version=1.0.0 | ||
# Sets the name of the jar file that you put in your 'mods' folder. | ||
mod_archives_name=ExampleMod | ||
|
||
# Gradle Configuration -- DO NOT TOUCH THESE VALUES. | ||
polyfrost.defaults.loom=3 | ||
org.gradle.daemon=true | ||
org.gradle.parallel=true | ||
org.gradle.configureoncommand=true | ||
org.gradle.parallel.threads=4 | ||
org.gradle.jvmargs=-Xmx2G | ||
org.gradle.jvmargs=-Xmx2G | ||
|
||
# gradle.properties file -- CHANGE THE VALUES STARTING WITH `mod.*` AND REMOVE THIS COMMENT. | ||
|
||
# Sets the name of your mod. | ||
mod.name=ExampleMod | ||
# Sets the ID of your mod that mod loaders use to recognize it. | ||
mod.id=examplemod | ||
# Sets the version of your mod. Make sure to update this when you make changes according to the SemVer specification. | ||
mod.version=1.0.0 | ||
# Sets the Maven group ID of your mod. This is effectively unused but is good practice to set regardless. | ||
mod.group=com.example |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,14 @@ | ||
plugins { | ||
kotlin("jvm") version "1.9.10" apply false | ||
id("org.polyfrost.multi-version.root") | ||
id("com.github.johnrengelman.shadow") version "8.1.1" apply false | ||
id("dev.deftu.gradle.multiversion-root") | ||
} | ||
|
||
preprocess { | ||
"1.12.2-forge"(11202, "srg") { | ||
"1.8.9-forge"(10809, "srg") | ||
} | ||
} | ||
// Adding new versions/loaders can be done like so: | ||
// For each version, we add a new wrapper around the last from highest to lowest. | ||
// Each mod loader needs to link up to the previous version's mod loader so that the mappings can be processed from the previous version. | ||
// "1.12.2-forge"(11202, "srg") { | ||
// "1.8.9-forge"(10809, "srg") | ||
// } | ||
|
||
"1.8.9-forge"(10809, "srg") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,39 @@ | ||
package org.polyfrost.example; | ||
|
||
import org.polyfrost.example.command.ExampleCommand; | ||
import org.polyfrost.example.config.TestConfig; | ||
import cc.polyfrost.oneconfig.events.event.InitializationEvent; | ||
import org.polyfrost.example.config.ExampleConfig; | ||
import net.minecraftforge.fml.common.Mod; | ||
import cc.polyfrost.oneconfig.utils.commands.CommandManager; | ||
import net.minecraftforge.fml.common.event.FMLInitializationEvent; | ||
import org.polyfrost.oneconfig.api.commands.v1.CommandManager; | ||
|
||
/** | ||
* The entrypoint of the Example Mod that initializes it. | ||
* The entrypoint of the Example Mod which initializes it. | ||
* This is what is run when the game is started and typically how your mod will set up its functionality. | ||
* | ||
* @see Mod | ||
* @see InitializationEvent | ||
*/ | ||
@Mod(modid = ExampleMod.MODID, name = ExampleMod.NAME, version = ExampleMod.VERSION) | ||
@Mod(modid = ExampleMod.ID, name = ExampleMod.NAME, version = ExampleMod.VERSION) | ||
public class ExampleMod { | ||
|
||
// Sets the variables from `gradle.properties`. See the `blossom` config in `build.gradle.kts`. | ||
public static final String MODID = "@ID@"; | ||
public static final String NAME = "@NAME@"; | ||
public static final String VERSION = "@VER@"; | ||
@Mod.Instance(MODID) | ||
// Sets the variables from `gradle.properties`. Depends on the `bloom` DGT plugin. | ||
public static final String ID = "@MOD_ID@"; | ||
public static final String NAME = "@MOD_NAME@"; | ||
public static final String VERSION = "@MOD_VERSION@"; | ||
|
||
@Mod.Instance(ID) | ||
public static ExampleMod INSTANCE; // Adds the instance of the mod, so we can access other variables. | ||
public static TestConfig config; | ||
|
||
private static ExampleConfig config; | ||
|
||
// Register the config and commands. | ||
@Mod.EventHandler | ||
public void onInit(FMLInitializationEvent event) { | ||
config = new TestConfig(); | ||
CommandManager.INSTANCE.registerCommand(new ExampleCommand()); | ||
config = new ExampleConfig(); | ||
CommandManager.registerCommand(new ExampleCommand()); | ||
} | ||
|
||
public static ExampleConfig getConfig() { | ||
return config; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.