Files
EssentialsC/build.gradle
2026-04-21 16:20:12 +08:00

230 lines
7.5 KiB
Groovy

plugins {
id 'java'
id 'io.papermc.paperweight.userdev' version '2.0.0-beta.21'
id 'com.gradleup.shadow' version '8.3.6'
}
group = 'cn.infstar'
version = '1.3.0'
repositories {
mavenCentral()
maven {
name = 'papermc'
url = uri('https://repo.papermc.io/repository/maven-public/')
}
}
dependencies {
paperweight.paperDevBundle('1.21.11-R0.1-SNAPSHOT')
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
}
def excludedModules = project.hasProperty('excludeModules') ?
project.property('excludeModules').split(',')*.trim() : []
def includeBlocks = !excludedModules.contains('blocks')
def includePlayer = !excludedModules.contains('player')
def includeJeiFix = !excludedModules.contains('jei-fix')
def includeMobDrops = !excludedModules.contains('mob-drops')
println "\n📦 EssentialsC 模块配置:"
println " ✅ Core (核心)"
println " ${includeBlocks ? '✅' : '❌'} Blocks (便捷方块)"
println " ${includePlayer ? '✅' : '❌'} Player (玩家管理)"
println " ${includeJeiFix ? '✅' : '❌'} JEI Fix (JEI 修复)"
println " ${includeMobDrops ? '✅' : '❌'} Mob Drops (生物掉落物)"
println ""
sourceSets {
main {
java {
if (!includeBlocks) {
exclude '**/commands/WorkbenchCommand.java'
exclude '**/commands/AnvilCommand.java'
exclude '**/commands/CartographyTableCommand.java'
exclude '**/commands/GrindstoneCommand.java'
exclude '**/commands/LoomCommand.java'
exclude '**/commands/SmithingTableCommand.java'
exclude '**/commands/StonecutterCommand.java'
exclude '**/commands/EnderChestCommand.java'
exclude '**/commands/BlocksMenuCommand.java'
exclude '**/listeners/ShulkerBoxListener.java'
}
if (!includePlayer) {
exclude '**/commands/FlyCommand.java'
exclude '**/commands/HealCommand.java'
exclude '**/commands/FeedCommand.java'
exclude '**/commands/VanishCommand.java'
exclude '**/commands/SeenCommand.java'
exclude '**/commands/HatCommand.java'
exclude '**/commands/SuicideCommand.java'
exclude '**/commands/RepairCommand.java'
}
if (!includeJeiFix) {
exclude '**/listeners/JeiRecipeSyncListener.java'
}
if (!includeMobDrops) {
exclude '**/listeners/MobDropListener.java'
exclude '**/listeners/MobDropMenuListener.java'
exclude '**/commands/MobDropCommand.java'
}
}
}
}
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}
processResources {
filteringCharset = 'UTF-8'
inputs.property('version', project.version)
filesMatching('paper-plugin.yml') {
expand('version': project.version)
}
}
shadowJar {
enabled = false
}
// ========== 多版本构建任务 ==========
task shadowJarStandard(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
from sourceSets.main.output
configurations = [project.configurations.runtimeClasspath]
exclude '**/listeners/MobDropListener.class'
exclude '**/listeners/MobDropMenuListener.class'
exclude '**/commands/MobDropCommand.class'
archiveFileName.set("EssentialsC-${project.version}.jar")
}
task shadowJarAll(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
from sourceSets.main.output
configurations = [project.configurations.runtimeClasspath]
archiveFileName.set("EssentialsC-all-${project.version}.jar")
}
task shadowJarLite(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
from sourceSets.main.output
configurations = [project.configurations.runtimeClasspath]
exclude '**/commands/WorkbenchCommand.class'
exclude '**/commands/AnvilCommand.class'
exclude '**/commands/CartographyTableCommand.class'
exclude '**/commands/GrindstoneCommand.class'
exclude '**/commands/LoomCommand.class'
exclude '**/commands/SmithingTableCommand.class'
exclude '**/commands/StonecutterCommand.class'
exclude '**/commands/EnderChestCommand.class'
exclude '**/commands/BlocksMenuCommand.class'
exclude '**/listeners/ShulkerBoxListener.class'
archiveFileName.set("EssentialsC-lite-${project.version}.jar")
}
build {
dependsOn shadowJarAll
}
// ========== 部署任务 ==========
task deployToPaper12111(type: Copy) {
group = 'deployment'
description = '部署到 Paper 1.21.11 测试服务器(仅完整版)'
dependsOn shadowJarAll
from shadowJarAll
into "${projectDir}/test-server/paper-1.21.11/plugins"
doLast {
println "✅ 插件已部署到 Paper 1.21.11: ${projectDir}/test-server/paper-1.21.11/plugins"
}
}
task deployToPaper26 {
group = 'deployment'
description = '部署到 Paper 26.1.2 测试服务器(仅完整版)'
dependsOn shadowJarAll
doFirst {
def pluginsDir = file("${projectDir}/test-server/paper-26.1.2/plugins")
if (pluginsDir.exists()) {
// 删除所有 EssentialsC 相关的 JAR 文件
fileTree(pluginsDir).include('EssentialsC*.jar').each { file ->
println "🗑️ 删除旧插件: ${file.name}"
file.delete()
}
// 删除配置文件夹
def configDir = file("${pluginsDir}/EssentialsC")
if (configDir.exists()) {
println "🗑️ 删除旧配置文件夹"
configDir.deleteDir()
}
println "✅ 清理完成"
} else {
println "⚠️ plugins 目录不存在,跳过清理"
}
}
doLast {
copy {
from shadowJarAll.archiveFile
into "${projectDir}/test-server/paper-26.1.2/plugins"
}
println "✅ 插件已部署到 Paper 26.1.2: ${projectDir}/test-server/paper-26.1.2/plugins"
}
}
// Paper 26.1.2 一键构建和部署任务
task buildAndDeployToPaper26 {
group = 'deployment'
description = '一键构建并部署到 Paper 26.1.2'
dependsOn clean, deployToPaper26
}
// 默认部署到 Paper 1.21.11
task deployToTestServer {
dependsOn deployToPaper12111
}
build.finalizedBy deployToTestServer
task buildAllVersions {
group = 'build'
description = '构建所有版本的插件'
dependsOn shadowJarStandard, shadowJarAll, shadowJarLite
doLast {
println "\n🎉 所有版本构建完成!"
println "📦 标准版: EssentialsC-${project.version}.jar"
println "📦 完整版: EssentialsC-all-${project.version}.jar"
println "📦 轻量版: EssentialsC-lite-${project.version}.jar"
println "📁 输出目录: ${buildDir}/libs/"
def standardFile = file("${buildDir}/libs/EssentialsC-${project.version}.jar")
def allFile = file("${buildDir}/libs/EssentialsC-all-${project.version}.jar")
def liteFile = file("${buildDir}/libs/EssentialsC-lite-${project.version}.jar")
if (!standardFile.exists()) {
throw new GradleException("❌ 标准版文件不存在!")
}
if (!allFile.exists()) {
throw new GradleException("❌ 完整版文件不存在!")
}
if (!liteFile.exists()) {
throw new GradleException("❌ 轻量版文件不存在!")
}
println "✅ 所有文件验证通过!"
}
}