311 lines
13 KiB
Groovy
311 lines
13 KiB
Groovy
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'
|
||
// 广泛屏蔽迁移中的旧源码,仅保留模板核心类(ExtendedAEPlus、ExtendedAEPlusClient、Config)
|
||
// 注意:不要屏蔽 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/**'
|
||
// 启用 AEProcessingPattern 的 mixin(提供可缩放标记)
|
||
include 'com/extendedae_plus/mixin/ae2/AEProcessingPatternMixin.java'
|
||
// 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'
|
||
// ExtendedAE GUI 混入(右侧外列按钮与翻页),以及其依赖的 NewIcon 类
|
||
// 仅包含 Provider GUI 混入(不要使用广域 exclude,以免覆盖 include)
|
||
include 'com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternProviderMixin.java'
|
||
include 'com/extendedae_plus/NewIcon.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 'com/extendedae_plus/network/ScalePatternsC2SPacket.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: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
|
||
}
|
||
}
|