diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml new file mode 100644 index 00000000..94e3ee59 --- /dev/null +++ b/.github/workflows/workflow.yml @@ -0,0 +1,43 @@ +name: BuildMod.yml +on: + workflow_dispatch: + inputs: + is-release: + description: 'Publish release to Github' + required: false + default: false + type: boolean + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Setup Java 17 + run: echo "JAVA_HOME=$JAVA_HOME_17_X64" >> "$GITHUB_ENV" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + with: + cache-disabled: ${{ inputs.is-release }} + cache-read-only: false + + - name: Make gradlew executable + run: chmod +x ./gradlew + + - name: Build + run: ./gradlew build + + # - name: Run Gametests + # if: ${{ !inputs.is-release }} + # run: ./gradlew runGameTestServer + + - name: Publish + # if: ${{ inputs.is-release }} + env: +# MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} +# CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }} + GITHUB_TOKEN: ${{ secrets.BUILD_GITHUB_TOKEN }} + run: ./gradlew publishMods \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 9c99e0c7..0b5296bf 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,63 +3,75 @@ "configurations": [ { "type": "java", - "name": "runClient", "request": "launch", - "mainClass": "cpw.mods.bootstraplauncher.BootstrapLauncher", + "name": "Client", + "presentation": { + "group": "Mod Development - CreateNuclearForge", + "order": 0 + }, "projectName": "CreateNuclearForge", + "mainClass": "net.neoforged.devlaunch.Main", + "args": [ + "@C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\build\\moddev\\clientRunProgramArgs.txt" + ], + "vmArgs": [ + "@C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\build\\moddev\\clientRunVmArgs.txt", + "-Dfml.modFolders\u003dcreatenuclear%%C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\bin\\main" + ], "cwd": "${workspaceFolder}\\run", - "vmArgs": "-Dforge.logging.console.level\u003ddebug -Dforge.logging.markers\u003dREGISTRIES \"-DlegacyClassPath.file\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge\\build\\classpath\\runClient_minecraftClasspath.txt\" -Dmixin.env.remapRefMap\u003dtrue \"-Dmixin.env.refMapRemappingFile\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge/build/createSrgToMcp/output.srg\" \"-Dnet.minecraftforge.gradle.GradleStart.srg.srg-mcp\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge\\build\\createSrgToMcp\\output.srg\" -DignoreList\u003dbootstraplauncher,securejarhandler,asm-commons,asm-util,asm-analysis,asm-tree,asm,JarJarFileSystems,client-extra,fmlcore,javafmllanguage,lowcodelanguage,mclanguage,forge- -DmergeModules\u003djna-5.10.0.jar,jna-platform-5.10.0.jar -Dforge.enableGameTest\u003dtrue -Dmixin.debug.verbose\u003dtrue -Dmixin.debug.export\u003dtrue -Djava.net.preferIPv6Addresses\u003dsystem -p \"C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\cpw.mods\\bootstraplauncher\\1.1.2\\c546e00443d8432cda6baa1c860346980742628\\bootstraplauncher-1.1.2.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\cpw.mods\\securejarhandler\\2.1.10\\51e6a22c6c716beb11e244bf5b8be480f51dd6b5\\securejarhandler-2.1.10.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-commons\\9.5\\19ab5b5800a3910d30d3a3e64fdb00fd0cb42de0\\asm-commons-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-util\\9.5\\64b5a1fc8c1b15ed2efd6a063e976bc8d3dc5ffe\\asm-util-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-analysis\\9.5\\490bacc77de7cbc0be1a30bb3471072d705be4a4\\asm-analysis-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-tree\\9.5\\fd33c8b6373abaa675be407082fdfda35021254a\\asm-tree-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm\\9.5\\dc6ea1875f4d64fbc85e1691c95b96a3d8569c90\\asm-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\net.minecraftforge\\JarJarFileSystems\\0.3.19\\2464eb7d6b9ddb9db36a82cf8a95193e5c6fe020\\JarJarFileSystems-0.3.19.jar\" --add-modules ALL-MODULE-PATH --add-opens java.base/java.util.jar\u003dcpw.mods.securejarhandler --add-opens java.base/java.lang.invoke\u003dcpw.mods.securejarhandler --add-exports java.base/sun.security.util\u003dcpw.mods.securejarhandler --add-exports jdk.naming.dns/com.sun.jndi.dns\u003djava.naming -XX:HeapDumpPath\u003dMojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump", - "args": "--launchTarget forgeclientuserdev --version MOD_DEV --assetIndex 5 --assetsDir \"C:\\Users\\Jean Paul\\.gradle\\caches\\forge_gradle\\assets\" --gameDir . --fml.forgeVersion 47.2.6 --fml.mcVersion 1.20.1 --fml.forgeGroup net.minecraftforge --fml.mcpVersion 20230612.114412 --mixin.config createnuclear.forge.mixins.json", "env": { - "MOD_CLASSES": "createnuclear%%${workspaceFolder}\\build\\resources\\main;createnuclear%%${workspaceFolder}\\build\\classes\\java\\main", - "MCP_MAPPINGS": "parchment_2023.09.03-1.20.1" + "MOD_CLASSES": "createnuclear%%C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\bin\\main" }, - "preLaunchTask": "prepareRunClientCompile" + "console": "internalConsole", + "shortenCommandLine": "none" }, { "type": "java", - "name": "runData", "request": "launch", - "mainClass": "cpw.mods.bootstraplauncher.BootstrapLauncher", + "name": "Data", + "presentation": { + "group": "Mod Development - CreateNuclearForge", + "order": 1 + }, "projectName": "CreateNuclearForge", + "mainClass": "net.neoforged.devlaunch.Main", + "args": [ + "@C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\build\\moddev\\dataRunProgramArgs.txt" + ], + "vmArgs": [ + "@C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\build\\moddev\\dataRunVmArgs.txt", + "-Dfml.modFolders\u003dcreatenuclear%%C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\bin\\main" + ], "cwd": "${workspaceFolder}\\run", - "vmArgs": "-Dforge.logging.console.level\u003ddebug -Dforge.logging.markers\u003dREGISTRIES,REGISTRYDUMP \"-DlegacyClassPath.file\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge\\build\\classpath\\runData_minecraftClasspath.txt\" -Dmixin.env.remapRefMap\u003dtrue \"-Dmixin.env.refMapRemappingFile\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge/build/createSrgToMcp/output.srg\" \"-Dnet.minecraftforge.gradle.GradleStart.srg.srg-mcp\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge\\build\\createSrgToMcp\\output.srg\" -DignoreList\u003dbootstraplauncher,securejarhandler,asm-commons,asm-util,asm-analysis,asm-tree,asm,JarJarFileSystems,client-extra,fmlcore,javafmllanguage,lowcodelanguage,mclanguage,forge- -DmergeModules\u003djna-5.10.0.jar,jna-platform-5.10.0.jar -Dmixin.debug.verbose\u003dtrue -Dmixin.debug.export\u003dtrue -Djava.net.preferIPv6Addresses\u003dsystem -p \"C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\cpw.mods\\bootstraplauncher\\1.1.2\\c546e00443d8432cda6baa1c860346980742628\\bootstraplauncher-1.1.2.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\cpw.mods\\securejarhandler\\2.1.10\\51e6a22c6c716beb11e244bf5b8be480f51dd6b5\\securejarhandler-2.1.10.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-commons\\9.5\\19ab5b5800a3910d30d3a3e64fdb00fd0cb42de0\\asm-commons-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-util\\9.5\\64b5a1fc8c1b15ed2efd6a063e976bc8d3dc5ffe\\asm-util-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-analysis\\9.5\\490bacc77de7cbc0be1a30bb3471072d705be4a4\\asm-analysis-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-tree\\9.5\\fd33c8b6373abaa675be407082fdfda35021254a\\asm-tree-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm\\9.5\\dc6ea1875f4d64fbc85e1691c95b96a3d8569c90\\asm-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\net.minecraftforge\\JarJarFileSystems\\0.3.19\\2464eb7d6b9ddb9db36a82cf8a95193e5c6fe020\\JarJarFileSystems-0.3.19.jar\" --add-modules ALL-MODULE-PATH --add-opens java.base/java.util.jar\u003dcpw.mods.securejarhandler --add-opens java.base/java.lang.invoke\u003dcpw.mods.securejarhandler --add-exports java.base/sun.security.util\u003dcpw.mods.securejarhandler --add-exports jdk.naming.dns/com.sun.jndi.dns\u003djava.naming", - "args": "--launchTarget forgedatauserdev --assetIndex 5 --assetsDir \"C:\\Users\\Jean Paul\\.gradle\\caches\\forge_gradle\\assets\" --gameDir . --fml.forgeVersion 47.2.6 --fml.mcVersion 1.20.1 --fml.forgeGroup net.minecraftforge --fml.mcpVersion 20230612.114412 --mod createnuclear --all --output \"C:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge\\src\\generated\\resources\" --existing \"C:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge\\src\\main\\resources\" --mixin.config createnuclear.forge.mixins.json", "env": { - "MOD_CLASSES": "createnuclear%%${workspaceFolder}\\build\\resources\\main;createnuclear%%${workspaceFolder}\\build\\classes\\java\\main", - "MCP_MAPPINGS": "parchment_2023.09.03-1.20.1" + "MOD_CLASSES": "createnuclear%%C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\bin\\main" }, - "preLaunchTask": "prepareRunDataCompile" + "console": "internalConsole", + "shortenCommandLine": "none" }, { "type": "java", - "name": "runGameTestServer", "request": "launch", - "mainClass": "cpw.mods.bootstraplauncher.BootstrapLauncher", - "projectName": "CreateNuclearForge", - "cwd": "${workspaceFolder}\\run\\gametest", - "vmArgs": "-Dforge.logging.console.level\u003ddebug -Dforge.logging.markers\u003dREGISTRIES \"-DlegacyClassPath.file\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge\\build\\classpath\\runGameTestServer_minecraftClasspath.txt\" -Dmixin.env.remapRefMap\u003dtrue \"-Dmixin.env.refMapRemappingFile\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge/build/createSrgToMcp/output.srg\" \"-Dnet.minecraftforge.gradle.GradleStart.srg.srg-mcp\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge\\build\\createSrgToMcp\\output.srg\" -DignoreList\u003dbootstraplauncher,securejarhandler,asm-commons,asm-util,asm-analysis,asm-tree,asm,JarJarFileSystems,client-extra,fmlcore,javafmllanguage,lowcodelanguage,mclanguage,forge- -DmergeModules\u003djna-5.10.0.jar,jna-platform-5.10.0.jar -Dmixin.debug.verbose\u003dtrue -Dmixin.debug.export\u003dtrue -Djava.net.preferIPv6Addresses\u003dsystem -p \"C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\cpw.mods\\bootstraplauncher\\1.1.2\\c546e00443d8432cda6baa1c860346980742628\\bootstraplauncher-1.1.2.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\cpw.mods\\securejarhandler\\2.1.10\\51e6a22c6c716beb11e244bf5b8be480f51dd6b5\\securejarhandler-2.1.10.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-commons\\9.5\\19ab5b5800a3910d30d3a3e64fdb00fd0cb42de0\\asm-commons-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-util\\9.5\\64b5a1fc8c1b15ed2efd6a063e976bc8d3dc5ffe\\asm-util-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-analysis\\9.5\\490bacc77de7cbc0be1a30bb3471072d705be4a4\\asm-analysis-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-tree\\9.5\\fd33c8b6373abaa675be407082fdfda35021254a\\asm-tree-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm\\9.5\\dc6ea1875f4d64fbc85e1691c95b96a3d8569c90\\asm-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\net.minecraftforge\\JarJarFileSystems\\0.3.19\\2464eb7d6b9ddb9db36a82cf8a95193e5c6fe020\\JarJarFileSystems-0.3.19.jar\" --add-modules ALL-MODULE-PATH --add-opens java.base/java.util.jar\u003dcpw.mods.securejarhandler --add-opens java.base/java.lang.invoke\u003dcpw.mods.securejarhandler --add-exports java.base/sun.security.util\u003dcpw.mods.securejarhandler --add-exports jdk.naming.dns/com.sun.jndi.dns\u003djava.naming", - "args": "--launchTarget forgegametestserveruserdev --gameDir . --fml.forgeVersion 47.2.6 --fml.mcVersion 1.20.1 --fml.forgeGroup net.minecraftforge --fml.mcpVersion 20230612.114412 --mixin.config createnuclear.forge.mixins.json", - "env": { - "MOD_CLASSES": "createnuclear%%${workspaceFolder}\\build\\resources\\main;createnuclear%%${workspaceFolder}\\build\\classes\\java\\main", - "MCP_MAPPINGS": "parchment_2023.09.03-1.20.1" + "name": "Server", + "presentation": { + "group": "Mod Development - CreateNuclearForge", + "order": 2 }, - "preLaunchTask": "prepareRunGameTestServerCompile" - }, - { - "type": "java", - "name": "runServer", - "request": "launch", - "mainClass": "cpw.mods.bootstraplauncher.BootstrapLauncher", "projectName": "CreateNuclearForge", + "mainClass": "net.neoforged.devlaunch.Main", + "args": [ + "@C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\build\\moddev\\serverRunProgramArgs.txt" + ], + "vmArgs": [ + "@C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\build\\moddev\\serverRunVmArgs.txt", + "-Dfml.modFolders\u003dcreatenuclear%%C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\bin\\main" + ], "cwd": "${workspaceFolder}\\run\\server", - "vmArgs": "-Dforge.logging.console.level\u003ddebug -Dforge.logging.markers\u003dREGISTRIES \"-DlegacyClassPath.file\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge\\build\\classpath\\runServer_minecraftClasspath.txt\" -Dmixin.env.remapRefMap\u003dtrue \"-Dmixin.env.refMapRemappingFile\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge/build/createSrgToMcp/output.srg\" \"-Dnet.minecraftforge.gradle.GradleStart.srg.srg-mcp\u003dC:\\Users\\Jean Paul\\Desktop\\mod_fabric\\CreateNuclearForge\\build\\createSrgToMcp\\output.srg\" -DignoreList\u003dbootstraplauncher,securejarhandler,asm-commons,asm-util,asm-analysis,asm-tree,asm,JarJarFileSystems,client-extra,fmlcore,javafmllanguage,lowcodelanguage,mclanguage,forge- -DmergeModules\u003djna-5.10.0.jar,jna-platform-5.10.0.jar -Dforge.enableGameTest\u003dtrue -Dmixin.debug.verbose\u003dtrue -Dmixin.debug.export\u003dtrue -Djava.net.preferIPv6Addresses\u003dsystem -p \"C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\cpw.mods\\bootstraplauncher\\1.1.2\\c546e00443d8432cda6baa1c860346980742628\\bootstraplauncher-1.1.2.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\cpw.mods\\securejarhandler\\2.1.10\\51e6a22c6c716beb11e244bf5b8be480f51dd6b5\\securejarhandler-2.1.10.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-commons\\9.5\\19ab5b5800a3910d30d3a3e64fdb00fd0cb42de0\\asm-commons-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-util\\9.5\\64b5a1fc8c1b15ed2efd6a063e976bc8d3dc5ffe\\asm-util-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-analysis\\9.5\\490bacc77de7cbc0be1a30bb3471072d705be4a4\\asm-analysis-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm-tree\\9.5\\fd33c8b6373abaa675be407082fdfda35021254a\\asm-tree-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\org.ow2.asm\\asm\\9.5\\dc6ea1875f4d64fbc85e1691c95b96a3d8569c90\\asm-9.5.jar;C:\\Users\\Jean Paul\\.gradle\\caches\\modules-2\\files-2.1\\net.minecraftforge\\JarJarFileSystems\\0.3.19\\2464eb7d6b9ddb9db36a82cf8a95193e5c6fe020\\JarJarFileSystems-0.3.19.jar\" --add-modules ALL-MODULE-PATH --add-opens java.base/java.util.jar\u003dcpw.mods.securejarhandler --add-opens java.base/java.lang.invoke\u003dcpw.mods.securejarhandler --add-exports java.base/sun.security.util\u003dcpw.mods.securejarhandler --add-exports jdk.naming.dns/com.sun.jndi.dns\u003djava.naming", - "args": "--launchTarget forgeserveruserdev --gameDir . --fml.forgeVersion 47.2.6 --fml.mcVersion 1.20.1 --fml.forgeGroup net.minecraftforge --fml.mcpVersion 20230612.114412 --mixin.config createnuclear.forge.mixins.json", "env": { - "MOD_CLASSES": "createnuclear%%${workspaceFolder}\\build\\resources\\main;createnuclear%%${workspaceFolder}\\build\\classes\\java\\main", - "MCP_MAPPINGS": "parchment_2023.09.03-1.20.1" + "MOD_CLASSES": "createnuclear%%C:\\Users\\giova\\bureau\\mod-fabric\\CreateNuclearForge\\bin\\main" }, - "preLaunchTask": "prepareRunServerCompile" + "console": "internalConsole", + "shortenCommandLine": "none" } ] } \ No newline at end of file diff --git a/build.gradle b/build.gradle index ab8ef641..ead357de 100644 --- a/build.gradle +++ b/build.gradle @@ -1,34 +1,35 @@ plugins { - id 'eclipse' - id 'idea' - id 'maven-publish' - id 'net.minecraftforge.gradle' version '[6.0,6.2)' - id 'org.spongepowered.mixin' version "${mixingradle_version}" - id 'org.parchmentmc.librarian.forgegradle' version "${librarian_version}" + id("idea") + id("eclipse") + id("maven-publish") + id("net.kyori.blossom") version "2.1.0" // https://github.com/KyoriPowered/blossom + id("dev.ithundxr.silk") version "0.11.15" // https://github.com/ithundxr/silk + id("me.modmuss50.mod-publish-plugin") version "0.8.4" // https://github.com/modmuss50/mod-publish-plugin + id("net.neoforged.moddev.legacyforge") version "2.0.107" // https://projects.neoforged.net/neoforged/ModDevGradle + id("org.jetbrains.gradle.plugin.idea-ext") version "1.1.8" // https://github.com/JetBrains/gradle-idea-ext-plugin } -version = mod_version + '-forge' -group = mod_group_id +apply(from: "./gradle/java.gradle") +boolean dev = System.getenv("RELEASE") == null || System.getenv("RELEASE") == "false" +ext.buildNumber = System.getenv("BUILD_NUMBER") +String gitHash = calculateGitHash() + (hasUnstaged() ? "-modified" : "") base { - archivesName = 'createnuclear' + archivesName = "createnuclear-${artifact_minecraft_version}" + group = mod_group_id + version = 'forge' + (dev && buildNumber != null ? "-${buildNumber}" : "") } -// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. -java.toolchain.languageVersion = JavaLanguageVersion.of(17) - println "Java: ${System.getProperty 'java.version'}, " + "JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), " + "Arch: ${System.getProperty 'os.arch'}" +Provider refmap mixin { - // add sourceSets.main, 'createnuclear.forge.refmap.json' - config 'createnuclear.forge.mixins.json' - - debug.verbose = true - debug.export = true + refmap = add(sourceSets.main, "createnuclear.refmap.json") + config "createnuclear.forge.mixins.json" } idea { @@ -38,114 +39,70 @@ idea { } } -minecraft { - // The mappings can be changed at any time and must be in the following format. - // Channel: Version: - // official MCVersion Official field/method names from Mojang mapping files - // parchment YYYY.MM.DD-MCVersion Open community-sourced parameter names and javadocs layered on top of official - // - // You must be aware of the Mojang license when using the 'official' or 'parchment' mappings. - // See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md - // - // Parchment is an unofficial project maintained by ParchmentMC, separate from MinecraftForge - // Additional setup is needed to use their mappings: https://parchmentmc.org/docs/getting-started - // - // Use non-default mappings at your own risk. They may not always work. - // Simply re-run your setup task after changing the mappings to update your workspace. - mappings channel: mapping_channel, version: mapping_version - mappings channel: 'parchment', version: '2023.09.03-1.20.1' - - accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') - - // When true, this property will have all Eclipse/IntelliJ IDEA run configurations run the "prepareX" task for the given run configuration before launching the game. - // In most cases, it is not necessary to enable. - // enableEclipsePrepareRuns = true - // enableIdeaPrepareRuns = true - - // This property allows configuring Gradle's ProcessResources task(s) to run on IDE output locations before launching the game. - // It is REQUIRED to be set to true for this template to function. - // See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html - copyIdeResources = true - - // When true, this property will add the folder name of all declared run configurations to generated IDE run configurations. - // The folder name can be set on a run configuration using the "folderName" property. - // By default, the folder name of a run configuration is the name of the Gradle project containing it. - // generateRunFolders = true - - // This property enables access transformers for use in development. - // They will be applied to the Minecraft artifact. - // The access transformer file can be anywhere in the project. - // However, it must be at "META-INF/accesstransformer.cfg" in the final mod jar to be loaded by Forge. - // This default location is a best practice to automatically put the file in the right place in the final jar. - // See https://docs.minecraftforge.net/en/latest/advanced/accesstransformers/ for more information. - // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') - - // Default run configurations. - // These can be tweaked, removed, or duplicated as needed. +legacyForge { + version = "$minecraft_version-$forge_version" + + // TODO - Try turning this on later + validateAccessTransformers = false + + if (file("src/main/resources/META-INF/accesstransformer.cfg").exists()) { + accessTransformers.from "src/main/resources/META-INF/accesstransformer.cfg" + } + + parchment { + minecraftVersion = minecraft_version + mappingsVersion = mapping_version + } + + mods { + createnuclear { + sourceSet(sourceSets.main) + } + } + runs { // applies to all the run configs below - configureEach { - workingDirectory project.file('run') - - // Recommended logging data for a userdev environment - // The markers can be added/remove as needed separated by commas. - // "SCAN": For mods scan. - // "REGISTRIES": For firing of registry events. - // "REGISTRYDUMP": For getting the contents of all registries. - property 'forge.logging.markers', 'REGISTRIES' - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels - property 'forge.logging.console.level', 'debug' - - property 'mixin.env.remapRefMap', 'true' - property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" - - mods { - "${mod_id}" { - source sourceSets.main - } - } + systemProperty("forge.logging.markers", "REGISTRIES") + systemProperty("forge.logging.console.level", "info") + jvmArguments = ["-XX:+IgnoreUnrecognizedVMOptions", "-XX:+AllowEnhancedClassRedefinition"] + //jvmArgs("-XX:-OmitStackTraceInFastThrow") // uncomment when you get exceptions with null messages etc + //jvmArgs "-XX:+UnlockCommercialFeatures" // uncomment for profiling + + systemProperty("mixin.debug.export", "true") + systemProperty("mixin.debug.verbose", "true") + + programArgument("-mixin.config=createnuclear.forge.mixins.json") } + client { - workingDirectory project.file('run') - // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. - //property 'mixin.env.remapRefMap', 'true' - //property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" - property("mixin.env.remapRefMap", "true") - property("mixin.env.refMapRemappingFile", "${projectDir}/build/createSrgToMcp/output.srg") + client() + + gameDirectory = project.file("run") } server { - workingDirectory project.file('run/server') - //property 'forge.enabledGameTestNamespaces', mod_id - //args '--nogui' - } + server() - // This run config launches GameTestServer and runs all registered gametests, then exits. - // By default, the server will crash when no gametests are provided. - // The gametest system is also enabled by default for other run configs under the /test command. - gameTestServer { - workingDirectory project.file('run/gametest') - //property 'forge.enabledGameTestNamespaces', mod_id + gameDirectory = project.file("run/server") } data { - // example of overriding the workingDirectory set in configureEach above - workingDirectory project.file('run') - property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP' - property 'forge.logging.console.level', 'debug' - - // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. - args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') + data() + + gameDirectory = project.file("run") + systemProperty("forge.logging.markers", "REGISTRIES,REGISTRYDUMP") + systemProperty("forge.logging.console.level", "debug") + programArguments.addAll( + "--mod", mod_id as String, + "--all", + "--output", file("src/generated/resources/").getAbsolutePath(), + "--existing", file("src/main/resources").getAbsolutePath() + ) } } } -// Include resources generated by data generators. -sourceSets.main.resources { srcDir 'src/generated/resources' } - repositories { maven { // location of the maven that hosts JEI files before January 2023 @@ -172,101 +129,194 @@ repositories { } dependencies { - - /** Setup **/ - minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" - - /* other minecraft dependencies are here */ - implementation fg.deobf("curse.maven:jade-324717:6106101") + modImplementation("curse.maven:jade-324717:6106101") + // compile against the JEI API but do not include it at runtime - compileOnly fg.deobf("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}") - compileOnly fg.deobf("mezz.jei:jei-${minecraft_version}-forge-api:${jei_version}") + modCompileOnly("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}") + modCompileOnly("mezz.jei:jei-${minecraft_version}-forge-api:${jei_version}") + // at runtime, use the full JEI jar for Forge - - implementation(fg.deobf("com.simibubi.create:create-${minecraft_version}:${create_version}:slim") { transitive = false }) - implementation(fg.deobf("net.createmod.ponder:Ponder-Forge-${minecraft_version}:${ponder_version}")) - compileOnly(fg.deobf("dev.engine-room.flywheel:flywheel-forge-api-${minecraft_version}:${flywheel_version}")) - runtimeOnly(fg.deobf("dev.engine-room.flywheel:flywheel-forge-${minecraft_version}:${flywheel_version}")) - implementation(fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}")) - compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:0.4.1")) - implementation("io.github.llamalad7:mixinextras-forge:0.4.1") - - switch (recipe_viewer.toLowerCase(Locale.ROOT)) { - case 'jei': runtimeOnly(fg.deobf("mezz.jei:jei-${minecraft_version}-forge:${jei_version}")); break + case 'jei': modRuntimeOnly("mezz.jei:jei-${minecraft_version}-forge:${jei_version}"); break case "disabled": break default: println("Unknown recipe viewer specified: $recipe_viewer. Must be JEI or disabled.") } - //runtimeOnly(fg.deobf("mezz.jei:jei-${create_minecraft_version}-forge:${flywheel_minecraft_version}")) + modImplementation("com.simibubi.create:create-${minecraft_version}:${create_version}:slim") { transitive = false } + modImplementation("net.createmod.ponder:Ponder-Forge-${minecraft_version}:${ponder_version}") + modCompileOnly("dev.engine-room.flywheel:flywheel-forge-api-${minecraft_version}:${flywheel_version}") + modRuntimeOnly("dev.engine-room.flywheel:flywheel-forge-${minecraft_version}:${flywheel_version}") + modImplementation("com.tterrag.registrate:Registrate:${registrate_version}") + + implementation("io.github.llamalad7:mixinextras-forge:${mixin_extras_version}") + compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:${mixin_extras_version}")) // https://discord.com/channels/313125603924639766/725850371834118214/910619168821354497 // Prevent Mixin annotation processor from getting into IntelliJ's annotation processor settings // This allows 'Settings > Build, Execution, and Deployment > Build Tools > Gradle > Build and run using' set to IntelliJ to work correctly - /*if (!Boolean.getBoolean('idea.sync.active')) { - annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' - }*/ - annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor" + if (!Boolean.getBoolean("idea.sync.active")) { + annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor" + } +} + +sourceSets.main { + resources { + srcDir("src/generated/resources") + exclude(".cache/") + } + + blossom.javaSources { + property("version", mod_version) + property("gitCommit", gitHash.toString()) + } } -// This block of code expands all declared replace properties in the specified resource targets. -// A missing property will result in an error. Properties are expanded using ${} Groovy notation. -// When "copyIdeResources" is enabled, this will also run before the game launches in IDE environments. -// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html -tasks.named('processResources', ProcessResources).configure { +processResources { var replaceProperties = [ - minecraft_version: minecraft_version, minecraft_version_range: minecraft_version_range, - forge_version: forge_version, forge_version_range: forge_version_range, - loader_version_range: loader_version_range, - mod_id: mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version, - mod_authors: mod_authors, mod_description: mod_description, - create_version_range: create_version_range, ponder_version: ponder_version + minecraft_version: minecraft_version, minecraft_version_range: minecraft_version_range, + forge_version: forge_version, forge_version_range: forge_version_range, + loader_version_range: loader_version_range, + mod_id: mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version, + mod_authors: mod_authors, mod_description: mod_description, + create_version_range: create_version_range, ponder_version: ponder_version ] - inputs.properties replaceProperties - filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) { - expand replaceProperties + [project: project] + // Replaces FML's magic file.jarVersion string with the correct version at build time. + replaceProperties.put("file", [jarVersion: project.version]) + + filesMatching(["META-INF/mods.toml"]) { + expand(replaceProperties) } } -// Example for how to get properties into the manifest for reading at runtime. -tasks.named('jar', Jar).configure { - manifest { - attributes([ - 'Specification-Title' : mod_id, - 'Specification-Vendor' : mod_authors, - 'Specification-Version' : '1', // We are version 1 of ourselves - 'Implementation-Title' : project.name, - 'Implementation-Version' : project.jar.archiveVersion, - 'Implementation-Vendor' : mod_authors, - 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") - ]) +jar { + String name = base.archivesName.get() + + from("LICENSE") { + rename { "${it}_${name}" } } - // This is the preferred method to reobfuscate your jar file - finalizedBy 'reobfJar' + manifest.attributes([ + "MixinConfigs": "createnuclear.forge.mixins.json", + "Git-Hash" : gitHash + ]) +} + +tasks.named("sourcesJar") { + manifest.attributes([ + "Git-Hash": gitHash + ]) } -// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing: -// tasks.named('publish').configure { -// dependsOn 'reobfJar' -// } +final slimJar = tasks.register("slimJar", Jar) { + archiveClassifier = "slim" + from(sourceSets.main.output) + from(refmap) + manifest.attributes([ + "MixinConfigs": "createnuclear.forge.mixins.json", + "Git-Hash" : gitHash + ]) +} +obfuscation.reobfuscate(slimJar, sourceSets.main) -// Example configuration to allow publishing using the maven-publish plugin -publishing { +project.publishing { publications { - register('mavenJava', MavenPublication) { - artifact jar + mavenJava(MavenPublication) { + artifactId base.archivesName.get() + from components.java + + artifact(tasks.reobfJar) { + classifier = "all" + } } } + repositories { - maven { - url "file://${project.projectDir}/mcmodsrepo" + if (project.hasProperty("mavenUsername") && project.hasProperty("mavenPassword") && project.hasProperty("mavenURL")) { + project.logger.lifecycle("Adding maven from secrets") + + maven { + credentials { + username = project.property("mavenUsername") as String + password = project.property("mavenPassword") as String + } + url = URI.create(project.property("mavenURL") as String) + } + } + + if (project.hasProperty("mavendir")) { + maven { url mavendir } + } + } +} + +publishMods { + file = reobfJar.archiveFile + changelog = file("CHANGELOG.md").text + type = STABLE + version = "$mod_version" + displayName = "$mod_name $mod_version for mc$minecraft_version" + modLoaders.add("forge") + // modLoaders.add("neoforge") + + // curseforge { + // accessToken = providers.environmentVariable("CURSEFORGE_TOKEN") + // projectId = "" + // minecraftVersions.add(minecraft_version) + + // javaVersions.add(JavaVersion.VERSION_17) + + // clientRequired = true + // serverRequired = true + // } + + // modrinth { + // accessToken = providers.environmentVariable("MODRINTH_TOKEN") + // projectId = "" + // minecraftVersions.add(minecraft_version) + + // requires { + // id = "LNytGWDc" + // slug = "Create" + // } + // optional { + // id = "u6dRKJwZ" + // slug = "JEI" + // } + // } + + github { + accessToken = providers.environmentVariable("GITHUB_TOKEN") + repository = "Create-Nuclear-Team/CreateNuclearForge" + commitish = gitHash + tagName = "v${mod_version}-${gitHash.substring(0,7)}" + + allowEmptyFiles = true + } +} + +String calculateGitHash() { + try { + ExecOutput output = providers.exec { + commandLine("git", "rev-parse", "HEAD") } + return output.standardOutput.asText.get().trim() + } catch (Throwable ignored) { + return "unknown" } } -tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation +boolean hasUnstaged() { + try { + ExecOutput output = providers.exec { + commandLine("git", "status", "--porcelain") + } + String result = output.standardOutput.asText.get().replace("/M gradlew(\\.bat)?/", "").trim() + if (!result.isEmpty()) + println("Found stageable results:\n ${result}\n") + return !result.isEmpty() + } catch (Throwable ignored) { + return false + } } diff --git a/gradle.properties b/gradle.properties index f05c9784..cf5f024d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,6 +16,7 @@ registrate_version = MC1.20-1.3.3 # The Minecraft version must agree with the Forge version to get a valid artifact minecraft_version=1.20.1 +artifact_minecraft_version = 1.20.1 # The Minecraft version range can use any release version of Minecraft as bounds. # Snapshots, pre-releases, and release candidates are not guaranteed to sort properly # as they do not follow standard versioning conventions. @@ -40,12 +41,14 @@ loader_version_range=[47,) # # Parchment is an unofficial project maintained by ParchmentMC, separate from Minecraft Forge. # Additional setup is needed to use their mappings, see https://parchmentmc.org/docs/getting-started -mapping_channel=official +mapping_channel=2023.09.03 +use_parchment = true # The mapping version to query from the mapping channel. # This must match the format required by the mapping channel. -mapping_version=1.20.1 +mapping_version=2023.09.03 mixingradle_version = 0.7.+ mixin_version = 0.8.5 +mixin_extras_version = 0.4.1 librarian_version = 1.+ ## Compact diff --git a/gradle/java.gradle b/gradle/java.gradle new file mode 100644 index 00000000..0d4e7bb9 --- /dev/null +++ b/gradle/java.gradle @@ -0,0 +1,39 @@ +apply plugin: 'java' + +java.toolchain.languageVersion = JavaLanguageVersion.of(17) +java.withSourcesJar() +java.withJavadocJar() + +jar { + manifest { + attributes([ + 'Specification-Title' : mod_name, + 'Specification-Vendor' : mod_authors, + 'Specification-Version' : project.jar.archiveVersion, + 'Implementation-Title' : project.name, + 'Implementation-Version' : project.jar.archiveVersion, + 'Implementation-Vendor' : mod_authors, + 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + 'Timestampe' : System.currentTimeMillis(), + 'Built-On-Java' : "${System.getProperty('java.vm.version')} (${System.getProperty('java.vm.vendor')})", + 'Built-On-Minecraft' : minecraft_version + ]) + } +} + +tasks.withType(JavaCompile).configureEach { + it.options.encoding = "UTF-8" + it.options.release = 17 +} + +// Disables Gradle's custom module metadata from being published to maven. The +// metadata includes mapped dependencies which are not reasonably consumable by +// other mod developers. +tasks.withType(GenerateModuleMetadata) { + enabled = false +} + +javadoc { + // Suppress annoying warnings when generating JavaDoc files. + options.addStringOption('Xdoclint:none', '-quiet') +} \ No newline at end of file