From 5cb23facc562f7ddb9662a59a3162979599a348f Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Sat, 8 Feb 2020 18:23:29 -0500 Subject: [PATCH 01/16] Initial commit --- LICENSE | 21 +++++++++++++++++++++ README.md | 2 ++ 2 files changed, 23 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b8f94e9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 SimpleMC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..2a2219f --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# mc-kotlin-plugin-template +Template/starter for creating kotlin minecraft plugins From a9afb11967d123ad097394c3fd6560469495cd64 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Sat, 8 Feb 2020 23:04:45 -0500 Subject: [PATCH 02/16] Features/plugin template (#2) * Added basic project template * Make gradle executable again * Fixed typos from templatizing SimpleHealthbars2 --- .github/workflows/pr-workflow.yml | 25 +++ .github/workflows/release-workflow.yml | 36 ++++ .gitignore | 105 ++++++++++ CHANGELOG.md | 8 + README.md | 11 +- build.gradle.kts | 117 +++++++++++ gradle.properties | 1 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 55616 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 188 ++++++++++++++++++ gradlew.bat | 100 ++++++++++ settings.gradle.kts | 1 + .../plugintemplate/KotlinPluginTemplate.kt | 20 ++ src/main/resources/config.yml | 1 + src/main/resources/plugin.yml | 6 + 15 files changed, 623 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/pr-workflow.yml create mode 100644 .github/workflows/release-workflow.yml create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100755 gradlew.bat create mode 100644 settings.gradle.kts create mode 100644 src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt create mode 100644 src/main/resources/config.yml create mode 100644 src/main/resources/plugin.yml diff --git a/.github/workflows/pr-workflow.yml b/.github/workflows/pr-workflow.yml new file mode 100644 index 0000000..6661a7c --- /dev/null +++ b/.github/workflows/pr-workflow.yml @@ -0,0 +1,25 @@ +name: PR +on: pull_request + +jobs: + build: + name: Gradle Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-java@v1 + with: + java-version: 11 + - uses: actions/cache@v1 + with: + path: ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} + - uses: actions/cache@v1 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-caches-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle-caches- + - uses: eskatos/gradle-command-action@v1 + with: + arguments: build diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml new file mode 100644 index 0000000..47f1773 --- /dev/null +++ b/.github/workflows/release-workflow.yml @@ -0,0 +1,36 @@ +name: Release +on: + push: + tags: + - 'release-*' + +jobs: + release: + name: Create Release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-java@v1 + with: + java-version: 11 + - name: Gradle Build + uses: eskatos/gradle-command-action@v1 + with: + arguments: build + - name: Extract version + uses: frabert/replace-string-action@master + id: format-version + with: + pattern: 'refs/tags/release-([0-9]+.[0-9]+.[0-9]+)' + string: ${{ github.ref }} + replace-with: '$1' + - name: Release + uses: docker://antonyurchenko/git-release:v3 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DRAFT_RELEASE: "true" + ALLOW_TAG_PREFIX: "true" + with: + args: | + build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}.jar + build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}-all.jar diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..327cf6d --- /dev/null +++ b/.gitignore @@ -0,0 +1,105 @@ + +# Created by https://www.gitignore.io/api/gradle,intellij+all +# Edit at https://www.gitignore.io/?templates=gradle,intellij+all + +### Intellij+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij+all Patch ### +# Ignores the whole .idea folder and all .iml files +# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 + +.idea/ + +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +### Gradle ### +.gradle +/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +### Gradle Patch ### +**/build/ + +# End of https://www.gitignore.io/api/gradle,intellij+all diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5b47fe5 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,8 @@ +# Changelog + +## Unreleased +### Added +- Initial Release + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/README.md b/README.md index 2a2219f..06f0579 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,11 @@ # mc-kotlin-plugin-template -Template/starter for creating kotlin minecraft plugins +Opinionated template/starter for creating Minecraft plugins in Kotlin using the Spigot API + +## Features + +- Gradle axion-release-plugin for managing semver + - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made +- Github Actions to build PRs and automatically create Github releases when a release tag is pushed +- [`ktlint`](https://github.com/JLLeitschuh/ktlint-gradle) Gradle plugin +- Gradle build generates both a shadow jar which includes kotlin stdlib and a normal jar without + - Users with the stdlib already on the classpath can use the smaller jar diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..772cf2d --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,117 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import pl.allegro.tech.build.axion.release.domain.hooks.HookContext +import pl.allegro.tech.build.axion.release.domain.hooks.HooksConfig +import java.time.OffsetDateTime +import java.time.ZoneOffset +import java.time.format.DateTimeFormatter + +plugins { + kotlin("jvm") version "1.3.61" + id("com.github.johnrengelman.shadow") version "5.2.0" + id("pl.allegro.tech.build.axion-release") version "1.10.3" + id("org.jlleitschuh.gradle.ktlint") version "9.1.1" +} + +val repoRef = "SimpleMC\\/mc-kotlin-plugin-template" +val mcApiVersion = "1.15" + +group = "org.simplemc" +version = scmVersion.version + +scmVersion { + hooks(closureOf { + pre( + "fileUpdate", + mapOf( + "file" to "src/main/resources/plugin.yml", + "pattern" to KotlinClosure2({ v, _ -> "version: $v\\napi-version: \".+\"" }), + "replacement" to KotlinClosure2({ v, _ -> "version: $v\napi-version: \"$mcApiVersion\"" }) + ) + ) + // "normal" changelog update--changelog already contains a history + pre( + "fileUpdate", + mapOf( + "file" to "CHANGELOG.md", + "pattern" to KotlinClosure2({ v, _ -> + "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/release-$v\\.\\.\\.HEAD\$([\\s\\S]*))?\\z" + }), + "replacement" to KotlinClosure2({ v, c -> + """ + \[Unreleased\] + + ## \[$v\] - ${currentDateString()}$1 + \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/release-$v...HEAD + \[$v\]: https:\/\/github\.com\/$repoRef\/compare\/release-${c.previousVersion}...release-$v$2 + """.trimIndent() + }) + ) + ) + // first-time changelog update--changelog has only unreleased info + pre( + "fileUpdate", + mapOf( + "file" to "CHANGELOG.md", + "pattern" to KotlinClosure2({ v, _ -> + "Unreleased([\\s\\S]+?\\nand this project adheres to \\[Semantic Versioning\\]\\(https:\\/\\/semver\\.org\\/spec\\/v2\\.0\\.0\\.html\\).)\\s\\z" + }), + "replacement" to KotlinClosure2({ v, c -> + """ + \[Unreleased\] + + ## \[$v\] - ${currentDateString()}$1 + + \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/release-$v...HEAD + \[$v\]: https:\/\/github\.com\/$repoRef\/releases\/tag\/release-$v + """.trimIndent() + }) + ) + ) + pre("commit") + }) +} + +fun currentDateString() = OffsetDateTime.now(ZoneOffset.UTC).toLocalDate().format(DateTimeFormatter.ISO_DATE) + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +repositories { + jcenter() + maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") + maven("https://oss.sonatype.org/content/repositories/snapshots") +} + +dependencies { + implementation(kotlin("stdlib-jdk8")) + compileOnly(group = "org.spigotmc", name = "spigot-api", version = "$mcApiVersion+") +} + +ktlint { + // FIXME - ktlint bug(?): https://github.com/pinterest/ktlint/issues/527 + disabledRules.set(listOf("import-ordering")) +} + +tasks { + wrapper { + gradleVersion = "6.1.1" + distributionType = Wrapper.DistributionType.ALL + } + + withType { + kotlinOptions { + jvmTarget = "1.8" + } + } + + withType { + minimize() + } + + build { + dependsOn(":shadowJar") + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..7fc6f1f --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5c2d1cf016b3885f6930543d57b744ea8c220a1a GIT binary patch literal 55616 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100755 index 0000000..24467a1 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..89fd768 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "mc-kotlin-plugin-template" diff --git a/src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt b/src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt new file mode 100644 index 0000000..ba46947 --- /dev/null +++ b/src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt @@ -0,0 +1,20 @@ +package org.simplemc.plugintemplate + +import org.bukkit.plugin.java.JavaPlugin + +/** + * KotlinPluginTemplate plugin + */ +class KotlinPluginTemplate : JavaPlugin() { + + override fun onEnable() { + // ensure config file exists + saveDefaultConfig() + + logger.info("${description.name} version ${description.version} enabled!") + } + + override fun onDisable() { + logger.info("${description.name} disabled.") + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..e527e05 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1 @@ +someconfig: true diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..f8b6175 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,6 @@ +name: KotlinPluginTemplate +main: org.simplemc.plugintemplate.KotlinPluginTemplate +version: 0.1.0 +api-version: "1.15" +website: https://github.com/SimpleMC/mc-kotlin-plugin-template +author: tajobe From bcc168a2ca54cb35f060ff48af231d71e7b57c36 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Sun, 9 Feb 2020 21:24:48 -0500 Subject: [PATCH 03/16] Ensure the base jar is ready for use (#3) * Ensure the base jar is ready for use Standard jar is the full-fat jar with all dependencies (kotlin stdlib included) Added `nokt` task to create a shadowed jar excluding kotlin stdlib * Updated release action jar reference --- .github/workflows/release-workflow.yml | 2 +- README.md | 2 +- build.gradle.kts | 19 +++++++++++++++---- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml index 47f1773..8e99a8a 100644 --- a/.github/workflows/release-workflow.yml +++ b/.github/workflows/release-workflow.yml @@ -33,4 +33,4 @@ jobs: with: args: | build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}.jar - build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}-all.jar + build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}-nokt.jar diff --git a/README.md b/README.md index 06f0579..6347a0f 100644 --- a/README.md +++ b/README.md @@ -7,5 +7,5 @@ Opinionated template/starter for creating Minecraft plugins in Kotlin using the - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made - Github Actions to build PRs and automatically create Github releases when a release tag is pushed - [`ktlint`](https://github.com/JLLeitschuh/ktlint-gradle) Gradle plugin -- Gradle build generates both a shadow jar which includes kotlin stdlib and a normal jar without +- Gradle build generates a shadowed jar which includes kotlin stdlib and a `nokt` jar without - Users with the stdlib already on the classpath can use the smaller jar diff --git a/build.gradle.kts b/build.gradle.kts index 772cf2d..cc61258 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,4 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import pl.allegro.tech.build.axion.release.domain.hooks.HookContext import pl.allegro.tech.build.axion.release.domain.hooks.HooksConfig import java.time.OffsetDateTime @@ -101,17 +100,29 @@ tasks { distributionType = Wrapper.DistributionType.ALL } - withType { + compileKotlin { kotlinOptions { jvmTarget = "1.8" } } - withType { + // standard jar should be ready to go with all dependencies + shadowJar { minimize() + archiveClassifier.set("") + } + + // nokt jar without the kotlin runtime + register("nokt") { + minimize() + archiveClassifier.set("nokt") + + dependencies { + exclude("org.jetbrains.kotlin:kotlin-stdlib-jdk8") + } } build { - dependsOn(":shadowJar") + dependsOn(":shadowJar", ":nokt") } } From 152b180684db0b5439635a77ff572edaf7f6febf Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Mon, 10 Feb 2020 19:48:20 -0500 Subject: [PATCH 04/16] Fixed nokt task to actually include sources and dependencies (#4) --- build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index cc61258..975ab47 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -116,9 +116,11 @@ tasks { register("nokt") { minimize() archiveClassifier.set("nokt") + from(sourceSets.main.get().output) + configurations = listOf(project.configurations.runtimeClasspath.get()) dependencies { - exclude("org.jetbrains.kotlin:kotlin-stdlib-jdk8") + exclude(dependency("org.jetbrains.*:")) } } From 8fea6bc6b37f5ae0db3d2022a2c649c14bfe9359 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Thu, 24 Mar 2022 18:48:41 -0400 Subject: [PATCH 05/16] Update dependencies to latest and improve plugin artifacts (#6) * Update dependencies to latest and improve plugin artifacts Update java, kotlin, gradle, spigot, ktlint, etc Switch to incrementMinorIfNotOnRelease version incrementer Improved packaging/artifacts by providing a plugin jar that will load libs (via spigot's `libraries` in plugin.yml) and an "offline" shadowed/fat jar shadowJar dependency relocation to prevent classpath pollution Simplify automated CHANGELOG update by making the format predictable * \N sequence was not working for changelog regex, replace with negated \n * Use default 'v' tag prefix instead of 'release-' * Fix first tag link * Release version: 0.1.0 * Revert "Release version: 0.1.0" as it was just a test This reverts commit 919b163f1dc009ad4c7cb54e496ced292b201f05. * Add comment explaining the plugin.yml offline copy * Replace jcenter with mavenCentral --- .github/workflows/pr-workflow.yml | 19 +- .github/workflows/release-workflow.yml | 24 +-- CHANGELOG.md | 4 +- README.md | 5 +- build.gradle.kts | 166 ++++++++------- gradle.properties | 4 + gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 260 +++++++++++++---------- gradlew.bat | 25 +-- settings.gradle.kts | 8 + src/main/resources/plugin.yml | 6 +- 12 files changed, 280 insertions(+), 243 deletions(-) diff --git a/.github/workflows/pr-workflow.yml b/.github/workflows/pr-workflow.yml index 6661a7c..1b60a68 100644 --- a/.github/workflows/pr-workflow.yml +++ b/.github/workflows/pr-workflow.yml @@ -6,20 +6,11 @@ jobs: name: Gradle Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - uses: actions/setup-java@v1 + - uses: actions/checkout@v3 + - uses: actions/setup-java@v2 with: - java-version: 11 - - uses: actions/cache@v1 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - - uses: actions/cache@v1 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-caches-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle-caches- - - uses: eskatos/gradle-command-action@v1 + java-version: 17 + distribution: temurin + - uses: gradle/gradle-build-action@v2 with: arguments: build diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml index 8e99a8a..2ddd0a6 100644 --- a/.github/workflows/release-workflow.yml +++ b/.github/workflows/release-workflow.yml @@ -2,35 +2,27 @@ name: Release on: push: tags: - - 'release-*' + - "v[0-9]+.[0-9]+.[0-9]+" jobs: release: name: Create Release runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - uses: actions/setup-java@v1 + - uses: actions/checkout@v3 + - uses: actions/setup-java@v2 with: - java-version: 11 + java-version: 17 + distribution: temurin - name: Gradle Build - uses: eskatos/gradle-command-action@v1 + uses: gradle/gradle-build-action@v2 with: arguments: build - - name: Extract version - uses: frabert/replace-string-action@master - id: format-version - with: - pattern: 'refs/tags/release-([0-9]+.[0-9]+.[0-9]+)' - string: ${{ github.ref }} - replace-with: '$1' - name: Release - uses: docker://antonyurchenko/git-release:v3 + uses: docker://antonyurchenko/git-release:v4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DRAFT_RELEASE: "true" - ALLOW_TAG_PREFIX: "true" with: args: | - build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}.jar - build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}-nokt.jar + build/libs/*.jar diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b47fe5..dc9145e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,10 @@ # Changelog -## Unreleased +## [Unreleased] ### Added - Initial Release The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +[Unreleased]: https://github.com/SimpleMC/mc-kotlin-plugin-template/compare/5cb23facc562f7ddb9662a59a3162979599a348f...HEAD diff --git a/README.md b/README.md index 6347a0f..55ba7b3 100644 --- a/README.md +++ b/README.md @@ -7,5 +7,6 @@ Opinionated template/starter for creating Minecraft plugins in Kotlin using the - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made - Github Actions to build PRs and automatically create Github releases when a release tag is pushed - [`ktlint`](https://github.com/JLLeitschuh/ktlint-gradle) Gradle plugin -- Gradle build generates a shadowed jar which includes kotlin stdlib and a `nokt` jar without - - Users with the stdlib already on the classpath can use the smaller jar +- Gradle build generates a standard plugin jar which will download dependencies declared as +[`libraries`](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/plugin/PluginDescriptionFile.html#getLibraries()) in +`plugin.yml` and an "offline"/shadowed jar containing necessary dependencies diff --git a/build.gradle.kts b/build.gradle.kts index 975ab47..67dbd78 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,85 +1,72 @@ -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation +import org.yaml.snakeyaml.DumperOptions +import org.yaml.snakeyaml.Yaml import pl.allegro.tech.build.axion.release.domain.hooks.HookContext import pl.allegro.tech.build.axion.release.domain.hooks.HooksConfig import java.time.OffsetDateTime import java.time.ZoneOffset import java.time.format.DateTimeFormatter -plugins { - kotlin("jvm") version "1.3.61" - id("com.github.johnrengelman.shadow") version "5.2.0" - id("pl.allegro.tech.build.axion-release") version "1.10.3" - id("org.jlleitschuh.gradle.ktlint") version "9.1.1" +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath("org.yaml:snakeyaml:1.30") + } } -val repoRef = "SimpleMC\\/mc-kotlin-plugin-template" -val mcApiVersion = "1.15" +plugins { + kotlin("jvm") + id("com.github.johnrengelman.shadow") version "7.1.2" + id("pl.allegro.tech.build.axion-release") version "1.13.6" + id("org.jlleitschuh.gradle.ktlint") version "10.2.1" +} group = "org.simplemc" version = scmVersion.version +val mcApiVersion: String by project +val repoRef: String by project + scmVersion { - hooks(closureOf { - pre( - "fileUpdate", - mapOf( - "file" to "src/main/resources/plugin.yml", - "pattern" to KotlinClosure2({ v, _ -> "version: $v\\napi-version: \".+\"" }), - "replacement" to KotlinClosure2({ v, _ -> "version: $v\napi-version: \"$mcApiVersion\"" }) - ) - ) - // "normal" changelog update--changelog already contains a history - pre( - "fileUpdate", - mapOf( - "file" to "CHANGELOG.md", - "pattern" to KotlinClosure2({ v, _ -> - "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/release-$v\\.\\.\\.HEAD\$([\\s\\S]*))?\\z" - }), - "replacement" to KotlinClosure2({ v, c -> - """ - \[Unreleased\] - - ## \[$v\] - ${currentDateString()}$1 - \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/release-$v...HEAD - \[$v\]: https:\/\/github\.com\/$repoRef\/compare\/release-${c.previousVersion}...release-$v$2 - """.trimIndent() - }) - ) - ) - // first-time changelog update--changelog has only unreleased info - pre( - "fileUpdate", - mapOf( - "file" to "CHANGELOG.md", - "pattern" to KotlinClosure2({ v, _ -> - "Unreleased([\\s\\S]+?\\nand this project adheres to \\[Semantic Versioning\\]\\(https:\\/\\/semver\\.org\\/spec\\/v2\\.0\\.0\\.html\\).)\\s\\z" - }), - "replacement" to KotlinClosure2({ v, c -> - """ - \[Unreleased\] - - ## \[$v\] - ${currentDateString()}$1 - - \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/release-$v...HEAD - \[$v\]: https:\/\/github\.com\/$repoRef\/releases\/tag\/release-$v - """.trimIndent() - }) + versionIncrementer("incrementMinorIfNotOnRelease", mapOf("releaseBranchPattern" to "release/.+")) + + hooks( + closureOf { + pre( + "fileUpdate", + mapOf( + "file" to "CHANGELOG.md", + "pattern" to KotlinClosure2({ v, _ -> + "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/[^\\n]*\$([\\s\\S]*))?\\z" + }), + "replacement" to KotlinClosure2({ v, c -> + """ + \[Unreleased\] + + ## \[$v\] - ${currentDateString()}$1 + \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/v$v...HEAD + \[$v\]: https:\/\/github\.com\/$repoRef\/${if (c.previousVersion == v) "releases/tag/v$v" else "compare/v${c.previousVersion}...v$v"}${'$'}2 + """.trimIndent() + }) + ) ) - ) - pre("commit") - }) + pre("commit") + } + ) } fun currentDateString() = OffsetDateTime.now(ZoneOffset.UTC).toLocalDate().format(DateTimeFormatter.ISO_DATE) java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } } repositories { - jcenter() + mavenCentral() maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") maven("https://oss.sonatype.org/content/repositories/snapshots") } @@ -89,42 +76,57 @@ dependencies { compileOnly(group = "org.spigotmc", name = "spigot-api", version = "$mcApiVersion+") } -ktlint { - // FIXME - ktlint bug(?): https://github.com/pinterest/ktlint/issues/527 - disabledRules.set(listOf("import-ordering")) -} - tasks { wrapper { - gradleVersion = "6.1.1" + gradleVersion = "7.4.1" distributionType = Wrapper.DistributionType.ALL } - compileKotlin { - kotlinOptions { - jvmTarget = "1.8" + processResources { + val placeholders = mapOf( + "version" to version, + "apiVersion" to mcApiVersion, + "kotlinVersion" to project.properties["kotlinVersion"] + ) + + filesMatching("plugin.yml") { + expand(placeholders) + } + + // create an "offline" copy/variant of the plugin.yml with `libraries` omitted + doLast { + val resourcesDir = sourceSets.main.get().output.resourcesDir + val yamlDumpOptions = + // make it pretty for the people + DumperOptions().also { + it.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK) + it.setPrettyFlow(true) + } + val yaml = Yaml(yamlDumpOptions) + val pluginYml: Map = yaml.load(file("$resourcesDir/plugin.yml").inputStream()) + yaml.dump(pluginYml.filterKeys { it != "libraries" }, file("$resourcesDir/offline-plugin.yml").writer()) } } - // standard jar should be ready to go with all dependencies - shadowJar { - minimize() - archiveClassifier.set("") + jar { + exclude("offline-plugin.yml") } - // nokt jar without the kotlin runtime - register("nokt") { + // offline jar should be ready to go with all dependencies + shadowJar { minimize() - archiveClassifier.set("nokt") - from(sourceSets.main.get().output) - configurations = listOf(project.configurations.runtimeClasspath.get()) + archiveClassifier.set("offline") + exclude("plugin.yml") + rename("offline-plugin.yml", "plugin.yml") + } - dependencies { - exclude(dependency("org.jetbrains.*:")) - } + // avoid classpath conflicts/pollution via relocation + val configureShadowRelocation by registering(ConfigureShadowRelocation::class) { + target = shadowJar.get() + prefix = "${project.group}.${project.name.toLowerCase()}.libraries" } build { - dependsOn(":shadowJar", ":nokt") + dependsOn(shadowJar).dependsOn(configureShadowRelocation) } } diff --git a/gradle.properties b/gradle.properties index 7fc6f1f..0d870d0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,5 @@ kotlin.code.style=official + +kotlinVersion=1.6.10 +mcApiVersion=1.18 +repoRef=SimpleMC/mc-kotlin-plugin-template diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..41d9927a4d4fb3f96a785543079b8df6723c946b 100644 GIT binary patch delta 26784 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

_` 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4e1cc9d..d7e66b5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 83f2acf..1b6c787 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,113 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -105,84 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=$((i+1)) + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 24467a1..ac1b06f 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/settings.gradle.kts b/settings.gradle.kts index 89fd768..4a8d7f8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1,9 @@ +pluginManagement { + val kotlinVersion: String by settings + + plugins { + id("org.jetbrains.kotlin.jvm").version(kotlinVersion) + } +} + rootProject.name = "mc-kotlin-plugin-template" diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f8b6175..c9b4758 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,8 @@ name: KotlinPluginTemplate main: org.simplemc.plugintemplate.KotlinPluginTemplate -version: 0.1.0 -api-version: "1.15" +version: "${version}" +api-version: "${apiVersion}" website: https://github.com/SimpleMC/mc-kotlin-plugin-template author: tajobe +libraries: + - org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion} From acdda9d27d609f77a7b5b919187fc5392cd48785 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Tue, 29 Mar 2022 11:02:12 -0400 Subject: [PATCH 06/16] New release workflow with automatic latest/snapshot releasing (#7) --- .github/workflows/build-workflow.yml | 32 ++++++++++++++++++++++++++ .github/workflows/pr-workflow.yml | 12 +--------- .github/workflows/release-workflow.yml | 22 ++++++++++-------- 3 files changed, 46 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/build-workflow.yml diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml new file mode 100644 index 0000000..615931e --- /dev/null +++ b/.github/workflows/build-workflow.yml @@ -0,0 +1,32 @@ +name: Build +on: + workflow_call: + outputs: + version: + description: Built version + value: ${{ jobs.build.outputs.version }} + +jobs: + build: + name: Gradle Build + runs-on: ubuntu-latest + outputs: + version: ${{ steps.version.outputs.version }} + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v2 + with: + java-version: 17 + distribution: temurin + - uses: gradle/gradle-build-action@v2 + - name: Gradle Build + run: ./gradlew build + - name: Get Version + id: version + run: echo ::set-output name=version::"$(./gradlew --console plain --quiet currentVersion -Prelease.quiet)" + - name: Upload build + uses: actions/upload-artifact@v3 + with: + name: build + path: build/libs/*.jar + retention-days: 7 diff --git a/.github/workflows/pr-workflow.yml b/.github/workflows/pr-workflow.yml index 1b60a68..28d2147 100644 --- a/.github/workflows/pr-workflow.yml +++ b/.github/workflows/pr-workflow.yml @@ -3,14 +3,4 @@ on: pull_request jobs: build: - name: Gradle Build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v2 - with: - java-version: 17 - distribution: temurin - - uses: gradle/gradle-build-action@v2 - with: - arguments: build + uses: ./.github/workflows/build-workflow.yml diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml index 2ddd0a6..837f7c4 100644 --- a/.github/workflows/release-workflow.yml +++ b/.github/workflows/release-workflow.yml @@ -1,28 +1,32 @@ name: Release on: push: + branches: ['master', 'main'] # TODO: master/main tags: - "v[0-9]+.[0-9]+.[0-9]+" jobs: + build: + uses: ./.github/workflows/build-workflow.yml release: + needs: build name: Create Release runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-java@v2 + - name: Download build + uses: actions/download-artifact@v3 with: - java-version: 17 - distribution: temurin - - name: Gradle Build - uses: gradle/gradle-build-action@v2 - with: - arguments: build + name: build + path: build - name: Release uses: docker://antonyurchenko/git-release:v4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - DRAFT_RELEASE: "true" + RELEASE_NAME: ${{ needs.build.outputs.version }} + PRE_RELEASE: ${{ github.ref_type == 'branch' }} + UNRELEASED: ${{ github.ref_type == 'branch' && 'update' || '' }} + UNRELEASED_TAG: latest-snapshot with: args: | - build/libs/*.jar + build/*.jar From cc93c533da43166fd03c7a826a92a8f379ffafb2 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Sun, 22 May 2022 00:20:25 -0400 Subject: [PATCH 07/16] Bump dependencies --- build.gradle.kts | 4 ++-- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 67dbd78..0eb0530 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,8 +19,8 @@ buildscript { plugins { kotlin("jvm") id("com.github.johnrengelman.shadow") version "7.1.2" - id("pl.allegro.tech.build.axion-release") version "1.13.6" - id("org.jlleitschuh.gradle.ktlint") version "10.2.1" + id("pl.allegro.tech.build.axion-release") version "1.13.7" + id("org.jlleitschuh.gradle.ktlint") version "10.3.0" } group = "org.simplemc" diff --git a/gradle.properties b/gradle.properties index 0d870d0..4a77d08 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ kotlin.code.style=official -kotlinVersion=1.6.10 +kotlinVersion=1.6.21 mcApiVersion=1.18 repoRef=SimpleMC/mc-kotlin-plugin-template From 9aa5a0d5ee1f6c6f6fa29f2afc50d29f0095a9a4 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Fri, 3 Mar 2023 20:46:27 -0500 Subject: [PATCH 08/16] Chore: Update Action workflows, bump deps, update README (#8) Update Action workflows to include a flow for manual releasing and automated publishing Update Gradle dependencies to latest--Gradle wrapper, kotlin, plugins, spigot-api Update README to include some basic instructions for using the template repo and example plugins --- .github/workflows/build-workflow.yml | 9 ++-- .github/workflows/publish-workflow.yml | 36 +++++++++++++ .github/workflows/release-workflow.yml | 54 +++++++++++--------- README.md | 32 +++++++++++- build.gradle.kts | 61 +++++++++++------------ gradle.properties | 4 +- gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 61608 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 18 +++++-- gradlew.bat | 15 +++--- 10 files changed, 158 insertions(+), 74 deletions(-) create mode 100644 .github/workflows/publish-workflow.yml diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index 615931e..34003af 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -9,24 +9,23 @@ on: jobs: build: name: Gradle Build - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 outputs: version: ${{ steps.version.outputs.version }} steps: - uses: actions/checkout@v3 - - uses: actions/setup-java@v2 with: - java-version: 17 - distribution: temurin + fetch-depth: 0 - uses: gradle/gradle-build-action@v2 - name: Gradle Build run: ./gradlew build - name: Get Version id: version - run: echo ::set-output name=version::"$(./gradlew --console plain --quiet currentVersion -Prelease.quiet)" + run: echo "version=$(./gradlew --console plain --quiet currentVersion -Prelease.quiet)" >> $GITHUB_OUTPUT - name: Upload build uses: actions/upload-artifact@v3 with: name: build path: build/libs/*.jar retention-days: 7 + if-no-files-found: error diff --git a/.github/workflows/publish-workflow.yml b/.github/workflows/publish-workflow.yml new file mode 100644 index 0000000..7232470 --- /dev/null +++ b/.github/workflows/publish-workflow.yml @@ -0,0 +1,36 @@ +name: Publish +on: + push: + branches: ['master', 'main'] + tags: + - "v[0-9]+.[0-9]+.[0-9]+" + +jobs: + build: + uses: ./.github/workflows/build-workflow.yml + release: + needs: build + name: Create Release + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: gradle/gradle-build-action@v2 + - name: Download build + uses: actions/download-artifact@v3 + with: + name: build + path: build + - name: Release + uses: docker://antonyurchenko/git-release:v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_NAME: ${{ needs.build.outputs.version }} + PRE_RELEASE: ${{ github.ref_type == 'branch' }} + UNRELEASED: ${{ github.ref_type == 'branch' && 'update' || '' }} + UNRELEASED_TAG: latest-snapshot + ALLOW_EMPTY_CHANGELOG: ${{ github.ref_type == 'branch' && 'true' || 'false' }} + with: + args: | + build/*.jar diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml index 837f7c4..f9ea281 100644 --- a/.github/workflows/release-workflow.yml +++ b/.github/workflows/release-workflow.yml @@ -1,32 +1,38 @@ -name: Release +name: Create Release + on: - push: - branches: ['master', 'main'] # TODO: master/main - tags: - - "v[0-9]+.[0-9]+.[0-9]+" + workflow_dispatch: + inputs: + versionIncrementer: + type: choice + description: Override the default version incrementer according to https://axion-release-plugin.readthedocs.io/en/latest/configuration/version/#incrementing + default: default + options: + - default + - incrementPatch + - incrementMinor + - incrementMajor + - incrementPrerelease jobs: - build: - uses: ./.github/workflows/build-workflow.yml release: - needs: build - name: Create Release - runs-on: ubuntu-latest + name: Gradle Release + runs-on: ubuntu-22.04 + outputs: + version: ${{ steps.version.outputs.version }} steps: - uses: actions/checkout@v3 - - name: Download build - uses: actions/download-artifact@v3 with: - name: build - path: build - - name: Release - uses: docker://antonyurchenko/git-release:v4 + token: "${{ secrets.PAT }}" + fetch-depth: 0 + - uses: gradle/gradle-build-action@v2 + - name: Gradle Release + if: ${{ inputs.versionIncrementer == 'default' }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - RELEASE_NAME: ${{ needs.build.outputs.version }} - PRE_RELEASE: ${{ github.ref_type == 'branch' }} - UNRELEASED: ${{ github.ref_type == 'branch' && 'update' || '' }} - UNRELEASED_TAG: latest-snapshot - with: - args: | - build/*.jar + DEPLOY_KEY: ${{ secrets.COMMIT_KEY }} + run: ./gradlew release + - name: Gradle Release w/ Increment Override + if: ${{ inputs.versionIncrementer != 'default' }} + env: + DEPLOY_KEY: ${{ secrets.COMMIT_KEY }} + run: ./gradlew release -Prelease.versionIncrementer=${{ inputs.versionIncrementer }} diff --git a/README.md b/README.md index 55ba7b3..2c361e5 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,39 @@ Opinionated template/starter for creating Minecraft plugins in Kotlin using the ## Features - Gradle axion-release-plugin for managing semver - - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made + - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made - Github Actions to build PRs and automatically create Github releases when a release tag is pushed + - Manual Create Release pipeline to increment semver tag and trigger publishing a new version + - Requires a secret named `PAT` with a GitHub PAT with code read/write permission to the repository - [`ktlint`](https://github.com/JLLeitschuh/ktlint-gradle) Gradle plugin - Gradle build generates a standard plugin jar which will download dependencies declared as [`libraries`](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/plugin/PluginDescriptionFile.html#getLibraries()) in `plugin.yml` and an "offline"/shadowed jar containing necessary dependencies + +## Usage + +1. Use the template to create a new repository: [Create a new repository](https://github.com/SimpleMC/mc-kotlin-plugin-template/generate) +2. Change template repository references + - `settings.gradle.kts` -> set `rootProject.name` + - `gradle.properties` -> set `repoRef` + - `build.gradle.kts` -> set `group` + - `CHANGELOG.md` -> update links to `SimpleMC/mc-kotlin-plugin-template` to match `repoRef` + - `src/main/resources/plugin.yml` -> set `name`, `main`, `website`, `author` + - `src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt` -> Move packages/rename for your plugin + - `README.md` -> Update +3. To use the Create Release automation, add PAT secret + 1. Create a Personal Access Token: https://github.com/settings/personal-access-tokens/new + - Repository Access: "Only select repositories" and pick the plugin template fork + - Repository Permissions: Contents Read & write + - This is so the automation can create release commits + 2. Add the PAT as an Actions secret to your new repository: `https://github.com//settings/secrets/actions/new` + - Name: `PAT` + - Secret Contents: Paste the Personal Access Token you created in the previous step + +## Examples + +Several SimpleMC plugins are built off of this template or were the impetus for it: + +- [SimpleNPCs](https://github.com/SimpleMC/SimpleNPCs) - Simple command-based NPC interactions +- [SimpleHealthbars2](https://github.com/SimpleMC/SimpleHealthbars2) - Simple, easy-to-use healthbar plugin with optional player and mob healthbars +- [SimpleAnnounce](https://github.com/SimpleMC/SimpleAnnounce) - SimpleAnnounce is a simple and easy to use, yet powerful automated announcement plugin for the Bukkit Minecraft API. \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 0eb0530..6da362d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,6 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocatio import org.yaml.snakeyaml.DumperOptions import org.yaml.snakeyaml.Yaml import pl.allegro.tech.build.axion.release.domain.hooks.HookContext -import pl.allegro.tech.build.axion.release.domain.hooks.HooksConfig import java.time.OffsetDateTime import java.time.ZoneOffset import java.time.format.DateTimeFormatter @@ -12,15 +11,15 @@ buildscript { mavenCentral() } dependencies { - classpath("org.yaml:snakeyaml:1.30") + classpath("org.yaml:snakeyaml:2.0") } } plugins { kotlin("jvm") - id("com.github.johnrengelman.shadow") version "7.1.2" - id("pl.allegro.tech.build.axion-release") version "1.13.7" - id("org.jlleitschuh.gradle.ktlint") version "10.3.0" + id("com.github.johnrengelman.shadow") version "8.0.0" + id("pl.allegro.tech.build.axion-release") version "1.14.4" + id("org.jlleitschuh.gradle.ktlint") version "11.2.0" } group = "org.simplemc" @@ -32,29 +31,29 @@ val repoRef: String by project scmVersion { versionIncrementer("incrementMinorIfNotOnRelease", mapOf("releaseBranchPattern" to "release/.+")) - hooks( - closureOf { - pre( - "fileUpdate", - mapOf( - "file" to "CHANGELOG.md", - "pattern" to KotlinClosure2({ v, _ -> - "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/[^\\n]*\$([\\s\\S]*))?\\z" - }), - "replacement" to KotlinClosure2({ v, c -> - """ - \[Unreleased\] - - ## \[$v\] - ${currentDateString()}$1 - \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/v$v...HEAD - \[$v\]: https:\/\/github\.com\/$repoRef\/${if (c.previousVersion == v) "releases/tag/v$v" else "compare/v${c.previousVersion}...v$v"}${'$'}2 - """.trimIndent() - }) - ) + hooks { + // FIXME - workaround for Kotlin DSL issue https://github.com/allegro/axion-release-plugin/issues/500 + pre( + "fileUpdate", + mapOf( + "file" to "CHANGELOG.md", + "pattern" to KotlinClosure2({ v, _ -> + "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/[^\\n]*\$([\\s\\S]*))?\\z" + }), + "replacement" to KotlinClosure2({ v, c -> + """ + \[Unreleased\] + + ## \[$v\] - ${currentDateString()}$1 + \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/v$v...HEAD + \[$v\]: https:\/\/github\.com\/$repoRef\/${if (c.previousVersion == v) "releases/tag/v$v" else "compare/v${c.previousVersion}...v$v"}${'$'}2 + """.trimIndent() + }) ) - pre("commit") - } - ) + ) + + pre("commit") + } } fun currentDateString() = OffsetDateTime.now(ZoneOffset.UTC).toLocalDate().format(DateTimeFormatter.ISO_DATE) @@ -78,7 +77,7 @@ dependencies { tasks { wrapper { - gradleVersion = "7.4.1" + gradleVersion = "8.0.1" distributionType = Wrapper.DistributionType.ALL } @@ -99,8 +98,8 @@ tasks { val yamlDumpOptions = // make it pretty for the people DumperOptions().also { - it.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK) - it.setPrettyFlow(true) + it.defaultFlowStyle = DumperOptions.FlowStyle.BLOCK + it.isPrettyFlow = true } val yaml = Yaml(yamlDumpOptions) val pluginYml: Map = yaml.load(file("$resourcesDir/plugin.yml").inputStream()) @@ -123,7 +122,7 @@ tasks { // avoid classpath conflicts/pollution via relocation val configureShadowRelocation by registering(ConfigureShadowRelocation::class) { target = shadowJar.get() - prefix = "${project.group}.${project.name.toLowerCase()}.libraries" + prefix = "${project.group}.${project.name.lowercase()}.libraries" } build { diff --git a/gradle.properties b/gradle.properties index 4a77d08..e97d4f4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ kotlin.code.style=official -kotlinVersion=1.6.21 -mcApiVersion=1.18 +kotlinVersion=1.8.10 +mcApiVersion=1.19 repoRef=SimpleMC/mc-kotlin-plugin-template diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..ccebba7710deaf9f98673a68957ea02138b60d0a 100644 GIT binary patch delta 39692 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 GdG|kGW5mAz delta 37934 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d7e66b5..6ec1567 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..79a61d4 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -205,6 +209,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index ac1b06f..6689b85 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal From 106b5ba32b0d99e9a55914c3500bd51c703716d8 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Sat, 10 May 2025 16:53:40 -0400 Subject: [PATCH 09/16] Use latest standards in gradle build and bump java/mc/gradle (#10) --- .editorconfig | 14 +++ .github/workflows/build-workflow.yml | 16 +++- ...elease-workflow.yml => create-version.yml} | 22 +++-- .github/workflows/publish-workflow.yml | 14 +-- README.md | 22 ++--- build.gradle.kts | 87 +++++++----------- gradle.properties | 4 - gradle/gradle-daemon-jvm.properties | 2 + gradle/libs.versions.toml | 16 ++++ gradle/wrapper/gradle-wrapper.jar | Bin 61608 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 37 +++++--- gradlew.bat | 26 +++--- settings.gradle.kts | 23 ++++- 14 files changed, 164 insertions(+), 122 deletions(-) create mode 100644 .editorconfig rename .github/workflows/{release-workflow.yml => create-version.yml} (68%) create mode 100644 gradle/gradle-daemon-jvm.properties create mode 100644 gradle/libs.versions.toml diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..941d18c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*] +charset = utf-8 +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{kt,kts}] +ktlint_code_style = intellij_idea + +[*{.yml,yaml}] +indent_style = space +indent_size = 2 diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index 34003af..fe22014 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -9,21 +9,27 @@ on: jobs: build: name: Gradle Build - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 outputs: version: ${{ steps.version.outputs.version }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: gradle/gradle-build-action@v2 + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: 21 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 - name: Gradle Build - run: ./gradlew build + run: ./gradlew build shadowJar - name: Get Version id: version run: echo "version=$(./gradlew --console plain --quiet currentVersion -Prelease.quiet)" >> $GITHUB_OUTPUT - name: Upload build - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: build path: build/libs/*.jar diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/create-version.yml similarity index 68% rename from .github/workflows/release-workflow.yml rename to .github/workflows/create-version.yml index f9ea281..2cac3ac 100644 --- a/.github/workflows/release-workflow.yml +++ b/.github/workflows/create-version.yml @@ -1,4 +1,4 @@ -name: Create Release +name: Create Version on: workflow_dispatch: @@ -17,22 +17,26 @@ on: jobs: release: name: Gradle Release - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 outputs: version: ${{ steps.version.outputs.version }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: - token: "${{ secrets.PAT }}" + ssh-key: "${{ secrets.COMMIT_KEY }}" fetch-depth: 0 - - uses: gradle/gradle-build-action@v2 + - uses: webfactory/ssh-agent@v0.9.1 + with: + ssh-private-key: ${{ secrets.COMMIT_KEY }} + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: 21 + - uses: gradle/actions/setup-gradle@v4 - name: Gradle Release if: ${{ inputs.versionIncrementer == 'default' }} - env: - DEPLOY_KEY: ${{ secrets.COMMIT_KEY }} run: ./gradlew release - name: Gradle Release w/ Increment Override if: ${{ inputs.versionIncrementer != 'default' }} - env: - DEPLOY_KEY: ${{ secrets.COMMIT_KEY }} run: ./gradlew release -Prelease.versionIncrementer=${{ inputs.versionIncrementer }} diff --git a/.github/workflows/publish-workflow.yml b/.github/workflows/publish-workflow.yml index 7232470..2af66dc 100644 --- a/.github/workflows/publish-workflow.yml +++ b/.github/workflows/publish-workflow.yml @@ -11,19 +11,16 @@ jobs: release: needs: build name: Create Release - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - uses: gradle/gradle-build-action@v2 + - uses: actions/checkout@v4 - name: Download build - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: build path: build - name: Release - uses: docker://antonyurchenko/git-release:v5 + uses: docker://antonyurchenko/git-release:v6 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} RELEASE_NAME: ${{ needs.build.outputs.version }} @@ -32,5 +29,4 @@ jobs: UNRELEASED_TAG: latest-snapshot ALLOW_EMPTY_CHANGELOG: ${{ github.ref_type == 'branch' && 'true' || 'false' }} with: - args: | - build/*.jar + args: build/*.jar diff --git a/README.md b/README.md index 2c361e5..fc8f3cc 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ Opinionated template/starter for creating Minecraft plugins in Kotlin using the - Gradle axion-release-plugin for managing semver - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made - Github Actions to build PRs and automatically create Github releases when a release tag is pushed - - Manual Create Release pipeline to increment semver tag and trigger publishing a new version - - Requires a secret named `PAT` with a GitHub PAT with code read/write permission to the repository + - Manual Create Version pipeline to increment semver tag and trigger publishing a new version + - Requires a configured deploy key with write permission to the repository (see usage below) - [`ktlint`](https://github.com/JLLeitschuh/ktlint-gradle) Gradle plugin - Gradle build generates a standard plugin jar which will download dependencies declared as [`libraries`](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/plugin/PluginDescriptionFile.html#getLibraries()) in @@ -24,14 +24,14 @@ Opinionated template/starter for creating Minecraft plugins in Kotlin using the - `src/main/resources/plugin.yml` -> set `name`, `main`, `website`, `author` - `src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt` -> Move packages/rename for your plugin - `README.md` -> Update -3. To use the Create Release automation, add PAT secret - 1. Create a Personal Access Token: https://github.com/settings/personal-access-tokens/new - - Repository Access: "Only select repositories" and pick the plugin template fork - - Repository Permissions: Contents Read & write - - This is so the automation can create release commits - 2. Add the PAT as an Actions secret to your new repository: `https://github.com//settings/secrets/actions/new` - - Name: `PAT` - - Secret Contents: Paste the Personal Access Token you created in the previous step +3. To use the Create Version automation, add an SSH key + 1. Create an SSH key-pair (no password): `ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/deploy` + 2. Add the Public Key as a Deploy Key (**Important! Enable `Allow write access`**): https://docs.github.com/en/authentication/connecting-to-github-with-ssh/managing-deploy-keys#set-up-deploy-keys an Actions secret to your new repository: `https://github.com//settings/secrets/actions/new` + 3. Add the Private Key as an Actions secret: `https://github.com//settings/secrets/actions/new` + - Name: `COMMIT_KEY` + - Secret Contents: Paste the Private key + 4. The GitHub Actions are configured to use this key to publish tags and release commits (see `.github/workflows/create-version.yml`) + - See [axion-release-plugin Authorization](https://axion-release-plugin.readthedocs.io/en/latest/configuration/authorization/) for alternative Auth options ## Examples @@ -39,4 +39,4 @@ Several SimpleMC plugins are built off of this template or were the impetus for - [SimpleNPCs](https://github.com/SimpleMC/SimpleNPCs) - Simple command-based NPC interactions - [SimpleHealthbars2](https://github.com/SimpleMC/SimpleHealthbars2) - Simple, easy-to-use healthbar plugin with optional player and mob healthbars -- [SimpleAnnounce](https://github.com/SimpleMC/SimpleAnnounce) - SimpleAnnounce is a simple and easy to use, yet powerful automated announcement plugin for the Bukkit Minecraft API. \ No newline at end of file +- [SimpleAnnounce](https://github.com/SimpleMC/SimpleAnnounce) - SimpleAnnounce is a simple and easy to use, yet powerful automated announcement plugin for the Bukkit Minecraft API. diff --git a/build.gradle.kts b/build.gradle.kts index 6da362d..c670f01 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,3 @@ -import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation import org.yaml.snakeyaml.DumperOptions import org.yaml.snakeyaml.Yaml import pl.allegro.tech.build.axion.release.domain.hooks.HookContext @@ -6,86 +5,74 @@ import java.time.OffsetDateTime import java.time.ZoneOffset import java.time.format.DateTimeFormatter -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath("org.yaml:snakeyaml:2.0") - } -} - plugins { - kotlin("jvm") - id("com.github.johnrengelman.shadow") version "8.0.0" - id("pl.allegro.tech.build.axion-release") version "1.14.4" - id("org.jlleitschuh.gradle.ktlint") version "11.2.0" + alias(libs.plugins.axionRelease) + alias(libs.plugins.kotlin) + alias(libs.plugins.ktlint) + alias(libs.plugins.shadow) } -group = "org.simplemc" -version = scmVersion.version - -val mcApiVersion: String by project -val repoRef: String by project - scmVersion { versionIncrementer("incrementMinorIfNotOnRelease", mapOf("releaseBranchPattern" to "release/.+")) + unshallowRepoOnCI.set(true) hooks { + // Automate moving `[Unreleased]` changelog entries into `[]` on release // FIXME - workaround for Kotlin DSL issue https://github.com/allegro/axion-release-plugin/issues/500 + val changelogPattern = + "\\[Unreleased\\]([\\s\\S]+?)\\n" + + "(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/(\\S+\\/\\S+)\\/compare\\/[^\\n]*\$([\\s\\S]*))?\\z" pre( "fileUpdate", mapOf( "file" to "CHANGELOG.md", - "pattern" to KotlinClosure2({ v, _ -> - "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/[^\\n]*\$([\\s\\S]*))?\\z" - }), - "replacement" to KotlinClosure2({ v, c -> + "pattern" to KotlinClosure2({ _, _ -> changelogPattern }), + "replacement" to KotlinClosure2({ version, context -> + // github "diff" for previous version + val previousVersionDiffLink = + when (context.previousVersion == version) { + true -> "releases/tag/v$version" // no previous, just link to the version + false -> "compare/v${context.previousVersion}...v$version" + } """ \[Unreleased\] - ## \[$v\] - ${currentDateString()}$1 - \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/v$v...HEAD - \[$v\]: https:\/\/github\.com\/$repoRef\/${if (c.previousVersion == v) "releases/tag/v$v" else "compare/v${c.previousVersion}...v$v"}${'$'}2 + ## \[$version\] - $currentDateString$1 + \[Unreleased\]: https:\/\/github\.com\/$2\/compare\/v$version...HEAD + \[$version\]: https:\/\/github\.com\/$2\/$previousVersionDiffLink$3 """.trimIndent() - }) - ) + }), + ), ) pre("commit") } } -fun currentDateString() = OffsetDateTime.now(ZoneOffset.UTC).toLocalDate().format(DateTimeFormatter.ISO_DATE) +group = "org.simplemc" +version = scmVersion.version -java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(17)) - } -} +val currentDateString: String + get() = OffsetDateTime.now(ZoneOffset.UTC).toLocalDate().format(DateTimeFormatter.ISO_DATE) -repositories { - mavenCentral() - maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") - maven("https://oss.sonatype.org/content/repositories/snapshots") +kotlin { + jvmToolchain(21) } dependencies { - implementation(kotlin("stdlib-jdk8")) - compileOnly(group = "org.spigotmc", name = "spigot-api", version = "$mcApiVersion+") + compileOnly(libs.spigot) } tasks { wrapper { - gradleVersion = "8.0.1" distributionType = Wrapper.DistributionType.ALL } processResources { val placeholders = mapOf( "version" to version, - "apiVersion" to mcApiVersion, - "kotlinVersion" to project.properties["kotlinVersion"] + "apiVersion" to libs.versions.mcApi.get(), + "kotlinVersion" to libs.versions.kotlin.get(), ) filesMatching("plugin.yml") { @@ -117,15 +104,9 @@ tasks { archiveClassifier.set("offline") exclude("plugin.yml") rename("offline-plugin.yml", "plugin.yml") - } - - // avoid classpath conflicts/pollution via relocation - val configureShadowRelocation by registering(ConfigureShadowRelocation::class) { - target = shadowJar.get() - prefix = "${project.group}.${project.name.lowercase()}.libraries" - } - build { - dependsOn(shadowJar).dependsOn(configureShadowRelocation) + // avoid classpath conflicts/pollution via relocation + isEnableRelocation = true + relocationPrefix = "${project.group}.${project.name.lowercase()}.libraries" } } diff --git a/gradle.properties b/gradle.properties index e97d4f4..7fc6f1f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1 @@ kotlin.code.style=official - -kotlinVersion=1.8.10 -mcApiVersion=1.19 -repoRef=SimpleMC/mc-kotlin-plugin-template diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties new file mode 100644 index 0000000..63e5bbd --- /dev/null +++ b/gradle/gradle-daemon-jvm.properties @@ -0,0 +1,2 @@ +#This file is generated by updateDaemonJvm +toolchainVersion=21 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..7b2ff95 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,16 @@ +[versions] +axionRelease = "1.18.18" +kotlin = "2.1.20" +ktlintGradle = "12.2.0" +mcApi = "1.21" +shadow = "8.3.6" +spigot = "1.21.+" + +[plugins] +axionRelease = { id = "pl.allegro.tech.build.axion-release", version.ref = "axionRelease"} +kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin"} +ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlintGradle"} +shadow = { id = "com.gradleup.shadow", version.ref = "shadow"} + +[libraries] +spigot = { group = "org.spigotmc", name = "spigot-api", version.ref = "spigot" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index ccebba7710deaf9f98673a68957ea02138b60d0a..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch literal 43764 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6ec1567..6514f91 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 79a61d4..23d15a9 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -83,10 +85,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -114,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -133,10 +133,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -144,7 +147,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +155,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,16 +200,20 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 6689b85..5eed7ee 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,22 +59,22 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/settings.gradle.kts b/settings.gradle.kts index 4a8d7f8..3037152 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,9 +1,26 @@ pluginManagement { - val kotlinVersion: String by settings + repositories { + gradlePluginPortal() + mavenCentral() + } +} - plugins { - id("org.jetbrains.kotlin.jvm").version(kotlinVersion) +buildscript { + dependencies { + classpath("org.yaml:snakeyaml:2.3") } } +dependencyResolutionManagement { + repositories { + mavenCentral() + maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") + maven("https://oss.sonatype.org/content/repositories/snapshots") + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.9.0" +} + rootProject.name = "mc-kotlin-plugin-template" From fe6bd79f7b712347d45d5a01c9434f6e81c5fc8a Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Mon, 19 May 2025 23:11:13 -0400 Subject: [PATCH 10/16] Automatically calculate libraries for plugin.yml based on runtime classpath --- build.gradle.kts | 10 +++++++++- src/main/resources/plugin.yml | 3 +-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c670f01..d871561 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -61,6 +61,7 @@ kotlin { dependencies { compileOnly(libs.spigot) + implementation(libs.kotlinLogger) } tasks { @@ -69,10 +70,17 @@ tasks { } processResources { + // inject runtime libraries into online plugin variant + val libraries = configurations.runtimeClasspath.get().resolvedConfiguration.resolvedArtifacts + .joinToString("\n - ", prefix = "\n - ") { artifact -> + val id = artifact.moduleVersion.id + "${id.group}:${id.name}:${id.version}" + } + val placeholders = mapOf( "version" to version, "apiVersion" to libs.versions.mcApi.get(), - "kotlinVersion" to libs.versions.kotlin.get(), + "libraries" to libraries, ) filesMatching("plugin.yml") { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index fa35330..4511d6a 100755 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -17,5 +17,4 @@ commands: - sar usage: | / | Reloads SimpleAnnounce config -libraries: - - org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion} +libraries: ${libraries} From 98753aa265d85227d528c86b6b9934a775c6e7e6 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Mon, 19 May 2025 23:11:37 -0400 Subject: [PATCH 11/16] Cleanup --- gradle/libs.versions.toml | 4 +- .../simplemc/simpleannounce/SimpleAnnounce.kt | 55 +++++++++---------- .../simpleannounce/message/Announcement.kt | 9 +-- .../message/sender/AnnouncementSender.kt | 12 ++-- .../message/sender/BossBarSender.kt | 12 ++-- src/main/resources/plugin.yml | 1 + 6 files changed, 49 insertions(+), 44 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7b2ff95..a35a4c9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,7 @@ [versions] axionRelease = "1.18.18" -kotlin = "2.1.20" +kotlin = "2.1.21" +kotlinLogger = "7.0.7" ktlintGradle = "12.2.0" mcApi = "1.21" shadow = "8.3.6" @@ -13,4 +14,5 @@ ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlintGradle"} shadow = { id = "com.gradleup.shadow", version.ref = "shadow"} [libraries] +kotlinLogger = { group = "io.github.oshai", name = "kotlin-logging", version.ref = "kotlinLogger" } spigot = { group = "org.spigotmc", name = "spigot-api", version.ref = "spigot" } diff --git a/src/main/kotlin/org/simplemc/simpleannounce/SimpleAnnounce.kt b/src/main/kotlin/org/simplemc/simpleannounce/SimpleAnnounce.kt index 017f73f..f8b36ce 100644 --- a/src/main/kotlin/org/simplemc/simpleannounce/SimpleAnnounce.kt +++ b/src/main/kotlin/org/simplemc/simpleannounce/SimpleAnnounce.kt @@ -15,7 +15,8 @@ import java.util.logging.Level class SimpleAnnounce : JavaPlugin() { override fun onEnable() { loadConfig() - logger.info("${description.name} version ${description.version} enabled!") + checkNotNull(getCommand("simpleannouncereload")).setExecutor(::reloadCommand) + logger.info { "${description.name} version ${description.version} enabled!" } } private fun reload() { @@ -35,17 +36,18 @@ class SimpleAnnounce : JavaPlugin() { } // load auto-reload + create task to check again if necessary - val reloadTime = config.getInt("auto-reloadconfig", 0) - if (reloadTime != 0) { - server.scheduler.runTaskLaterAsynchronously(this, ::reload, reloadTime.toLong() * 60 * 20L) + val reloadTime = config.getLong("auto-reloadconfig", 0L) + if (reloadTime > 0L) { + val reloadTicks = reloadTime * 60 * 20 + server.scheduler.runTaskTimerAsynchronously(this, ::reload, reloadTicks, reloadTicks) - logger.fine("Will reload config in $reloadTime minutes") + logger.fine { "Will reload config every $reloadTime minutes" } } config.getConfigurationSection("announcements")?.getKeys(false)?.let { keys -> keys.mapNotNull { config.getConfigurationSection("announcements.$it") } .forEach { - logger.fine("Loading announcement '${it.name}'") + logger.fine { "Loading announcement '${it.name}'" } loadAnnouncementSender(loadAnnouncement(it), it) } } @@ -55,12 +57,14 @@ class SimpleAnnounce : JavaPlugin() { var updated = false // migrate each config version until we're at the latest (no more updates) - while (configVersionMigration()) { updated = true } + while (configVersionMigration()) { + updated = true + } if (updated) { - config.options().copyHeader(true) + config.options().parseComments(true) saveConfig() - logger.info("${description.name} config updated, please check the settings!") + logger.info { "${description.name} config updated, please check the settings!" } } } @@ -86,14 +90,13 @@ class SimpleAnnounce : JavaPlugin() { } private fun loadAnnouncement(announcementConfig: ConfigurationSection) = Announcement( - plugin = this, label = announcementConfig.name, messages = announcementConfig.getStringList("messages").map { ChatColor.translateAlternateColorCodes('&', it) }, permissionIncludes = announcementConfig.getStringListOrEmpty("includesperms"), permissionExcludes = announcementConfig.getStringListOrEmpty("excludesperms"), delay = announcementConfig.getInt("delay", 0), period = if (announcementConfig.isSet("repeat")) announcementConfig.getInt("repeat") else null, - random = announcementConfig.getBoolean("random", false) + random = announcementConfig.getBoolean("random", false), ) private fun loadAnnouncementSender(announcement: Announcement, announcementConfig: ConfigurationSection) = @@ -102,11 +105,12 @@ class SimpleAnnounce : JavaPlugin() { plugin = this, announcement = announcement, holdTime = announcementConfig.getInt("bar.hold", 5), - color = BarColor.valueOf(checkNotNull(announcementConfig.getString("bar.color", "PURPLE")).toUpperCase()), - style = BarStyle.valueOf(checkNotNull(announcementConfig.getString("bar.style", "SOLID")).toUpperCase()), + color = BarColor.valueOf(checkNotNull(announcementConfig.getString("bar.color", "PURPLE")).uppercase()), + style = BarStyle.valueOf(checkNotNull(announcementConfig.getString("bar.style", "SOLID")).uppercase()), animate = announcementConfig.getBoolean("bar.animate.enable", true), - reverse = announcementConfig.getBoolean("bar.animate.reverse", false) + reverse = announcementConfig.getBoolean("bar.animate.reverse", false), ) + "chat" -> ChatSender(this, announcement) else -> throw IllegalArgumentException("Invalid message sender configured on message '${announcement.label}'!") @@ -114,24 +118,15 @@ class SimpleAnnounce : JavaPlugin() { override fun onDisable() { server.scheduler.cancelTasks(this) - logger.info("${description.name} disabled.") + logger.info { "${description.name} disabled." } } - override fun onCommand( - sender: CommandSender, - command: Command, - label: String, - vararg args: String - ): Boolean { - if (sender.hasPermission("simpleannounce.reload")) { - reloadConfig() - loadConfig() - - logger.fine("Config reloaded") - sender.sendMessage("SimpleAnnounce config reloaded.") - } else { - sender.sendMessage("${ChatColor.RED}You do not have permission to do that!") - } + private fun reloadCommand(sender: CommandSender, command: Command, label: String, vararg args: String): Boolean { + reloadConfig() + loadConfig() + + logger.fine { "Config reloaded" } + sender.sendMessage("SimpleAnnounce config reloaded.") return true } diff --git a/src/main/kotlin/org/simplemc/simpleannounce/message/Announcement.kt b/src/main/kotlin/org/simplemc/simpleannounce/message/Announcement.kt index 398571f..44bf652 100644 --- a/src/main/kotlin/org/simplemc/simpleannounce/message/Announcement.kt +++ b/src/main/kotlin/org/simplemc/simpleannounce/message/Announcement.kt @@ -1,25 +1,26 @@ package org.simplemc.simpleannounce.message -import org.bukkit.plugin.Plugin +import io.github.oshai.kotlinlogging.KotlinLogging import java.util.concurrent.atomic.AtomicInteger import kotlin.random.Random +private val logger = KotlinLogging.logger {} + data class Announcement( - private val plugin: Plugin, internal val label: String, private val messages: List, internal val permissionIncludes: List, internal val permissionExcludes: List, internal val delay: Int, internal val period: Int?, - private val random: Boolean + private val random: Boolean, ) { private val current = AtomicInteger() internal val isBroadcast = permissionIncludes.isEmpty() && permissionExcludes.isEmpty() init { messages.ifEmpty { throw IllegalArgumentException("Cannot create an announcement with no messages!") } - plugin.logger.info("Announcement '$label' created with ${messages.size} messages.") + logger.info { "Announcement '$label' created with ${messages.size} messages." } } fun getMessage() = when { diff --git a/src/main/kotlin/org/simplemc/simpleannounce/message/sender/AnnouncementSender.kt b/src/main/kotlin/org/simplemc/simpleannounce/message/sender/AnnouncementSender.kt index ff40e99..fd9af31 100644 --- a/src/main/kotlin/org/simplemc/simpleannounce/message/sender/AnnouncementSender.kt +++ b/src/main/kotlin/org/simplemc/simpleannounce/message/sender/AnnouncementSender.kt @@ -1,21 +1,25 @@ package org.simplemc.simpleannounce.message.sender +import io.github.oshai.kotlinlogging.KotlinLogging import org.bukkit.Bukkit import org.bukkit.entity.Player import org.bukkit.plugin.Plugin import org.simplemc.simpleannounce.message.Announcement +private val logger = KotlinLogging.logger {} + abstract class AnnouncementSender(internal val plugin: Plugin, internal val announcement: Announcement) : Runnable { init { scheduleTask() - plugin.logger.finer("${this::class.java.simpleName} for announcement '${announcement.label}' created!") + logger.trace { "${this::class.java.simpleName} for announcement '${announcement.label}' created!" } } private fun scheduleTask() = announcement.period?.let { Bukkit.getScheduler().runTaskTimer(plugin, this, announcement.delay * 20L, announcement.period * 20L) } ?: Bukkit.getScheduler().runTaskLater(plugin, this, announcement.delay * 20L) - internal fun shouldSendTo(player: Player) = - !(announcement.permissionIncludes.any { !player.hasPermission(it) } || - announcement.permissionExcludes.any(player::hasPermission)) + internal fun shouldSendTo(player: Player) = !( + announcement.permissionIncludes.any { !player.hasPermission(it) } || + announcement.permissionExcludes.any(player::hasPermission) + ) } diff --git a/src/main/kotlin/org/simplemc/simpleannounce/message/sender/BossBarSender.kt b/src/main/kotlin/org/simplemc/simpleannounce/message/sender/BossBarSender.kt index 9af8e1a..0e9cb47 100644 --- a/src/main/kotlin/org/simplemc/simpleannounce/message/sender/BossBarSender.kt +++ b/src/main/kotlin/org/simplemc/simpleannounce/message/sender/BossBarSender.kt @@ -15,10 +15,10 @@ class BossBarSender( private val color: BarColor, private val style: BarStyle, private val animate: Boolean, - private val reverse: Boolean + private val reverse: Boolean, ) : AnnouncementSender(plugin, announcement) { - private val holdTime = holdTime * 20L // convert from seconds to ticks + private val holdTicks = holdTime * 20L // convert from seconds to ticks override fun run() { // create the bar @@ -32,14 +32,16 @@ class BossBarSender( // set up animation val animation = if (animate) { Bukkit.getScheduler().runTaskTimer(plugin, updateBarProgress(bar), 0, 1L) - } else null + } else { + null + } // schedule removal - Bukkit.getScheduler().runTaskLater(plugin, removeBar(bar, animation), holdTime) + Bukkit.getScheduler().runTaskLater(plugin, removeBar(bar, animation), holdTicks) } private fun updateBarProgress(bar: BossBar): () -> Unit = { - bar.progress = Math.max(0.0, Math.min(1.0, bar.progress + (if (reverse) -1 else 1) * (1.0 / holdTime))) + bar.progress = bar.progress + (if (reverse) -1 else 1) * (1.0 / holdTicks).coerceIn(0.0, 1.0) } private fun removeBar(bar: BossBar, animation: BukkitTask?): () -> Unit = { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 4511d6a..63610af 100755 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -15,6 +15,7 @@ commands: aliases: - sareload - sar + permission: simpleannounce.reload usage: | / | Reloads SimpleAnnounce config libraries: ${libraries} From 17fde2e5cd4c08d11e9c225598246e8a752b14c4 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Mon, 19 May 2025 23:13:14 -0400 Subject: [PATCH 12/16] CHANGELOG --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dc7167..1b6a778 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ # Changelog ## [Unreleased] +### Added +- MIT license + +### Changed +- MC 1.21, Java 21, Kotlin 2.1 + +### Fixed +- Config Auto-reload is now a repeating task as intended ## [1.0.0] - 2020-02-10 ### Added From cc7421a677b085a2f3752ba4b3dae45c3dd33c89 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Tue, 20 May 2025 19:08:14 -0400 Subject: [PATCH 13/16] Update README and config doc --- README.md | 82 ++++++++++++++++++++++++++++++++++- src/main/resources/config.yml | 44 +++++++++---------- 2 files changed, 100 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index ef3dba7..64e3c79 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,82 @@ -SimpleAnnounce -============== +# SimpleAnnounce SimpleAnnounce is a simple and easy to use, yet powerful automated announcement plugin for the Bukkit Minecraft API. + +Messages can be sent server-wide or controlled by permissions after a delay and optionally repeated after an interval. + +## Features + +- Timed server-wide announcements/news messages +- Easily configurable +- Configure one-time or repeating messages +- Extensive Permissions support - configure messages to only send to users including or excluding certain permission nodes +- Optional debug mode to track down who is/isn't receiving messages and why +- Automatic config reloading to get new messages +- `/simpleannouncereload` or `/sar` to reload on command! + - Permissions: `simpleannounce.reload` + +## Configuration + +Format: +```yaml +config-version(int): **DO NOT EDIT**, used to migrate configurations as the format changes +auto-reloadconfig(int):