ExtendedAE_Plus/build.gradle
2025-09-06 00:01:38 +08:00

301 lines
13 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

plugins {
id 'java-library'
id 'maven-publish'
id 'net.neoforged.moddev' version '2.0.107'
id 'idea'
}
tasks.named('wrapper', Wrapper).configure {
// Define wrapper values here so as to not have to always do so when updating gradlew.properties.
// Switching this to Wrapper.DistributionType.ALL will download the full gradle sources that comes with
// documentation attached on cursor hover of gradle classes and methods. However, this comes with increased
// file size for Gradle. If you do switch this to ALL, run the Gradle wrapper task twice afterwards.
// (Verify by checking gradle/wrapper/gradle-wrapper.properties to see if distributionUrl now points to `-all`)
distributionType = Wrapper.DistributionType.BIN
}
version = mod_version
group = mod_group_id
repositories {
// Add here additional repositories if required by some of the dependencies below.
maven {
name = "TerraformersMC"
url = uri("https://maven.terraformersmc.com/")
}
maven {
name = 'cursemaven'
url = uri("https://www.cursemaven.com")
}
maven {
name = "Modmaven"
url = uri("https://modmaven.dev/")
}
maven {
url = uri("https://maven.shedaniel.me/")
}
maven {
url = uri("https://maven.architectury.dev/")
}
maven {
url = uri("https://maven.latvian.dev/releases/")
}
mavenCentral()
}
base {
archivesName = mod_id
}
// Mojang ships Java 21 to end users in 1.21.1, so mods should target Java 21.
java.toolchain.languageVersion = JavaLanguageVersion.of(21)
neoForge {
// Specify the version of NeoForge to use.
version = project.neo_version
parchment {
mappingsVersion = project.parchment_mappings_version
minecraftVersion = project.parchment_minecraft_version
}
// This line is optional. Access Transformers are automatically detected
// accessTransformers = project.files('src/main/resources/META-INF/accesstransformer.cfg')
// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs {
client {
client()
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
}
server {
server()
programArgument '--nogui'
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
}
// 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 {
type = "gameTestServer"
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
}
data {
data()
// example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it
// gameDirectory = project.file('run-data')
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
}
// applies to all the run configs above
configureEach {
// 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.
systemProperty '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
logLevel = org.slf4j.event.Level.DEBUG
}
}
mods {
// define mod <-> source bindings
// these are used to tell the game which sources are for which mod
// multi mod projects should define one per mod
"${mod_id}" {
sourceSet(sourceSets.main)
}
}
}
// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }
// 暂时排除缺少依赖的可选联动源码,待补齐依赖后再启用
sourceSets.main.java {
// 广泛屏蔽迁移中的旧源码仅保留模板核心类ExtendedAEPlus、ExtendedAEPlusClient、Config
exclude 'com/extendedae_plus/NewIcon.java'
// 注意:不要屏蔽 api/**,我们有选择性 include 的接口文件需要参与编译
include 'com/extendedae_plus/api/**'
exclude 'com/extendedae_plus/client/**'
// 包含配置包
include 'com/extendedae_plus/config/**'
exclude 'com/extendedae_plus/content/**'
exclude 'com/extendedae_plus/hooks/**'
exclude 'com/extendedae_plus/init/**'
exclude 'com/extendedae_plus/integration/**'
exclude 'com/extendedae_plus/menu/**'
// 包含主 Mod 类
include 'com/extendedae_plus/ExtendedAEPlus.java'
// 仅保留 mixin 中的 accessor 参与编译
// 解除对 accessor 的屏蔽
include 'com/extendedae_plus/mixin/ae2/accessor/**'
// 启用对 PatternProviderLogic 的功能混入(高级阻挡/智能翻倍开关的持久化与逻辑)
include 'com/extendedae_plus/mixin/ae2/helpers/**'
// GUI 方案A解禁最小 GUI 混入
include 'com/extendedae_plus/mixin/ae2/client/gui/PatternProviderScreenMixin.java'
include 'com/extendedae_plus/mixin/ae2/menu/PatternProviderMenuAdvancedMixin.java'
include 'com/extendedae_plus/mixin/ae2/menu/PatternProviderMenuDoublingMixin.java'
// 注意:不要屏蔽 network/**,我们已选择性 include 需要的网络文件
// 仅解禁样板倍增核心所需的两个 util 文件
include 'com/extendedae_plus/util/PatternProviderDataUtil.java'
include 'com/extendedae_plus/util/PatternProviderUIHelper.java'
// GUI 与网络最小依赖
// 全量包含 api 包,防止个别接口遗漏
include 'com/extendedae_plus/api/**'
include 'com/extendedae_plus/util/ExtendedAELogger.java'
include 'com/extendedae_plus/network/ModNetwork.java'
include 'com/extendedae_plus/network/ToggleAdvancedBlockingC2SPacket.java'
include 'com/extendedae_plus/network/ToggleSmartDoublingC2SPacket.java'
// 仅 include 需要的 util 文件(不再对 util/** 做全局排除,以免误伤)
include 'com/extendedae_plus/util/PatternProviderDataUtil.java'
include 'com/extendedae_plus/util/PatternProviderUIHelper.java'
include 'com/extendedae_plus/util/ExtendedAELogger.java'
exclude 'com/extendedae_plus/wireless/**'
}
// Sets up a dependency configuration called 'localRuntime'.
// This configuration should be used instead of 'runtimeOnly' to declare
// a dependency that will be present for runtime testing but that is
// "optional", meaning it will not be pulled by dependents of this mod.
configurations {
runtimeClasspath.extendsFrom localRuntime
}
dependencies {
// Example optional mod dependency with JEI
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
// compileOnly "mezz.jei:jei-${mc_version}-common-api:${jei_version}"
// compileOnly "mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}"
// We add the full version to localRuntime, not runtimeOnly, so that we do not publish a dependency on it
// localRuntime "mezz.jei:jei-${mc_version}-neoforge:${jei_version}"
// Example mod dependency using a mod jar from ./libs with a flat dir repository
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
// The group id is ignored when searching -- in this case, it is "blank"
// implementation "blank:coolmod-${mc_version}:${coolmod_version}"
// Example mod dependency using a file as dependency
// implementation files("libs/coolmod-${mc_version}-${coolmod_version}.jar")
// Example project dependency using a sister or child project:
// implementation project(":myproject")
// For more info:
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
// http://www.gradle.org/docs/current/userguide/dependency_management.html
// --- Added dependencies for target mods ---
implementation "curse.maven:glodium-957920:5821676"
implementation "org.appliedenergistics:appliedenergistics2:19.2.8"
implementation "org.appliedenergistics:guideme:2.5.1"
// jarJar configuration not set in this build; use implementation for API for now
implementation "de.mari_023:ae2wtlib_api:19.2.0"
implementation "curse.maven:ex-pattern-provider-892005:6863556"
implementation "curse.maven:curios-309927:6529130"
compileOnly "curse.maven:applied-flux-965012:5614830"
compileOnly "dev.emi:emi-neoforge:1.1.10+1.21"
compileOnly "curse.maven:mega-cells-622112:6005043"
compileOnly "curse.maven:jade-324717:5427817"
compileOnly "me.shedaniel:RoughlyEnoughItems-neoforge:16.0.729"
compileOnly "mekanism:Mekanism:1.21.1-10.7.0.55"
compileOnly "curse.maven:applied-mekanistics-574300:5978711"
compileOnly "dev.latvian.mods:kubejs-neoforge:2101.7.1-build.188"
compileOnly "dev.latvian.mods:rhino:2101.2.5-build.54"
compileOnly "curse.maven:framedblocks-441647:6127891"
compileOnly "curse.maven:advancedae-1084104:6225993"
compileOnly "curse.maven:functional-storage-556861:6467726"
compileOnly "mezz.jei:jei-1.21.1-neoforge:19.21.0.247"
compileOnly "curse.maven:ae2-jei-integration-1074338:5748513"
// runtime test
runtimeOnly "curse.maven:applied-flux-965012:5614830"
runtimeOnly "de.mari_023:ae2wtlib:19.2.1"
runtimeOnly "curse.maven:jade-324717:5427817"
runtimeOnly "curse.maven:mega-cells-622112:6005043"
runtimeOnly "mekanism:Mekanism:1.21.1-10.7.0.55"
// setup Xei (EMI/REI/JEI) using project property 'use_Xei'
switch (project.findProperty('use_Xei') ?: 'emi') {
case 'emi':
runtimeOnly "dev.emi:emi-neoforge:1.1.10+1.21"
break
case 'rei':
runtimeOnly "me.shedaniel:RoughlyEnoughItems-neoforge:16.0.729"
runtimeOnly "dev.architectury:architectury-neoforge:13.0.1"
runtimeOnly "curse.maven:cloth-config-348521:5424576"
break
case 'jei':
runtimeOnly "mezz.jei:jei-1.21.1-neoforge:19.21.0.247"
runtimeOnly "curse.maven:ae2-jei-integration-1074338:5748513"
break
}
}
// 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.
var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) {
var replaceProperties = [
minecraft_version : minecraft_version,
minecraft_version_range: minecraft_version_range,
neo_version : neo_version,
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
]
inputs.properties replaceProperties
expand replaceProperties
from "src/main/templates"
into "build/generated/sources/modMetadata"
}
// Include the output of "generateModMetadata" as an input directory for the build
// this works with both building through Gradle and the IDE.
sourceSets.main.resources.srcDir generateModMetadata
// To avoid having to run "generateModMetadata" manually, make it run on every project reload
neoForge.ideSyncTask generateModMetadata
// Example configuration to allow publishing using the maven-publish plugin
publishing {
publications {
register('mavenJava', MavenPublication) {
from components.java
}
}
repositories {
maven {
url "file://${project.projectDir}/repo"
}
}
}
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}
// IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior.
idea {
module {
downloadSources = true
downloadJavadoc = true
}
}