diff --git a/.gitignore b/.gitignore index ea9594c3..4c0cf6a4 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ /target/ /minecraft/ /docs/ +/.gradle/ +/build/ diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..f2252410 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,161 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import org.gradle.api.attributes.Attribute +import org.gradle.api.tasks.bundling.AbstractArchiveTask +import org.gradle.api.tasks.compile.JavaCompile +import org.gradle.jvm.tasks.Jar +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.jvm.toolchain.JvmVendorSpec +import org.gradle.language.jvm.tasks.ProcessResources + +/* ------------------------------ Plugins ------------------------------ */ +plugins { + id("java") + id("java-library") + id("com.diffplug.spotless") version "6.25.0" + id("com.gradleup.shadow") version "8.3.9" + id("checkstyle") + eclipse + kotlin("jvm") version "2.1.21" +} + +extra["kotlinAttribute"] = Attribute.of("kotlin-tag", Boolean::class.javaObjectType) + +val kotlinAttribute: Attribute by rootProject.extra + +/* --------------------------- JDK / Kotlin ---------------------------- */ +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + vendor.set(JvmVendorSpec.GRAAL_VM) + } + + withSourcesJar() +} + +kotlin { + jvmToolchain(17) +} + +/* ----------------------------- Metadata ------------------------------ */ +group = "plugily.projects" +version = "5.1.3" + +description = "BuildBattle" + +val apiVersion = "1.19" + +/* ----------------------------- Resources ----------------------------- */ +tasks.named("processResources") { + val props = mapOf("version" to version, "apiVersion" to apiVersion) + inputs.properties(props) + filesMatching("plugin.yml") { expand(props) } + from("LICENSE.md") { into("/") } +} + +/* ---------------------------- Repos ---------------------------------- */ +repositories { + mavenCentral() + gradlePluginPortal() + maven { url = uri("https://repo.purpurmc.org/snapshots") } + maven { url = uri("https://maven.plugily.xyz/releases") } + maven { url = uri("https://maven.plugily.xyz/snapshots") } + maven { url = uri("https://repo.citizensnpcs.co/") } + maven { url = uri("https://jitpack.io") } + maven { url = uri("file://${System.getProperty("user.home")}/.m2/repository") } + System.getProperty("SELF_MAVEN_LOCAL_REPO")?.let { + val dir = file(it) + if (dir.isDirectory) { + println("Using SELF_MAVEN_LOCAL_REPO at: $it") + maven { url = uri("file://${dir.absolutePath}") } + } else { + logger.error("SELF_MAVEN_LOCAL_REPO was set but not found, defaulting to ~/.m2 for mavenLocal()") + mavenLocal() + } + } ?: mavenLocal() +} + +/* ---------------------- Java project deps ---------------------------- */ +dependencies { + compileOnly("org.purpurmc.purpur:purpur-api:1.19.4-R0.1-SNAPSHOT") + compileOnly("org.jetbrains:annotations:23.0.0") + compileOnly("net.citizensnpcs:citizensapi:2.0.26-SNAPSHOT") { + exclude(group = "ch.ethz.globis.phtree", module = "phtree") + } + implementation("plugily.projects:MiniGamesBox-Classic:1.4.5") { + attributes { attribute(kotlinAttribute, true) } + } +} + +apply(from = "eclipse.gradle.kts") + +/* ---------------------- Reproducible jars ---------------------------- */ +tasks.withType().configureEach { + isPreserveFileTimestamps = false + isReproducibleFileOrder = true +} + +/* ----------------------------- Shadow -------------------------------- */ +tasks.named("shadowJar") { + isEnableRelocation = true + relocationPrefix = "${project.group}.shadow" + relocate("com.zaxxer.hikari", "plugily.projects.buildbattle.database.hikari") + relocate("plugily.projects.minigamesbox", "plugily.projects.buildbattle.minigamesbox") + archiveClassifier.set("") + minimize() +} + +tasks.named("jar") { + archiveClassifier.set("part") +} + +tasks.named("build") { + dependsOn(tasks.named("spotlessApply"), tasks.named("shadowJar")) +} + +/* --------------------------- Javac opts ------------------------------- */ +tasks.withType().configureEach { + options.compilerArgs.add("-parameters") + options.isFork = true + options.compilerArgs.add("-Xlint:deprecation") + options.encoding = "UTF-8" + options.release.set(17) +} + +/* ----------------------------- Auto Formatting ------------------------ */ +spotless { + java { + eclipse().configFile("config/formatter/eclipse-java-formatter.xml") + leadingTabsToSpaces() + removeUnusedImports() + target("src/**/*.java") + } + kotlinGradle { + ktfmt().kotlinlangStyle().configure { it.setMaxWidth(120) } + target("build.gradle.kts", "settings.gradle.kts", "eclipse.gradle.kts") + } +} + +checkstyle { + toolVersion = "10.18.1" + configFile = file("config/checkstyle/checkstyle.xml") + isIgnoreFailures = true + isShowViolations = true +} + +tasks.named("compileJava") { + dependsOn("spotlessApply") +} + +tasks.named("spotlessCheck") { + dependsOn("spotlessApply") +} + +/* ------------------------------ Eclipse SHIM ------------------------- */ +subprojects { + apply(plugin = "java-library") + apply(plugin = "eclipse") + eclipse.project.name = "${project.name}-${rootProject.name}" + tasks.withType().configureEach { archiveBaseName.set("${project.name}-${rootProject.name}") } +} diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml new file mode 100644 index 00000000..f9f1807d --- /dev/null +++ b/config/checkstyle/checkstyle.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/config/formatter/eclipse-java-formatter.xml b/config/formatter/eclipse-java-formatter.xml new file mode 100644 index 00000000..345a2a28 --- /dev/null +++ b/config/formatter/eclipse-java-formatter.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/eclipse.gradle.kts b/eclipse.gradle.kts new file mode 100644 index 00000000..9e2f4978 --- /dev/null +++ b/eclipse.gradle.kts @@ -0,0 +1,6 @@ +eclipse { + classpath { + isDownloadJavadoc = true + isDownloadSources = true + } +} diff --git a/gradlew b/gradlew new file mode 100755 index 00000000..cc70b4e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,23 @@ +#!/bin/sh + +# Gradle startup script for POSIX generated for repository use. + +APP_HOME=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +if [ -n "$JAVA_HOME" ]; then + JAVACMD=$JAVA_HOME/bin/java +else + JAVACMD=java +fi + +if [ ! -x "$JAVACMD" ]; then + echo "ERROR: Java executable not found. Set JAVA_HOME to a valid JDK installation." >&2 + exit 1 +fi + +exec "$JAVACMD" \ + -Dorg.gradle.appname=gradlew \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000..97dba380 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,21 @@ +@ECHO OFF +SET DIRNAME=%~dp0 +IF "%DIRNAME%"=="" SET DIRNAME=. +SET APP_HOME=%DIRNAME% +SET CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +IF NOT "%JAVA_HOME%"=="" GOTO findJavaFromJavaHome +SET JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +IF %ERRORLEVEL% EQU 0 GOTO execute +ECHO ERROR: Java executable not found. Set JAVA_HOME to a valid JDK installation. +EXIT /B 1 + +:findJavaFromJavaHome +SET JAVA_EXE=%JAVA_HOME%\bin\java.exe +IF EXIST "%JAVA_EXE%" GOTO execute +ECHO ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +EXIT /B 1 + +:execute +"%JAVA_EXE%" -Dorg.gradle.appname=gradlew -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 784788e0..00000000 --- a/pom.xml +++ /dev/null @@ -1,214 +0,0 @@ - - - - - 4.0.0 - - plugily.projects - buildbattle - 5.1.3 - BuildBattle - - - 1.8 - UTF-8 - - - - - papermc - https://repo.papermc.io/repository/maven-public/ - - - plugilyprojects - https://maven.plugily.xyz/releases - - - plugilyprojects-snapshots - https://maven.plugily.xyz/snapshots - - - jitpack - https://jitpack.io - - - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - citizens-repo - https://repo.citizensnpcs.co/ - - - - - - - io.papermc.paper - paper-api - 1.21.4-R0.1-SNAPSHOT - provided - - - - org.jetbrains - annotations - 23.0.0 - provided - - - plugily.projects - MiniGamesBox-Classic - 1.4.5 - compile - true - - - net.citizensnpcs - citizensapi - 2.0.26-SNAPSHOT - provided - - - ch.ethz.globis.phtree - phtree - - - - - - - - - src/main/resources - true - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.14.0 - - ${java.version} - ${java.version} - UTF-8 - - - - org.apache.maven.plugins - maven-site-plugin - 3.21.0 - - - org.apache.maven.plugins - maven-deploy-plugin - 3.1.4 - - - org.apache.maven.plugins - maven-project-info-reports-plugin - 3.9.0 - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.11.2 - - BuildBattle API docs for v${project.version} - Minecraft building minigame. - The goal is to build the best you can! You must compete with other players in this building game. - Who will be the best? Have fun using it! Leave a good rating if you really like it. - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.4.2 - - - org.apache.maven.plugins - maven-shade-plugin - 3.6.0 - - - package - - shade - - - true - - - com.zaxxer.hikari - plugily.projects.buildbattle.database.hikari - - - plugily.projects.minigamesbox - plugily.projects.buildbattle.minigamesbox - - - false - - - - - - - - plugily.projects - betty-maven-plugin - 1.0.2 - - ${project.basedir}/CHANGELOG.md - - - - - - - org.apache.maven.wagon - wagon-ssh - 3.5.3 - - - - - - Release - https://maven.plugily.xyz/releases - - - Snapshot - https://maven.plugily.xyz/snapshots - - - diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..0eb49d7e --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "BuildBattle" diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 987c3834..12db68c2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,7 +3,7 @@ main: plugily.projects.buildbattle.Main authors: [ PlugilyProjects, Tigerpanzer_02, Tigerpanzer, Plajer, TomTheDeveloper ] version: ${version} softdepend: [ Vault, Citizens, PlaceholderAPI, Parties, Spigot-Party-API-PAF, PartyAndFriends, ViaVersion, ProtocolSupport ] -api-version: 1.13 +api-version: ${apiVersion} commands: buildbattle: