ExtendedAE_Plus/build.gradle
2025-09-06 14:07:39 +08:00

292 lines
12 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 {
// 让编译期能解析 ExtendedAE 的类(如 GuiExPatternProvider、ActionEPPButton 等),作为编译期源引用
// 运行期仍由 CurseMaven 依赖提供真实模组 Jar
srcDir 'othermods/ExtendedAE-1.21-2.2.21-neoforge/src/main/java'
// 分阶段迁移:仅编译样板倍增与必要 GUI/网络相关的核心代码,屏蔽未迁移联动与旧版 Forge API 代码
include 'com/extendedae_plus/ExtendedAEPlus.java'
include 'com/extendedae_plus/ExtendedAEPlusClient.java'
include 'com/extendedae_plus/config/**'
include 'com/extendedae_plus/api/**'
// util
include 'com/extendedae_plus/util/ExtendedAELogger.java'
include 'com/extendedae_plus/util/PatternProviderDataUtil.java'
include 'com/extendedae_plus/util/PatternProviderUIHelper.java'
include 'com/extendedae_plus/util/PatternScaler.java'
include 'com/extendedae_plus/util/RequestedAmountHolder.java'
// util needed by network payloads (providers listing / upload helpers)
include 'com/extendedae_plus/util/ExtendedAEPatternUploadUtil.java'
// content最小集
include 'com/extendedae_plus/content/ClientPatternHighlightStore.java'
include 'com/extendedae_plus/content/ScaledProcessingPattern.java'
// client-side helpers needed by S2C payloads
include 'com/extendedae_plus/client/ClientAdvancedBlockingState.java'
include 'com/extendedae_plus/client/ui/ProviderSelectScreen.java'
// 网络NeoForge 1.21 Payload API版本
include 'com/extendedae_plus/network/ModNetwork.java'
include 'com/extendedae_plus/network/ToggleAdvancedBlockingC2SPacket.java'
include 'com/extendedae_plus/network/ToggleSmartDoublingC2SPacket.java'
include 'com/extendedae_plus/network/ScalePatternsC2SPacket.java'
include 'com/extendedae_plus/network/SetPatternHighlightS2CPacket.java'
include 'com/extendedae_plus/network/AdvancedBlockingSyncS2CPacket.java'
include 'com/extendedae_plus/network/ProvidersListS2CPacket.java'
include 'com/extendedae_plus/network/RequestProvidersListC2SPacket.java'
include 'com/extendedae_plus/network/SetProviderPageS2CPacket.java'
include 'com/extendedae_plus/network/CraftingMonitorJumpC2SPacket.java'
include 'com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java'
include 'com/extendedae_plus/network/OpenProviderUiC2SPacket.java'
include 'com/extendedae_plus/network/GlobalToggleProviderModesC2SPacket.java'
include 'com/extendedae_plus/network/UploadEncodedPatternToProviderC2SPacket.java'
// AE2 mixinaccessor/helpers/autopattern/gui/menu
include 'com/extendedae_plus/mixin/ae2/accessor/**'
include 'com/extendedae_plus/mixin/ae2/helpers/**'
include 'com/extendedae_plus/mixin/ae2/AEProcessingPatternMixin.java'
include 'com/extendedae_plus/mixin/ae2/autopattern/**'
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'
// ExtendedAE GUI 混入(右侧外列按钮与翻页),以及其依赖的 NewIcon 类
include 'com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternProviderMixin.java'
include 'com/extendedae_plus/NewIcon.java'
}
configurations {
runtimeClasspath.extendsFrom localRuntime
}
dependencies {
// --- 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:curios-309927:6529130"
compileOnly "curse.maven:ex-pattern-provider-892005:6863556"
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"
runtimeOnly "curse.maven:ex-pattern-provider-892005:6863556"
// 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
}
}