diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 753b8fe..0000000 --- a/build.gradle +++ /dev/null @@ -1,72 +0,0 @@ -plugins { - id "java" - id "maven-publish" - id "com.github.johnrengelman.shadow" version "8.1.1" -} - -group = "dev.plex" -version = "1.4-SNAPSHOT" -description = "Plex" - -subprojects { - apply plugin: "java" - apply plugin: "maven-publish" - apply plugin: "com.github.johnrengelman.shadow" - - repositories { - maven { - url = uri("https://repo.papermc.io/repository/maven-public/") - } - - maven { - url = uri("https://repository.apache.org/content/repositories/snapshots/") - } - - maven { - url = uri("https://repo.maven.apache.org/maven2/") - } - - maven { - url = uri("https://jitpack.io") - content { - includeGroup("com.github.MilkBowl") - } - } - - mavenCentral() - } - - java { - toolchain.languageVersion.set(JavaLanguageVersion.of(17)) - } - - tasks.withType(JavaCompile) { - options.encoding = "UTF-8" - } - - publishing { - repositories { - maven { - def releasesRepoUrl = uri("https://nexus.telesphoreo.me/repository/plex-releases/") - def snapshotsRepoUrl = uri("https://nexus.telesphoreo.me/repository/plex-snapshots/") - url = rootProject.version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - credentials { - username = System.getenv("plexUser") - password = System.getenv("plexPassword") - } - } - } - } -} - -clean { - dependsOn(":server:clean") - dependsOn(":proxy:clean") -} - -task copyJars(type: Copy, dependsOn: subprojects.jar) { - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - from(subprojects.jar) - from(subprojects.shadowJar) - into project.file('build/libs') -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..f84d7fb --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,86 @@ +plugins { + id("java") + id("maven-publish") + id("org.jetbrains.gradle.plugin.idea-ext") version "1.1.7" + id("net.kyori.blossom") version "2.1.0" + id("com.github.johnrengelman.shadow") version "8.1.1" +} + +group = "dev.plex" +version = "1.4-SNAPSHOT" +description = "Plex" + +subprojects { + apply(plugin = "java") + apply(plugin = "maven-publish") + apply(plugin = "org.jetbrains.gradle.plugin.idea-ext") + apply(plugin = "net.kyori.blossom") + apply(plugin = "com.github.johnrengelman.shadow") + + repositories { + maven { + url = uri("https://repo.papermc.io/repository/maven-public/") + } + + maven { + url = uri("https://repository.apache.org/content/repositories/snapshots/") + } + + maven { + url = uri("https://repo.maven.apache.org/maven2/") + } + + maven { + url = uri("https://jitpack.io") + content { + includeGroup("com.github.MilkBowl") + } + } + + mavenCentral() + } + + java { + toolchain.languageVersion.set(JavaLanguageVersion.of(17)) + } + + tasks { + compileJava { + options.encoding = Charsets.UTF_8.name() + } + javadoc { + options.encoding = Charsets.UTF_8.name() + } + processResources { + filteringCharset = Charsets.UTF_8.name() + } + } + + publishing { + repositories { + maven { + val releasesRepoUrl = uri("https://nexus.telesphoreo.me/repository/plex-releases/") + val snapshotsRepoUrl = uri("https://nexus.telesphoreo.me/repository/plex-snapshots/") + url = if (rootProject.version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl + credentials { + username = System.getenv("plexUser") + password = System.getenv("plexPassword") + } + } + } + } +} + +tasks.clean { + // Is there any way to not need to specify each subproject? + dependsOn(":server:clean") + dependsOn(":proxy:clean") +} + +tasks.create("copyJars") { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + // Is there any way to not need to specify each subproject? + from(tasks.getByPath(":server:shadowJar")) + from(tasks.getByPath(":proxy:jar")) + into(file("build/libs")) +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3fa8f86..1af9e09 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/proxy/build.gradle.kts b/proxy/build.gradle.kts index d7b39e8..f4dee7c 100644 --- a/proxy/build.gradle.kts +++ b/proxy/build.gradle.kts @@ -1,7 +1,3 @@ -plugins { - id("net.kyori.blossom") version "1.3.1" -} - group = rootProject.group version = rootProject.version description = "Plex-Velocity" @@ -24,8 +20,14 @@ tasks { } } -blossom { - replaceToken("@version@", rootProject.version) +sourceSets { + main { + blossom { + javaSources { + property("version", project.version.toString()) + } + } + } } publishing { diff --git a/proxy/src/main/java-templates/dev/plex/BuildParameters.java.peb b/proxy/src/main/java-templates/dev/plex/BuildParameters.java.peb new file mode 100644 index 0000000..1b03947 --- /dev/null +++ b/proxy/src/main/java-templates/dev/plex/BuildParameters.java.peb @@ -0,0 +1,5 @@ +package dev.plex; + +class BuildParameters { + public static final String VERSION = "{{ version }}"; +} \ No newline at end of file diff --git a/proxy/src/main/java/dev/plex/Plex.java b/proxy/src/main/java/dev/plex/Plex.java index ee3dca9..b0044e7 100644 --- a/proxy/src/main/java/dev/plex/Plex.java +++ b/proxy/src/main/java/dev/plex/Plex.java @@ -28,7 +28,7 @@ import java.util.logging.Logger; @Plugin( name = "Plex", id = "plex", - version = "@version@", + version = BuildParameters.VERSION, url = "https://plex.us.org", description = "Plex provides a new experience for freedom servers.", authors = {"Telesphoreo", "Taah"} diff --git a/server/build.gradle b/server/build.gradle deleted file mode 100644 index 6a0736f..0000000 --- a/server/build.gradle +++ /dev/null @@ -1,154 +0,0 @@ -plugins { - id "net.minecrell.plugin-yml.paper" version "0.6.0" -} - -dependencies { - library "org.projectlombok:lombok:1.18.30" - annotationProcessor "org.projectlombok:lombok:1.18.30" - library "org.json:json:20231013" - library "commons-io:commons-io:2.15.0" - library "redis.clients:jedis:5.0.2" - library "org.mariadb.jdbc:mariadb-java-client:3.2.0" - library "com.zaxxer:HikariCP:5.0.1" - library "org.apache.maven.resolver:maven-resolver-transport-http:1.9.16" - library "org.jetbrains:annotations:24.0.1" - compileOnly "dev.folia:folia-api:1.20.1-R0.1-SNAPSHOT" - compileOnly("com.github.MilkBowl:VaultAPI:1.7.1") { - exclude group: "org.bukkit", module: "bukkit" - } - implementation "org.bstats:bstats-base:3.0.2" - implementation "org.bstats:bstats-bukkit:3.0.2" -} - -group = rootProject.group -version = rootProject.version -description = "Plex-Server" - -shadowJar { - archiveBaseName.set("Plex") - archiveClassifier.set("") - relocate "org.bstats", "dev.plex" -} - -paper { - name = "Plex" - version = project.version - description = "Plex provides a new experience for freedom servers." - main = "dev.plex.Plex" - loader = "dev.plex.PlexLibraryManager" - website = "https://plex.us.org" - authors = ["Telesphoreo", "taahanis", "supernt"] - apiVersion = "1.19" - foliaSupported = true - generateLibrariesJson = true - // Load BukkitTelnet and LibsDisguises before Plex so the modules register properly - serverDependencies { - 'BukkitTelnet' { - required = false - load = 'BEFORE' - } - 'LibsDisguises' { - required = false - load = 'BEFORE' - } - 'Vault' { - required = false - load = 'BEFORE' - } - 'Essentials' { - required = false - load = 'BEFORE' - } - 'SlimeWorldManager' { - required = false - load = 'AFTER' - } - } -} - -String getGitHash() { - def stdout = new ByteArrayOutputStream() - try { - exec { - commandLine "git", "rev-parse", "--short", "HEAD" - standardOutput = stdout - ignoreExitValue = true - } - } catch (GradleException e) { - logger.error("Couldn't determine Git head because Git is not installed. " + e.getMessage()) - } - return stdout.size() > 0 ? stdout.toString().trim() : "unknown" -} - -String getBuildNumber() { - def stdout = new ByteArrayOutputStream() - try { - exec { - commandLine "git", "rev-list", "HEAD", "--count" - standardOutput = stdout - ignoreExitValue = true - } - } catch (GradleException e) { - logger.error("Couldn't determine build number because Git is not installed. " + e.getMessage()) - } - return stdout.size() ? stdout.toString().trim() + " (local)" : "unknown" -} - -static def getDate() { - return new Date().format("MM/dd/yyyy 'at' hh:mm:ss a z") -} - -task buildProperties { - ant.propertyfile(file: "$project.projectDir/src/main/resources/build.properties") { - entry(key: "buildAuthor", default: System.getenv("JENKINS_URL") != null ? "jenkins" : "unknown") - entry(key: "buildNumber", value: System.getenv("JENKINS_URL") != null ? System.getenv("BUILD_NUMBER") + " (Jenkins)" : getBuildNumber()) - entry(key: "buildDate", value: getDate()) - entry(key: "buildHead", value: getGitHash()) - } -} - -tasks { - build { - dependsOn(shadowJar) - finalizedBy(buildProperties) - } - - jar { - enabled = false - } - - shadowJar { - finalizedBy(rootProject.tasks.copyJars) - } - - javadoc { - options.memberLevel = JavadocMemberLevel.PRIVATE - } -} - -publishing { - publications { - maven(MavenPublication) { - pom.withXml { - def dependenciesNode = asNode().appendNode("dependencies") - configurations.getByName("library").getAllDependencies().each { dependency -> - dependenciesNode.appendNode("dependency").with { - it.appendNode("groupId", dependency.group) - it.appendNode("artifactId", dependency.name) - it.appendNode("version", dependency.version) - it.appendNode("scope", "provided") - } - } - configurations.getByName("implementation").getAllDependencies().each { dependency -> - dependenciesNode.appendNode("dependency").with { - it.appendNode("groupId", dependency.group) - it.appendNode("artifactId", dependency.name) - it.appendNode("version", dependency.version) - it.appendNode("scope", "runtime") - } - } - } - artifacts = [shadowJar] - } - } -} \ No newline at end of file diff --git a/server/build.gradle.kts b/server/build.gradle.kts new file mode 100644 index 0000000..cd04c79 --- /dev/null +++ b/server/build.gradle.kts @@ -0,0 +1,123 @@ +import net.minecrell.pluginyml.paper.PaperPluginDescription +import java.text.SimpleDateFormat +import java.util.* + +plugins { + id("org.ajoberstar.grgit") version "5.2.1" + id("net.minecrell.plugin-yml.paper") version "0.6.0" +} + +dependencies { + library("org.projectlombok:lombok:1.18.30") + annotationProcessor("org.projectlombok:lombok:1.18.30") + library("org.json:json:20231013") + library("commons-io:commons-io:2.15.1") + library("redis.clients:jedis:5.1.0") + library("org.mariadb.jdbc:mariadb-java-client:3.3.1") + library("com.zaxxer:HikariCP:5.1.0") + library("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") + library("org.jetbrains:annotations:24.1.0") + compileOnly("dev.folia:folia-api:1.20.2-R0.1-SNAPSHOT") + compileOnly("com.github.MilkBowl:VaultAPI:1.7.1") + implementation("org.bstats:bstats-base:3.0.2") + implementation("org.bstats:bstats-bukkit:3.0.2") +} + +group = rootProject.group +version = rootProject.version +description = "Plex-Server" + +paper { + name = "Plex" + version = rootProject.version.toString() + description = "Plex provides a new experience for freedom servers." + main = "dev.plex.Plex" + loader = "dev.plex.PlexLibraryManager" + website = "https://plex.us.org" + authors = listOf("Telesphoreo", "taahanis", "supernt") + apiVersion = "1.19" + foliaSupported = true + generateLibrariesJson = true + // Load BukkitTelnet and LibsDisguises before Plex so the modules register properly + serverDependencies { + register("BukkitTelnet") { + required = false + load = PaperPluginDescription.RelativeLoadOrder.BEFORE + } + register("LibsDisguises") { + required = false + load = PaperPluginDescription.RelativeLoadOrder.BEFORE + } + register("Vault") { + required = false + load = PaperPluginDescription.RelativeLoadOrder.BEFORE + } + register("Essentials") { + required = false + load = PaperPluginDescription.RelativeLoadOrder.BEFORE + } + register("SlimeWorldManager") { + required = false + load = PaperPluginDescription.RelativeLoadOrder.AFTER + } + } +} + +tasks { + build { + dependsOn(shadowJar) + } + + jar { + enabled = false + } + + sourceSets { + main { + blossom { + resources { + property("author", if (System.getenv("JENKINS_URL") != null) "jenkins" else System.getProperty("user.name")) + property("buildNumber", if (System.getenv("BUILD_NUMBER") != null) System.getenv("BUILD_NUMBER") else "unknown") + property("date", SimpleDateFormat("MM/dd/yyyy 'at' hh:mm:ss a z").format(Date())) + property("gitCommit", grgit.head().abbreviatedId) + } + } + } + } + + shadowJar { + archiveBaseName.set("Plex") + archiveClassifier.set("") + relocate("org.bstats", "dev.plex") + finalizedBy(rootProject.tasks["copyJars"]) + } + + javadoc { + options.memberLevel = JavadocMemberLevel.PRIVATE + } +} + +publishing { + publications { + create("maven") { + pom.withXml { + val dependenciesNode = asNode().appendNode("dependencies") + configurations.getByName("library").allDependencies.configureEach { + dependenciesNode.appendNode("dependency") + .appendNode("groupId", group).parent() + .appendNode("artifactId", name).parent() + .appendNode("version", version).parent() + .appendNode("scope", "provided").parent() + } + configurations.getByName("implementation").allDependencies.configureEach { + dependenciesNode.appendNode("dependency") + .appendNode("groupId", group).parent() + .appendNode("artifactId", name).parent() + .appendNode("version", version).parent() + .appendNode("scope", "provided").parent() + } + } + artifacts.artifact(tasks.shadowJar) + } + } +} \ No newline at end of file diff --git a/server/src/main/java/dev/plex/Plex.java b/server/src/main/java/dev/plex/Plex.java index be55b16..5811a45 100644 --- a/server/src/main/java/dev/plex/Plex.java +++ b/server/src/main/java/dev/plex/Plex.java @@ -1,6 +1,5 @@ package dev.plex; -import com.google.common.collect.Lists; import dev.plex.cache.DataUtils; import dev.plex.cache.PlayerCache; import dev.plex.config.Config; @@ -18,13 +17,11 @@ import dev.plex.storage.punishment.SQLNotes; import dev.plex.storage.punishment.SQLPunishment; import dev.plex.util.*; import dev.plex.util.redis.MessageUtil; -import dev.plex.util.sql.SQLUtil; import dev.plex.world.CustomWorld; import lombok.Getter; import lombok.Setter; import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.permission.Permission; -import org.apache.commons.lang3.StringUtils; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.plugin.RegisteredServiceProvider; @@ -46,7 +43,6 @@ public class Plex extends JavaPlugin public File modulesFolder; private StorageType storageType = StorageType.SQLITE; private SQLConnection sqlConnection; -// private MongoConnection mongoConnection; private RedisConnection redisConnection; private PlayerCache playerCache; diff --git a/server/src/main/java/dev/plex/command/impl/PlexCMD.java b/server/src/main/java/dev/plex/command/impl/PlexCMD.java index c7f6a23..147ca42 100644 --- a/server/src/main/java/dev/plex/command/impl/PlexCMD.java +++ b/server/src/main/java/dev/plex/command/impl/PlexCMD.java @@ -35,7 +35,7 @@ public class PlexCMD extends PlexCommand if (args.length == 0) { send(sender, mmString("Plex - A new freedom plugin.")); - send(sender, mmString("Plugin version: " + plugin.getDescription().getVersion() + " #" + BuildInfo.getNumber() + " Git: " + BuildInfo.getHead())); + send(sender, mmString("Plugin version: " + plugin.getDescription().getVersion() + " #" + BuildInfo.getNumber() + " Git: " + BuildInfo.getCommit())); send(sender, mmString("Authors: Telesphoreo, Taahh")); send(sender, mmString("Built by: " + BuildInfo.getAuthor() + " on " + BuildInfo.getDate())); send(sender, mmString("Run /plex modules to see a list of modules.")); diff --git a/server/src/main/java/dev/plex/util/BuildInfo.java b/server/src/main/java/dev/plex/util/BuildInfo.java index d1e987c..86ad092 100644 --- a/server/src/main/java/dev/plex/util/BuildInfo.java +++ b/server/src/main/java/dev/plex/util/BuildInfo.java @@ -8,30 +8,30 @@ import java.util.Properties; public class BuildInfo { - @Getter - public static String number; @Getter public static String author; @Getter + public static String commit; + @Getter public static String date; @Getter - public static String head; + public static String number; public void load(Plex plugin) { try { Properties props; - try (InputStream in = plugin.getResource("build.properties")) + try (InputStream in = plugin.getResource("build-vars.properties")) { props = new Properties(); props.load(in); } + author = props.getProperty("author", "unknown"); + commit = props.getProperty("gitCommit", "unknown"); + date = props.getProperty("date", "unknown"); number = props.getProperty("buildNumber", "unknown"); - author = props.getProperty("buildAuthor", "unknown"); - date = props.getProperty("buildDate", "unknown"); - head = props.getProperty("buildHead", "unknown"); } catch (Exception ignored) { diff --git a/server/src/main/java/dev/plex/util/UpdateChecker.java b/server/src/main/java/dev/plex/util/UpdateChecker.java index 60f02d6..effe147 100644 --- a/server/src/main/java/dev/plex/util/UpdateChecker.java +++ b/server/src/main/java/dev/plex/util/UpdateChecker.java @@ -96,7 +96,7 @@ public class UpdateChecker implements PlexBase // If it's -4, it hasn't checked for updates yet if (distance == -4) { - distance = fetchDistanceFromGitHub(REPO, BRANCH, BuildInfo.getHead()); + distance = fetchDistanceFromGitHub(REPO, BRANCH, BuildInfo.getCommit()); PlexLog.debug("Never checked for updates, checking now..."); } else @@ -104,7 +104,7 @@ public class UpdateChecker implements PlexBase // If the request isn't asked to be cached, fetch it if (!cached) { - distance = fetchDistanceFromGitHub(REPO, BRANCH, BuildInfo.getHead()); + distance = fetchDistanceFromGitHub(REPO, BRANCH, BuildInfo.getCommit()); PlexLog.debug("We have checked for updates before, but this request was not asked to be cached."); } else diff --git a/server/src/main/resource-templates/build-vars.properties b/server/src/main/resource-templates/build-vars.properties new file mode 100644 index 0000000..0b2c65c --- /dev/null +++ b/server/src/main/resource-templates/build-vars.properties @@ -0,0 +1,10 @@ +author={{ author | default("unknown") }} + +buildNumber={{ buildNumber }} + +date={{ date }} + +gitCommit={{ gitCommit | default("unknown") }} + +gitHead={{ gitHead | default("unknown") }} + diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 832865a..0000000 --- a/settings.gradle +++ /dev/null @@ -1,4 +0,0 @@ -rootProject.name = "Plex" -include 'server' -include 'proxy' - diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..b971942 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "Plex" +include("server", "proxy") \ No newline at end of file