Migrate BuildBattle from Maven to Gradle (Purpur 1.19.4, GraalVM 17) #1

Merged
NotAlexNoyle merged 1 commits from codex/convert-minecraft-plugin-from-maven-to-gradle into master 2026-03-18 05:28:39 -04:00
10 changed files with 230 additions and 215 deletions

No files matched your search

+2
View File
@@ -4,3 +4,5 @@
/target/
/minecraft/
/docs/
/.gradle/
/build/
+161
View File
@@ -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<Boolean> 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>("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<AbstractArchiveTask>().configureEach {
isPreserveFileTimestamps = false
isReproducibleFileOrder = true
}
/* ----------------------------- Shadow -------------------------------- */
tasks.named<ShadowJar>("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>("jar") {
archiveClassifier.set("part")
}
tasks.named("build") {
dependsOn(tasks.named("spotlessApply"), tasks.named("shadowJar"))
}
/* --------------------------- Javac opts ------------------------------- */
tasks.withType<JavaCompile>().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<Jar>().configureEach { archiveBaseName.set("${project.name}-${rootProject.name}") }
}
+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
<module name="TreeWalker" />
</module>
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="21">
<profile kind="CodeFormatterProfile" name="BuildBattle" version="21">
<setting id="org.eclipse.jdt.core.compiler.compliance" value="17"/>
<setting id="org.eclipse.jdt.core.compiler.source" value="17"/>
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="17"/>
</profile>
</profiles>
+6
View File
@@ -0,0 +1,6 @@
eclipse {
classpath {
isDownloadJavadoc = true
isDownloadSources = true
}
}
Vendored Executable
+23
View File
@@ -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 \
"$@"
Vendored
+21
View File
@@ -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 %*
-214
View File
@@ -1,214 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~
~ BuildBattle - Ultimate building competition minigame
~ Copyright (C) 2021 Plugily Projects - maintained by Tigerpanzer_02, 2Wild4You and contributors
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
~
-->
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>plugily.projects</groupId>
<artifactId>buildbattle</artifactId>
<version>5.1.3</version>
<name>BuildBattle</name>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>papermc</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
<repository>
<id>plugilyprojects</id>
<url>https://maven.plugily.xyz/releases</url>
</repository>
<repository>
<id>plugilyprojects-snapshots</id>
<url>https://maven.plugily.xyz/snapshots</url>
</repository>
<repository>
<id>jitpack</id>
<url>https://jitpack.io</url>
</repository>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>citizens-repo</id>
<url>https://repo.citizensnpcs.co/</url>
</repository>
</repositories>
<dependencies>
<!--
Needed for HeadDatabase Conversion of JSON to YML
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
-->
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.21.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jetbrains/annotations -->
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>23.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>plugily.projects</groupId>
<artifactId>MiniGamesBox-Classic</artifactId>
<version>1.4.5</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizensapi</artifactId>
<version>2.0.26-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>ch.ethz.globis.phtree</groupId>
<artifactId>phtree</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.21.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.9.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.11.2</version>
<configuration>
<windowtitle>BuildBattle API docs for v${project.version}</windowtitle>
<description>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.
</description>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<relocations>
<relocation>
<pattern>com.zaxxer.hikari</pattern>
<shadedPattern>plugily.projects.buildbattle.database.hikari</shadedPattern>
</relocation>
<relocation>
<pattern>plugily.projects.minigamesbox</pattern>
<shadedPattern>plugily.projects.buildbattle.minigamesbox</shadedPattern>
</relocation>
</relocations>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
<!-- External beta versions discord deployer plugin -->
<plugin>
<groupId>plugily.projects</groupId>
<artifactId>betty-maven-plugin</artifactId>
<version>1.0.2</version>
<configuration>
<changelogFile>${project.basedir}/CHANGELOG.md</changelogFile>
</configuration>
</plugin>
<!-- External beta versions discord deployer plugin -->
</plugins>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>3.5.3</version>
</extension>
</extensions>
</build>
<distributionManagement>
<repository>
<id>Release</id>
<url>https://maven.plugily.xyz/releases</url>
</repository>
<snapshotRepository>
<id>Snapshot</id>
<url>https://maven.plugily.xyz/snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>
+1
View File
@@ -0,0 +1 @@
rootProject.name = "BuildBattle"
+1 -1
View File
@@ -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: